3. EtherCAT协议原理

核心原理:从站硬件化处理与“飞读飞写”

EtherCAT(Ethernet for Control Automation Technology)最本质的设计思想,是将传统以太网协议栈中由软件完成的帧解析、数据提取与插入工作,下沉到每个从站的 ESC(EtherCAT Slave Controller)芯片中,由硬件在报文经过的瞬间完成处理。主站发送的以太网帧依次穿过每个从站,每个从站仅产生纳秒级的延迟(典型值 < 1 µs),报文在最后一个从站处被折返,沿原路径返回主站。这种“飞读飞写”机制使得整个网络的通信周期不再依赖从站CPU的处理速度,而是由物理链路长度与从站数量决定。

关键认知:EtherCAT不是“主站轮询从站”的传统请求-响应模式,而是“一帧经过,全员读写”的流水线模式。从站无需IP地址,也无需MAC地址参与路由,它只识别帧中的位置与命令。

EtherCAT主站 (控制器/工控机) 从站1 伺服驱动器 ESC芯片 从站2 I/O模块 ESC芯片 从站3 变频器 ESC芯片 从站4 编码器 ESC芯片 以太网帧结构: 目的MAC 源MAC 0x88A4 EtherCAT头 数据区(子报文1..n) FCS 子报文结构:命令(1B) | 索引(1B) | 地址(4B) | 长度(2B) | R/W(2B) | 数据区(可变) | WKC(2B) → 去程(主站→从站,下行报文) ← 回程(从站→主站,上行报文) 每个从站ESC在报文经过时,从对应子报文位置读取输出数据,并写入输入数据,延迟仅数百纳秒。

帧结构与子报文格式

EtherCAT直接使用标准以太网帧,但以太网类型字段固定为 0x88A4。帧结构分为三层:以太网帧头、EtherCAT报文头和数据区。数据区由多个子报文(Datagram)串联组成,每个子报文独立寻址一组从站。

字段长度说明
目的MAC / 源MAC各6字节标准以太网地址,通常为广播或多播
EtherType2字节固定为 0x88A4,标识EtherCAT协议
EtherCAT头2字节包含数据区长度(11位)与类型(1位,1=与从站通信)
子报文1..n可变每个子报文包含命令、地址、数据与工作计数器
FCS4字节帧校验序列,由以太网控制器自动生成

子报文内部结构是理解EtherCAT的关键,其核心字段如下:

  • 命令(CMD):如 NOP、APRD(寻址读)、APWR(寻址写)、BRD(广播读)、FPWR(配置写)等,决定从站执行何种操作。
  • 索引(Idx):用于匹配请求与响应,主站可同时发出多个未完成的子报文。
  • 地址(Ado/Adp):从站地址或自动增量计数器值,具体含义取决于寻址方式。
  • 长度(Len):数据区字节数,最大为 1486 字节(受以太网MTU限制)。
  • 数据区:实际读写的对象字典数据或过程数据。
  • WKC(Working Counter):工作计数器,从站每成功处理一次该子报文,WKC 加 1。主站通过检查 WKC 的增量判断哪些从站正确响应。

实操提示:在抓包工具(如 Wireshark)中,如果看到 WKC 为 0,说明没有任何从站响应;如果 WKC 增量小于预期从站数,说明部分从站通信异常。这是排查 EtherCAT 通信故障的第一手依据。

寻址方式:位置寻址与配置寻址

EtherCAT 支持两种从站寻址模式,分别用于不同阶段:

  1. 位置寻址(Auto Increment,AI):子报文中的地址字段存放一个自动增量计数器。报文每经过一个从站,该计数器减 1。当计数器值为 0 时,当前从站即被选中。这种方式不依赖从站自身配置,适合在启动阶段扫描总线上的从站拓扑。
  2. 配置寻址(Configured Address,CA):每个从站在初始化时被分配一个唯一的 16 位站地址(0x0001~0xFFFF)。子报文中的地址字段直接存放该站地址,从站通过比较自身地址决定是否响应。这种方式用于正常运行阶段的过程数据通信。

