2、EtherCAT基础:EtherCAT协议原理、主站从站通信模型、数据帧结构

EtherCAT(Ethernet for Control Automation Technology)由德国倍福(Beckhoff)公司于2003年提出,是一种基于以太网的实时工业现场总线协议。它并非简单地将标准以太网帧“包装”成工业协议,而是从根本上改变了以太网帧的解析与转发方式——数据帧在从站之间“飞驰而过”,每个从站仅以纳秒级延迟读取或插入属于自己的数据。理解EtherCAT的协议原理、主从通信模型与数据帧结构,是后续学习ESI文件(从站信息描述文件)的基础,因为ESI文件本质上就是对从站设备在EtherCAT网络中“行为方式”的完整描述。

EtherCAT 主站-从站通信模型与数据帧处理机制 EtherCAT 主站 (控制器/PLC/工控机) 网卡驱动 + 主站协议栈 从站 1 ESC (LAN9252) 数字量输入/输出 从站 2 ESC (ET1100) 模拟量采集/伺服 从站 3 ESC (AX58100) 脉冲输出/编码器 处理后的帧返回主站(上行) EtherCAT 数据帧结构(基于标准以太网帧) 目的MAC 6 Bytes 源MAC 6 Bytes EtherType 0x88A4 EtherCAT头 2 Bytes 数据报 1 (从站1读/写) 数据报 2 (从站2读/写) 数据报 3 (从站3读/写) FCS 4B 单个数据报内部结构: 命令 索引 从站地址 长度 R/W 数据区 WKC WKC: 工作计数器 R/W: 读/写控制

上图展示了EtherCAT最核心的通信机制:主站发送一个以太网帧,该帧依次“穿过”所有从站,每个从站通过其内部的ESC(EtherCAT Slave Controller)硬件实时处理属于自己的数据报,最后帧从最后一个从站返回主站。整个过程无需经过交换机或路由器,从站之间通过物理层芯片(如百兆PHY)级联,形成逻辑上的环形拓扑(物理上仍为线形或星形)。

2.1 EtherCAT协议原理:从“存储转发”到“飞读飞写”

传统以太网采用“存储-转发”模式:交换机收到完整数据帧后,解析目的MAC地址,再转发到对应端口。这种模式虽然灵活,但延迟高且不可确定,无法满足运动控制等硬实时场景。EtherCAT的突破性设计在于:数据帧在从站内部不再被完整缓存,而是由ESC硬件在帧经过时直接“抽取”或“插入”数据。这种机制被称为“Processing on the Fly”(飞读飞写)。

具体而言,每个从站的ESC芯片内部包含一个双端口RAM(DPRAM)和若干寄存器。当帧从上游端口进入ESC时,ESC会检查帧中每个数据报的“从站地址”字段是否与自身配置的地址匹配。如果匹配,ESC会在硬件层面将数据报中的“数据区”内容与DPRAM进行交换:读操作将DPRAM中的数据写入帧,写操作将帧中的数据存入DPRAM。整个过程仅产生约100ns的延迟,且延迟与从站数量无关,因为每个从站只处理与自己相关的数据报,其余数据报直接透传。

核心要点:EtherCAT的实时性并非依赖更快的CPU或更复杂的算法,而是通过硬件化处理将协议栈的“解析-转发”延迟压缩到物理极限。这也是为什么EtherCAT能够在一毫秒内刷新100个以上伺服轴的原因。

2.2 主站与从站通信模型:一主多从、主从协同

EtherCAT网络采用严格的主从(Master/Slave)架构。主站通常运行在标准PC、PLC或嵌入式控制器上,通过普通以太网网卡(或专用网卡)发送EtherCAT帧。从站则是由ESC芯片(如Beckhoff ET1100、Microchip LAN9252、TI AX58100等)加上微控制器(MCU)或FPGA构成。主站是网络中唯一允许主动发送帧的节点,从站只能被动响应。

