2. EtherCAT协议基础
核心原理:从“主站轮询”到“集束帧飞过”
EtherCAT(Ethernet Control Automation Technology)最核心的设计思想,是不再让每个从站独立接收一个以太网帧,而是由主站发送一个以太网帧,该帧“飞过”所有从站,每个从站在帧经过时,实时抽取或插入属于自己的子报文数据。这种“集束帧”方式,使得一个以太网帧即可完成对整条从站链路的读写操作,协议效率远高于传统以太网轮询方式。
从站硬件在数据链路层直接处理报文,无需TCP/IP协议栈参与,因此延迟极低(微秒级)。主站与从站之间通过标准以太网物理层(100BASE-TX)连接,但链路逻辑上构成一个环形或线形拓扑:主站发出的帧从第一个从站的上行口(Port 0)进入,从下行口(Port 1)传出,依次经过每个从站,最后从最后一个从站返回主站。
协议栈分层速览
- 物理层:标准以太网PHY,支持100BASE-TX或100BASE-FX。
- 数据链路层:EtherCAT帧处理核心,由从站ESC(EtherCAT Slave Controller)硬件完成。
- 应用层:CoE(CANopen over EtherCAT)、FoE(File over EtherCAT)、EoE(Ethernet over EtherCAT)等协议。
帧格式与寻址方式
EtherCAT帧直接承载在标准以太网帧中,其EtherType为0x88A4。帧结构分为以太网帧头、EtherCAT报文头、多个子报文(Datagram)和帧校验序列(FCS)。每个子报文对应一个逻辑寻址单元,可独立指定从站地址和操作命令。
| 字段 | 长度 | 说明 |
|---|---|---|
| 目的MAC地址 | 6字节 | 通常为广播地址 FF:FF:FF:FF:FF:FF |
| 源MAC地址 | 6字节 | 主站网卡MAC地址 |
| EtherType | 2字节 | 固定为 0x88A4 |
| EtherCAT报文头 | 2字节 | 长度(11位)+ 类型(1位)+ 保留(4位) |
| 子报文1 | ≥44字节 | 命令、索引、从站地址、数据区、WKC等 |
| 子报文2…N | ≥44字节 | 可包含多个子报文,总长不超过以太网MTU |
| FCS | 4字节 | CRC32校验 |
子报文中的从站地址(ADR)字段决定了寻址方式,EtherCAT支持三种主要寻址模式:
- 位置寻址(Position Addressing):从站地址字段直接写入从站在链路中的物理位置序号(0、1、2…)。主站必须知道从站的物理拓扑顺序,常用于初始化阶段或固定拓扑场景。
- 节点寻址(Node Addressing):每个从站被分配一个唯一的站地址(通过配置写入EEPROM),主站通过该地址直接访问指定从站。适用于运行阶段对特定从站进行参数读写。
- 逻辑寻址(Logical Addressing):将多个从站的数据映射到一段连续的逻辑地址空间(FMMU映射),主站通过逻辑地址读写,可同时访问多个从站的数据。这是周期过程数据通信(PDO)的主要方式。
实操提示:在开发从站时,ESC内部会维护一个站地址寄存器(0x0010)和AL控制寄存器(0x0120)。上电后从站默认处于位置寻址模式,主站通过位置寻址写入站地址后,从站切换到节点寻址模式。若从站未正确响应节点寻址,请检查EEPROM中的站地址配置是否与主站期望一致。
通信模式:周期过程数据与邮箱通信
EtherCAT从站通信分为两大类:过程数据通信(PDO)和邮箱通信(Mailbox)。PDO用于实时性要求高的周期数据交换(如伺服的位置、速度、电流),邮箱用于非实时的参数读写、固件升级、诊断等。
// 典型的周期通信时序(DC同步模式)
主站发送:逻辑寻址写命令(输出数据)→ 从站1、2、3同时锁存输出
主站发送:逻辑寻址读命令(输入数据)→ 从站1、2、3同时返回输入
// 每个周期通常包含2~3个帧,周期时间可低至100μs
在DC(Distributed Clocks)同步模式下,主站通过SYNC信号使所有从站同步执行控制任务,同步抖动可控制在纳秒级。从站ESC内部包含一个本地时钟,主站通过ARMW(Auto Read Write Multiple)命令周期性地读取并校准各从站时钟,实现全网络时间同步。
案例:三轴伺服同步控制的数据流
假设一个三轴运动控制系统,主站每1ms发送一次周期数据。帧结构如下:
- 第一个子报文:逻辑寻址写命令,向三个伺服从站分别写入目标位置(各4字节)和控制字(各2字节)。
- 第二个子报文:逻辑寻址读命令,读取三个伺服从站的实际位置(各4字节)和状态字(各2字节)。
- 第三个子报文:邮箱通信(可选),用于读取某个从站的报警信息。
三个从站在帧经过时,通过FMMU(Fieldbus Memory Management Unit)将自身数据映射到对应的逻辑地址段,实现“同时写入、同时读取”。整个过程无需主站逐台访问,极大提高了总线利用率。
误区与复盘:从站开发中的常见陷阱
误区1:忽略WKC(工作计数器)校验
每个子报文末尾的WKC字段用于确认从站是否成功处理了该报文。从站每成功处理一次读写操作,WKC会按规则递增。主站通过检查WKC判断通信是否正常。开发时若从站未正确递增WKC,主站会判定通信超时。常见原因是ESC中断配置错误或PDO映射长度不匹配。
误区2:位置寻址与节点寻址混淆
在初始化阶段,主站使用位置寻址(从站地址=0,1,2…)配置站地址。若此时从站仍处于节点寻址模式(例如EEPROM中已有旧地址),将无法响应位置寻址命令。解决方法是确保从站上电后先进入初始化状态(INIT),并正确响应位置寻址的BRD(Broadcast Read)命令。
误区3:FMMU映射配置错误导致数据错位
逻辑寻址依赖FMMU将物理内存映射到逻辑地址空间。若FMMU的起始逻辑地址、映射长度或方向(读/写)配置错误,会导致从站数据出现在错误的位置,主站读到的数据可能是其他从站的。务必使用EtherCAT配置工具(如TwinCAT的Slave Information)验证映射关系。
复盘清单:从站协议实现自检
- ESC上电后能否正确响应位置寻址的NOP(空操作)命令?
- 站地址写入后,从站是否切换到节点寻址模式并保持?
- PDO映射的FMMU配置是否与主站期望的逻辑地址一致?
- 周期数据通信中,WKC是否正确递增?
- DC同步模式下,SYNC中断是否按预期周期触发?
- 邮箱通信(CoE)能否正常处理SDO读写请求?
通过以上自检项,可以系统性地排查从站协议栈实现中的基础问题,为后续的驱动开发和功能扩展打下坚实基础。