第2章 EtherCAT通信原理:数据帧结构、寻址方式、通信模式与从站状态机

大家好,欢迎来到第二章。这一章我们聊聊EtherCAT的通信原理。说实话,这部分内容有点枯燥,但它是整个协议栈的基石。我当年刚接触EtherCAT时,就是被这些概念绕晕过。今天我用大白话给你讲清楚。

2.1 EtherCAT数据帧结构

EtherCAT的数据帧,说白了就是以太网帧里塞了个“小火车”。标准的以太网帧长这样:

| 前导码 | 目标MAC | 源MAC | EtherType | 数据 | FCS |

EtherCAT把“数据”部分重新定义了。它的EtherType是0x88A4。嗯,这个值你要记住,抓包时靠它识别EtherCAT报文。

数据部分的结构是这样的:

| EtherCAT头 | 数据报1 | 数据报2 | ... | 数据报n |

每个数据报又包含:

| 数据报头 | 数据 | 工作计数器(WKC) |

数据报头里有几个关键字段:

  • 寻址方式:告诉从站怎么找到自己
  • 命令:读、写、读写等操作
  • 索引:用于匹配请求和响应
  • 长度:数据部分的字节数

我在项目中遇到过一个问题:数据报长度设置错了,导致从站一直收不到正确数据。排查了半天,最后发现是长度字段多算了2个字节。这种低级错误,嗯,犯过一次就记住了。

重要提示:EtherCAT数据报的最大长度是1498字节。别问我为什么不是1500,因为EtherCAT头占了2个字节。

2.2 EtherCAT寻址方式

EtherCAT的寻址方式有几种,我按使用频率给你排个序:

  1. 设备寻址:每个从站有个唯一的站地址。主站直接喊“3号从站,请回答”。
  2. 逻辑寻址:把从站的内存映射到主站的内存空间。主站直接读写某个内存地址,从站自动响应。
  3. 广播寻址:所有从站都能收到。常用于初始化阶段。
  4. 多播寻址:一组从站能收到。用得不多。

你想想看,设备寻址就像你叫一个人的名字,逻辑寻址就像你直接往他的口袋里塞东西。哪个更快?当然是逻辑寻址,因为它省去了“找名字”的过程。

我个人习惯在初始化阶段用设备寻址,在正常运行阶段用逻辑寻址。这样既灵活又高效。

小技巧:逻辑寻址时,每个从站会分配一段连续的地址空间。我建议你画个地址映射表,不然调试时容易搞混。

2.3 EtherCAT通信模式

EtherCAT有三种通信模式,我分别说说:

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

这是最常用的模式。主站周期性地发送数据,从站周期性地返回数据。就像心跳一样,一下一下的。

PDO又分两种:

  • 同步PDO:所有从站同时采样和输出。精度高,但要求所有从站同步。
  • 异步PDO:从站各自为政。精度低,但实现简单。

我记得有个项目要求100个轴同步运动,用的就是同步PDO。调试时发现有个从站总是慢半拍,最后发现是它的晶振精度不够。嗯,硬件选型很重要。

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

SDO用于配置和诊断。它像寄信一样,有来有回,速度慢但可靠。

SDO的通信流程:

  1. 主站发送请求
  2. 从站处理请求
  3. 从站返回响应

你可能会问:“为什么不用PDO做配置?”因为PDO是周期性的,而配置是一次性的。用SDO更合适。

2.3.3 分布式时钟(DC)

DC是EtherCAT的杀手锏。它能让所有从站的时间同步到纳秒级。

DC的原理:

  • 主站发送一个参考时钟
  • 每个从站测量自己的时钟与参考时钟的偏差
  • 从站自动调整自己的时钟

我曾经用DC做过一个数据采集系统,64个通道同步采样,时间偏差小于100纳秒。效果非常好。

警告:DC对硬件有要求。不是所有从站芯片都支持DC。选型时一定要确认。

2.4 EtherCAT从站状态机

EtherCAT从站有四个状态,它们之间可以互相转换:

状态 说明 可执行操作
Init 初始化状态 只能进行SDO通信
Pre-Operational 预运行状态 SDO通信 + 部分PDO
Safe-Operational 安全运行状态 SDO通信 + 输入PDO
Operational 运行状态 所有通信

状态转换的路径:

Init → Pre-Operational → Safe-Operational → Operational

也可以反向转换:

Operational → Safe-Operational → Pre-Operational → Init

每个状态转换都需要主站发送命令,从站确认。如果从站拒绝转换,它会返回一个错误码。

我在项目中遇到过一个问题:从站卡在Pre-Operational状态,死活进不了Safe-Operational。排查后发现是某个SDO配置参数写错了。嗯,这种问题很常见,建议你写个状态机调试工具。

核心要点:状态机是EtherCAT从站的“生命线”。主站通过控制状态机来管理从站的生命周期。从站必须正确实现状态转换逻辑。

2.5 本章小结

好了,这一章的内容就这些。我们讲了:

  • EtherCAT数据帧的结构,说白了就是以太网帧里塞了个“小火车”
  • 四种寻址方式,设备寻址和逻辑寻址最常用
  • 三种通信模式,PDO用于实时数据,SDO用于配置,DC用于同步
  • 从站状态机,四个状态之间的转换逻辑

下一章我们开始实战,教你如何搭建EtherCAT从站的开发环境。到时候我会分享一些我踩过的坑,保证让你少走弯路。

记住:理论是基础,实践出真知。别光看书,动手试试。