EtherCAT基础:协议原理、数据帧结构、主从站通信机制
EtherCAT(Ethernet for Control Automation Technology)由德国倍福(Beckhoff)公司于2003年推出,是一种基于标准以太网物理层的高实时性工业现场总线。要理解其通信周期为何能缩短到微秒级,必须先掌握它的协议设计思想——“集总帧”(Summation Frame)与“飞读飞写”(Processing on the Fly)机制。这与传统以太网“发一帧、等一帧、回一帧”的请求-响应模式有本质区别。
2.1 核心原理:从“问-答”到“顺路捎带”
传统以太网通信中,主站向每个从站发送独立报文,从站解析后回复,主站再发送下一个报文。假设有10个从站,每个从站需要100字节数据,传统方式至少需要10次往返,且每次都要重新构建以太网帧头。EtherCAT则完全不同:主站只需发送一个以太网帧,该帧内按顺序排列所有从站的数据区段。帧经过每个从站时,从站硬件在报文“飞过”的瞬间读取属于自己的数据,并同时将需要上传的数据写入同一位置,然后立即把报文转发给下一个从站。整个过程仅产生纳秒级的硬件延迟,无需等待从站CPU处理。
关键认知:EtherCAT从站不是“接收完整帧后再处理”,而是在帧流经时“边读边写边转发”。这种机制使得通信周期几乎只取决于帧长度和物理链路延迟,而非从站数量。
2.2 数据帧结构:以太网帧内的“子报文列车”
EtherCAT直接使用标准IEEE 802.3以太网帧, EtherType固定为0x88A4。整个帧结构分为三层:以太网帧头、EtherCAT报文头和数据区。其中数据区由一个或多个子报文(Datagram)组成,每个子报文对应一个逻辑地址或一组从站。
子报文是EtherCAT通信的核心载体,其结构如下:
| 字段 | 长度 | 说明 |
|---|---|---|
| 命令 | 1字节 | 如NOP(0x00)、APRD(0x01)、APWR(0x02)、APRW(0x03)、BRD(0x04)等 |
| 索引 | 1字节 | 用于帧匹配和超时判断 |
| 地址区 | 4字节 | 从站地址(2字节) + 物理内存地址(2字节) |
| 长度 | 2字节 | 数据区长度(字节数) |
| R | 2位 | 保留位 |
| M | 1位 | 后续报文标志:1表示后面还有子报文 |
| 状态位 | 1位 | 中断请求标志 |
| IRQ | 2字节 | 中断请求寄存器 |
| 数据区 | 0~1486字节 | 实际读写的数据 |
| WKC | 2字节 | 工作计数器(Working Counter),从站每处理一次加1 |
工作计数器(WKC)是EtherCAT实现通信完整性校验的关键机制。主站发送报文时预设期望的WKC值(例如写操作期望1个从站响应则WKC=1,读操作期望3个从站响应则WKC=3)。每个从站处理完报文后自动将WKC加1,帧返回主站后,主站比较实际WKC与期望值。若不一致,说明有从站未正确响应,可立即判断通信异常。
2.3 主从站通信机制:寻址方式与状态机
EtherCAT支持两种寻址模式,分别用于不同阶段:
- 设备寻址(Device Addressing):使用从站编号(Position Address)或节点地址(Station Address)直接访问单个从站。常用于初始化阶段配置从站参数。
- 逻辑寻址(Logical Addressing):将多个从站的内存映射到一段连续的逻辑地址空间,主站通过逻辑地址读写数据,无需关心具体从站。这是周期运行阶段的主要方式,配合FMMU(现场总线内存管理单元)实现地址映射。
从站通信状态机(EtherCAT State Machine, ESM)定义了从站的运行状态转换路径:
Init → Pre-Operational → Safe-Operational → Operational
↑ ↓ ↓ ↓
└──────────┴──────────────────┴────────────────┘
(任何状态均可直接回到Init)
各状态含义如下:
- Init:仅支持邮箱通信,用于从站地址分配和参数初始化。
- Pre-Operational:邮箱通信正常,但过程数据(PDO)尚未激活。
- Safe-Operational:过程数据开始更新,但输出强制为安全状态(如伺服使能关闭)。
- Operational:正常周期运行,输入输出均有效。
实操建议:在调试阶段,务必确认所有从站均已进入Operational状态后再发送运动指令。可通过主站软件读取每个从站的AL状态寄存器(0x0130)来确认。
2.4 通信周期构成:从站数量如何影响周期
一个完整的EtherCAT通信周期由两部分组成:帧传输时间和帧间隙。帧传输时间取决于帧总长度和链路速率(通常为100Mbps),帧间隙则包含主站处理时间和最小帧间隔(IFG)。
帧总长度可估算为:
帧总长度 = 以太网帧头(14B) + EtherCAT头(2B) + 子报文头(12B) × N + 数据总长度 + FCS(4B) + 前导码(8B)
其中N为子报文数量。以100Mbps链路为例,每增加1字节数据,帧传输时间增加约0.08μs;每增加一个子报文(即使数据为空),增加约0.96μs。因此,减少子报文数量、合并数据区段是缩短周期的有效手段。
常见误区:初学者常认为从站数量越多周期必然越长。实际上,只要总数据量不变,将多个从站的数据合并到同一个子报文中(使用逻辑寻址+FMMU),帧长度几乎不变,周期影响极小。真正影响周期的是总数据字节数和物理链路长度(每100米双绞线约增加0.5μs传播延迟)。
2.5 案例:8轴伺服系统的周期估算
假设一个8轴运动控制系统,每个轴需要:输出4字节(位置指令)+ 输入8字节(实际位置、状态字等)。采用逻辑寻址方式,所有数据合并为一个子报文。
计算过程:
数据总长度 = 8 × (4 + 8) = 96 字节
子报文头 = 12 字节
帧总长度 = 14 + 2 + 12 + 96 + 4 + 8 = 136 字节
帧传输时间 = 136 × 8 / 100,000,000 = 10.88 μs
加上IFG和主站处理约2μs,实际周期约13μs
若改用每个轴单独一个子报文(8个子报文),则帧长度变为:
帧总长度 = 14 + 2 + 8 × (12 + 12) + 4 + 8 = 138 字节(数据区不变,但每个子报文头增加)
实际帧长度 = 14 + 2 + 8×12 + 96 + 4 + 8 = 220 字节
帧传输时间 = 220 × 8 / 100,000,000 = 17.6 μs
可见,仅改变子报文组织方式,周期就增加了约35%。这就是为什么EtherCAT主站配置工具通常默认将连续从站的数据合并为同一子报文。
2.6 复盘:EtherCAT周期优化的核心抓手
通过本章学习,可以总结出影响EtherCAT通信周期的关键因素及其优先级:
- 数据总字节数:这是最根本的影响因素,应精简过程数据,只映射必要的对象。
- 子报文数量:尽量合并逻辑地址连续的从站数据,减少子报文头开销。
- 从站处理延迟:选用支持EtherCAT从站控制器(ESC)硬件处理的从站,避免软件协议栈带来的微秒级延迟。
- 物理拓扑:采用星型或树型拓扑缩短级联深度,减少每跳约0.1μs的转发延迟。
- 主站性能:使用支持DMA和实时网卡驱动的主站,减少CPU中断开销。