3. EtherCAT协议原理
EtherCAT(Ethernet for Control Automation Technology)之所以能在工业控制中实现微秒级同步与高带宽利用率,核心在于它并非把每个从站当作独立以太网设备来收发报文,而是让一帧以太网数据在环形拓扑中“穿过”所有从站,从站在帧经过时实时读写属于自己的数据区。理解这一机制,需要同时掌握数据帧结构、过程数据对象、邮箱通信、分布式时钟、状态机与通信周期六个相互咬合的要素。
一、数据帧结构:一帧穿越所有从站
EtherCAT 使用标准以太网帧,类型字段为 0x88A4。帧内不再为每个从站封装独立报文,而是由多个 EtherCAT 子报文(Datagram)组成,每个子报文包含命令、索引、地址区、数据区和工作计数器 WKC。主站发出的一帧依次经过各从站,从站根据子报文中的地址判断是否属于自己:若匹配,则在数据区对应偏移处读取输出数据、写入输入数据,并递增 WKC。帧绕行一圈回到主站后,主站通过比较 WKC 与预期值即可判断该子报文是否被正确访问。
这种“飞行中读写”(processing on the fly)的方式避免了存储转发带来的延迟,使有效载荷利用率远高于传统轮询式以太网。子报文可寻址逻辑地址、自动增量地址或广播地址,分别用于过程数据交换、启动阶段寻址和全局命令。
二、过程数据对象与邮箱通信
EtherCAT 的通信分为两类:过程数据(Process Data)和邮箱数据(Mailbox)。过程数据是周期性实时交换的输入/输出量,如伺服的目标位置、实际速度、IO 状态,直接映射到主站 PLC 的过程映像区,采用逻辑寻址,周期固定、延迟确定。邮箱通信则是非周期性的参数读写、诊断、固件升级等,采用握手式可靠传输,速度较慢但不影响实时性。
在 CODESYS 中,过程数据通过 EtherCAT 从站设备的“过程数据”选项卡配置,输入和输出变量自动映射到 PLC 的 %I / %Q 地址或结构体变量;邮箱通信则通过 SDO(服务数据对象)读写对象字典,例如修改 PDO 映射、设置电机额定电流等。两者共用同一物理链路,但优先级和调度方式不同。
| 对比项 | 过程数据 PDO | 邮箱通信 SDO |
|---|---|---|
| 通信类型 | 周期性、实时 | 非周期、按需 |
| 寻址方式 | 逻辑地址,飞行中读写 | 邮箱通道,握手确认 |
| 典型用途 | 位置、速度、IO 状态 | 参数配置、诊断、固件升级 |
| 对周期影响 | 直接占用通信周期 | 后台传输,不阻塞过程数据 |
| CODESYS 入口 | 过程数据映射、PDO 配置 | SDO 读写、启动参数 |
三、分布式时钟与状态机
分布式时钟(Distributed Clocks,DC)是 EtherCAT 实现高精度同步的关键。主站选择一个从站作为参考时钟,其余从站通过测量帧到达和离开的时间差,计算自身时钟与参考时钟的偏移和漂移,并动态调整本地时钟,使所有从站时钟同步到亚微秒级。这样,多个伺服轴可以在同一时刻采样和输出,避免因时钟偏差导致的轨迹抖动。
状态机则定义了从站从初始化到正常运行的迁移路径:INIT → PRE-OP → SAFE-OP → OP。INIT 阶段配置地址和邮箱;PRE-OP 阶段邮箱可用,过程数据不可用;SAFE-OP 阶段过程数据可读但输出保持安全状态;OP 阶段输入输出均正常交换。任何配置错误或通信中断都会使状态回退,主站通过状态码定位问题。
实操提示:在 CODESYS 中扫描 EtherCAT 从站后,先确认从站状态能否从 PRE-OP 进入 SAFE-OP,再进入 OP。若卡在 SAFE-OP,常见原因是 PDO 映射不匹配、DC 模式未启用或从站参数未下载。
四、通信周期与案例场景
通信周期由主站循环发送 EtherCAT 帧的间隔决定,典型值为 1 ms、500 μs 甚至 250 μs。周期越短,控制响应越快,但对主站 CPU、网络带宽和从站处理能力要求越高。一个完整的周期包括:主站组帧、帧穿越所有从站、返回主站、主站解析并更新过程映像、执行 PLC 任务、准备下一帧。
以三轴伺服同步为例:主站设置 1 ms 周期,启用 DC 同步模式,三个伺服从站分别映射目标位置和实际位置。每个周期内,主站把三轴目标位置写入帧,帧依次经过三个从站,从站读取目标值并回写实际值;同时 DC 使三个从站的采样时刻对齐。若某轴 WKC 异常,主站立即报错并触发安全停止。
CODESYS EtherCAT 周期配置示例(伪代码):
EtherCAT_Master.CycleTime := T#1ms;
EtherCAT_Master.DCEnabled := TRUE;
Axis1.PDO_Output := TargetPos1;
Axis1.PDO_Input := ActualPos1;
Axis2.PDO_Output := TargetPos2;
Axis2.PDO_Input := ActualPos2;
Axis3.PDO_Output := TargetPos3;
Axis3.PDO_Input := ActualPos3;
IF EtherCAT_Master.WKC_Error THEN
SafetyStop();
END_IF
五、常见误区与复盘
- 误区一:把 EtherCAT 当成普通以太网 TCP/IP 通信。实际上它使用专用帧类型和飞行中读写,不经过 TCP/IP 协议栈。
- 误区二:忽略 WKC 校验。WKC 不匹配说明从站未正确访问,必须排查地址、拓扑或从站状态。
- 误区三:在 OP 状态下频繁写 SDO。邮箱通信虽不阻塞过程数据,但大量 SDO 会占用主站资源,建议在 PRE-OP 阶段完成参数配置。
- 误区四:DC 未启用却要求多轴同步。没有分布式时钟,各从站时钟独立漂移,长时间运行后同步误差会累积。
复盘要点:EtherCAT 的实时性来自“一帧穿越、飞行读写、WKC 校验、DC 同步、状态机管控、周期调度”六者协同。调试时按“物理连接 → 状态机迁移 → PDO 映射 → DC 同步 → 周期优化”的顺序逐层排查,能快速定位绝大多数通信问题。