总线
概述
本控制器支持多种工业现场总线协议,包括 EtherCAT、CANopen 等。通过总线可以实现与伺服驱动器、IO 模块、传感器等从站设备的高速实时通信。
支持的总线类型
| 总线类型 | 说明 | 典型用途 |
|---|---|---|
| EtherCAT | 基于以太网的实时总线 | 伺服控制、高速 IO |
| CANopen | 基于 CAN 的现场总线 | 传感器、编码器、分布式 IO |
总线架构
text
┌─────────────┐
│ 控制器 │ (主站)
└──────┬──────┘
│ EtherCAT / CAN bus
│
┌────┴────┬─────────┬──────────┐
│ │ │ │
┌─┴──┐ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐
│伺服│ │伺服 │ │ IO │ │交换 │
│ 1 │ │ 2 │ │模块 │ │ 机 │
└────┘ └─────┘ └─────┘ └─────┘EtherCAT 主站功能
| 功能 | 说明 |
|---|---|
| 从站扫描 | 自动识别总线上的从站设备 |
| ENI 配置 | 通过 EtherCAT 网络信息文件配置从站 |
| DC 时钟同步 | 分布式时钟同步,实现各从站精确同步 |
| PDO 映射 | 过程数据对象映射,定义实时数据交换内容 |
| 从站状态管理 | 监控从站运行状态,支持在线/离线检测 |
EtherCAT 总线配置
ENI 文件管理
ENI(EtherCAT Network Information)文件是 EtherCAT 总线配置的核心文件,描述了总线上所有从站的型号、数量、排列顺序及 PDO 映射信息。ENI 文件通常由专用配置工具生成(如 INEXBOT EC-Config),导入控制器后生效。
0x7010 上位机查询 ENI 文件列表
命令字: 0x7010
请求参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| num | Int | 获取 ENI 文件数目,范围[1,10] 1-获取当前使用的 ENI 文件,10-获取所有 ENI 文件 |
请求示例:
json
{
"num": 10
}0x7011 控制器回复上位机 ENI 文件列表
命令字: 0x7011
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| ENIfilelist | String[] | 控制器 ENI 文件列表 |
| ENIfilenum | Int | ENI 文件数目 |
| absolutepath | String | 控制器中 ENI 文件所在文件夹 |
响应示例:
json
{
"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
请求参数:(无)
json
{}0x7013 控制器回复上位机 ENI 参数
命令字: 0x7013
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| ENIName | String | 当前使用的 ENI 文件名称 |
| isHaveENI | Int | ENI 文件识别结果,范围[-1,1] -1-无 ENI 文件,0-未识别到对应 ENI,1-识别到 ENI 文件 |
响应示例:
json
{
"ENIName": "eni-RC-6-mecat-1-1000.xml",
"isHaveENI": 1
}0x7014 上位机设置当前使用的 ENI 文件
命令字: 0x7014
请求参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| ENIName | String | 要激活的 ENI 文件名 |
请求示例:
json
{
"ENIName": "eni-RC-6-mecat-1-1000.xml"
}⚠️ 切换 ENI 文件后,控制器需要重新初始化 EtherCAT 总线。切换前请确认机器人处于安全状态。
从站管理
0x7020 上位机查询从站列表
命令字: 0x7020
请求参数:(无)
json
{}0x7021 控制器回复上位机从站列表
命令字: 0x7021
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| IONum | Int[] | IO 从站列表(0-非 IO 从站,非0-IO 从站索引) |
| servoNum | Int[] | 伺服从站列表(0-非伺服从站,非0-伺服索引) |
| switchNum | Int[] | 交换机序列数组,按 EtherCAT 从站拓扑顺序排列;0-不是交换机,非0-是交换机且数值为交换机序号 |
| slaveType | String[] | 从站中文名称列表 |
| slaveTypeEnglish | String[] | 从站英文名称列表 |
响应示例:
json
{
"IONum": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"servoNum": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
"switchNum": [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"slaveType": ["交换机", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E", "禾川X3E"],
"slaveTypeEnglish": ["switch", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e", "hcfa_x3e"]
}从站列表按总线拓扑顺序排列(从站 0 为离主站最近的设备),
servoNum、IONum、switchNum分别表示该位置的从站类型和编号。例如,switchNum为[1, 0, ...]表示第一个 EtherCAT 从站是编号为 1 的交换机,其余位置不是交换机。
0x7022 上位机请求控制器切换系统
命令字: 0x7022
请求参数:(无)
json
{}切换系统用于在多个 ENI 配置方案之间切换,切换后控制器重新初始化总线。
常见问题
总线故障排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 从站离线 | 网线松动或断开 | 检查 EtherCAT 网线连接 |
| 从站离线 | 从站设备断电 | 检查从站电源 |
| 从站不在 OP 状态 | ENI 文件与实际从站不匹配 | 确认 ENI 文件与硬件配置一致 |
| 从站不在 OP 状态 | 从站固件版本不兼容 | 升级从站固件或更新 ESI 文件 |
| 总线初始化失败 | ENI 文件损坏 | 重新导入有效的 ENI 文件 |
| DC 同步失败 | 从站不支持 DC | 在配置工具中禁用该从站的 DC 功能 |
| 总线周期超时 | 从站数量过多 | 减少不必要的从站,或增大周期时间 |
| 通讯错误累积 | 电磁干扰 | 检查屏蔽和接地 |
维护建议
- 定期检查从站在线状态(
0x7023),监控txErrors/rxErrors计数 - 总线运行中勿插拔网线或从站设备
- 更换从站设备后需确认 ENI 配置匹配
- 保持 ENI 文件与硬件配置同步更新