EtherCAT从会到不会——重要概念(2)
本来还想着起什么名字,但是对比起内容,名字什么的一点都不重要。
最近我又想起要写点什么东西防止最后什么都不剩下。那就从EtherCAT开始吧!
ESI(EtherCAT Slave Information)文件
每个EtherCAT从站都有其自己的ESI文件(XML配置文件),该文件说明了从站所提供的功能、属性等数据。主站可以根据档案内部的数据对从站进行初始化设置。
所以EtherCAT主站必须获取从站ESI文件的信息,否则无法对从站进行控制。
通讯模式
周期性数据(Process Data)
由于EtherCAT一般采用COE协议对从站进行周期性数据的交换。所以如不特殊说明,一般讲EtherCAT通讯的周期数据,都是指PDO。主站通过与从站交互PDO数据从而实现对从站设备的实时控制。
非周期性数据(Mailbox)
同理,非周期数据一般就指代SDO。

分布式时钟(Distribute Clock)
为什么需要分布式时钟
EtherCAT网络为多个设备彼此串接而形成,所有通讯的数据需要一站一站依次通过,这会导致不同从站收到数据时间点也会不一致。为了实现各个从站(轴)动作的一致性,所以需要调整各个从站本地时钟(local time)的偏移以达到时间同步。
一般以主站连接到的第一个拥有DC功能的从站时钟作为参考时钟(reference clock)。
实现DC同步
要实现DC总共分为3步
第一步:传输延时(Propagation delay)测量
- 主站发送广播指令给全部从站,从站收到指令时会记录下此时的从站本地时钟(local time)。
- 主站读取每一个从站的本地时钟,根据拓扑关系计算出各个从站与参考时钟之间传输延迟时间,然后将传输延迟时间写入从站的寄存器(system time delay register)。
第二步:时钟偏移(offset)补偿
- 主站比较从站的本地时钟与参考时钟,就能算出各个从站的相对偏移,然后将偏移值算入从站寄存器(system time offset register),这样就算出了绝对系统时钟(absolute system time)
第三步:漂移(driff)补偿
- 静态漂移补偿:主站通过在传输时延和偏移补偿之后,单独向从站多次(15000次)发送单独的帧来进行校对。
- 动态漂移补偿:周期性读取参考时钟,与其他从站本地时钟比较进行漂移修正。


EtherCAT同步模式
- Free Run Mode(主站与从站之间不同步)
- SyncManager Mode(从站收到 Sync Event 后产生中断)
- DC Mode(周期性产生Sync0信号去中断)

DC模式运行举例
各个从站由于接线的顺序获取到数据的时间是不一致的,但是触发动作的 Sync0 中断信号是同时的。

状态机

如上是EtherCAT总线运行的状态机。
一个从站的运行必须依次经历这四种状态,即Init(初始化) -> Pre-Operational(预运行) -> Safe-Operational(安全运行) -> Opreational(运行)
当从站设备处于Opreational(运行)状态时,EtherCAT主站才可以对从站进行周期性数据的交互。
状态机动作描述
| 状态\切换 | 描述 |
|---|---|
| Init(初始化) | 1. AL无通讯 2. 主站初始化ESC寄存器 |
| Init to Pre-Op(IP) | 1. 主站配置DL地址寄存器 2. 主站配置 Mailbox 通道参数 3. 主站初始化 Distribute Clock 同步 4. 主站设置AL Control register请求跳转至Pre-Op状态 |
| Pre-Operational(预运行) | 1. AL Mailbox 通讯启动 |
| Pre-Op to Safe-Op(PS) | 1. 主站使用 Mailbox 初始化 Process Data Mapping 2. 主站配置 Process Data 通讯的 SyncManager 通道 3. 主站配置 FMMU 4. 主站设置AL Control register请求跳转至Safe-Op状态 |
| Safe-Operational(安全运行) | 1. AL Mailbox 通讯进行 2. Process Data只允许写入,不产生输出信号 |
| Safe-Op to Op(SO) | 1. 主站发送有效输出数据 2. 主站设置AL Control register请求跳转至Op状态 |
| Operational | 1. Process Data、Mailbox通讯全部有效 |
参考资料:
- ET1100datasheet
EtherCAT从会到不会——重要概念(2)
https://jacobblog.pages.dev/2026/03/08/EtherCAT-02重要概念/