热插拔
EtherCAT 标准功能
工作原理
当从站离线时,EtherCAT 帧会跳过该从站位置继续转发,其余从站保持 OP 状态正常通信。离线从站的 PDO 输入数据被清零。expected_wkc 在配置期固定,不会随掉站下调;actual_wkc 如实下降,表示有从站掉了,不是主站故障。PDO 周期继续跑。从站修复后 actual 可能回升。运行中插回不会自动进 OP。
行为特性:
- 离线从站不影响其余从站的 PDO 周期通信
- 可上报 Offline/Online 事件;不会在运行中插回后自动切到 OP
- 断电重连、换同型号设备都不会由主站自动拉回 OP
- 线型拓扑中,中间从站断开会导致其后方从站全部不可达(除非有环形冗余)
- 耦合器(如 EK1100)断开会导致其分支端口下游从站全部不可达
检测时延(不是自动进 OP)
线缆拔插(地址保留)
从站短暂断开后重连,配置地址仍在 ESC 寄存器中:
耗时量级: 若干 PDO 周期(周期最短 125 µs,不是写死 1 ms);这是检测/事件时延,不是自动进 OP
断电重连(地址丢失)
从站断电后重新上电,ESC 寄存器全部重置,需要完整重配:
耗时量级: 更多 PDO 周期(周期最短 125 µs,不是写死 1 ms);仍不会自动进 OP,需要应用层按状态机处理
事件通知
从站离线和恢复时会触发事件:
// Master 级别
master.Events.SlaveOffline += (slaveIndex) =>
{
Console.WriteLine($"从站 {slaveIndex} 离线");
};
master.Events.SlaveOnline += (slaveIndex) =>
{
Console.WriteLine($"从站 {slaveIndex} 恢复上线");
};
// Slave 级别
slave.Events.Offline += () => { /* 处理离线 */ };
slave.Events.Online += () => { /* 处理恢复 */ };
常见问题
热插拔期间 PDO 通信是否受影响?
常规情况不受影响。PDO 周期频率和抖动保持不变。 极端满负载情况会导致 PDO 周期异常。
运行中插回会自动进 OP 吗?
不会。 主站可报 Offline/Online;应用层要自己处理状态机。不要指望插回去就自动进 OP。
断电重连后从站会自动回 OP 吗?
不会。 不会自动重写 SM/FMMU 并拉回 OP。自定义 SDO 也不会在热插时自动重发;若需要,在 SlaveOnline 里由应用层自己做。