2、EtherCAT协议基础:数据链路层原理、从站状态机、过程数据对象(PDO)映射
好,咱们进入正题。这一章我打算把EtherCAT最核心的三个东西讲透:数据链路层怎么跑、从站状态机怎么跳、PDO映射到底在映射什么。这三个东西搞明白了,后面做协议互转你心里就有底了。
2.1 数据链路层原理:说白了就是“飞过站”
EtherCAT的数据链路层,跟普通以太网完全不一样。普通以太网是“发出去,等回复”,每个节点都要拆包、解包、再封包,延迟很大。EtherCAT呢?它用的是“飞过站”机制——帧从主站发出来,经过每个从站时,从站只读自己需要的数据,同时把自己的数据写进去,然后瞬间转发给下一个站。
我打个比方:就像一列火车经过每个车站,车站的人只拿自己的包裹,同时把要寄的包裹扔上车。火车不停,效率极高。我在项目中遇到过客户问:“为什么EtherCAT能跑100Mbps还这么稳?”其实就是这个“飞过站”的功劳。
核心要点:EtherCAT帧在物理层上是标准的以太网帧,但数据链路层处理方式完全不同。每个从站硬件(ESC,EtherCAT Slave Controller)在帧经过时,在硬件层面完成数据读写,延迟只有纳秒级。
具体来说,EtherCAT帧结构里有一个个的“数据段”,每个从站对应一个段。主站发帧时,所有从站的数据都在一个帧里。从站通过帧头中的“位置寻址”或“逻辑寻址”找到自己的数据段。嗯,这里要注意:位置寻址是物理位置,逻辑寻址是虚拟映射,实际项目中逻辑寻址用得更多。
2.2 从站状态机:别小看这五个状态
EtherCAT从站状态机有五个状态:Init、Pre-Operational、Safe-Operational、Operational,还有一个Bootstrap(很少用)。每个状态都有严格的转换条件。我刚开始做EtherCAT开发时,觉得状态机很简单,结果调试时从站死活进不了Op状态,查了半天才发现是Mailbox通信没配置好。
状态转换路径是这样的:
- Init → Pre-Op:配置基础通信参数,比如站地址、同步模式。此时只能通过Mailbox(邮箱)通信。
- Pre-Op → Safe-Op:配置PDO映射,同步管理器(Sync Manager)开始工作。此时可以接收过程数据,但不输出。
- Safe-Op → Op:正式运行,所有过程数据正常交换。从站开始输出控制信号。
避坑指南:我曾经遇到一个案例,从站从Pre-Op跳转到Safe-Op时一直失败。后来发现是PDO映射的长度配置错了,主站和从站的映射长度不一致。记住:映射长度必须严格匹配,多一个字节都不行。
状态转换是由主站通过EtherCAT命令(比如AL Control寄存器)触发的。从站收到命令后,会检查当前状态是否允许跳转。如果不允许,会返回错误码。我个人习惯在调试时先看AL Status寄存器,它直接告诉你当前状态和错误原因。
2.3 过程数据对象(PDO)映射:把数据“对号入座”
PDO映射,说白了就是告诉主站和从站:“你的数据放在帧的哪个位置”。每个从站都有一些对象(Object),比如速度、位置、温度等。PDO映射就是把这些对象“打包”成一个连续的数据块,放到EtherCAT帧里。
举个例子:一个伺服驱动器有“目标位置”(4字节)、“目标速度”(4字节)、“控制字”(2字节)。如果不做映射,主站不知道这些数据在帧里的顺序。做了映射后,主站就知道:帧里前4字节是位置,接着4字节是速度,最后2字节是控制字。
| 对象索引 | 对象名称 | 长度 | 映射位置 |
|---|---|---|---|
| 0x607A | 目标位置 | 4字节 | PDO起始偏移0 |
| 0x6081 | 目标速度 | 4字节 | PDO起始偏移4 |
| 0x6040 | 控制字 | 2字节 | PDO起始偏移8 |
PDO映射分为两种:RxPDO(主站→从站)和TxPDO(从站→主站)。RxPDO是主站发给从站的控制数据,TxPDO是从站反馈给主站的状态数据。你想想看,如果映射错了,主站发的控制字被从站当成位置来解析,那设备肯定乱套。
个人经验:我建议在配置PDO映射时,先用ESI文件(EtherCAT Slave Information)确认从站支持的对象。ESI文件里会明确列出每个PDO的映射条目。我曾经偷懒没看ESI,直接按经验配,结果从站不认,浪费了半天时间。
2.4 同步管理器:PDO的“交通警察”
PDO映射离不开同步管理器(Sync Manager)。每个同步管理器管理一段内存区域,负责协调主站和从站之间的数据交换。EtherCAT从站通常有4个同步管理器:
- SM0:Mailbox写通道(主站→从站)
- SM1:Mailbox读通道(从站→主站)
- SM2:过程数据输出(主站→从站,对应RxPDO)
- SM3:过程数据输入(从站→主站,对应TxPDO)
同步管理器还支持三种模式:缓冲模式、邮箱模式、DC模式(分布式时钟)。实际项目中,过程数据通常用缓冲模式,Mailbox用邮箱模式。DC模式用于高精度同步,后面章节会细讲。
我记得有一次调试,从站一直报“Sync Manager watchdog timeout”。查了半天,发现是SM2的配置长度比实际PDO长度小。同步管理器长度必须大于等于PDO总长度,否则数据写不进去。
2.5 实战中的PDO映射配置
在TwinCAT或CODESYS里配置PDO映射,其实就是在XML文件里写映射条目。下面是一个简单的RxPDO映射示例:
<RxPdo>
<Index>0x1600</Index>
<Name>RxPDO 1</Name>
<Entry>
<Index>0x607A</Index>
<SubIndex>0x00</SubIndex>
<BitLen>32</BitLen>
</Entry>
<Entry>
<Index>0x6040</Index>
<SubIndex>0x00</SubIndex>
<BitLen>16</BitLen>
</Entry>
</RxPdo>
这段代码的意思是:RxPDO 1包含两个对象——目标位置(0x607A,32位)和控制字(0x6040,16位)。主站发送数据时,前4字节是位置,后2字节是控制字。
关键提醒:PDO映射的顺序很重要。主站和从站的映射顺序必须一致。如果主站把位置放在前面,从站却认为速度在前面,那数据就全乱了。我建议在配置完成后,用EtherCAT诊断工具抓一帧数据,手动解析一下,确认映射正确。
好了,这一章的内容就这些。数据链路层是EtherCAT的“高速公路”,状态机是“交通规则”,PDO映射是“货物清单”。这三样搞懂了,后面做协议互转时,你就能清楚地知道:Profinet的数据怎么装进EtherCAT的帧里,反过来又怎么拆出来。