2. EtherCAT协议帧与寻址机制

EtherCAT 并不重新发明一种物理层,而是把标准以太网帧当作“运载车”,在其载荷中嵌入 EtherCAT 报文。理解 EtherCAT 通信,第一步要看清它如何被封装进以太网帧,第二步要理解从站如何被“点名”——也就是寻址机制。本节围绕以太网帧类型、EtherType、逻辑寻址、自动增量寻址与广播寻址展开,并结合一个可复现的报文示例说明数据如何被读写。

一、EtherCAT 帧在以太网中的位置

标准以太网帧由目的 MAC、源 MAC、EtherType、载荷和 FCS 组成。EtherCAT 使用 EtherType 0x88A4 标识,接收方据此把载荷交给 EtherCAT 协议栈处理,而不是交给 IP 或 ARP。EtherCAT 载荷内部由一个或多个 EtherCAT 子报文(Datagram)组成,每个子报文包含命令、索引、地址区、长度、数据区和工作计数器 WKC。一个以太网帧可以携带多个子报文,它们按顺序被各从站处理,形成“帧在环上跑一圈、多个设备依次读写”的高效模式。

需要区分两种常见承载方式:直接帧模式(EtherType=0x88A4,EtherCAT 报文直接位于以太网载荷)和 UDP/IP 模式(EtherType=0x0800,EtherCAT 报文封装在 UDP 端口 0x88A4 中)。前者用于实时性要求高的过程数据交换,后者便于跨路由器和标准网络设备传输。开发从站时,ESC(EtherCAT Slave Controller)通常直接处理 0x88A4 帧,而 UDP 模式多用于诊断或非实时通道。

二、EtherCAT 子报文结构与寻址字段

每个 EtherCAT 子报文的核心字段包括:命令(如 APRD、APWR、FPRD、FPWR、BRD、BWR、LRD、LWR 等)、索引、地址区(4 字节)、长度、数据和工作计数器。命令决定了“读还是写、用哪种寻址”;地址区则根据寻址方式解释为不同的含义。EtherCAT 定义了三种基本寻址:自动增量寻址、逻辑寻址和广播寻址。它们并非互斥,而是服务于不同阶段和不同数据对象。

三、自动增量寻址:按拓扑顺序逐站定位

自动增量寻址(Auto Increment)使用子报文地址区中的 16 位“位置地址”和 16 位“偏移量”。位置地址表示从站沿逻辑环的序号:第一个从站为 0,第二个为 1,依此类推。每个从站收到帧后,若位置地址为 0,则处理该子报文;否则将位置地址减 1 并转发给下一个从站。这样,主站无需预先知道每个从站的 MAC 或 EEPROM 地址,就能按物理顺序访问任意从站。

自动增量寻址常用于启动阶段:主站用 APRD/APWR 读取每个从站的类型、状态、EEPROM 信息和配置寄存器。例如,主站发送 APRD,位置地址 0、偏移 0x0130,读取第一个从站的 AL Status;再发送位置地址 1,读取第二个从站。每经过一个从站,位置地址递减,最终只有目标从站响应。这种“逐站递减”的机制使拓扑发现和初始化配置变得简单可靠。

四、逻辑寻址:面向过程数据的统一地址空间

逻辑寻址(Logical Addressing)使用 32 位逻辑地址,把整个网络的过程数据映射为一个统一的逻辑地址空间。主站通过 FPRD/FPWR/LRD/LWR 等命令,按逻辑地址读写数据,而不关心数据实际位于哪个从站。逻辑地址与从站的映射关系由主站配置:每个从站通过 FMMU(Fieldbus Memory Management Unit)把逻辑地址区间映射到本地物理内存(如 ESC 的 DPRAM 或过程数据区)。

逻辑寻址是周期性过程数据交换的主力。主站把输入过程数据(从站→主站)和输出过程数据(主站→从站)分别映射到逻辑地址空间,一个 LRD 子报文可以一次性读取多个从站的输入数据,一个 LWR 子报文可以一次性写入多个从站的输出数据。由于多个从站可以共享同一逻辑地址区间,逻辑寻址天然支持“一帧多站”的高效通信。

五、广播寻址:一次发送,全体接收

