EtherCAT · 调试

WcState 持续报错怎么排查:Working Counter 原理与现场故障树

WcState EtherCAT 故障排查 DC 同步 2026-02-01 · 尚工

一、Working Counter 是什么

EtherCAT 帧在总线上经过每个从站时,从站会对帧中的 Working Counter(WKC) 字段进行递增操作。主站发出帧后,期望收到的 WKC 值等于所有应答从站的计数之和。如果实际 WKC ≠ 期望 WKC,TwinCAT 3 就会将 WcState 置为非零值,表示帧不完整——某个从站没有正常参与通信。

简单理解:WcState = 0 正常,WcState ≠ 0 说明有从站掉链子了

二、WcState 报警的三种常见模式

1. 上电瞬间闪一下然后恢复

正常现象。从站初始化需要时间,主站先发帧但从站还没准备好,导致前几帧 WKC 不匹配。通常 1-3 秒内自动恢复。报警 FB 加 500ms TON 防抖即可过滤。

2. 持续报错不恢复

说明有从站始终不在线。最常见的原因是物理层问题(网线、接头)或从站配置错误(ESI 不匹配)。需要逐级排查。

3. 间歇性闪报

最难调试的情况。通常与线缆品质、接地不良、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)是否需要?

四、WcState 监控 FB 设计

在 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 设备现场案例复盘

某 PVD 腔体控制柜内 EtherCAT 总线包含 16 个 EL 端子、2 个 AX5206 双轴驱动器。投产初期运行稳定,但腔体加热到 300°C 后 WcState 间歇性报错。

根因:控制柜内线槽走线时,EtherCAT 网线与大电流加热功率线紧贴平行走了约 2 米。高温下线缆绝缘性能下降,EMI 干扰加剧导致帧校验偶尔失败。

解决:EtherCAT 线缆改走独立线槽,与功率线保持 15cm 以上间距,加装铁氧体磁环。改造后 72 小时长测零 WcState 报错。

现场经验:80% 的 WcState 间歇性报错最终都是物理层问题——网线品质、走线布局、接头接触。排查时先看硬件,再看配置。

FB_WcStateMonitor 完整源码及配套报警集成示例已上传至 github.com/tc3-engineer