总线
概述
本控制器支持多种工业现场总线协议,包括 EtherCAT、CANopen 等。通过总线可以实现与伺服驱动器、IO 模块、传感器等从站设备的高速实时通信。
支持的总线类型
| 总线类型 | 说明 | 典型用途 |
|---|---|---|
| EtherCAT | 基于以太网的实时总线 | 伺服控制、高速 IO |
| CANopen | 基于 CAN 的现场总线 | 传感器、编码器、分布式 IO |
总线架构
┌─────────────┐
│ 控制器 │ (主站)
└──────┬──────┘
│ EtherCAT / CAN bus
│
┌────┴────┬─────────┬──────────┐
│ │ │ │
┌─┴──┐ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐
│伺服│ │伺服 │ │ IO │ │交换 │
│ 1 │ │ 2 │ │模块 │ │ 机 │
└────┘ └─────┘ └─────┘ └─────┘EtherCAT 主站功能
| 功能 | 说明 |
|---|---|
| 从站扫描 | 自动识别总线上的从站设备 |
| ENI 配置 | 通过 EtherCAT 网络信息文件配置从站 |
| DC 时钟同步 | 分布式时钟同步,实现各从站精确同步 |
| PDO 映射 | 过程数据对象映射,定义实时数据交换内容 |
| 从站状态管理 | 监控从站运行状态,支持在线/离线检测 |
CanOpen
0x7000 上位机查询该硬件的 can 支持的功能
命令字: 0x7000
请求参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| canPort | UInt | can 端口号 |
| function | Int | 该硬件 can 支持的功能,范围[0,3] 0-标准帧,1-扩展帧,2-远程帧,3-过滤 id |
请求示例:
{
"canPort": 1,
"function": 0
}0x7001 控制器回复上位机查询该硬件的 can 支持的功能结果
命令字: 0x7001
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| canPort | UInt | can 端口号 |
| support | Bool | 该硬件的 can 是否支持这功能 |
响应示例:
{
"canPort": 1,
"support": true
}0x7002 上位机设置 can 参数
命令字: 0x7002
请求参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| canBaud | UInt | can 通讯波特率(bps),常用值:125k, 250k, 500k, 1M |
| canPort | UInt | can 通讯端口 |
| enableRecvFiltert | Bool | 是否开启过滤 ID;开启后仅接收过滤 ID 匹配的帧 |
| frameFormat | Int | 帧格式,范围[0,1] 0-标准帧(11位 ID),1-扩展帧(29位 ID) |
| recvFilterId | UInt | 设置过滤 ID,仅 enableRecvFiltert=true 时生效 |
请求示例:
{
"canBaud": 500000,
"canPort": 1,
"enableRecvFiltert": true,
"frameFormat": 0,
"recvFilterId": 0x181
}0x7003 上位机请求接收一帧 can 数据
命令字: 0x7003
请求参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| canPort | UInt | can 通讯端口 |
请求示例:
{
"canPort": 1
}0x7004 控制器回复上位机接收一帧 can 数据结果
命令字: 0x7004
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| canPort | UInt | can 通讯端口 |
| data | UChar[] | 接收到的数据,长度为 Length 节点的值 |
| Length | UInt | 接收到的数据长度 |
| recvCanID | UInt | 接收到的帧 ID |
响应示例:
{
"canPort": 1,
"data": [0x10, 0x20, 0x30],
"Length": 3,
"recvCanID": 0x181
}0x7005 上位机请求发送一帧数据
命令字: 0x7005
请求参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| canPort | UInt | can 通讯端口 |
| data | UChar[] | 需要发送的数据 |
| sendCanID | UInt | 发送帧的 ID |
| sendLen | UInt | 发送的数据长度,范围[1,8] |
| useRemoteFrame | Bool | 是否使用远程帧;远程帧用于请求对方发送数据 |
请求示例:
{
"canPort": 1,
"data": [0x10, 0x20],
"sendCanID": 0x201,
"sendLen": 2,
"useRemoteFrame": false
}EtherCAT 总线配置
ENI 文件管理
ENI(EtherCAT Network Information)文件是 EtherCAT 总线配置的核心文件,描述了总线上所有从站的型号、数量、排列顺序及 PDO 映射信息。ENI 文件通常由专用配置工具生成(如 INEXBOT EC-Config),导入控制器后生效。
0x7010 上位机查询 ENI 文件列表
命令字: 0x7010
请求参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| num | Int | 获取 ENI 文件数目,范围[1,10] 1-获取当前使用的 ENI 文件,10-获取所有 ENI 文件 |
请求示例:
{
"num": 10
}0x7011 控制器回复上位机 ENI 文件列表
命令字: 0x7011
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| ENIfilelist | String[] | 控制器 ENI 文件列表 |
| ENIfilenum | Int | ENI 文件数目 |
| absolutepath | String | 控制器中 ENI 文件所在文件夹 |
响应示例:
{
"ENIfilelist": [
"INEXBOT-IO-R4-1.xml",
"DST_X503-1.json",
"DST_X503-1.xml",
"KunWeiTech_FT_Sensors-1.xml",
"P140000107-1.0.1.1-ECXML-1.xml"
],
"ENIfilenum": 5,
"absolutepath": "eni/"
}0x7012 上位机查询 ENI 参数
命令字: 0x7012
请求参数:(无)
{}0x7013 控制器回复上位机 ENI 参数
命令字: 0x7013
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| ENIName | String | 当前使用的 ENI 文件名称 |
| isHaveENI | Int | ENI 文件识别结果,范围[-1,1] -1-无 ENI 文件,0-未识别到对应 ENI,1-识别到 ENI 文件 |
响应示例:
{
"ENIName": "eni-RC-6-mecat-1-1000.xml",
"isHaveENI": 1
}0x7014 上位机设置当前使用的 ENI 文件
命令字: 0x7014
请求参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| ENIName | String | 要激活的 ENI 文件名 |
请求示例:
{
"ENIName": "eni-RC-6-mecat-1-1000.xml"
}⚠️ 切换 ENI 文件后,控制器需要重新初始化 EtherCAT 总线。切换前请确认机器人处于安全状态。
从站管理
0x7020 上位机查询从站列表
命令字: 0x7020
请求参数:(无)
{}0x7021 控制器回复上位机从站列表
命令字: 0x7021
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| IONum | Int[] | IO 从站列表(0-非 IO 从站,非0-IO 从站索引) |
| servoNum | Int[] | 伺服从站列表(0-非伺服从站,非0-伺服索引) |
| switchNum | Int[] | 交换机列表(0-非交换机,非0-交换机索引) |
| slaveType | String[] | 从站中文名称列表 |
| slaveTypeEnglish | String[] | 从站英文名称列表 |
响应示例:
{
"IONum": [0, 0, 0, 0, 0, 0],
"servoNum": [1, 2, 3, 4, 5, 6],
"switchNum": [0, 0, 0, 0, 0, 0],
"slaveType": ["禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E"],
"slaveTypeEnglish": ["hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e"]
}从站列表按总线拓扑顺序排列(从站 0 为离主站最近的设备),
servoNum、IONum、switchNum分别表示该位置的从站类型和编号。
从站状态监控
0x7023 上位机查询从站状态
命令字: 0x7023
请求参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| slaveIndex | int | 从站索引号,-1 表示查询所有从站 |
请求示例:
{
"slaveIndex": -1
}0x7024 控制器回复从站状态
命令字: 0x7024
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| slaveStates | object[] | 从站状态列表 |
| slaveStates[].index | int | 从站索引 |
| slaveStates[].ethercatState | int | EtherCAT 状态机:1-INIT,2-PREOP,4-SAFEOP,8-OP |
| slaveStates[].online | bool | 在线状态:true-在线,false-离线 |
| slaveStates[].errorCode | int | 错误码,0-正常 |
| slaveStates[].txErrors | int | 发送错误计数 |
| slaveStates[].rxErrors | int | 接收错误计数 |
| slaveStates[].alStatusCode | int | AL 状态码(应用层状态码) |
EtherCAT 状态机说明
| 状态 | 值 | 说明 |
|---|---|---|
| INIT | 1 | 初始化状态,仅完成基础通讯 |
| PREOP | 2 | 预运行状态,可进行邮箱通讯和参数配置 |
| SAFEOP | 4 | 安全运行状态,可进行输入数据读取,输出保持安全值 |
| OP | 8 | 运行状态,可进行完整的输入/输出数据交换 |
响应示例:
{
"slaveStates": [
{
"index": 0,
"ethercatState": 8,
"online": true,
"errorCode": 0,
"txErrors": 0,
"rxErrors": 0,
"alStatusCode": 0
},
{
"index": 1,
"ethercatState": 8,
"online": true,
"errorCode": 0,
"txErrors": 0,
"rxErrors": 0,
"alStatusCode": 0
}
]
}0x7025 控制器主动上报从站状态变化
命令字: 0x7025
当任何从站状态发生变化(在线/离线、状态机切换、错误发生)时,控制器主动推送。
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| slaveIndex | int | 从站索引 |
| oldState | int | 旧状态 |
| newState | int | 新状态 |
| errorCode | int | 错误码 |
| timestamp | string | 状态变化时间 |
响应示例:
{
"slaveIndex": 2,
"oldState": 8,
"newState": 4,
"errorCode": 0,
"timestamp": "2024-03-15T14:30:05Z"
}总线状态监控
0x7026 上位机查询总线状态
命令字: 0x7026
请求参数:(无)
{}0x7027 控制器回复总线状态
命令字: 0x7027
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| busState | int | 总线状态:0-未初始化,1-初始化中,2-运行中,3-错误 |
| cycleTime | int | 总线周期时间(us) |
| slaveCount | int | 已识别的从站总数 |
| onlineCount | int | 在线从站数 |
| dcInSync | bool | DC 时钟同步状态 |
| masterState | int | 主站状态码 |
响应示例:
{
"busState": 2,
"cycleTime": 1000,
"slaveCount": 6,
"onlineCount": 6,
"dcInSync": true,
"masterState": 8
}0x7022 上位机请求控制器切换系统
命令字: 0x7022
请求参数:(无)
{}切换系统用于在多个 ENI 配置方案之间切换,切换后控制器重新初始化总线。
常见问题
总线故障排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 从站离线 | 网线松动或断开 | 检查 EtherCAT 网线连接 |
| 从站离线 | 从站设备断电 | 检查从站电源 |
| 从站不在 OP 状态 | ENI 文件与实际从站不匹配 | 确认 ENI 文件与硬件配置一致 |
| 从站不在 OP 状态 | 从站固件版本不兼容 | 升级从站固件或更新 ESI 文件 |
| 总线初始化失败 | ENI 文件损坏 | 重新导入有效的 ENI 文件 |
| DC 同步失败 | 从站不支持 DC | 在配置工具中禁用该从站的 DC 功能 |
| 总线周期超时 | 从站数量过多 | 减少不必要的从站,或增大周期时间 |
| 通讯错误累积 | 电磁干扰 | 检查屏蔽和接地 |
维护建议
- 定期检查从站在线状态(
0x7023),监控txErrors/rxErrors计数 - 总线运行中勿插拔网线或从站设备
- 更换从站设备后需确认 ENI 配置匹配
- 保持 ENI 文件与硬件配置同步更新