2. EtherCAT协议基础

2.1 EtherCAT的核心工作原理:从站“飞读飞写”

EtherCAT(Ethernet Control Automation Technology)之所以在运动控制领域占据主导地位,其根本原因在于它颠覆了传统以太网的“接收-解析-转发”模式。在标准以太网中,每个节点收到帧后需完整拷贝数据、由CPU处理后再发出,延迟随节点数线性增加。而EtherCAT采用“处理并转发”(Processing on the Fly)机制:主站发送一帧报文,报文依次穿过每个从站;从站硬件(ESC,EtherCAT Slave Controller)在报文经过的瞬间,直接读取其寻址到的输出数据,并将本地的输入数据插入到报文的对应位置,整个过程仅产生纳秒级的位延迟。

这种机制使EtherCAT不再需要交换机,从站之间采用线形拓扑即可构成环形逻辑链路。主站发出的报文从第一个从站流入,最后一个从站将处理完的报文沿同一物理链路(或通过内部回环)送回主站。因此,无论从站数量多少,主站只需发送一帧即可完成对所有从站的读写操作,通信效率极高。

核心要点:EtherCAT的“飞读飞写”本质上是将“网络通信”转化为“共享内存映射”。每个从站就像一块分布式内存,主站通过一帧报文直接访问所有从站的映射区域,无需逐站寻址应答。
EtherCAT 主站 从站1 ESC 从站2 ESC 从站3 ESC 从站n ESC 下行报文(读+写) 上行返回报文(已插入各从站输入数据) 从站处理 位延迟约10ns

2.2 EtherCAT帧结构:以太网帧内的“子报文列车”

EtherCAT直接使用标准以太网帧(IEEE 802.3),但将以太网帧的EtherType设为0x88A4,并在数据区封装一个或多个EtherCAT子报文(Datagram)。主站发送的每一帧最多可容纳44个子报文(当使用标准1500字节MTU时),每个子报文独立寻址、独立执行读写操作。

子报文的结构如下表所示:

字段 长度(位) 说明
命令(Cmd) 8 定义操作类型:NOP、APRD、APWR、APRW、FPRD、FPWR等
索引(Idx) 8 用于帧/响应匹配,由主站分配
地址(Address) 32 从站寻址地址(位置寻址或节点寻址)
长度(Len) 11 数据区长度(字节),另有1位保留
R 3 保留位
数据(Data) 可变 实际读写的数据内容
WKC(工作计数器) 16 从站处理该子报文后递增,用于确认操作是否成功

WKC是EtherCAT调试中最关键的字段之一。每个从站根据命令类型对WKC进行特定增量:读操作加1,写操作加1,读写操作加2。主站通过检查WKC的返回值,可以精确判断哪些从站成功执行了操作。

// 子报文命令示例(主站发送APRW读写命令)
Cmd = 0x05        // APRW:在配置阶段使用自动增量寻址读写
Idx = 0x01        // 索引号
Address = 0x0000  // 自动增量地址(第一个从站为0)
Len = 4           // 读写4字节
Data = 0x11223344 // 待写入的数据
WKC = 0x0000      // 初始为0,从站处理后递增

2.3 寻址方式:位置寻址与节点寻址

EtherCAT的寻址分为两个阶段:配置阶段和运行阶段。配置阶段使用自动增量寻址(Position Addressing),运行阶段使用节点寻址(Node Addressing)。

  • 自动增量寻址(APRD/APWR/APRW):子报文中的地址字段初始为0,每经过一个从站,该从站将地址值加1后再传给下一个从站。因此,地址为0的从站即物理链路上的第一个从站。这种方式在启动时用于枚举从站、分配站地址。
  • 节点寻址(FPRD/FPWR/FPWRD):配置完成后,每个从站被分配一个唯一的站地址(Station Address,0~65535)。运行阶段使用该地址直接访问指定从站,不再依赖物理位置。

此外,EtherCAT还支持广播寻址(BRD)和逻辑寻址(LRD/LWR/LRW)。逻辑寻址用于过程数据通信(PDO映射),主站将多个从站的数据映射到一段连续的逻辑地址空间,通过FMMU(Fieldbus Memory Management Unit)实现地址转换,从而实现一帧读写多个从站的过程数据。

开发提示:在从站初始化阶段,主站通常先使用APWR命令将站地址写入从站的EEPROM或寄存器(0x0010),随后切换到节点寻址模式。若从站地址冲突,可通过读取AL Status寄存器(0x0130)诊断。

2.4 通信周期:DC同步与过程数据交换

EtherCAT的通信周期由主站决定,典型周期为100µs~1ms。在每一个周期内,主站完成以下操作:

  1. 发送过程数据帧(LRW命令),读写所有从站的PDO映射数据;
  2. 发送邮箱数据帧(如有需要),用于非周期参数通信(SDO over EtherCAT,CoE);
  3. 检查WKC,确认所有从站均已响应。

对于需要精确同步的多轴运动控制,EtherCAT引入了分布式时钟(DC,Distributed Clock)机制。主站选择一个参考从站(通常为第一个从站),通过传播延迟测量和本地时钟补偿,使所有从站共享同一系统时间。每个从站可在预设的同步中断时刻同时锁存输入、更新输出,同步精度可达亚微秒级。

典型通信周期时序(周期=500µs):
T0:主站发送过程数据帧(LRW),所有从站同时读取输出数据并锁存输入;
T0+Δ:从站应用层(如伺服驱动器)在同步中断中更新控制环;
T0+Δ+δ:主站接收返回帧,处理WKC和输入数据;
T0+500µs:开始下一周期。

2.5 案例:三从站伺服系统的启动与周期通信

假设一个EtherCAT网络包含三个伺服驱动器从站,主站为倍福CX5020控制器。启动流程如下:

1. 主站发送APWR命令,将站地址1写入第一个从站(地址0x0010寄存器);
2. 重复操作,分别将站地址2、3写入第二、第三个从站;
3. 主站发送FPRD命令读取每个从站的AL Status,确认状态为INIT;
4. 主站配置Sync Manager(SM2用于过程数据输出,SM3用于过程数据输入);
5. 主站配置FMMU,将三个从站的PDO映射到连续逻辑地址(如0x1000~0x101F);
6. 主站发送LRW命令,进入OP状态,开始周期通信;
7. 每个周期发送一帧LRW,同时读写三个从站的16字节过程数据;
8. 主站检查WKC,期望值为6(3个从站×读写各加1)。

若WKC返回值小于6,说明某个从站未正确响应。此时可通过读取各从站的AL Status Code(寄存器0x0134)定位错误原因,例如0x001E表示无效邮箱配置,0x0030表示无效SM配置。

2.6 常见误区与复盘

误区1:认为EtherCAT从站越多,周期越长。
实际上,由于“飞读飞写”机制,报文总长度仅与所有从站数据量之和相关,与从站数量无直接线性关系。只要总数据量不超过1500字节,一帧即可完成通信。
误区2:忽略WKC的检查。
在开发初期,主站程序往往只发送帧而不检查WKC,导致从站未执行操作却无法察觉。务必在每一帧发送后解析WKC,并与期望值比对。
误区3:DC同步时未进行传播延迟补偿。
若从站间线缆长度差异较大,不补偿传播延迟会导致同步偏差。必须使用DC的传播延迟测量机制(通过ARMW命令写入0x0928寄存器)进行校准。

复盘建议:在调试EtherCAT网络时,优先使用主站自带的抓包工具(如TwinCAT的EtherCAT Monitor)观察子报文地址、命令和WKC字段,这比单纯查看从站状态灯能更快定位问题。