拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

EtherCAT协议基础:从帧结构到伺服同步,一文梳理核心概念与调试避坑

EtherCAT协议基础:从帧结构到伺服同步,一文梳理核心概念与调试避坑

做运动控制的人,应该都遇到过这种场景:PLC和伺服之间的通信跟不上控制周期,轴一多就开始抖,脉冲方向接线麻烦,调试时间一大半花在查线上。EtherCAT出现之后,这些问题被重新定义了。我最早接触EtherCAT是在一台高速贴片机上,当时项目要求1ms同步周期下挂十几个伺服轴,传统总线方案怎么调都达不到稳定,换成EtherCAT之后,同步精度直接到了亚微秒级,整机调试时间也缩短了一大截。这篇作为《EtherCAT协议基础知识》的第一篇,我不打算逐条翻译协议规范,而是把EtherCAT最核心的架构思想、帧结构、过程数据、配置链路和入门避坑按自己的理解梳理一遍,适合刚从CANopen、Modbus这类传统总线转过来,或者想搞明白EtherCAT到底是怎么工作的朋友。

1. 先说清楚EtherCAT到底解决的是哪一类问题

1.1 传统总线为什么越来越不够用

很多从CANopen、Modbus RTU转过来的朋友,第一反应是EtherCAT就是“更快一点的总线”。这种理解不算错,但没踩到点子上。传统总线每到一个节点,基本都要把帧收完、解包、再发出,节点越多,累积延迟越明显。CANopen靠PDO广播虽然能省掉一部分等待时间,但节点之间的同步和调度还是依赖整个总线的时间规划,线缆长短、节点响应时间都会影响最终效果。

我做过多轴项目,用CANopen带8个轴,2ms循环基本到极限了。不是带宽不够,而是每一轮通信里要处理的事情太多:主站要等最慢的从站回应,从站的CPU要中断收包、解析PDO、刷新输出,然后才轮到下一个周期。轴数翻倍之后,整个系统就像堵车一样,越逼近极限越不稳定。到了EtherCAT这边,同样是8个轴,1ms周期跑得轻轻松松,后来加到30多个电批,依然1ms同步,没有任何喘不过气的感觉。

1.2 实时以太网的破局点

EtherCAT的破局点,是它不再把以太网帧当成“一份完整的数据”,而是把它当成一列沿途不断装卸货物的火车。帧从主站发出去,经过每一个从站,从站在帧还在传输的过程中就读取属于自己的数据,同时把自己要回传的数据写进帧里。这个过程叫“processing on the fly”,中文通常叫“边传输边处理”。

用快递类比会更好理解。普通总线的做法是:快递车到每个站点停一下,把全部包裹卸下来,站点慢慢翻找,再装上新的包裹,然后发车。EtherCAT的做法是:快递车不停车,车厢经过站点时,站点用机械手一边取走自己的包裹,一边放回新的包裹,车头没有任何减速。整列车最终回到主站,主站统一查看哪些包裹被取走了、哪些包裹被放上了。这就是EtherCAT延迟低、确定性强的根本原因。

1.3 开放协议背后的组织

EtherCAT最早由德国倍福(Beckhoff)在2003年正式推出,后来被纳入IEC 61158标准,成为工业以太网现场总线的一种。现在协议由EtherCAT Technology Group(ETG)管理,全球成员数量非常多,国内做伺服、IO模块、阀岛的厂商很多都加入了。

不少朋友问过“EtherCAT是不是要交授权费”。协议本身是开放的,ETG会员可以免费获得协议规范和从站标识,不需要按节点交费。但要注意,它仍然是受控的标准,从站设备需要申请厂商ID和设备ID,不能乱编号。实际项目中,你只要正常使用主站和符合规范的从站,基本不需要关心这些,但做产品开发的话,加入ETG这件事绕不开。

2. 主站与从站:这套架构是怎么转起来的

2.1 主站承担什么角色

