ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从 7 帧数据看 EtherCAT 主站初始化:DC 同步机制的字节级剖析

从 7 帧数据看 EtherCAT 主站初始化:DC 同步机制的字节级剖析 最近在实现EtherCAT 主站 FPGA IP 核的初始化,结合 EtherCAT 规范发现这 7 帧恰好串起了主站进入 OPERATIONAL 前的 DCDistributed Clocks分布时钟同步完整流程——从总线复位、能力探测、延时测量到偏移读取、动态/静态补偿再到 ARMW 核心同步帧。目录1.EtherCAT 协议基础帧结构与 Datagram2.主站初始化全貌7 帧串起的 DC 同步流程3.逐帧深度剖析4.ARMWDC 同步的核心机制5.启示与小结6.WKC 工作计数器说明7.工程启示与总结1.EtherCAT 协议基础帧结构与 DatagramEtherCAT 是 Beckhoff 在 2003 年推出的实时以太网总线运行在数据链路层基于标准以太网帧EtherType 0x88A4。它跳过了 TCP/IP 协议栈直接由 ESCEtherCAT Slave Controller硬件在帧飞过时提取/插入数据单站延迟 1μs循环周期可达 100μs 以下。1.1 EtherCAT 帧的 4 层结构一个完整的 EtherCAT 帧从外到内本 IP 核处理的范围只包含 EtherCAT Header Datagram不含以太网 14 字节头和 4 字节 FCS。每帧 368 bit 46 字节前 16~22 字节是有效数据其余是 0 填充。*1.2 Datagram Header 的 10 字节布局*EtherCAT Datagram 的核心是 10 字节 Header全部使用小端字节序与传统以太网的大端序相反字节序警告EtherCAT Datagram 所有多字节字段都是小端序。例如寄存器地址 0x0910 在帧中存储为 0x10, 0x09。Verilog 中 {A,B} 拼接是高位在前解析时要注意翻转。1.3 EtherCAT Header 的位级结构例如 0x1410Type1Length 0x14 20 字节对应 CmdIdxADPADOLenIRQData(8)WKC 11222282 20。**2.主站初始化全貌7 帧串起的 DC 同步流程主站从上电到进入 OPERATIONAL 状态DC 同步初始化是关键一环。这 7 帧常量数据恰好对应完整的 DC 同步建立流程2.1 各阶段说明**2.2 为什么需要 DC 同步EtherCAT 主站通常用 PC 的硬件定时器如 8254触发周期任务从站 ESC 的 DC 单元也产生 SYNC0/SYNC1 脉冲。如果两个时钟各自漂移会导致主站发送的 PDO 数据和从站的 SYNC 脉冲错位主站发送 PDO 时从站任务正在执行 → 从站错过本次输出从站 SYNC 脉冲触发时主站还没发送新数据 → 从站读到旧数据DC 同步通过让所有从站时钟对齐到同一参考时钟再统一产生 SYNC 脉冲确保主站、通信、从站应用三层完全同步。同步精度可达 1μs 以下。******3.逐帧深度剖析以下按 EtherCAT Datagram 结构逐字段拆解每帧。原始 368’h 常量中有效数据为前 20~22 字节其余为 0 填充。Frame 0: Empty Frame (NOP / Reset Placeholder) — Cmd: 0x00 NOP分析46 字节全 0。无 EtherCAT Header、无 Datagram。作用总线空闲/复位占位帧。在 ESC TX FIFO 对齐、PHY 复位后链路稳定等待、或总线空闲期作为空白填充使用。虽然看起来什么都没做但在硬件初始化阶段发送空帧可以让 ESC 状态机复位、让 PHY 链路稳定是初始化流程的启动哨兵。帧 1APRD — 读从站0 ESC 能力信息Cmd: 0x01 APRD帧 2BRD — 广播读所有从站 DC 端口接收时间Cmd: 0x08 BRDBRD 的妙用BRD 命令下 ADP 不用于寻址而是每经过一个从站 1。主站通过分析返回帧的 ADP 值可以知道帧遍历了多少从站通过比对各从站写入的端口接收时间可以算出帧在每段线缆上的传输耗时。这是 EtherCAT 拓扑发现和延时测量的核心手段。帧 3APRD — 读从站0 System Time OffsetCmd: 0x01 APRD帧 4APWR — 写从站0 System Time DifferenceCmd: 0x02 APWR帧 5APWR — 写从站0 System Time DelayCmd: 0x02 APWR动态 vs 静态补偿帧4 写的 System Time Difference 是动态补偿——主站每个周期都要计算并下发新的 delta让从站时钟逐步收敛帧5 写的 System Time Delay 是静态补偿——只要拓扑不变传输延时就是固定值一次写入长期有效。两者配合才能让从站时钟既对齐又稳定。帧 6ARMW — DC 时钟同步核心帧Cmd: 0x0D ARMWARMW 工作机制核心同步原理当帧经过每个从站时从站硬件自动执行(1) 读取自身 0x0910 System Time 写入帧内 Data 区对应位置(2) 将帧头 ADP 字段 1。这样一帧遍历即可一次性收集所有从站的时钟值主站据此计算每个从站相对参考时钟的偏差再下发补偿帧4/帧5。这是 EtherCAT DC 同步达到微秒级精度的核心机制——单帧遍历、零节点缓存、硬件级 on-the-fly 处理。****##4.ARMWDC 同步的核心机制ARMWAuto-increment Read Multiple Write是 EtherCAT DC 同步的核心命令其独特之处在于单帧遍历即可完成所有从站时钟的收集。理解 ARMW就理解了 EtherCAT 为什么能达到微秒级同步精度。4.1工作原理4.2 为什么不用 APRD 或 BRD假设我们想读 N 个从站的 System Time有三种方案ARMW 的精妙之处在于每站读自己的寄存器 ADP 自增一帧遍历后 Data 区按顺序包含所有从站的时钟值且这些时钟值是在帧遍历过程中几乎同一时刻读到的帧传播速度接近光速遍历 N 个从站仅需几微秒。主站一次性获取全网时钟状态这是微秒级同步精度的基础。4.3 DC 同步的完整闭环结合 7 帧分析DC 同步的完整闭环是1. 帧6 (ARMW)收集所有从站当前 System Time2.主站计算各从站与参考时钟的偏差3.帧4 (APWR 0x0920)写入动态补偿System Time Difference4.帧5 (APWR 0x0928)写入静态补偿System Time Delay5.重复 1~4 直至各从站时钟偏差收敛通常需 ~15000 次迭代6.DC 同步建立完成主站可进入 OPERATIONAL**静态漂移补偿ESC 内部还有持续的静态漂移补偿机制——通过周期性比较本地时钟与参考时钟的差值自动调整本地时钟频率。这就是为什么 DC 同步建立后即使主站不再下发补偿从站时钟仍能保持同步。****5.启示与小结5.2 从 7 帧看 EtherCAT 主站初始化的工程哲学这 7 帧常量数据看似简单但浓缩了 EtherCAT 协议的几大设计哲学① 硬件级 on-the-fly 处理所有读改写操作都在 ESC 硬件中完成无需 CPU 干预。帧6 的 ARMW 命令让一帧遍历即可收集所有从站时钟主站只发一帧就拿到全网状态——这是 EtherCAT 微秒级同步的根基。② 动态补偿 静态补偿的双重机制帧4 写 System Time Difference动态补偿每周期迭代帧5 写 System Time Delay静态补偿一次写入长期有效。两者配合让从站时钟既对齐又稳定。这种动态收敛 静态修正的设计思路在控制系统设计中很有借鉴价值。③ 广播命令的巧妙运用帧2 用 BRD 广播命令每从站写入本地端口接收时间戳。主站通过一次广播既建立了拓扑、又测量了延时。这是 EtherCAT 把广播命令用到极致的体现——不仅用于状态查询还用于拓扑发现和延时测量。④ 寄存器地址的分层设计ESC 寄存器地址空间 0x0000~0x0FFF 分层清晰0x0000~0x000F 是 ESC 信息0x0900~0x092F 是系统时钟0x0980~0x0983 是 Sync 信号。这种分层让协议扩展性强但也容易混淆——本文修正的 5 处误标注就是这种混淆的体现。6. WKC 工作计数器说明所有 7 帧的 WKC 发送初值均为 0x0000。这是因为 ECAT_CONST_DATA 是 TX 方向的常量初始值。从站处理返回后WKC 会被从站递增主站 RX 方向解析时可通过 WKC 判断帧1APRD 从站0WKC 应为 1帧2BRDWKC 从站总数帧6ARMWWKC 支持 DC 的从站数。若 WKC 不符合预期说明对应从站未正确响应。7. 总结从这 7 帧常量数据我们看到了 EtherCAT 主站初始化的完整 DC 同步流程帧0总线复位启动哨兵帧1能力探测确认 DC 支持帧2延时测量建立拓扑帧3偏移读取掌握现状帧4/5动态静态补偿收敛时钟帧6ARMW 验证单帧收集全网时钟这套流程背后是 EtherCAT 协议几个核心设计硬件级 on-the-fly 处理、广播命令的巧妙运用、动态静态双重补偿、ARMW 单帧遍历机制。理解了这 7 帧的字节级含义就理解了 EtherCAT DC 同步的工程原理。给读者的建议如果你在做 EtherCAT 主站实现或抓包分析强烈建议对照 ETG.1000.4 规范和 Beckhoff ESC Datasheet Section II 逐帧验证。字节级剖析虽然繁琐但能帮你避开注释错误、寄存器混淆这些坑真正理解协议本质。
返回列表