07 组网、调试与排障
本文重点:EtherCAT 网络的硬件布线规范、上电检查流程、WKC / AL Status / 错误计数器 / Wireshark 四大诊断手段、典型故障案例、看门狗机制与性能验证方法。
前置阅读:05-主站实现-IgH与SOEM.md、06-ROS2与EtherCAT集成.md。
寄存器地址与 AL Status Code 以 ETG.1000 规范及所用 ESC(如 Beckhoff ET1100/LAN9252)数据手册为准。
1. 硬件与布线
| 项目 | 规范/建议 | 说明 |
|---|---|---|
| 线缆 | Cat5e 及以上,屏蔽(SF/UTP 或更好) | 100BASE-TX,两对线即可,但工业环境务必用屏蔽线并良好接地 |
| 单段长度 | ≤100m(100BASE-TX) | 超长距离用光纤从站端口 |
| 拓扑 | 物理上线形/星形/树形均可,逻辑恒为环 | 帧按端口顺序遍历,末端从站开放端口自动闭环(loopback) |
| IN/OUT 方向 | 不能接反 | 从站端口有方向:上一站接本站 IN(Port 0),本站 OUT(Port 1)接下一站 IN。接反轻则拓扑错乱、寻址异常,重则部分从站不可见。布线后对照 ethercat slaves 顺序核对 |
| EBUS 背板 | 模块化 IO(如 Beckhoff EL 系列)内部用 E-bus(LVDS 背板总线)级联 | 耦合器(如 EK1100)做 100BASE-TX ↔ E-bus 转换;注意 E-bus 供电电流预算,模块多时需供电扩展模块 |
| 接地/EMI | 屏蔽层 360° 端接、远离动力线、变频器输出线用屏蔽电缆 | EMI 是 RX Error 计数器增长的头号来源 |
| 连接器 | RJ45 或 M8/M12(D-code) | 振动场合优先 M8/M12 |
2. 上电检查流程
按顺序逐级确认,任何一级失败先解决再往下:
1 | ① 物理层:每段链路两端 Link/Activity LED 亮 |
1 | ethercat master # 主站状态、link up、发送/接收帧统计 |
从站数不对时的二分定位:从主站侧开始逐段插拔,ethercat slaves 观察数量变化,坏点在”最后一个可见从站”的下游第一段(线缆或下一站 IN 口)。
3. 诊断手段
3.1 WKC(Working Counter)异常分析
每个 datagram 尾部的 WKC 由成功处理该 datagram 的从站硬件递增(LRW 访问:读成功 +1、写成功 +2;只读/只写各 +1,见 ETG.1000.4)。主站把实收 WKC 与期望值比较:
| 现象 | 含义 | 定位方法 |
|---|---|---|
| WKC == 期望 | 全部从站正常处理 | — |
| WKC 恒定偏少 | 某从站未处理(掉出 OP、地址不匹配、配置错) | ethercat slaves 看谁不在 OP;差值 = 缺席从站贡献值 |
| WKC = 0 | 帧根本没经过任何配置从站 | 查链路、主站网卡、从站顺序变化 |
| WKC 偶发抖动(偶尔少 1~2) | 传输误码使某站 CRC 判帧无效而不处理 | 查错误计数器(§3.3)定位坏线段/EMI |
IgH 中 ecrt_domain_state() 返回 working_counter 与 wc_state(ZERO/INCOMPLETE/COMPLETE);SOEM 中 ec_receive_processdata() 直接返回 WKC,与 expectedWKC = ec_group[0].outputsWKC * 2 + ec_group[0].inputsWKC 比较(SOEM 示例中的惯用算法)。
处理原则:周期循环里 WKC 异常先计数、超过阈值(如连续 N 周期)再降级/停机,单次抖动不触发急停。
3.2 AL Status Code 速查
从站拒绝状态迁移或自行退级时,会在 AL Status Code 寄存器(0x0134)给出原因:
1 | ethercat slaves -v # 输出中含 AL state 与 status code |
| Code | 含义 | 常见原因 |
|---|---|---|
| 0x0000 | 无错误 | — |
| 0x0011 | Invalid requested state change | 跳级请求(如 INIT→OP) |
| 0x0016 | Invalid mailbox configuration (PREOP) | SM0/SM1 配置与 EEPROM 不符 |
| 0x001A | Synchronization error | DC 同步丢失:主站发帧抖动过大 / 周期不一致 |
| 0x001B | Sync manager watchdog | SM 看门狗超时:主站停发/漏发过程数据 |
| 0x001D | Invalid output configuration | SM2(输出)配置错,PDO 映射与实际长度不符 |
| 0x001E | Invalid input configuration | SM3(输入)配置错 |
| 0x0029 | Freerun needs 3-buffer mode | 同步模式配置矛盾 |
| 0x002B | Invalid input & output | 双向 PDO 配置均错 |
| 0x002C | Fatal sync error | SYNC0 事件长期缺失 |
| 0x002D | No sync error(SAFEOP 时未收到 SYNC) | DC 未启用/AssignActivate 错 |
| 0x0030 | Invalid DC SYNC configuration | SYNC0/1 周期、偏移非法 |
| 0x0032 | PLL error | 从站 DC PLL 未锁定 |
| 0x0034 | Invalid DC cycle time | 周期与从站支持范围不符 |
| 0x0050 | EEPROM no access | EEPROM 被占用/损坏 |
| 0x0051 | EEPROM error | SII 内容校验失败 |
(完整表见 ETG.1000.6 / ESC 数据手册;厂商可扩展 0x8000 以上私有码,查从站手册。)
3.3 错误计数器寄存器(定位坏线缆/EMI)
ESC 每端口维护硬件错误计数器,只增不减,写任意值清零。核心地址(ET1100 类 ESC,以数据手册为准):
| 寄存器 | 名称 | 含义 |
|---|---|---|
| 0x0300+2n | RX Error Counter (Port n) | 物理层符号错误 + 帧错误,上游线段质量的直接指标 |
| 0x0301+2n | Invalid Frame Counter (Port n) | CRC 错帧 |
| 0x0308+n | Forwarded RX Error Counter (Port n) | 上游已标记错误的帧被转发的次数(错误发生在更上游) |
| 0x030C | ECAT Processing Unit Error Counter | 到达处理单元的错帧 |
| 0x0310+n | Link Lost Counter (Port n) | 链路丢失次数:接触不良、连接器松动的指标 |
1 | # 读从站 3 的端口错误计数器(8 字节:Port0~3 的 RX Err/Invalid Frame) |
定位逻辑:错误在链路上被第一个检测到它的端口计数并标记。沿帧行进方向找第一个 RX Error 增长的端口,坏点就在该端口的上游线段(线缆、连接器、或上游从站 PHY)。全网清零 → 运行 30 分钟 → 逐站读取,是例行体检做法。
3.4 Wireshark 抓包(EtherType 0x88A4)
Wireshark 自带 EtherCAT dissector,能解析 datagram 头、命令类型、地址、WKC:
1 | # 方式一:SOEM/generic 驱动时直接抓主站网卡 |
看什么:
- 每帧内的 datagram 列表(主站一个周期通常发 1 帧含多个 datagram:LRW 过程数据 + BRD 状态巡检 + DC 同步 ARMW/FRMW);
- 每个 datagram 的 WKC 返回值;
- 周期帧的时间间隔抖动(Statistics → I/O Graph);
- SDO 交互失败时看 CoE Abort Code。
3.5 IgH ethercat 命令排障示例
1 | ethercat master # 帧统计:tx/rx count、loss |
子命令名称与参数随 IgH 版本略有差异(如
eeprom相关操作在不同版本叫sii_read/sii_write),以ethercat --help和官方文档为准。
4. 典型故障案例表
| 症状 | 高概率原因 | 排查动作 |
|---|---|---|
| 从站周期性掉到 SAFEOP,AL code 0x001A(Sync error) | 主站发帧抖动过大 / DC 参考时钟漂移 / cycle time 三处不一致 | cyclictest 量调度抖动;核对 update_rate、主站周期、SYNC0 周期一致;加大 sync0_shift;检查是否忘了周期调用 DC 同步 API |
| WKC 抖动(偶发少 1) | 线缆/连接器误码、EMI | §3.3 错误计数器沿线定位;换屏蔽线、检查接地、远离动力线 |
| 进 OP 后驱动器无输出/不动 | PDO 映射与驱动器实际配置不符;控制字状态机没走到 Operation Enabled;看门狗参数不当 | ethercat pdos 核对映射;ethercat upload -p N 0x6041 0 看状态字;读 0x0400(SM 看门狗分频/时间寄存器区)核对看门狗配置与触发状态(0x0440) |
| 扫描到的从站数少于实际 | IN/OUT 接反、某段链路断、从站没上电 | 顺链路查 LED;二分插拔;ethercat slaves -v 看末站端口状态 |
| 从站全部消失又恢复(间歇) | 供电跌落、连接器振动松动 | 读 0x0310 Lost Link 计数器逐站排查 |
| EEPROM 损坏(从站身份异常、0x0050/0x0051) | 烧写中断、干扰 | 用备份 sii_write 恢复;无备份则从厂商 ESI 重新生成 SII 烧写 |
| SDO 读写超时 | 从站还在 INIT / mailbox 配置错 | 确认至少 PREOP;ethercat slaves -v 查 mailbox 支持 |
| 换了一个从站后总线起不来 | 位置寻址下配置与实际型号不匹配 | 核对 vendor/product;用 alias 站号替代纯位置寻址提高可维护性 |
5. 从站看门狗机制
从站 ESC 内置 SM 看门狗(Sync Manager Watchdog):每次输出 SM(通常 SM2)被主站过程数据写一次就”喂狗”;主站停发或漏发超过看门狗时间,从站硬件把输出置为安全态(数字量输出清零、伺服按配置停机),并报 AL 0x001B 退到 SAFEOP。
- 相关寄存器(ESC 通用布局,以数据手册为准):0x0400(看门狗分频器)、0x0420(SM 看门狗时间)、0x0440(看门狗状态)、0x0442(看门狗计数器)。默认典型值 100ms。
- 工程意义:这是”主站崩溃/断线后设备不会带着旧指令继续跑”的最后防线。看门狗时间应设为周期的合理倍数(如 10~100 倍):太短则正常抖动误触发,太长则失去保护意义。
- 看门狗只保证输出进安全态,不等于功能安全——人身安全仍依赖 STO 等硬接线安全回路(呼应 armRobot 的安全边界原则)。
6. 性能验证
6.1 调度抖动:cyclictest
1 | # 在目标隔离核上以目标周期测 1 小时 |
判读(经验值):1ms 控制周期下,PREEMPT_RT 调优后 max latency 通常应在几十 µs 以内;max 上百 µs 需先修 OS 配置(BIOS 节能、SMI、中断绑核)再谈总线。必须带典型负载测(跑着 ROS 栈、有网络流量),空载数据没有意义。
6.2 周期抖动统计(应用内)
在周期循环里用 clock_gettime 记录相邻唤醒间隔,维护 min/max/直方图,定期(低频、循环外)输出。IgH 用户也可参考其示例中的 latency/jitter 统计写法。同时监控 ethercat master 的帧丢失计数与 DC 系统时间差(0x092C)随时间的分布。
6.3 总线利用率估算
一帧的线上时间:
1 | 帧长(字节) ≈ 各从站 PDO 数据之和 |
算例:10 个伺服,每站 RxPDO 8B + TxPDO 8B,单个 LRW datagram 承载:
1 | 数据 160B + datagram 头 12B + 帧/以太网开销 40B ≈ 212B |
结论:中小系统总线本身远不是瓶颈,瓶颈几乎总在主站调度抖动。当从站很多、周期很短(如 250µs + 上百从站)时才需要精算帧长,必要时拆分多个周期不同的 domain/帧。
6.4 长跑验收
- 24h 连续运行:WKC 异常计数 = 0(或低于允许阈值)
- 全站错误计数器增量为 0(EMI 验收)
- DC 同步偏差(0x092C)分布稳定,无漂移趋势
- cyclictest max 满足预算,无孤立尖峰
7. 排障 Checklist(速查)
上电起不来:
- 链路 LED 全亮?(不亮:线/电/PHY)
-
ethercat slaves数量正确?(少站:IN/OUT 方向、二分定位断点) - 全部到 PREOP?(卡 INIT:EEPROM/SII 问题,查 0x0050/51)
- SDO 能读 0x1000 设备类型?(不能:mailbox 配置)
- SAFEOP → OP 被拒?(读 AL Status Code 对表 §3.2)
运行中异常:
- WKC 恒定偏少 → 哪个从站不在 OP?
- WKC 偶发抖动 → 错误计数器沿线定位(0x0300/0x0310)
- 掉 SAFEOP + 0x001A → 主站抖动/周期一致性(cyclictest、三周期核对)
- 掉 SAFEOP + 0x001B → 主站是否停发/漏发(看门狗)
- 输出没动作 → PDO 映射、CiA402 状态字、看门狗状态 0x0440
环境与工具:
- PREEMPT_RT + 绑核 + 中断亲和 已配置(见 05 §5)
- 抓包通道可用(镜像口/TAP),Wireshark 过滤
ecat - EEPROM 已备份(
sii_read),ESI 文件存档 - 从站固件/硬件版本、拓扑顺序有记录(换件后核对)
返回目录:README.md
正在加载留言…