EtherCAT网络里,主站通常只有一个。它负责生成周期报文、解析从站返回的数据、管理网络状态、下发配置。常见的实现方式有好几种:一是PC加实时网卡,比如倍福TwinCAT就是这么跑的;二是集成在PLC里,像很多国产中大型PLC已经内置EtherCAT主站;三是用独立的主站卡,卡上有专用实时处理器,适合对抖动要求极高的场景。

有一个基础认知需要纠正:EtherCAT主站并不强制要求专用硬件。标准以太网MAC理论上就能满足,但实际工程项目里,为了降低主站实时任务的抖动,通常会选择驱动性能稳定的网卡或专用主站卡。自己学习的话,普通PC+Linux网卡+开源主站已经可以跑得很顺。

2.2 从站控制器ESC和它的“边传边取”

从站侧的关键是EtherCAT Slave Controller,简称ESC。ESC是一颗专门处理EtherCAT帧的芯片,也可以是FPGA里的逻辑模块。它做的事情不是用单片机去逐字节判断,而是硬件管线的直通处理:帧从上游端口进入,ESC一边检查帧里的数据报是否与自己有关,一边将处理的字节交给下游端口,整个过程由硬件完成,延迟非常小。

这颗芯片不需要太强的算力,但它必须保证两件事:一是正确识别EtherCAT数据报,二是提供本地内存接口给应用处理器。实际伺服驱动里,ESC负责通信,DSP或MCU负责电流环和位置环,二者通过SPI、并行总线或本地总线交换数据。所以从站是否稳定,往往取决于ESC和应用处理器之间的交互效率。

2.3 常见硬件形态:从站芯片到集成方案

搞嵌入式开发的朋友最熟悉的,应该是“MCU+从站芯片”的方案。比较常见的从站芯片有LAN9252、AX58100,以及倍福早期的ET1100系列。LAN9252内部集成了两个以太网PHY,很多开发板直接用它做入门;AX58100也支持两端口,价格和供货更友好。

也有把ESC集成进伺服驱动主控芯片的方案,比如某些电机驱动专用芯片内部直接带EtherCAT从站控制器。这种方案的好处是省掉了外部ESC芯片,走线简单,成本低;缺点是灵活性差,如果你要开发自定义运动控制器,还是要选独立ESC。

实际接线层面,EtherCAT常用100BASE-TX,物理接口就是标准RJ45,四芯双绞线,但网线质量非常关键。屏蔽线、水晶头压接工艺、接头锁紧程度,都会影响长距离运行和同步稳定性。这一点后面我会再展开。

3. EtherCAT报文在网线上如何流动

3.1 从标准以太网帧里长出EtherCAT

先看帧的基本结构。EtherCAT帧本质上是一个标准以太网帧,只是以太网类型字段用的是0x88A4,而不是常见的IP协议。帧结构大致是这样:

目的MAC地址(6字节) + 源MAC地址(6字节) + EtherType 0x88A4(2字节) + EtherCAT头(2字节) + 数据报1 + 数据报2 + ... + 数据报N + 帧校验FCS(4字节)

EtherCAT头虽然只有2字节,但它决定了后面跟的是普通数据报还是帧内时间戳等信息。真正干活的是数据报。一个EtherCAT帧可以塞多个数据报,每个数据报有自己的命令、地址、长度和工作计数器。

普通以太网帧要求最小长度不够时要补填充字节,EtherCAT同样遵循这个规则,但它的设计目标是尽量在一个帧里装满有效数据,把填充浪费降到最低。这就是为什么EtherCAT能在大带宽利用率的条件下保持实时性。

3.2 数据报、寻址方式与FMMU

每一个EtherCAT数据报,头部大概长这样:命令字节、从站地址、数据区长度、索引、更多状态位,以及末尾的2字节工作计数器(WKC)。

命令类型有几十种,常用的包括读、写、读写、寄存器读、寄存器写等。从站处理完一个数据报,会根据命令类型增加或修改WKC。主站收到返回帧后,只要检查WKC和索引,就能判断哪些从站执行成功、哪些从站没响应。