通信模型可以拆解为三个层次:

  • 物理层:使用标准100BASE-TX以太网物理层,传输介质为双绞线或光纤。从站之间采用“菊花链”级联,每个从站有两个RJ45端口(IN/OUT),内部通过PHY芯片实现信号再生。
  • 数据链路层:ESC芯片负责处理EtherCAT帧的接收、解析、数据交换和转发。主站通过“寻址方式”定位从站——支持“位置寻址”(按物理连接顺序)和“站点寻址”(按配置的站点别名)。
  • 应用层:主站与从站MCU之间通过ESC的DPRAM接口进行数据交换。MCU通过SPI或并行总线读写DPRAM,从而获取过程数据(如输入状态)或写入输出数据(如伺服使能)。

一个典型的通信周期包含以下步骤:

  1. 主站构建一个以太网帧,其中包含多个数据报,每个数据报对应一个或一组从站。
  2. 帧从主站网卡发出,依次经过从站1、从站2……从站N。
  3. 每个从站处理属于自己的数据报,并更新帧内容。
  4. 帧从最后一个从站返回主站,主站解析帧中携带的从站状态数据。
  5. 主站根据返回数据更新控制逻辑,并准备下一周期的帧。
通信角色 硬件组成 主要职责 实时性要求
主站 标准网卡 + 主站协议栈(如TwinCAT、SOEM) 构建帧、管理从站状态机、处理应用逻辑 周期时间通常为0.1ms~10ms
从站(ESC) ESC芯片(ET1100/LAN9252等) 帧解析、数据交换、看门狗、中断通知 硬件处理,延迟<1μs
从站(MCU) STM32、ARM Cortex-M等 读取DPRAM、执行控制算法、驱动外部设备 固件响应时间通常<100μs

2.3 EtherCAT数据帧结构:从以太网帧到数据报

EtherCAT帧直接承载在标准以太网帧中,其EtherType字段固定为0x88A4。帧结构分为三个层级:以太网帧头、EtherCAT报文头、一个或多个EtherCAT数据报。

以太网帧头包含目的MAC地址(通常为广播地址FF:FF:FF:FF:FF:FF)、源MAC地址(主站网卡MAC)和EtherType。由于EtherCAT帧在物理上会经过所有从站,因此目的MAC地址通常设为广播地址,以确保所有从站都能接收到帧。

EtherCAT报文头长度为2字节,包含“长度”字段(11位,表示后续数据报的总字节数)和“类型”字段(1位,1表示与EtherCAT相关)。

EtherCAT数据报是帧的核心,每个数据报由以下字段组成:

  • 命令(CMD):1字节,定义操作类型,如NOP(空操作)、APRD(位置读)、APWR(位置写)、APRW(位置读写)、FPRD(站点读)等。
  • 索引(Index):1字节,用于匹配请求与响应,主站通过索引识别帧的归属。
  • 从站地址:4字节,包含位置地址或站点地址。位置地址是自动分配的(从0开始递增),站点地址由主站通过配置写入从站EEPROM。
  • 长度(Len):2字节,表示数据区长度(以字节为单位)。
  • R/W标志:2位,指示该数据报是读、写还是读写。
  • 数据区:长度可变,最大为1486字节,承载实际的过程数据或服务数据。
  • 工作计数器(WKC):2字节,从站每成功处理一次数据报,WKC值递增。主站通过检查WKC判断从站是否正确响应。

一个以太网帧可以包含多个数据报,每个数据报可以寻址不同的从站或同一从站的不同地址区域。这种设计使得主站可以在一个通信周期内同时读写多个从站,极大提高了总线利用率。

// 以太网帧结构示意(十六进制视图)
// 目的MAC | 源MAC | EtherType | EtherCAT头 | 数据报1 | 数据报2 | ... | FCS
FF FF FF FF FF FF | 00 11 22 33 44 55 | 88 A4 | 长度+类型 | CMD+Index+Addr+Len+R/W+Data+WKC | ... | CRC32

2.4 案例拆解:一个8轴伺服系统的通信周期分析

假设我们构建一个包含8个伺服驱动器的EtherCAT网络,主站为倍福TwinCAT,从站为汇川IS620N伺服驱动器(内置LAN9252 ESC)。目标是将位置环周期设定为1ms,速度环周期为0.1ms(由从站内部处理)。

