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 通信的基本操作单元。主站可以在一个以太网帧里放入多个子报文,每个子报文独立指定命令、地址和数据长度。从站收到帧后,只处理与自己相关的子报文,处理完把该子报文的 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 是否与从站数量匹配。这些信息能快速定位是拓扑问题、从站掉线还是地址配置错误。
理解帧格式、EtherType、子报文、WKC 以及两种寻址方式,是后续配置主站、映射 PDO、分析通信故障的基础。实际工程中,主站协议栈会自动完成大部分组帧和解析工作,但工程师必须清楚每个字段的含义,才能在出现通信抖动、从站丢失或周期超时时快速判断问题出在哪一层。