2. EtherCAT协议基础

核心原理:从站硬件处理,主站“零拷贝”

EtherCAT(Ethernet Control Automation Technology)最本质的设计思想是:主站不再像传统以太网那样发送一帧数据给一个从站并等待其回复,而是发送一帧数据“穿过”所有从站,每个从站在报文经过时,于硬件层面实时抽取其“输出数据”并插入其“输入数据”。整个过程由从站的ESC(EtherCAT Slave Controller,从站控制器)芯片完成,不经过CPU协议栈,因此延迟极低且时间确定性极强。

从站处理报文的机制称为“On-the-fly”(飞读飞写):当报文帧的对应数据段经过从站时,ESC在几个纳秒内完成数据的读取与回写,然后将报文继续向下游转发。最后一个从站将处理完毕的帧沿原路径返回主站。主站网卡收到的帧中,已经包含了所有从站实时更新的过程数据。

关键认知:EtherCAT并非“主站轮询从站”,而是“一帧数据贯穿所有从站,每个从站只处理属于自己的那一段”。这种“集束帧”广播+逐站处理的方式,使得1000个分布式I/O点的刷新周期可控制在100µs以内。
EtherCAT主站 IgH主站/实时网卡 从站1 ESC + 伺服驱动 位置/速度控制 从站2 ESC + 数字量I/O 16入/16出 从站3 ESC + 模拟量采集 4通道AD 从站4 ESC + 编码器 SSI接口 以太网帧头 EtherCAT头 从站1数据段 从站2数据段 …从站N数据段 FCS 下行帧:主站 → 从站1 → 从站2 → … → 从站N 上行帧:从站N → … → 从站2 → 从站1 → 主站 每个从站处理延迟仅约 1µs(硬件处理,非软件转发) 读取输出数据 插入输入数据 读取输出数据 插入输入数据 读取输出数据 插入输入数据 读取输出数据 插入输入数据

数据帧结构:以太网帧内的“子报文”串联

EtherCAT直接使用标准以太网帧(EtherType = 0x88A4)作为载体。帧结构分为三层:以太网帧头、EtherCAT报文头、多个子报文(Datagram)。每个子报文对应一个逻辑寻址操作或一段过程数据。

以太网帧头(14字节):
  - 目的MAC地址(6字节)
  - 源MAC地址(6字节)
  - EtherType = 0x88A4(2字节)

EtherCAT报文头(2字节):
  - 长度(11位):后续数据总长度
  - 保留位(1位)
  - 类型(4位):1=与从站通信

子报文(Datagram,可变长):
  - 命令(1字节): NOP=0, APRD=1, APWR=2, APRW=3, FPRD=4, FPWR=5, FPRW=6, BRD=7, BWR=8, FRMW=9
  - 索引(1字节): 主站用于匹配请求与响应
  - 从站地址(4字节): 寻址方式相关
  - 偏移地址(2字节): 从站内部寄存器/内存偏移
  - 长度(2字节): 数据段长度(M位,最大128字节)
  - 中断标志(2字节): 事件通知
  - 数据段(0~128字节): 实际过程数据
  - 工作计数器 WKC(2字节): 从站成功处理后递增

其中工作计数器(WKC)是EtherCAT最关键的诊断机制。每个从站完成一次读或写操作后,会将WKC按规则加1。主站通过检查WKC的返回值,即可确认“预期的从站是否确实执行了操作”。例如,一个APWR写命令期望2个从站各写一次,则WKC应返回2;若返回0,说明没有任何从站匹配该地址。

寻址方式:四种机制配合使用

寻址方式 命令示例 地址含义 典型用途
站地址寻址(位置寻址) APRD / APWR 从站物理位置(自动递增),主站配置时分配 初始化阶段访问单个从站
节点地址寻址 FPRD / FPWR 从站节点地址(由主站写入EEPROM) 运行阶段访问指定从站
广播寻址 BRD / BWR 所有从站同时响应 同步操作、全局状态切换
逻辑寻址 LRD / LWR / LWRT 映射到FMMU(现场总线内存管理单元) 过程数据周期性交换

在IgH主站的实际运行中,周期过程数据使用逻辑寻址:主站将各从站的PDO映射到一段连续的逻辑地址空间,通过FMMU将逻辑地址转换为从站内部物理地址。这样,一个子报文即可读写多个从站的数据,极大提高带宽利用率。

通信周期:DC同步与抖动控制

EtherCAT的实时性不仅体现在单帧处理速度,更体现在分布式时钟(DC, Distributed Clock)的同步机制上。主站作为参考时钟,通过周期性发送ARMW(读改写)命令来测量并补偿每个从站时钟的偏移和漂移。

  1. 时钟同步过程:主站广播一个同步信号(SYNC0),所有从站在接收到该信号的同一时刻锁存输入、更新输出。
  2. 漂移补偿:主站每个周期读取从站时钟与参考时钟的差值,通过写入“时钟控制寄存器”动态调整从站本地时钟。
  3. SYNC0周期:通常与通信周期一致(如1ms、500µs、250µs),也可设置为通信周期的整数倍。
IgH主站中的周期配置:在IgH的实时接口中,cyclenano参数决定通信周期(单位ns)。例如设置为1000000即1ms周期。DC功能启用后,从站的中断和采样点将与主站时钟严格对齐,多轴运动控制中各轴的位置采样时间差可控制在±100ns以内。

案例场景:6轴机械臂的同步控制

假设使用IgH主站控制6个EtherCAT伺服驱动器,通信周期设为1ms。主站每个周期执行以下流程:

1. 构建过程数据帧(逻辑寻址,包含6个轴的目标位置/速度/力矩)
2. 发送帧,同时等待上一周期返回帧
3. 从站ESC硬件实时抽取各自输出数据,并插入实际位置/状态
4. 帧返回主站,IgH解析输入数据
5. 检查WKC是否等于6(每个轴均正确响应)
6. 将新参考位置写入共享内存,供实时控制任务使用
7. 更新DC同步信息,补偿时钟漂移

实际测试中,6轴同步抖动(各轴实际采样时刻与理论时刻的偏差)通常小于1µs,完全满足高速插补运动控制需求。

误区与复盘:常见理解偏差

误区1:认为EtherCAT是“主站轮询从站”的请求-响应模型。
实际上,EtherCAT是“集束帧广播+从站硬件直通处理”模型。主站发送一帧,所有从站同时(在帧经过时)处理,而非一问一答。这也是其性能远超PROFINET RT、Modbus TCP等传统方案的根本原因。
误区2:忽略WKC的校验意义。
在IgH调试中,若从站掉线或配置错误,WKC返回值会异常。例如配置了3个从站但实际只有2个在线,WKC返回2而非3,主站即可判定通信不完整。初学者常只关注数据是否正确,而忽略WKC的“操作计数”验证。
误区3:将DC同步与通信周期混为一谈。
通信周期是主站发送帧的间隔,而DC同步是各从站时钟与主站时钟的对齐精度。即使通信周期为1ms,若DC未启用或配置错误,各从站的输入采样时刻可能相差数十微秒,导致运动控制不同步。IgH中需同时配置cyclenano和DC相关参数(如sync_ref_clock、sync0_active)。

复盘一个实际案例:某设备使用IgH控制4个伺服轴,运行中偶发“位置不同步”报警。排查发现DC同步未正确启用,从站时钟漂移导致各轴采样时刻偏差达30µs。启用DC并配置SYNC0后,抖动降至200ns以内,问题彻底解决。这提醒我们:EtherCAT的高性能是“硬件直通+精确时钟同步”共同作用的结果,缺一不可。