2. EtherCAT帧结构与报文解析
EtherCAT 的高实时性并非来自某种“特殊网线”,而是来自它对标准以太网帧的巧妙利用。理解帧结构,是读懂 Wireshark 抓包、定位通信故障、回答面试报文分析题的基础。本节从以太网帧类型入手,逐层拆解 EtherCAT 数据报头、命令类型、寻址方式与工作计数器(WKC),最后给出可直接套用的报文分析思路。
一、EtherCAT 帧的“外壳”:以太网帧类型
EtherCAT 直接使用 IEEE 802.3 以太网帧格式,不依赖 IP 与 UDP/TCP。标准以太网帧由目的 MAC、源 MAC、类型/长度、数据和 FCS 组成。EtherCAT 的关键标识在“类型”字段:0x88A4。抓包时只要在 Wireshark 过滤器中输入 eth.type == 0x88A4,就能筛出所有 EtherCAT 帧。
目的 MAC 有三种典型取值,对应不同的通信场景:
- 广播地址 FF:FF:FF:FF:FF:FF:主站首次扫描网络、尚未建立拓扑时使用。
- 特定从站 MAC:用于直接寻址某个从站,常见于配置阶段。
- 多播/逻辑寻址 MAC:过程数据交换阶段,主站用一个多播 MAC 让所有从站监听,从站按逻辑地址决定是否处理。
需要强调:EtherCAT 帧的以太网类型固定为 0x88A4,但帧内可以承载多个 EtherCAT 数据报(Datagram),每个数据报独立寻址、独立计数。这是 EtherCAT 高效的核心——一帧多用。
二、EtherCAT 数据报头:2 字节头 + 10 字节寻址
每个 EtherCAT 数据报由“数据报头”和“数据区”组成。数据报头共 12 字节,结构如下:
| 字段 | 长度 | 含义 |
|---|---|---|
| 命令 Cmd | 1 字节 | 寻址方式与读写类型的组合编码 |
| 索引 Index | 1 字节 | 帧内数据报序号,用于帧内定位 |
| 地址区 | 4 字节 | 由命令决定是逻辑地址还是物理地址 |
| 长度 Len | 2 字节 | 数据区长度(不含头部),低位 11 位有效 |
| 保留 Reserved | 2 字节 | 通常为 0 |
| 工作计数器 WKC | 2 字节 | 从站处理该数据报时递增,主站据此判断是否被处理 |
其中“地址区”的 4 字节含义随命令变化:逻辑寻址时是 32 位逻辑地址;物理寻址时是 16 位从站地址 + 16 位偏移地址。长度字段的低 11 位表示数据长度,高 5 位保留,因此单个数据报数据区最大 2047 字节。
三、命令类型:寻址方式与读写操作的组合
命令字节的高 4 位表示寻址方式,低 4 位表示读写操作。常见命令如下:
- APRD / APWR / APRW:Auto Increment 物理寻址,按拓扑顺序自动递增,用于启动扫描。
- FPRD / FPWR / FPRW:Configured Station Address 物理寻址,用从站配置地址直接访问。
- BRD / BWR / BRW:广播寻址,所有从站都处理。
- LRD / LWR / LRW:逻辑寻址,过程数据交换的主力命令,配合 FMMU 使用。
面试常问:“过程数据用什么命令?”答案是 LRW(逻辑读写),因为它能在一帧内同时完成读输入和写输出,效率最高。而启动阶段扫描拓扑常用 BRD 或 APRD。
四、WKC 工作计数器:判断从站是否“接单”
WKC 是 EtherCAT 报文分析中最关键的字段。规则很简单:从站每成功处理一次数据报,WKC 就加 1。主站发送时把 WKC 置为期望值,从站处理后递增,主站收到后比对实际值。
举例:主站用 LRW 命令读写 3 个从站的输入输出,期望 WKC = 3。若收到 WKC = 2,说明有 1 个从站没有处理该数据报,可能原因包括:从站掉线、FMMU 配置错误、逻辑地址不匹配、从站未进入 OP 状态。若 WKC = 0,通常意味着整个逻辑寻址链路都没生效。
注意:WKC 是“处理次数”而非“从站数量”的绝对映射。一个从站可能对同一数据报处理多次(如多个 FMMU 映射),因此期望值要按实际配置计算,不能简单等于从站数。
五、面试常见报文分析题:从抓包到结论
下面给出一道典型分析题,并展示完整推理过程。
题目:主站抓到一个 EtherCAT 帧,内含 2 个数据报。数据报 1:Cmd = LRW,Index = 0,逻辑地址 0x00010000,Len = 8,WKC 发送值 2,接收值 2。数据报 2:Cmd = LRD,Index = 1,逻辑地址 0x00020000,Len = 4,WKC 发送值 1,接收值 0。请分析通信状态。
分析过程:
- 数据报 1 的 WKC 接收值等于发送值 2,说明该逻辑地址对应的 2 个从站都成功处理了读写操作,过程数据通道正常。
- 数据报 2 的 WKC 接收值为 0,期望为 1,说明没有从站处理该数据报。可能原因:该逻辑地址未映射到任何 FMMU;对应从站未进入 OP;或该从站掉线。
- 结合两个数据报,可判断:部分过程数据正常,但存在一个未生效的逻辑通道。应检查数据报 2 对应从站的 FMMU 配置和 AL 状态。
这道题考察的是“WKC 期望值 vs 实际值”的比对逻辑,以及从现象反推配置问题的能力。面试中只要能把 WKC 含义说清,并给出排查方向,基本就能过关。
六、可直接套用的报文分析检查表
面对任何 EtherCAT 抓包,可按以下顺序快速定位:
| 检查项 | 观察点 | 判断依据 |
|---|---|---|
| 以太网类型 | 是否为 0x88A4 | 不是则不是 EtherCAT 帧 |
| 命令类型 | LRW/LRD/BRD 等 | 判断当前处于启动还是过程数据阶段 |
| 逻辑地址 | 是否与 FMMU 配置一致 | 不一致则从站不会处理 |
| 长度 | 是否与过程数据长度匹配 | 不匹配可能导致解析错位 |
| WKC 期望值 | 主站发送值 | 由从站数量和 FMMU 映射决定 |
| WKC 实际值 | 主站接收值 | 小于期望值说明有从站未处理 |
实际调试时,建议在 Wireshark 中同时打开“EtherCAT”解析树,逐层展开 Datagram,重点看 Cmd、Address、WKC 三个字段。若 WKC 异常,再回到主站配置工具检查 FMMU 和 SM 配置,形成“抓包—比对—回查配置”的闭环。
掌握帧结构与 WKC 逻辑后,后续学习分布时钟、状态机与过程数据映射时,就能把每个现象落到具体字段上,而不是停留在“通信不正常”的模糊判断。这正是 EtherCAT 工程师面试中区分“会用”和“懂原理”的关键分水岭。