EtherCAT 帧在总线上经过每个从站时,从站会对帧中的 Working Counter(WKC) 字段进行递增操作。主站发出帧后,期望收到的 WKC 值等于所有应答从站的计数之和。如果实际 WKC ≠ 期望 WKC,TwinCAT 3 就会将 WcState 置为非零值,表示帧不完整——某个从站没有正常参与通信。
简单理解:WcState = 0 正常,WcState ≠ 0 说明有从站掉链子了。
正常现象。从站初始化需要时间,主站先发帧但从站还没准备好,导致前几帧 WKC 不匹配。通常 1-3 秒内自动恢复。报警 FB 加 500ms TON 防抖即可过滤。
说明有从站始终不在线。最常见的原因是物理层问题(网线、接头)或从站配置错误(ESI 不匹配)。需要逐级排查。
最难调试的情况。通常与线缆品质、接地不良、EMI 干扰有关。在变频器启动、电机运转时更容易复现。
WcState ≠ 0 ├─ Step 1: 检查 Online 标签 → 哪个从站 State 不是 OP? │ ├─ Init → 网线断开 / ESI 文件不匹配 │ ├─ PreOp → PDO 映射错误 / DC 配置异常 │ ├─ SafeOp → 应用层错误(看 AL Status Code) │ └─ 全部 OP → 进入 Step 2 │ ├─ Step 2: 检查物理层 │ ├─ 网线接头是否松动?换 RJ45 测试 │ ├─ 线缆长度是否超过 100m? │ ├─ 是否使用了非屏蔽线?工业环境必须用 STP │ └─ 检查网口 Link LED 是否闪烁(不稳定) │ ├─ Step 3: 检查 DC 同步 │ ├─ 所有从站 Sync Mode 是否一致? │ ├─ Sync0 周期是否 = NC Task 周期? │ └─ DC System Time Diff 是否 < 100ns? │ └─ Step 4: 检查拓扑 ├─ 是否有环路?(不允许) ├─ 分支数量是否超过从站支持的端口数? └─ EtherCAT Junction(EK1122)是否需要?
在 PLC 中应始终监控 WcState 并在持续异常时触发报警。核心是加入 TON 防抖避免瞬态误报:
FUNCTION_BLOCK FB_WcStateMonitor VAR_INPUT nWcState : UINT; // 从 EtherCAT Master 读取 tDebounce : TIME := T#500MS; END_VAR VAR_OUTPUT bFault : BOOL; // 持续异常 → TRUE bWarning : BOOL; // 瞬态异常(未达防抖时间) END_VAR VAR tonDelay : TON; END_VAR bWarning := (nWcState <> 0); tonDelay(IN := bWarning, PT := tDebounce); bFault := tonDelay.Q;
某 PVD 腔体控制柜内 EtherCAT 总线包含 16 个 EL 端子、2 个 AX5206 双轴驱动器。投产初期运行稳定,但腔体加热到 300°C 后 WcState 间歇性报错。
根因:控制柜内线槽走线时,EtherCAT 网线与大电流加热功率线紧贴平行走了约 2 米。高温下线缆绝缘性能下降,EMI 干扰加剧导致帧校验偶尔失败。
解决:EtherCAT 线缆改走独立线槽,与功率线保持 15cm 以上间距,加装铁氧体磁环。改造后 72 小时长测零 WcState 报错。
⚡ 现场经验:80% 的 WcState 间歇性报错最终都是物理层问题——网线品质、走线布局、接头接触。排查时先看硬件,再看配置。
FB_WcStateMonitor 完整源码及配套报警集成示例已上传至 github.com/tc3-engineer。