EtherCAT基础:协议原理、帧结构、寻址方式与通信模式
2.1 EtherCAT协议的核心原理
EtherCAT(Ethernet for Control Automation Technology)由德国倍福(Beckhoff)公司于2003年提出,是一种基于标准以太网物理层的高实时性工业现场总线协议。其最核心的设计思想是“集束帧处理”(Processing on the Fly):主站发送一个以太网帧,该帧依次穿过所有从站节点,每个从站在帧经过时实时抽取其“寻址到本站”的输出数据,并同时将本站的输入数据插入到帧中对应位置,随后将帧转发给下一个从站。整个过程仅产生纳秒级的微小时延,而非传统以太网中每个节点都需要完整接收、解析、再重新封装转发的“存储-转发”模式。
这种机制使得EtherCAT在性能上具有显著优势:处理1000个分布式I/O数据点仅需约30微秒,同步精度可达纳秒级。从物理拓扑上看,EtherCAT支持线型、树型、星型及菊花链结构,无需专用交换机,极大简化了布线。
2.2 EtherCAT帧结构与子报文格式
EtherCAT直接使用标准以太网帧,但以太网类型字段固定为0x88A4。一个完整的EtherCAT帧由以太网帧头、EtherCAT报文头、若干子报文(Datagram)和帧校验序列(FCS)组成。每个子报文对应一个逻辑寻址单元,可独立寻址到不同从站或从站内的不同存储区域。
| 字段 | 长度 | 说明 |
|---|---|---|
| 目的MAC地址 | 6字节 | 广播地址 FF:FF:FF:FF:FF:FF 或多播地址 |
| 源MAC地址 | 6字节 | 主站网卡MAC |
| 以太网类型 | 2字节 | 固定为 0x88A4 |
| EtherCAT报文头 | 2字节 | 长度(11位)+ 类型(1位)+ 保留(4位) |
| 子报文1..N | 可变 | 每个子报文包含命令、索引、地址、数据等 |
| FCS | 4字节 | CRC32校验 |
每个子报文的结构如下:
子报文格式(最小44字节,不含数据):
┌──────────────┬────────┬──────────────┬────────────┬──────────────┬──────────────┐
│ 命令(1B) │ 索引(1B)│ 从站地址(2B) │ 偏移地址(2B)│ 长度(2B) │ R/W(2B) │
├──────────────┴────────┴──────────────┴────────────┴──────────────┴──────────────┤
│ 数据区(长度由“长度”字段指定,最大1486字节) │
├──────────────┬──────────────────────────────────────────────────────────────────┤
│ 状态位(2B) │ WKC:工作计数器(由从站递增,用于确认操作是否成功) │
└──────────────┴──────────────────────────────────────────────────────────────────┘
其中命令字节决定了操作类型,常见命令包括:
NOP(0x00):空操作APRD(0x01):物理寻址读APWR(0x02):物理寻址写APRW(0x03):物理寻址读写FPRD(0x04):配置寻址读FPWR(0x05):配置寻址写FPRW(0x06):配置寻址读写BRD(0x07):广播读BWR(0x08):广播写LRD(0x09):逻辑寻址读LWR(0x0A):逻辑寻址写LRW(0x0C):逻辑寻址读写
2.3 寻址方式详解
EtherCAT支持三种寻址模式,分别用于不同阶段和场景:
2.3.1 配置寻址(Configured Address)
在系统初始化阶段,主站通过广播写命令为每个从站分配一个16位的站地址(从站别名)。配置寻址使用该地址进行通信,适用于从站启动配置、参数写入等场景。命令类型为FPRD/FPWR/FPRW。
2.3.2 物理寻址(Physical Address)
物理寻址利用从站在拓扑中的物理位置(自动递增的端口位置)进行寻址。主站发送帧时,帧经过的第一个从站地址为0,第二个为1,依此类推。从站收到帧后,将地址字段与自身位置比较,匹配则处理。该模式常用于初始化阶段读取从站类型、EEPROM内容等。命令类型为APRD/APWR/APRW。
2.3.3 逻辑寻址(Logical Address)
逻辑寻址是EtherCAT运行阶段最常用的方式。主站将多个从站的输入输出数据映射到一个连续的逻辑地址空间(最大4GB),通过FMMU(Fieldbus Memory Management Unit)将逻辑地址映射到从站物理存储区。一个子报文可以同时读写多个从站的数据,极大提高了带宽利用率。命令类型为LRD/LWR/LRW。
2.4 通信模式:周期性过程数据与非周期性邮箱数据
EtherCAT通信分为两大类:周期性过程数据通信(Process Data)和非周期性邮箱通信(Mailbox)。
2.4.1 周期性过程数据通信(PDO)
在正常运行阶段,主站以固定周期(如1ms、100μs甚至更短)发送过程数据帧。每个周期内,主站通过逻辑寻址的LRW命令,在一个子报文中同时完成所有从站输出数据的写入和输入数据的读取。这种通信模式具有以下特点:
- 确定性:通信周期固定,抖动极小(纳秒级)
- 高效性:一个帧即可完成整个网络的数据交换
- 同步性:配合分布式时钟(DC),可实现从站间的精确同步
2.4.2 非周期性邮箱通信(CoE/SoE/EoE)
邮箱通信用于传输非实时数据,如SDO参数配置、诊断信息、固件升级等。邮箱通信基于主站-从站或从站-从站的请求-响应模式,使用独立的邮箱数据区。常见的邮箱协议包括:
- CoE(CANopen over EtherCAT):使用对象字典,兼容CANopen应用层
- SoE(ServoDrive over EtherCAT):面向伺服驱动
- EoE(Ethernet over EtherCAT):封装标准以太网帧
- FoE(File over EtherCAT):用于固件升级
| 特性 | 周期性过程数据 | 非周期性邮箱数据 |
|---|---|---|
| 实时性 | 高(固定周期) | 低(按需触发) |
| 数据量 | 小(通常几字节到几百字节) | 大(最大1486字节/报文) |
| 典型用途 | I/O刷新、运动控制指令 | SDO参数配置、诊断、固件升级 |
| 寻址方式 | 逻辑寻址(FMMU映射) | 配置寻址或物理寻址 |
| 通信方向 | 主站→从站(输出)+ 从站→主站(输入) | 双向请求-响应 |
2.5 典型应用场景与案例分析
以一个典型的6轴机器人控制器为例,说明EtherCAT通信模式的实际应用:
- 上电初始化阶段:主站通过物理寻址(APRD)读取每个伺服驱动器的类型和固件版本,然后通过配置寻址(FPWR)写入站地址。
- 参数配置阶段:使用邮箱通信(CoE的SDO服务)设置各伺服驱动器的运行模式、加减速时间、电流环PID参数等。
- FMMU配置:主站为每个驱动器配置FMMU,将逻辑地址空间中的位置指令映射到驱动器的目标位置寄存器,将驱动器的实际位置映射到输入数据区。
- 运行阶段:主站以1ms周期发送LRW命令,在一个子报文中同时更新6个轴的位置指令,并读取6个轴的实际位置和状态字。整个周期耗时约50μs。
- 故障处理:当某个驱动器报警时,主站通过邮箱通信读取详细的故障码,进行诊断和复位。
2.6 协议栈开发中的关键要点与复盘
在从站协议栈开发中,理解上述原理后,还需关注以下实现细节:
2.6.1 ESC寄存器与数据链路
从站协议栈的核心是操作ESC(如LAN9252、AX58100等)的寄存器空间。ESC内部包含:
- AL控制/状态寄存器(0x0120/0x0130):控制从站状态机(Init→Pre-Op→Safe-Op→Op)
- PDI控制寄存器:配置ESC与微控制器(MCU)之间的接口模式(SPI/并行/数字I/O)
- FMMU单元:通常有3~8个FMMU通道
- SM(Sync Manager)同步管理器:管理邮箱和过程数据的内存映射及中断
2.6.2 状态机切换流程
从站状态切换(由主站通过AL控制寄存器发起):
Init → Pre-Op:主站配置SM0/SM1(邮箱通信),从站初始化邮箱
Pre-Op → Safe-Op:主站配置FMMU和SM2/SM3(过程数据),从站开始输出刷新
Safe-Op → Op:从站开始输入更新,进入完全运行状态
任何状态切换失败时,从站需在AL状态寄存器中报告错误码。
2.6.3 常见问题复盘
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 从站无法进入Op状态 | FMMU配置错误、SM配置不匹配 | 检查主站配置工具中的FMMU/SM日志 |
| WKC值不正确 | 从站地址错误、数据长度不匹配 | 使用EtherCAT分析仪抓帧,检查WKC |
| 过程数据偶尔丢失 | 看门狗超时设置过短、ESC中断处理不及时 | 调整看门狗时间,优化MCU中断响应 |
| 邮箱通信超时 | SM0/SM1未正确配置、邮箱缓冲区溢出 | 检查邮箱缓冲区大小和SM配置 |
综上所述,EtherCAT协议的精髓在于“集束帧处理”带来的高实时性和高效率。理解其帧结构、三种寻址方式以及周期性/非周期性通信模式的配合使用,是从站协议栈开发的理论基石。在实际项目中,开发者需要结合具体的ESC硬件和MCU平台,将协议原理转化为寄存器配置、中断处理和数据处理代码,最终实现稳定、高效的从站设备。