广播寻址(Broadcast)使用地址区中的广播地址,所有从站都会读取或写入该子报文。BRD 用于读取所有从站的同一寄存器,BWR 用于向所有从站写入同一寄存器。广播寻址常用于批量配置和状态查询,例如同时读取所有从站的 AL Status,或同时设置某些全局参数。由于所有从站都参与处理,广播寻址的 WKC 通常等于从站数量(或按命令规则累加),主站可据此判断帧是否经过完整拓扑。

六、三种寻址方式的对比与选用

寻址方式地址字段含义典型命令典型用途
自动增量寻址16 位位置地址 + 16 位偏移APRD、APWR启动阶段逐站读取/配置
逻辑寻址32 位逻辑地址LRD、LWR、FPRD、FPWR周期性过程数据交换
广播寻址广播地址BRD、BWR批量状态查询与全局配置

实际工程中,三种寻址方式往往配合使用:上电后先用自动增量寻址扫描拓扑、读取 EEPROM 和配置 FMMU/SyncManager;随后切换到逻辑寻址进行周期性过程数据交换;在需要批量检查从站状态或写入全局参数时,使用广播寻址。理解它们的地址字段和 WKC 行为,是排查“帧发出去了但从站没反应”这类问题的关键。

七、一个可复现的报文示例

假设主站要读取第一个从站的 AL Status(寄存器 0x0130,长度 2 字节)。使用自动增量寻址,子报文命令为 APRD,位置地址 0,偏移 0x0130,长度 2。帧经过第一个从站时,位置地址为 0,该从站处理并返回数据,WKC 加 1;后续从站看到位置地址已递减为 0xFFFF(或按规则不再匹配),不再处理。主站收到帧后,检查 WKC 是否为 1,并读取数据区中的 AL Status 值。若 WKC 为 0,说明没有从站响应,应检查拓扑、链路或从站供电。

再假设主站要周期性写入 4 个从站的输出数据,每个从站 2 字节,共 8 字节。主站可配置逻辑地址 0x1000 0000 映射到第一个从站的输出区,0x1000 0002 映射到第二个,依此类推;然后发送一个 LWR 子报文,逻辑地址 0x1000 0000,长度 8。帧经过各从站时,FMMU 按逻辑地址匹配并写入本地输出区,WKC 按成功写入的从站数量累加。主站通过 WKC 判断本次输出是否覆盖了全部目标从站。

WKC(Working Counter)是 EtherCAT 诊断的核心指标:它记录有多少从站成功处理了该子报文。主站应把 WKC 与预期值比较,而不是只看帧是否发出。WKC 偏小通常意味着拓扑中断、从站未上电、FMMU 配置错误或地址映射不匹配。
EtherCAT 以太网帧封装与三种寻址方式 以太网帧结构 目的 MAC 源 MAC EtherType 0x88A4 EtherCAT 载荷(一个或多个子报文) 命令 + 索引 + 地址 + 长度 + 数据 + WKC FCS 三种寻址方式 自动增量寻址 地址 = 位置地址 + 偏移 命令:APRD / APWR 用途:启动扫描、逐站配置 从站0 从站1 … 位置地址递减 WKC:目标从站处理 +1 示例:APRD 位置0 偏移0x0130 读取第一个从站 AL Status 逻辑寻址 地址 = 32 位逻辑地址 命令:LRD / LWR / FPRD / FPWR 用途:周期性过程数据交换 逻辑地址空间 0x1000_0000… FMMU 映射到本地内存 WKC:成功映射的从站数累加 一帧可读写多个从站数据 广播寻址 地址 = 广播地址 命令:BRD / BWR 用途:批量状态查询、全局配置 从站0 从站1 从站2 所有从站均处理 WKC:按参与从站数累加 示例:BRD 读取所有 AL Status 用于拓扑完整性检查 启动阶段:自动增量寻址扫描拓扑 → 配置 FMMU/SyncManager → 运行阶段:逻辑寻址交换过程数据 → 广播寻址批量诊断

从帧结构到寻址方式,EtherCAT 的设计思路是“用标准以太网承载、用多种寻址覆盖不同阶段”。自动增量寻址解决“不知道从站在哪”的问题,逻辑寻址解决“过程数据如何高效映射”的问题,广播寻址解决“如何一次性触达所有从站”的问题。掌握这三者的地址字段、命令和 WKC 行为,就能在开发从站和集成通信时快速定位问题,并为后续的 FMMU、SyncManager 和分布式时钟配置打下基础。