此外还有广播寻址(所有从站同时处理)和逻辑寻址(基于 FMMU 将过程数据映射到连续逻辑地址空间,用于周期通信)。逻辑寻址是 EtherCAT 实现高实时性的核心:主站将各从站的输入输出数据映射到一个连续的逻辑地址段,每个从站通过 FMMU(现场总线内存管理单元)将自身数据映射到该段中的固定偏移位置,从而在一个子报文中完成所有从站的数据交换。

案例:某6轴运动控制系统,主站将6个伺服驱动器的目标位置(各4字节)映射到逻辑地址 0x1000~0x1017,将状态字(各2字节)映射到 0x2000~0x200B。每个周期,主站只需发送一个写子报文(逻辑地址 0x1000,长度24字节)和一个读子报文(逻辑地址 0x2000,长度12字节),即可完成全部6轴的控制与状态采集。

通信周期与分布式时钟同步

EtherCAT 的通信周期由主站决定,典型值为 250 µs ~ 4 ms。在一个周期内,主站发送下行帧,从站处理并返回上行帧,主站接收后立即开始下一周期。由于从站处理完全由硬件完成,周期抖动可控制在 ±100 ns 以内。

对于多轴运动控制,各从站必须同时采样输入、同时更新输出,否则会造成轴间不同步。EtherCAT 通过 分布式时钟(DC,Distributed Clock) 实现从站间的精确同步:

  • 主站选择一个参考从站(通常为第一个从站),其本地时钟作为系统参考时钟。
  • 主站周期性发送 ARMW(读-修改-写) 命令,读取所有从站的本地时钟与参考时钟的偏差,并写入补偿值。
  • 每个从站的 ESC 内置时钟漂移补偿逻辑,通过 SYNC 信号 触发本地应用控制器(如 DSP/FPGA)的同步中断。

DC 同步的最终效果是:所有从站在同一时刻产生 SYNC 脉冲,误差通常小于 100 ns。对于伺服驱动器,这意味着电流环采样、位置锁存等事件在物理上同时发生,从而保证多轴插补的轨迹精度。

// 主站配置DC同步的典型寄存器操作(伪代码)
// 1. 选择参考从站(从站0)
slave0.dc_config.enable = true;
slave0.dc_config.cycle_time = 1000;  // 单位:µs

// 2. 对所有从站执行ARMW命令,校准时钟偏移
for (each_slave in slaves) {
    ec_datagram_armw(each_slave, REG_DC_SYSTIME, 8);
}

// 3. 设置SYNC脉冲周期与激活
for (each_slave in slaves) {
    ec_datagram_fpwr(each_slave, REG_DC_SYNC_ACTIVATE, 0x0001);
}

误区与复盘:常见设计陷阱

误区1:认为从站越多,周期越长。实际上,从站处理延迟是纳秒级的,真正影响周期的是帧传输时间(与总电缆长度相关)和主站软件开销。100个从站与10个从站的帧传输时间差异仅约 10 µs(按100Mbps计算)。

误区2:忽略FMMU配置导致数据错位。逻辑寻址依赖FMMU将物理地址映射到逻辑地址。如果FMMU配置错误,从站可能写入错误的数据偏移,导致主站读到的数据张冠李戴。务必在初始化阶段逐站验证映射关系。

误区3:DC同步只影响运动控制。即使是非运动应用(如高速I/O采样),DC同步也能保证所有输入信号在同一时刻被锁存,避免因扫描不同步造成的采样误差。

复盘建议:在项目调试初期,先用位置寻址扫描总线,确认从站数量与拓扑;再切换到配置寻址并验证每个从站的站地址;最后配置 FMMU 与 DC,并用示波器测量各从站 SYNC 信号的相位差,确保同步精度达标。每一步都通过 WKC 返回值确认操作成功,避免将错误累积到后期。