2. EtherCAT通信协议基础

大家好,我是你们的老朋友。今天咱们聊聊EtherCAT的通信协议基础。说实话,我刚接触EtherCAT那会儿,也被它的数据帧结构和寻址方式搞得有点晕。但别担心,我会用最接地气的方式,把这些概念讲清楚。

核心要点:EtherCAT之所以快,关键在于它的数据帧是“边传边处理”的。每个从站只读取属于自己的数据,同时把要发送的数据插入到帧中,然后传给下一个从站。这种“飞梭”机制,让通信效率极高。

2.1 EtherCAT数据帧结构

EtherCAT的数据帧,说白了就是以太网帧里塞了一个“EtherCAT头”。我习惯把它想象成一列火车:以太网帧是火车外壳,EtherCAT头是火车头,后面挂着一节节的数据车厢。

标准的EtherCAT数据帧结构如下:

+----------------+----------------+----------------+----------------+
|   以太网帧头    |  EtherCAT头    |  数据报1       |  数据报2       | ... |  FCS  |
| (14字节)       | (2字节)        |  (可变长度)    |  (可变长度)    |     | (4字节)|
+----------------+----------------+----------------+----------------+

嗯,这里要注意:EtherCAT头只有2个字节,但它决定了整个帧的类型和长度。我见过不少新手在这里栽跟头,以为EtherCAT头很长,其实不是。

EtherCAT头结构:

字段 长度 说明
长度 (Length) 11位 表示后面所有数据报的总长度
保留位 (Reserved) 1位 保留,必须为0
类型 (Type) 4位 0x01 = 与从站通信;0x04 = 网段内通信

每个数据报的结构更关键:

+----------------+----------------+----------------+----------------+
|  数据报头      |  数据区        |  工作计数器    |
| (10字节)       |  (0-1486字节) |  (2字节)       |
+----------------+----------------+----------------+----------------+

数据报头里包含了寻址信息、命令类型等。工作计数器(WKC)是个好东西——每个从站处理完数据后,会把WKC加1。主站通过检查WKC,就能知道有多少从站成功处理了数据。我在调试时经常用这个来排查哪个从站没响应。

2.2 寻址方式

EtherCAT的寻址方式,说白了就是主站怎么找到具体的从站。主要有两种:设备寻址和逻辑寻址。

2.2.1 设备寻址

设备寻址又分两种:

  • 节点地址寻址:每个从站有一个唯一的节点地址(1-65535)。主站直接通过这个地址找到从站。我习惯在配置阶段就固定好每个从站的地址,这样调试时一目了然。
  • 位置寻址:根据从站在总线上的物理位置来寻址。比如第一个从站位置是1,第二个是2,以此类推。这种方式在更换从站时特别方便——不用重新配置地址。

我的经验:在大型系统中,我建议用节点地址寻址。因为位置寻址一旦有从站掉线,后面的从站位置会全部错位,排查起来很头疼。我曾经在一个48轴的项目中吃过这个亏,后来全改成节点地址了。

2.2.2 逻辑寻址

逻辑寻址是EtherCAT的杀手锏。它把整个网段映射成一个连续的虚拟地址空间(4GB)。每个从站把自己的数据映射到这个空间中的某一段。主站直接读写这个虚拟地址,不用关心数据具体在哪个从站上。

举个例子:

逻辑地址空间: 0x00000000 - 0xFFFFFFFF (4GB)

从站1: 映射到 0x00001000 - 0x0000101F (32字节)
从站2: 映射到 0x00001020 - 0x0000103F (32字节)
从站3: 映射到 0x00001040 - 0x0000105F (32字节)

主站只需要发送一个逻辑读/写命令,所有从站会同时处理自己的那部分数据。这就是EtherCAT能实现高速同步的原因。

注意:逻辑寻址虽然高效,但配置起来比较麻烦。每个从站的映射地址不能重叠,否则数据会乱套。我建议用专业的配置工具(如TwinCAT、SSC)来生成映射表,别手写。

2.3 通信模式

EtherCAT有两种通信模式:周期性过程数据通信和非周期性邮箱数据通信。说白了,一个用来跑实时控制数据,一个用来传配置参数。

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

这是EtherCAT的主打模式。主站以固定的周期(比如1ms)发送和接收数据。每个周期内,主站发送一个帧,所有从站同时更新输出数据,同时采集输入数据。

PDO的特点:

  • 实时性高:周期可以做到微秒级
  • 确定性好:每个周期的抖动很小
  • 数据量小:通常只传输控制命令和状态反馈

我在做伺服驱动器控制时,PDO里通常包含:目标位置、目标速度、控制字(输出);实际位置、实际速度、状态字(输入)。

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

邮箱通信用于传输大块数据,比如配置参数、固件升级等。它不保证实时性,但能传输任意大小的数据。

SDO的特点:

  • 非实时:传输时间不确定
  • 数据量大:可以传输几KB甚至更大的数据
  • 可靠传输:有应答机制,确保数据正确

我一般这样用:系统启动时,通过SDO配置所有从站的参数(比如伺服驱动器的PID参数、限位值等)。配置完成后,切换到PDO模式进行实时控制。

避坑指南:我曾经在一个项目中,试图在PDO通信过程中通过SDO修改参数。结果导致通信中断,所有轴都停了。后来才明白,SDO和PDO不能同时使用同一个从站的通信通道。正确的做法是:先停止PDO,再发SDO,发完再恢复PDO。

2.4 知识体系总览

为了让大家更直观地理解,我画了一张图:

EtherCAT通信协议知识体系 EtherCAT数据帧结构 以太网帧头 + EtherCAT头 数据报1...N FCS 寻址方式 通信模式 节点地址寻址 位置寻址 逻辑寻址 PDO通信 SDO通信 图:EtherCAT通信协议知识体系结构

这张图把今天讲的内容串起来了。从上到下看:数据帧是基础,里面包含了寻址信息和通信数据。寻址方式决定了主站怎么找到从站,通信模式决定了数据怎么传。

好了,这一章的内容就到这里。记住:数据帧是骨架,寻址是地图,通信模式是运输方式。三者配合好了,你的EtherCAT系统才能跑得又快又稳。

专注资料整理