EtherCAT有几种寻址方式。位置寻址是沿着帧传输方向按物理位置编号,第一个从站是0,第二个是1,常用于扫描和初始化;节点寻址是按每个从站配置的站地址来定位,适合配置阶段的单点访问;逻辑寻址则用于周期通信,它是EtherCAT效率最高的地方。

3.3 逻辑寻址如何让过程数据“打包”传输

逻辑寻址背后是FMMU,也就是Fieldbus Memory Management Unit,中文常叫现场总线内存管理单元。每个从站内部都有若干组FMMU,作用是把主站定义的逻辑地址空间映射到从站本地物理内存地址。

你可以把逻辑地址空间想象成一块大黑板,主站规定好了每一小格归谁。轴1的位置反馈对应逻辑地址偏移0,轴2的对应偏移4,轴3的对应偏移8。这样主站用一个数据报就能同时读写多个从站的数据,因为从站在“火车经过”时各自把自己的数据搬运到指定格子。

实际伺服配置过程中,FMMU一般不用手动设置,主站工具会根据PDO映射自动计算。但你理解这个机制之后,就能明白为什么EtherCAT带几十个轴时,报文数量并不会一个轴一个帧,而是把所有轴的过程数据压缩在一个逻辑地址段里。这也是它“快”的核心秘密之一。

4. 伺服控制的三个关键词:PDO、对象字典和CSP

4.1 CoE:把CANopen的经验搬进EtherCAT

EtherCAT的应用层协议不是只有一种。常见的是CoE,也就是CANopen over EtherCAT,还有用于伺服驱动的SoE、用于文件传输的FoE、用于普通TCP/IP透传的EoE等。对绝大部分搞运动控制的人而言,CoE是最需要掌握的。

CoE保留了CANopen里成熟的对象字典、PDO、SDO这套概念,所以从CANopen转过来的工程师会觉得很亲切。配置伺服参数时用SDO,周期交换数据时用PDO。协议变了,但思维模型没有变。

具体到CiA 402驱动行规,EtherCAT伺服照样使用6040h控制字、6041h状态字、6060h运行模式、607Ah目标位置、606Ch实际位置这些标准对象。不同品牌伺服虽然在厂家私有对象上有差异,但只要你不是做从站定制开发,看到的运动控制接口高度一致。

4.2 周期通信里的过程数据到底在传什么

周期通信时,主站和从站交换的是过程数据(PDO)。对于伺服轴来说,下行方向通常包含控制字、目标位置,或者目标速度、目标力矩,取决于运行模式;上行方向通常包含状态字、实际位置、实际速度过载报警等信息。

这些数据全部通过PDO映射进行排列。主站配置工具会问你“这个轴要传哪几个对象、顺序怎么排”,最终生成一份映射表。映射好的数据相当于一块紧凑的结构体,每个轴可能只有十几个字节。

强调一点:周期数据不适合传大参数、大文件。你要改伺服增益、读故障历史,应该走SDO邮箱通信。邮箱通信是非实时的,它利用周期帧的空闲带宽或单独时间片发送,不会干扰过程数据的实时性。

4.3 CSP模式如何控制伺服轴

CSP是Cyclic Synchronous Position的缩写,中文叫周期同步位置模式,在CiA 402里对应模式8。它是EtherCAT伺服项目里最常用的模式之一。

在CSP下,主站每个周期给从站一个目标位置,从站内部自己去完成位置环、速度环、电流环的闭环。主站不需要关心底层电流,也不需要每个周期反复下发梯形速度规划,它只负责把经过路径规划后的目标位置准时送达。从站收到位置指令后,按照自己的机械特性和增益做平滑跟踪。

这种模式的好处是,主站可以把多轴联动、电子凸轮、插补这些复杂逻辑全部集中在主站侧,从站只当“执行机构”。而且因为每个周期都有新的目标位置,伺服运动不会因为主站偶尔一个周期没发数据就突然失控。

4.4 24个660伺服轴的配置量级

最近不少人会搜“汇川H5U带24个660伺服轴”这类关键词,这其实是一个很有代表性的案例。H5U是汇川的中型PLC,内置EtherCAT主站,SV660N系列伺服驱动器作为从站,整条线挂24个轴,属于非常常见的包装、电子、锂电设备配置。

