2. EtherCAT报文结构逐字段解析

EtherCAT 的报文并不神秘,它本质上就是一层“标准以太网帧”里塞进了一段可被从站硬件实时解析的 EtherCAT 数据。理解报文结构,是后续抓包、看 WKC、判断寻址是否命中的基础。本节按字节顺序,从最外层以太网帧头一路拆到数据报尾部的 WKC,并结合命令类型与寻址方式说明它们如何共同决定“这一帧发给谁、读还是写、有没有成功”。

一、整体封装:以太网帧头 + EtherCAT 数据

EtherCAT 使用 EtherType = 0x88A4 标识。一个典型 EtherCAT 帧的以太网帧头占 14 字节:目的 MAC(6B)、源 MAC(6B)、类型(2B)。紧随其后的是 EtherCAT 数据区,可包含一个或多个 EtherCAT 数据报(Datagram)。每个数据报由 10 字节数据报头、若干字节数据区、2 字节 WKC 组成。因此,单数据报的最小结构为 10 + 0 + 2 = 12 字节,加上以太网帧头与可能的 FCS,就是抓包工具里看到的一整帧。

需要特别区分两个“头”:EtherCAT 头通常指 EtherCAT 数据区最前面的 2 字节(长度 + 类型/保留位),它描述整个 EtherCAT 数据区的长度和后续数据报的类型;而数据报头是每个数据报自己的 10 字节头部,描述该数据报的命令、索引、地址、长度、中断等。很多初学者把两者混为一谈,导致解析偏移量算错。

EtherCAT 帧结构逐字段解析(按字节顺序) 以太网帧头(14 B) 目的 MAC 6B 源 MAC 6B EtherType 0x88A4 ← 标准以太网封装,EtherCAT 数据紧随其后 EtherCAT 头(2 B) 长度 11 bit 类型 4 bit + 保留 1 bit ← 描述整个 EtherCAT 数据区长度与数据报类型 数据报头(10 B) 命令 1B 索引 1B 地址区 4B 长度 11bit 中断 2B ← 决定“读/写、发给谁、多长、是否触发中断” 地址区 4B 内部按寻址方式解释:位置寻址 / 逻辑寻址 / 广播 / 配置站地址 数据区(0~1486 B) 过程数据 / 邮箱数据 / 寄存器内容,长度由数据报头“长度”字段决定 WKC(2 B) 工作计数器:从站每成功处理一次 +1,主站据此判断寻址是否命中、读写是否成功

二、数据报头 10 字节逐字段

数据报头是解析的核心,10 字节依次为:

  • 命令(Cmd,1B):高 4 位为命令码,低 4 位为寻址方式。例如 0x0C 表示 LRD(逻辑读),0x0D 表示 LWR(逻辑写),0x0A 表示 APRD(自动增量读),0x0B 表示 APWR(自动增量写),0x00 表示 NOP(空操作)。
  • 索引(Idx,1B):数据报序号,主站用于匹配响应,通常从 0 递增。
  • 地址区(Address,4B):含义随寻址方式变化。位置寻址时,前 2 字节为从站地址(Auto Increment 或 Configured Station Address),后 2 字节为偏移量;逻辑寻址时,4 字节整体为 32 位逻辑地址。
  • 长度(Len,11 bit):数据区字节数,0~1486。
  • 保留位(3 bit):通常为 0。
  • 中断(IRQ,2B):用于 AL Event Request,指定从站触发中断的事件类型。

解析时最容易出错的是“命令字节低 4 位是寻址方式”这一点。例如抓到 0x0C,不能只记成“读”,而应拆成 Cmd=0x0(LRD 逻辑读)+ Addr=0xC(逻辑寻址)。同样,0x0A 是 Cmd=0x0(APRD)+ Addr=0xA(自动增量寻址)。把命令码与寻址方式分开看,才能正确解释地址区 4 字节的含义。

三、WKC:判断成功与否的关键

WKC(Working Counter)是 2 字节工作计数器。从站每成功处理一次数据报,就把 WKC 加 1。主站发送时 WKC 通常置 0,收到响应后读取 WKC 值,与预期值比较:

  • WKC = 0:没有任何从站处理,通常意味着寻址错误、从站未上电或拓扑断开。
  • WKC = 预期值:读写成功,寻址命中。
  • WKC < 预期值:部分从站未响应,可能存在掉站、线缆或配置问题。
  • WKC > 预期值:通常出现在广播或逻辑寻址中,多个从站同时响应,需结合拓扑判断是否正常。

例如,主站用 LRD 读取 3 个从站的输入过程数据,预期 WKC = 3。若实际收到 WKC = 2,说明有 1 个从站没有参与本次逻辑寻址,应检查该从站的 SM 配置、FMMU 映射或是否处于 OP 状态。

四、命令类型与寻址方式对照

命令码与寻址方式组合后,形成常用的读写命令。下表给出常见组合,便于抓包时快速识别:

命令字节 命令码 寻址方式 含义 典型用途
0x0AAPRD自动增量自动增量读扫描拓扑、读取站信息
0x0BAPWR自动增量自动增量写配置站地址、初始化
0x0CLRD逻辑逻辑读读取输入过程数据
0x0DLWR逻辑逻辑写写入输出过程数据
0x0ELRW逻辑逻辑读写同时读写过程数据
0x02BRD广播广播读读取所有从站寄存器
0x03BWR广播广播写广播配置
0x00NOP—空操作占位、保持帧长

五、寻址方式的实际含义

位置寻址(Auto Increment / Configured Station Address)按“站地址 + 偏移”定位从站内部寄存器。自动增量寻址在初始化阶段使用,从站按拓扑顺序依次加 1,主站无需预先知道站地址即可逐个访问。配置站地址寻址则在初始化后使用,每个从站被分配唯一站地址,主站直接按地址访问。

逻辑寻址(Logical)使用 32 位逻辑地址,配合 FMMU(Fieldbus Memory Management Unit)把逻辑地址映射到从站的物理存储区。过程数据通常采用逻辑寻址,主站只需按逻辑地址读写,无需关心数据实际落在哪个从站。广播寻址(Broadcast)则面向所有从站,常用于读取统一寄存器或发送全局命令。

抓包解析小技巧:在 Wireshark 中过滤 ecat 或 eth.type == 0x88a4,展开 EtherCAT 数据报,先看 Cmd 字节拆出的命令码与寻址方式,再看 Address 区按对应方式解释,最后核对 WKC 与预期值。若 WKC 异常,优先检查寻址方式是否与从站配置一致。
注意:WKC 是“成功处理次数”,不是“数据正确性校验”。WKC 正常只说明从站参与了处理,数据内容是否正确仍需结合过程数据映射和从站状态判断。此外,同一帧内多个数据报的 WKC 是分别累加的,解析时不要把它们混在一起。

掌握以上字段后,再看到一帧 EtherCAT 报文,就可以按“以太网帧头 → EtherCAT 头 → 数据报头 → 数据区 → WKC”的顺序逐层剥离,结合命令码与寻址方式判断这一帧的意图,并用 WKC 验证结果。这是后续主从站联调与报文诊断的基本功。