2. EtherCAT通信原理与数据帧结构

EtherCAT 的高实时性并不是靠“更快的以太网”单独实现的,而是靠一种特殊的帧处理机制:主站发出一个标准以太网帧,帧内携带多个子报文,从站设备在帧经过自己的时候“顺手”读写属于自己的数据区,然后让帧继续往下走。整个过程不需要每个从站都完整接收、解析、再转发整帧,因此一个帧可以在一次遍历中服务几十甚至上百个从站。

EtherCAT 帧格式与 EtherType

EtherCAT 帧在链路层上仍然是标准以太网帧。它的目的 MAC 可以是广播地址 FF:FF:FF:FF:FF:FF,也可以是某个从站的单播地址;源 MAC 是主站网卡地址。真正区分“这是 EtherCAT 而不是普通 IP 报文”的关键字段是 EtherType = 0x88A4。以太网帧头之后紧跟 EtherCAT 帧头,再往后是一个或多个 EtherCAT 子报文(Datagram),最后是以太网 FCS 校验。

EtherCAT 帧头占 2 字节,其中 11 位是数据长度,表示后续所有子报文的总字节数;1 位保留;4 位是类型,通常为 0x1,表示 EtherCAT 命令帧。每个子报文结构固定为 10 字节头 + 数据区 + 2 字节工作计数器 WKC。子报文头中的关键字段包括:命令(如 APRD、APWR、FPRD、FPWR、LRD、LWR、BRD、BWR)、索引、地址区、长度、循环标志和中断标志。

EtherCAT 帧结构:一个以太网帧承载多个子报文 以太网帧头 目的MAC + 源MAC EtherType 0x88A4 EtherCAT头 长度 + 类型 子报文 1 10B头 + 数据 + WKC 子报文 2 … n 10B头 + 数据 + WKC FCS 4字节 子报文(Datagram)内部结构 命令 Cmd 索引 Index 地址区 Address 长度 Len 数据区 Data WKC 2字节 工作计数器 WKC:从站“确认我处理过” • 每个从站在成功读写子报文数据区后,把该子报文的 WKC 加 1 • 主站收回帧后,用 WKC 期望值判断:所有目标从站是否都正确响应 • WKC 偏小 → 有从站掉线/未处理;WKC 偏大 → 地址或拓扑异常

子报文、工作计数器与寻址方式

子报文是 EtherCAT 通信的基本操作单元。主站可以在一个以太网帧里放入多个子报文,每个子报文独立指定命令、地址和数据长度。从站收到帧后,只处理与自己相关的子报文,处理完把该子报文的 WKC 加 1,然后继续传递。主站收到返回帧后,检查每个子报文的 WKC 是否等于预期值,就能判断这一轮通信是否正常。

EtherCAT 支持多种寻址方式,工程中最常用的是自动增量寻址和逻辑寻址。自动增量寻址用于启动阶段扫描拓扑、配置从站,地址字段中的从站地址会随着帧经过每个从站自动增加;逻辑寻址则用于过程数据交换,主站把多个从站的输入/输出映射到同一段逻辑地址空间,用 LRD/LWR 命令一次读写多个从站的数据,效率最高。

寻址方式典型命令使用阶段特点
自动增量寻址APRD / APWR初始化、拓扑扫描按位置顺序访问,地址自动递增
逻辑寻址LRD / LWR / LRW周期过程数据一次访问多个从站,效率高
广播寻址BRD / BWR全局配置、诊断所有从站都处理
固定地址寻址FPRD / FPWR配置、邮箱按配置的站地址访问

过程数据与邮箱数据的区分

EtherCAT 把通信数据分成两类:过程数据(Process Data)和邮箱数据(Mailbox Data)。过程数据是周期性交换的实时数据,比如伺服的目标位置、实际位置、状态字、控制字,通常用逻辑寻址的 LRD/LWR 命令,在每个通信周期内固定刷新。邮箱数据是非周期数据,用于参数配置、SDO 读写、固件升级等,通常用固定地址寻址,走 FoE、CoE、EoE 等协议。

两者在从站内部使用不同的缓冲区:过程数据缓冲区由 ESC 直接映射到逻辑地址空间,主站读写时不需要从站 CPU 参与;邮箱数据则需要从站 CPU 处理,因此实时性较低,但可以传输较大的数据块。工程上,过程数据决定控制周期,邮箱数据决定配置和诊断能力,二者不能混用。

判断依据:如果某个数据需要每个周期都刷新,并且直接影响伺服使能、位置或速度,它就应该放在过程数据区;如果只是偶尔读写参数、上传日志或修改配置,则走邮箱通道。

一个典型周期的数据流

假设主站控制 4 个伺服轴,通信周期为 1 ms。主站组一个 EtherCAT 帧,里面放一个 LRD 子报文读取 4 个轴的实际位置和状态字,再放一个 LWR 子报文写入 4 个轴的目标位置和控制字。帧从主站网口发出,依次经过轴 1、轴 2、轴 3、轴 4,每个轴在帧经过时把输入数据写入对应逻辑地址,同时从输出区取走自己的目标值。帧到达最后一个从站后原路返回,主站收到返回帧,检查 WKC 是否等于预期值,然后解析数据、执行控制算法,准备下一个周期。

如果 WKC 不等于预期值,主站通常不会立即停机,而是先记录错误计数,连续多个周期异常才触发报警。调试时可以用 Wireshark 抓取 EtherCAT 帧,观察 EtherType 是否为 0x88A4、子报文命令是否为 LRD/LWR、WKC 是否与从站数量匹配。这些信息能快速定位是拓扑问题、从站掉线还是地址配置错误。

注意:EtherCAT 帧中的 WKC 是判断通信健康度的核心指标。不要只看“帧有没有发出去”,而要看“每个子报文的 WKC 是否等于预期值”。WKC 异常往往比通信中断更早暴露问题。

理解帧格式、EtherType、子报文、WKC 以及两种寻址方式,是后续配置主站、映射 PDO、分析通信故障的基础。实际工程中,主站协议栈会自动完成大部分组帧和解析工作,但工程师必须清楚每个字段的含义,才能在出现通信抖动、从站丢失或周期超时时快速判断问题出在哪一层。