从带宽角度看,24个轴在1ms周期下压力并不大。每个轴就算PDO映射了8个对象,也就二三十字节,24个轴总共几百字节。真正考验人的是电子齿轮比、多轴同步相位、启停节奏和故障停机逻辑。换句话说,EtherCAT让接线和通信不再是瓶颈,控制算法和调试经验才是决定设备能不能跑好的关键。

5. EtherCAT的性能为何能压到微秒级

5.1 带宽利用率与最小帧开销

EtherCAT使用的物理层是100BASE-TX,速率100Mbit/s,换算成字节是12.5MB/s。一个满载1518字节的标准以太网帧,加上帧间隙,在网线上大约需要123微秒。也就是说,1ms周期里,理论上可以跑大约8个满载大帧。

传统方案里,很多时间浪费在“等待”上。EtherCAT则把多个数据报塞进一个帧,帧与帧之间不需要逐节点等待。而且它用的是标准网线,不需要Bluetooth或WiFi这类无线链路介入,所以传输抖动非常低。

5.2 做一个简单的轴数估算

我们来粗略算一下。一个CSP轴的过程数据,如果只包含控制字2字节、目标位置4字节、状态字2字节、实际位置4字节,一共12字节。加上PDO映射带来的少量对齐开销,按16字节估算。

一个满载EtherCAT帧大约能提供1300到1400字节的有效数据区,就算只跑有线的逻辑地址段,单帧也能放几十个轴。1ms周期能跑8帧左右,理论上轴数远超大多数设备的实际需求。所以那些“1ms带64轴”“1ms带128轴”的宣传,并不是靠夸张做到的,真正限制来自主站CPU生成帧的时间、从站硬件的处理速度以及整条线缆的电气质量。

5.3 分布式时钟DC与同步精度

EtherCAT真正让运动控制工程师着迷的,是分布式时钟,简称DC。主站和所有从站共享同一个高精度时间基准。网络启动时,主站会测量每段线缆的传播延迟,算出每个从站相对系统时间的偏移量,然后周期性用ARMW寄存器命令校准。

从站可以根据DC配置产生SYNC信号,也就是说,所有轴可以在同一时刻锁存输入信号、刷新输出命令。这个同步动作的误差通常小于1微秒,做电子凸轮、追剪、飞拍都能稳得住。如果没有DC,只靠主站周期发送命令,线缆长度差异、从站处理速度差异都会累积成同步偏差。

我在现场用示波器测过从站的SYNC输出脚,多台驱动器之间的同步边沿基本叠在一起,肉眼几乎看不出错位。这也是EtherCAT在高端设备上碾压传统脉冲方案的重要原因。

6. 从零开始配一个EtherCAT系统的完整链路

6.1 ESI文件:每个从站的“身份证”

EtherCAT每个从站设备都对应一份ESI文件,全称EtherCAT Slave Information,XML格式。里面写明了厂商ID、产品码、版本、对象字典、PDO默认映射、FMMU配置、同步模式等信息。

主站工具导入ESI文件之后,就能自动识别设备,不用你手工去输几百个索引。项目调试时第一件事就是核对ESI版本。很多朋友遇到“设备能识别但PDO映射不对”“从站状态进不了OP”,最后发现是伺服固件升级后ESI文件没有同步更新。

6.2 主站配置工具与网络扫描

常见的主站软件有倍福TwinCAT、CODESYS,以及国内各家PLC自带的编程软件。流程大同小异:新建工程,导入从站ESI文件,扫描在线设备或手动建立拓扑,分配站地址,配置DC,设置PDO映射,然后下载运行。

如果是PLC做主站,比如H5U,通常直接在编程软件里组态。扫描到设备后,软件会列出所有从站,你只需要把设备拖到对应位置,改一下站号,再勾选需要的PDO对象。这个环节新手最容易忽略的是“保存从站参数到EEPROM”,如果不保存,下次断电重上,从站可能恢复默认地址或映射,导致网络状态不对。

