2. EtherCAT协议原理:数据帧结构、寻址方式、通信模式

好,咱们进入正题。EtherCAT这个协议,说白了就是让以太网能用在运动控制上。为什么它能做到?核心就在它的数据帧结构、寻址方式和通信模式上。我刚开始接触的时候也觉得挺绕,但搞明白这几个点,后面分析负载、做优化就顺了。

2.1 数据帧结构:一个帧,多个设备

传统以太网是一个帧只发给一个设备。EtherCAT不一样,它一个帧经过所有从站,每个从站只处理属于自己的那部分数据。这就像一列火车,每节车厢装不同货物,到站卸货或装货。

EtherCAT数据帧基于标准以太网帧,但 EtherType 字段用的是 0x88A4。帧结构如下:

+----------------+----------------+----------------+----------------+
| 以太网帧头(14B) | EtherCAT头(2B) | 数据报1(n B)   | 数据报2(n B)   | ... | 数据报N(n B) | FCS(4B) |
+----------------+----------------+----------------+----------------+

以太网帧头:目标MAC、源MAC、EtherType(0x88A4)。

EtherCAT头:就2个字节,包含数据报长度和保留位。嗯,这里要注意,长度字段是数据报的总长度,不包括以太网帧头。

数据报:这才是核心。一个帧里可以塞多个数据报,每个数据报结构如下:

+--------+--------+--------+--------+--------+--------+--------+--------+
| 数据报头(10B)    | 数据区(0-1486B) | 工作计数器(WKC, 2B) |
+--------+--------+--------+--------+--------+--------+--------+--------+

数据报头包含:

  • 命令(1B):比如读、写、读写等。我常用的有 APRD(自动递增物理读)、FPRD(配置地址读)、LRW(逻辑读写)。
  • 索引(1B):用于匹配请求和响应。
  • 寻址信息(4B):后面细说。
  • 长度(2B):数据区长度。
  • M位(1b):表示后面还有数据报。
  • IRQ(2B):中断请求。

工作计数器(WKC):每个从站处理完数据报后,会递增这个值。主站通过检查WKC就知道有多少从站处理了数据。我在调试时经常用这个来排查哪个从站没响应。

关键点:一个以太网帧可以包含多个数据报,每个数据报可以寻址不同的从站或同一从站的不同地址。这就是EtherCAT高效的原因——减少帧头开销。

2.2 寻址方式:三种方式,各有用处

EtherCAT有三种寻址方式,我分别说说。

2.2.1 设备寻址(物理寻址)

又分两种:

  • 自动递增寻址:从站位置由它在总线上的物理位置决定。第一个从站地址为0,第二个为1,以此类推。主站发送时,每个从站收到帧后地址减1,地址为0的从站处理该数据报。这种方式在启动时自动分配地址,很方便。
  • 配置寻址:每个从站有一个固定的站地址(由主站配置)。主站直接指定目标从站的地址。这种方式在运行中更稳定,不会因为从站插拔而改变。

我个人习惯在调试阶段用自动递增,正式运行时用配置寻址。为什么?有一次我在产线上换了一个从站,自动递增地址变了,导致整个轴控逻辑乱掉。从那以后,我都是先配好站地址再上线。

2.2.2 逻辑寻址(段寻址)

这是EtherCAT最牛的地方。主站把整个网络映射成一个连续的虚拟地址空间(4GB)。每个从站把自己的寄存器、输入输出数据映射到这个空间里。主站通过 LRW 命令一次性读写多个从站的数据。

举个例子:

// 假设从站1的输入映射到地址0x1000-0x1003
// 从站2的输入映射到地址0x1004-0x1007
// 主站发送一个LRW命令,地址0x1000,长度8字节
// 就能同时读取两个从站的输入数据

这种方式的效率极高。我在做六轴机器人控制时,就用一个LRW数据报读取所有轴的位置和状态,一个数据报写入所有轴的目标位置。一个周期内搞定所有数据交换。

我的经验:逻辑寻址是EtherCAT性能的关键。合理规划地址映射,把频繁交换的数据放在连续地址段,能减少数据报数量,降低总线负载。

2.3 通信模式:周期性 vs 非周期性

EtherCAT支持两种通信模式,说白了就是:

  • 周期性通信:固定时间间隔,用于实时控制数据。
  • 非周期性通信:按需发送,用于参数配置、诊断等。

2.3.1 周期性通信(过程数据)

这是运动控制的主战场。主站以固定周期(比如1ms、0.5ms)发送过程数据对象(PDO)。每个周期内,主站发送一个或多个帧,包含所有从站的输入输出数据。

特点:

  • 时间确定性:周期抖动通常在微秒级。
  • 数据量固定:每个周期交换的数据量基本不变。
  • 使用逻辑寻址:效率最高。

我记得有一次调试一个高速贴片机,周期要求250μs。刚开始用默认配置,总线负载飙到80%以上,偶尔丢帧。后来优化了数据报数量,把多个小数据报合并成一个大数据报,负载降到40%以下,稳得很。

2.3.2 非周期性通信(邮箱数据)

用于配置参数、上传下载固件、读取诊断信息等。使用邮箱(Mailbox)协议,数据通过SDO(服务数据对象)传输。

特点:

  • 非实时:响应时间不确定。
  • 数据量大:可以传输大块数据。
  • 使用设备寻址:通常用配置寻址。

邮箱通信有几种协议:

  • CoE(CANopen over EtherCAT):最常用,用SDO读写对象字典。
  • SoE(Servo drive profile over EtherCAT):伺服驱动专用。
  • FoE(File over EtherCAT):文件传输,比如固件升级。

避坑指南:我曾经在调试时,一边跑周期性运动,一边用SDO读参数,结果导致周期抖动变大,电机出现异响。后来才明白,非周期性通信会占用总线带宽,影响周期性通信的实时性。建议在系统停止或低速运行时进行参数配置。

2.4 知识体系总览

下面这张图把本章的核心逻辑串起来了:

EtherCAT协议原理核心逻辑 EtherCAT数据帧 以太网帧头 + EtherCAT头 + 多个数据报 + FCS 数据报结构 数据报头(10B) + 数据区(0-1486B) + 工作计数器(2B) 寻址方式 设备寻址 ├ 自动递增(位置相关) └ 配置寻址(固定地址) 逻辑寻址(段寻址) 通信模式 周期性通信(过程数据) ├ 固定周期,实时性高 └ 使用逻辑寻址 非周期性通信(邮箱数据) 核心:一个帧经过所有从站,每个从站只处理自己的数据

这张图把数据帧、数据报、寻址方式和通信模式串起来了。你想想看,一个帧里塞多个数据报,每个数据报用不同寻址方式,既能做周期性实时控制,又能做非周期性参数配置。这就是EtherCAT的灵活之处。

好了,这一章就到这里。记住:数据帧结构是基础,寻址方式决定怎么找到设备,通信模式决定什么时候传数据。搞明白这三块,EtherCAT的原理你就掌握了七成。

专注资料整理