初始现象与目标:系统上电后,主站需要完成从站扫描、状态机初始化(Init→Pre-Op→Safe-Op→Op),然后进入周期性同步运行。在Op状态下,主站每个周期发送一个帧,包含8个数据报(每个伺服一个),每个数据报写入目标位置、速度前馈,并读取实际位置、实际速度、报警代码。

关键参数与数据:

  • 每个数据报长度:写数据16字节(控制字+目标位置+目标速度+转矩限制),读数据12字节(状态字+实际位置+实际速度+电流)。
  • 单个数据报总长度:命令1B + 索引1B + 地址4B + 长度2B + R/W 2bit + 数据28B + WKC 2B ≈ 40字节。
  • 8个数据报总长度:320字节,加上以太网帧头(14B)和EtherCAT头(2B)及FCS(4B),总帧长约为340字节。

分析判断过程:在100Mbps以太网下,传输340字节所需时间约为340×8 / 100,000,000 = 27.2μs。加上每个从站ESC的处理延迟(约0.3μs×8=2.4μs)和物理层传播延迟,整个帧从发出到返回主站的总时间不超过50μs。这意味着在1ms周期内,主站有超过95%的时间可以用于应用层计算,实时性绰绰有余。

实际操作步骤:

  1. 使用TwinCAT的“扫描设备”功能识别8个从站,系统自动分配位置地址0~7。
  2. 通过CoE(CANopen over EtherCAT)协议将每个伺服驱动器的站点别名设置为1~8,并配置PDO映射(过程数据对象)。
  3. 在TwinCAT中创建8个轴对象,关联到对应的从站地址和数据报索引。
  4. 设置DC(分布式时钟)同步模式,使所有从站同步于主站时钟,同步误差小于1μs。
  5. 启动系统,观察WKC值——每个数据报的WKC应等于1(表示被一个从站处理),如果WKC为0,说明从站未响应;如果大于1,说明地址冲突。

结果对比与复盘:系统运行后,通过TwinCAT的“帧监控”功能可以看到,实际周期抖动小于0.5μs,8个伺服的位置同步误差在±1个编码器计数以内。一个常见的坑是:如果从站EEPROM中的站点别名未正确配置,主站可能无法通过站点寻址访问,导致通信超时。此时应使用位置寻址(自动分配)进行初始通信,再通过CoE写入站点别名。

风险提示:在配置数据报长度时,务必确保不超过以太网帧的最大长度(1518字节)。如果数据报过多或数据区过大,会导致帧分片,破坏EtherCAT的实时性。建议每个周期数据报总长度控制在1400字节以内。

2.5 常见误区与总结复盘

在学习EtherCAT基础时,工程师常陷入以下误区:

  • 误区一:认为EtherCAT需要专用网卡。实际上,标准以太网网卡即可运行EtherCAT主站,只是实时性可能受操作系统影响。工业场景推荐使用Intel I210/I350等支持时间戳的网卡。
  • 误区二:混淆“位置寻址”和“站点寻址”。位置寻址在每次上电时按物理顺序自动分配,适合初始扫描;站点寻址依赖EEPROM中的配置,适合运行时的稳定通信。两者在数据报中的地址字段格式不同。
  • 误区三:忽略WKC的校验。WKC是判断通信是否成功的唯一依据。主站必须检查每个数据报的WKC值,如果与预期不符,应触发错误处理(如停止输出、报警)。
  • 误区四:认为从站越多延迟越高。实际上,每个从站仅增加约0.3μs的处理延迟,主要延迟来自帧传输时间。因此,EtherCAT支持多达65535个从站,但实际受限于帧长度和周期时间。

总结复盘:EtherCAT的协议原理可以概括为“一个帧,一路飞,各取所需”。主站负责构建帧和解析结果,从站通过ESC硬件实现微秒级响应。理解数据帧结构是配置ESI文件的前提——ESI文件中的“过程数据”定义(PDO映射)直接对应数据报中的数据区布局。在下一节中,我们将深入探讨从站如何通过EEPROM存储ESI信息,以及主站如何利用这些信息自动配置通信参数。

学习建议:动手实践时,可以使用Wireshark抓取EtherCAT帧,观察数据报的CMD、地址和WKC字段。这比单纯阅读协议文档更能加深理解。推荐使用SOEM(开源EtherCAT主站)配合LAN9252从站评估板进行实验。