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系统才能跑得又快又稳。