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