6.3 从站开发入门路径

想真正掌握EtherCAT,绕不开从站开发。经典组合是STM32加LAN9252或AX58100,先把ESC的EEPROM配置搞定,再用倍福官方从站协议栈代码生成工具生成工程。这个工具叫SSC,通过配置界面勾选你需要的功能、对象字典和PDO,自动生成C代码。

很多新手一上来就想自己写从站协议栈,我的建议是不要。协议栈里大量细节和状态机转换,靠业余时间写得又慢又容易出bug。官方工具生成代码已经是生产级测试过的,你要做的是理解它,然后把应用层逻辑和对象字典映射到自己MCU的外设上。

6.4 现场调试常见故障排查

EtherCAT系统出问题,很多并不在协议本身,而在配置和物理链路。常见故障有几个:站地址冲突、PDO映射不一致、从站状态进不了OP、DC同步偏移、报文错误计数持续增加。

我习惯的排查顺序是:先查网线和接头,再查ESI版本和站地址,然后查PDO映射和同步模式,最后用Wireshark抓包分析。很多“偶发掉站”最后都查出来是水晶头压接不良,或者是某一段网线过长、屏蔽层没接地。

7. 我踩过的坑和答疑

7.1 不要用普通交换机串进EtherCAT网络

这条必须放在最前面。普通以太网交换机是存储转发机制,帧进交换机要完整收下来再找端口发出去,延迟和抖动都不确定。EtherCAT设备需要的是持续流动的帧,不是被交换机“消化”过的帧。

如果现场实在需要扩展拓扑,可以用带EtherCAT分支能力的模块,或者选择有EtherCAT从站口的中继器。很多从站控制器本身支持两端口,环入环出,天然就是串联结构。千万不要在EtherCAT主干上随便接普通交换机,不然后果就是报错连环、同步崩溃。

7.2 一上来就啃协议规范反而不容易懂

我见过太多人下载几百页的EtherCAT协议规范,打印出来,准备从第一个字节开始啃。结果不到一个星期就放弃了。协议规范是给实现者看的,不是给使用者看的。

入门阶段,先跑一个最小的系统:一个主站软件,一个伺服驱动器或开发板,让它转起来,周期设1ms,看看状态字变化,然后把目标位置手动改一下,观察电机响应。等你对这个“边传边取”有了直觉,再回头翻协议里的寄存器定义、数据报命令,会轻松很多。

7.3 调试顺序和抓包建议

调试EtherCAT网络,一定要从单从站开始。一个从站跑通了,再加第二个、第三个。不要一上来挂满24个轴然后看到一个报错就懵了。单从站时可以把Wireshark挂在主站和第一个从站之间,抓完整的EtherCAT帧,看数据报命令、索引、WKC是否正常。Wireshark对EtherCAT有现成解析器,能直观看到每个数据报的地址和值。

看DC同步是否正确,最可靠的办法是用示波器测从站SYNC输出。一般从站芯片或驱动器的调试口会引出SYNC信号,如果多台从站的SYNC边沿对齐,说明分布式时钟工作正常;如果漂移,优先怀疑网线质量和主站DC配置。

7.4 关于热词的一些补充

最近后台老有人搜“EtherCAT基于STM32”“EtherCAT从站”“H5U带24个660伺服轴”这些关键词。我多说几句:STM32做从站,核心是ESC芯片,STM32只负责应用层;搜索“EtherCAT配置”,重点不是抄程序,而是理解ESI、PDO映射和DC这三大件;至于24轴案例,记住它只是量级参考,不是难度标杆。

我自己做项目时踩过几次坑,印象最深的是在一条设备上因为一根网线用了非屏蔽水晶头,导致DC同步偶尔漂移,最后排查了整整两天。后来我给自己定了个规矩:EtherCAT网线一律用屏蔽层完整压接的成品线,所有接头拧紧,能不用转接就不用。这个系列接下来会写帧结构细节和SSC从站开发,有兴趣的可以继续跟着看。

返回列表