ARTICLE DETAIL

资讯详情

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

EtherCAT协议解析:从以太网到实时工业总线的演进

EtherCAT协议解析:从以太网到实时工业总线的演进 做了多年运动控制和高精度伺服调试回头看EtherCAT这套协议最大的感受是它真的把“实时”给做成了工程能用的样子。很多人第一次接触EtherCAT是在接线端子排前面——看着主站网卡、从站伺服驱动器、IO模块串联成一条菊花链心里会有个疑问这不就是以太网吗为什么非得叫“实时工业总线”它跟办公室那套以太网到底差在哪这篇文章我想把EtherCAT协议的基础脉络捋一遍重点放在它从普通以太网演变而来的那些核心设计决策上。不管你是刚接手汇川H5U带多轴伺服的项目还是准备用STM32配合LAN9252这类从站芯片做从站开发理解这套帧结构、寻址方式和状态机的逻辑远比死记报文格式更值钱。看完这一篇你能搞明白EtherCAT为什么快、为什么准、为什么能一条网线挂几十个轴也大概知道调试时那些“进不了OP”“偶尔掉同步”的破事是从哪冒出来的。1. 传统以太网为什么扛不住工业实时控制1.1 冲突检测和TCP/IP栈带来的不确定性先聊一个基础问题普通以太网为什么不能直接拿来做运动控制总线差距不在带宽千兆以太网的速率对伺服控制来说绰绰有余。问题出在“确定性”。传统以太网用的是CSMA/CD机制虽然现在交换机普及后冲突很少了但整个协议栈从底层的MAC重传机制到上层的TCP/IP分包、重组、确认每一层都在引入不确定的等待时间。你可以把它理解为一条运货的马路货车本身跑得很快但红绿灯、排队、掉头路段都是随机的你没法保证这批货几点整准时到。而伺服控制要的是什么是“每个通信周期内主站发指令的时间点和从站收到指令的时间点之间的误差必须稳定在微秒甚至百纳秒级别”。在一个1ms的插补周期里如果你的报文延迟一下是几十微秒一下是两百微秒那电机的运动轨迹就会抖。这种抖动在标准以太网上几乎不可能完全消除因为交换机的存储转发、网卡驱动的中断延迟、操作系统协议栈的调度随便哪一环都有不确定性。1.2 现场总线的局限与实时工业总线的出现既然传统以太网不行那回到现场总线的老路上行不行早年CAN总线在汽车和部分工业设备里用得很多RS485转Modbus更是到今天还大量存在。但它们的共同问题是带宽低。CAN标准帧速率一般最高1Mbps一条总线上挂几十个轴每个周期要分发指令、回收反馈把报文填满都费劲更别说做高精度同步。于是在2003年前后德国倍福公司推出EtherCAT思路非常直接既然以太网的物理层和帧格式已经足够成熟廉价那就保留它只在数据链路层以上动刀把一个以太网帧变成工业控制的高速公路。它的目标不是让以太网“更公平地通信”而是让协议本身服务于“一个主站精确控制大量从站”这个特定模型。所以EtherCAT本质上不是新造了一套从零开始的总线而是重新设计了“以太网帧内部怎么装数据、从站节点怎么处理数据”。这就是标题里“从以太网到实时工业总线”最关键的转换点物理层是标准以太网数据交换方式则完全为实时控制重新打造。2. EtherCAT的设计思路集总帧与“飞读飞写”2.1 从“一问一答”到“一趟车跑完全程”理解EtherCAT最核心的一句话主站发出一个以太网帧这个帧会在一条由所有从站串成的链路上逐个经过每个从站每个从站在帧经过自己时读取属于自己的数据同时把自己要反馈的数据写进去最后帧走完整个链路回到主站。这跟传统以太网的“点对点”通信模型完全不同。传统模型下主站如果控制16个伺服需要发16个独立的报文每个报文经过交换机转发一次再收16个响应。EtherCAT则像开了一趟环线公交车所有乘客在同一辆车上车经过每个站时该站的人上下车其他站的人看着就行。一车跑完全程往返一次就是整个网络的所有通信量。这个设计有个直接好处通信时间不再随从站数量线性恶化。即便你有50个从站报文经过每个从站增加的延迟也只有几百纳秒由从站控制芯片硬件处理整个往返还是在一个几十微秒到一两百微秒的时间窗口内完成。“集总帧”这个词的意思就是——所有从站的输入输出数据全部打包在同一个以太网帧里。2.2 ESC从站芯片把协议处理从CPU手里抢下来要做到帧经过从站时“飞快处理”靠从站CPU用软件解析是不现实的。所以EtherCAT从站普遍带一个专用控制芯片比如常见的ET1100、ET1200还有LAN9252这类集成MACPHY的方案。这颗芯片叫ESCEtherCAT Slave Controller从站控制器它做的事情是在硬件层面直接对经过的帧做处理。举个例子帧从从站的RX引脚进来ESC分析帧里有没有发给自己的数据报如果有就在硬件电路里把数据提取/写入对应寄存器或过程数据存储区然后帧继续从TX引脚发给下一个从站。整个过程不需要从站CPU干预从站应用层CPU只需要在周期信号来了之后把控制数据从本地缓存搬到驱动器里或者把编码器反馈写回来。这种硬件化处理极其关键。串联的每站延迟实测通常在1微秒以内取决于具体芯片和设计而不是软件协议栈动辄几十微秒的耗时。本质上是把“通信调度”从软件事件驱动的不可控变成“顺着帧流动”的硬件流水线行为。2.3 三种寻址方式位置、节点、逻辑寻址既然一个帧里可能装多个数据报那每个数据报到底发给谁、从谁那读就需要一套寻址机制。EtherCAT提供了三种基础寻址方式理解它们就理解了从站之间怎么被区分位置寻址主站在扫描阶段给每个从站编一个物理位置号。比如链路第一站是0第二站是1以此类推。帧经过节点时递减这个位置计数器等于0的从站就响应这个数据报。这种寻址适合配置阶段和初始化阶段使用因为此时未必知道每个节点的真实身份。节点寻址每个从站的EEPROMSII里存有唯一的站地址。配置阶段主站通过写地址命令给每个从站分配一个站号之后就可以用站号直接寻址。实际运行时很多主站就是用这种方式访问特定从站的配置寄存器。逻辑寻址整套EtherCAT最出彩的设计。主站把整个网络中所有从站的过程数据映射到一段连续的“逻辑地址空间”里相当于把分布在不同物理位置上的数据存储区在逻辑上拼成一张连续的内存表。数据报里带一个逻辑起始地址和长度当报文经过每个从站时每个从站根据自己预先配置的映射关系在帧经过时把自己负责的那一小段地址上的数据读写掉。这正是“飞读飞写”这个说法的来源。打个比方一个班所有学生的考试成绩被写在同一条长卷子上监考老师拿着卷子走过每个学生座位每个学生只改自己那一段。从主站视角看它几乎就是在用DMA读写一块连续内存的方式跟几十个设备交互而整件事发生在一个以太网帧的传输过程中。3. EtherCAT报文结构逐字节拆解3.1 以太网帧头与EtherCAT头纸上谈兵聊完设计思路来看真实报文。EtherCAT直接使用标准以太网帧以太网帧头是14字节目标MAC地址6字节、源MAC地址6字节、EtherType 2字节。EtherType固定是0x88A4。也就是说网卡收到帧后看这个类型字段就知道这是EtherCAT报文而不是IP报文或ARP报文。EtherType之后EtherCAT头占2字节。它的结构非常紧凑前11位是帧内部所有数据报的总长度单位字节第12位是保留位后4位是类型字段。类型字段通常为0表示该帧用于与从站通信。简单算一下如果两个数据报各占10字节头8字节数据2字节那长度字段就是20。整帧的以太网数据部分长度就是这个头长度加上数据报总长。从这里能看出一个态度EtherCAT把能省的字段全省了。标准以太网帧最小长度是64字节EtherCAT报文为了装数据可以在这个前提下把数据报填充到足够数量。为什么强调这个因为很多第一次抓包的人会疑惑为什么EtherCAT报文都长得差不多甚至有的帧长完全一样数据部分却不相同。因为帧长由“头部长度数据报总长度”决定而总长度取决于周期内要交换的过程数据量。3.2 数据报命令、索引、地址、长度、CRC一个以太网帧里可以装载一个或多个数据报Datagram每个数据报是真正跟从站打交道的“单元”。数据报结构如下命令字节8位定义操作类型。比如APRD是“带位置寻址的读”APWR是“带位置寻址的写”FPRD/FPRW是节点寻址读写BRD是广播读BWR是广播写LRD/LWR是逻辑寻址读写。不同命令决定了这个数据报拿什么寻址、怎么处理从站响应。索引字节8位用于主站匹配请求和响应。相当于给每个数据报编号方便日志排查。从站地址字段4字节。这是整个数据报里最值得理解的部分。对于位置寻址最高位是寻址类型标识1表示位置寻址0表示节点寻址低16位存放地址对于逻辑寻址这4字节存放的是逻辑地址的高32位逻辑地址共32位由这个字段加后续偏移量组合。偏移量字段12位与从站地址配合使用。在位置寻址/节点寻址时它表示访问从站内部寄存器或存储区的字节偏移在逻辑寻址时它作为逻辑地址的低12位补充逻辑地址4字节地址字段左移12位偏移字段。长度字段11位表示数据区字节数。前面说的EtherCAT头的11位长度字段是所有数据报长度之和再加上填充这里的数据报长度字段则是单个数据报的数据区长度。保留位和标志位4位其中有一位是循环位C由主站用来标记无需从站响应的数据报用于高速周期输出场景。数据区实际读写的数据。工作计数器WKC2字节这是EtherCAT很有特色的字段。每个从站成功处理一个数据报后会把WKC加相应数值。主站通过比较WKC的期望值和实际值就能判断是不是所有从站都在这个周期里正常响应了。数据报尾部还有2字节CRC实际上以太网帧最后还有标准FCS但数据报自身就有CRC保护。整个以太网帧最终由标准IEEE 802.3 FCS结束从站芯片会校验整帧完整性。3.3 一个帧里如何塞下几十个轴的数据想象你控制16个伺服每个轴需要8字节输出目标位置4字节控制字2字节模式字2字节同时要读回8字节反馈实际位置4字节状态字2字节实际速度2字节。主站在组帧时可以构造多个不同类型的数据报比如用一个FPRD数据报连续读取前8个轴的反馈再用一个FPRD读取后8个轴接着用一个FPWR数据报写入所有16个轴的指令。这些数据报可以全部放在同一个以太网帧里顺序打包。帧经过从站链路时每个从站只处理跟自己相关的数据报。关键点在于EtherCAT不要求一个从站只能出现在一个数据报中。你可以先发一个广播写数据报把所有从站的输出刷新再连续发几个逻辑读数据报收集反馈。这种灵活性让过程数据映射PDO映射可以根据项目需求自由定制。实际项目里通过XML格式的设备描述文件ESI把从站支持的对象字典、PDO条目告诉主站主站周而复始地组帧、发帧、收帧就形成了控制周期。也是因为这个原因EtherCAT周期时间做到1ms甚至更短非常轻松哪怕是挂了几十个从站的情况下。4. 通信模式与从站状态机EtherCAT怎么跑起来4.1 运行模式CSP、CSV、CST分别解决什么问题跟伺服打交道时主站和驱动器之间具体交换什么数据由运行模式决定。EtherCAT继承并扩展了CiA 402CANopen驱动协议的几大类运行模式最常见的有CSPCyclic Synchronous Position周期同步位置模式每个周期主站把目标位置发给从站从站内部再做位置环闭环。这种模式适合常规点位运动、轨迹插补因为位置给定在每个周期都精确刷新驱动器内部的位置环/速度环/电流环按自己的周期去跟踪这个目标。CSVCyclic Synchronous Velocity周期同步速度模式主站给定目标速度适合张力控制、速度同步等场景。比如两个辊轮需要严格同转速这时位置环干脆放到上位机来做驱动器只收速度指令。CSTCyclic Synchronous Torque周期同步扭矩模式主站直接给扭矩指令电流环在驱动器内部完成。这种模式常用于需要力控的场景或者主站想在更底层直接控制整个环路的场景。这三种模式的共同点每个通信周期都同步刷新指令和反馈。跟传统“发一段运动指令伺服自己去跑完”的模式完全不同它需要主站和从站在时间节拍上严格对齐。这也是EtherCAT在运动控制项目里能够实现多轴插补的基础——每个轴在每个周期都收到了逻辑上“同时”产生的目标值。4.2 从站状态机INIT、PRE-OP、SAFE-OP、OP有了通信协议还不行从站必须像一台设备一样有完整的上电流程。EtherCAT规范设计了从站状态机状态包括INIT、PRE-OP、SAFE-OP、OP另外还有一个BOOT状态用于固件更新。状态切换由主站通过对从站的写命令来触发每一步都是有讲究的INIT初始化状态上电后从站默认处于此状态只有链路层通信是通的应用层还没建立。此时主站可以读取从站的SIIEEPROM信息得到设备类型、PDO默认映射、厂商信息等。只有拿到这些信息主站才知道这个从站是什么设备、支持哪些对象。PRE-OP预运行状态从INIT切到PRE-OP时邮箱通信机制EtherCAT Mailbox建立起来。邮箱用来传送非周期数据比如SDO参数读写、固件下载、配置文件下发。在这个状态从站还没开始刷新过程数据IO但主站可以通过邮箱读写对象字典把同步管理器SyncManager参数、PDO映射、周期时间等全部配置好。说直白点这是“配置阶段”。SAFE-OP安全运行状态这是EtherCAT特别强调“安全”的环节。从站此时开始周期性接收主站发来的过程数据输入数据如编码器反馈会真实刷新但输出数据比如送给驱动器的使能和指令仍然处于“零输出”的安全状态。也就是说设备不会乱动但反馈已经通了。OP运行状态状态机切到OP之后输出的过程数据才开始真正施加到设备上伺服才能接收使能和目标位置开关量输出才真正有效。所有EtherCAT从站要正常工作必须走到OP状态。实际项目里主站上电后会先扫描网络识别所有从站然后逐个把从站引导到OP。如果某个从站卡在PRE-OP或SAFE-OP不肯上OP基本就是邮箱配置错误、PDO映射不对、或者从站的应用层初始化没过。调试的第一步永远是把所有从站都能稳定拉到OP再去谈运动控制——这件事踩过坑的人应该深有体会。4.3 分布式时钟所有轴为什么能“同时”动挂16个伺服光是把数据送出去还不够还要保证16个轴在同一时刻执行这些指令。如果主站依次把目标位置发给1号轴、2号轴……等到16号轴收到时1号轴可能已经执行了十几微秒轨迹必然出错。为了解决这个问题EtherCAT引入了**分布式时钟Distributed ClockDC**机制。DC的思路是给网络中每一个从站都配备一个本地时钟然后通过特定的同步机制让所有从站的本地时钟与主站参考时钟对齐误差被压缩到亚微秒甚至几纳秒级别。每个周期主站在特定时刻发起SYNC同步事件所有从站根据自己校准后的本地时钟在同一时刻锁存输入、刷新输出并触发应用中断。可以这样理解16个人各自戴着一块校准过的表主站喊一声“干活”他们不是听到喊声同时动手因为声音传播有快慢而是按照各自手表的同一时刻同时动手。由于手表之间已经校准过了实际执行时刻的偏差就小到可以忽略。DC机制里有几个关键参数Sync0周期、Sync1周期、传输延迟补偿等。调试时如果发现轴之间配合不对、位置反馈有时间偏移排查方向通常就是DC没校准好或者主站周期抖动过大。5. 实操从标准以太网思维切换到EtherCAT调试5.1 硬件准备与网线选型网线真的不能随便接EtherCAT虽然物理层是标准以太网但接线上有自己的规矩。它有两种典型拓扑菊花链线性和树形结构利用从站的两个网口一进一出串联下去。最直观的应用就是伺服驱动器带两个RJ45口你从主站网口出来接1号伺服IN然后1号伺服的OUT接2号伺服的IN一路串到底。网线这事值得单独提醒。有人图省事拿普通办公室网线接EtherCAT链路结果现场调试反复出偶发通讯错误。EtherCAT推荐使用工业级屏蔽网线屏蔽层需要跟接线端子可靠接地线序按T568A或T568B压接都没问题但必须保证两端水晶头压接牢固。项目里我宁可少用一节网线转接器也绝不把普通细线芯水晶头用在抖动的现场设备上。另外EtherCAT要求双工模式一般主站网卡和从站芯片都支持自动协商但要是你发现链路起不来手动锁定100M全双工往往比自动协商更稳。5.2 主站软件与从站首次上电观察实际项目里主站可以是专用运动控制器、软PLC比如TwinCAT、CODESYS也可以是开源方案SOEM这类。如果你是做从站开发多半还要配一块EtherCAT主站软件跑在Windows电脑上来做调试如果你是做系统集成现场常用的就是PLC自带的主站功能。无论哪种首次上电观察的流程基本一致主站扫描网络。正常情况下能看到整条链路里每个从站的位置和物理信息主站会显示“找到N个从站”且每个从站的Vendor ID、Product ID都能正确读出。如果从站扫描不到或识别异常第一反应别查软件先查硬件接线。确认每一级电源都上电了网线连接正确网口指示灯正常。EtherCAT链路里只要有一站掉电或网线没接触好后面的从站在主站眼里就全“消失”了因为帧传不过去。扫描成功之后主站会加载从站的ESI描述文件XML格式。这个文件是从站设备“身份证”包含对象字典、PDO映射、默认参数。如果你发现主站报错“设备描述文件不存在”需要安装厂商提供的ESI文件如果文件版本和从站EEPROM里存的版本不一致主站通常会提示设备信息不匹配。配置过程数据映射。这一步决定了每个周期帧里交换什么、顺序如何。例如16个伺服的CSP模式需要把目标位置、控制字、模式字映射到输出区把实际位置、状态字、实际速度映射到输入区。映射错误时主站启动OP模式会失败或报错。完成这些主站发出状态切换命令把所有从站从INIT切到PRE-OP、SAFE-OP最后到OP。从站状态机上去了过程数据就开始周期性刷新伺服使能之后就能真正动起来了。5.3 用Wireshark抓包看EtherCAT报文调试协议最好用的工具是Wireshark它能直接识别EtherCAT协议并解析数据报。只要你电脑上装了一个能抓包的普通以太网卡把EtherCAT主站网卡镜像出来或者用个硬件分线器就能看到完整的报文。抓包时重点看几个信息EtherType是否为0x88A4、数据报中命令类型是否与预期的周期读写模式匹配、工作计数器WKC值是否符合预期。如果发现WKC一直等于0说明没有从站响应这个数据报如果某个轴的数据全是0大概率是这个从站不在处理该逻辑地址范围的数据。Wireshark里还能看到从站随机数、DC同步时间戳等字段。抓包配合主站日志一起看能帮你快速定位到底帧发出去了没有、从站处理了没有、返回数据对不对。对于从站开发者来说抓包几乎是必备的调试手段强烈建议上手第一天就把抓包环境搭好。6. 常见问题与排查技巧实录6.1 没法进入OP模式/从站卡在SAFE-OP这是最常被问的问题。从站已经是SAFE-OP但主站一切到OP从站马上掉回SAFE-OP甚至INIT。原因一般出在几个方向邮箱通信检查不通过。PRE-OP阶段没有正确完成邮箱配置或者某个邮箱参数最大长度、超时等跟从站要求不一致。过程数据长度与从站映射不匹配。主站配置的输出/输入长度和从站PDO映射算出来的长度不一致从站会拒绝进入OP。应用层初始化条件不满足。某些从站需要OP之前读取特定对象或者完成某项内部自检比如伺服驱动器的内部使能逻辑未就绪或安全功能没有配置好。从站应用软件初始化失败。比如从站芯片的EEPROM内容被写坏ESC无法正确加载PDO配置。排查思路就是抓日志从站状态机每跳一步都有对应的事件记录主站也会报详细错误码。方向上先排除硬件接线再看邮箱通信是否通然后核对过程数据长度基本能覆盖80%的问题。6.2 通信断断续续/偶发错误帧偶发通信故障最折磨人。表现是设备一起动主站偶尔报一两次“读写超时”或“帧丢失”过一会儿又自己恢复。这种问题十有八九出在物理层或电气干扰。排查顺序建议先看链路质量确认所有线缆都是合格的工业以太网线水晶头压接可靠线缆远离电机动力线和变频器输出线再看接地从站设备的屏蔽层是否统一接到同一个接地汇流排上是EtherCAT系统里特别重要的一点最后看网卡设置关闭主站网卡的节能模式和自动协商固定100M全双工能明显减少偶发丢帧。如果电气环境很恶劣必要时可以查一下从站芯片的端口诊断寄存器里面记录了链路错误计数。这个寄存器数值持续增长说明物理层有东西在捣乱。6.3 WKC异常与CRC错误数据同步风波主站日志里报了CRC校验错误或WKC期望值不符意味着报文在这个周期内没有完好地走完全程。CRC错误通常指向物理层干扰或某个从站端口的报文重传WKC不对则更像逻辑问题比如逻辑读数据报在到达某个从站之前数据就没了或者是过程数据映射中地址分配重叠了。DC同步问题也很隐蔽从站都正常运动也看不出大毛病但多轴配合时位置累加漂移。一个最容易忽视的原因是从站线缆长度不等导致信号传输延迟不同DC补偿没有完全把差异消掉。EtherCAT支持自动测量传输延时前提是主站和从站都开启了相关DC功能。遇到同步问题先把主站周期设置保守一点比如1ms确认基础没问题后再往下压周期能少踩不少坑。个人体会刚开始从标准以太网思维跳到EtherCAT时最别扭的是你不能再像配置普通网络那样去“广播、路由、组网”而是要接受一个完全中心化的世界观所有通信围绕一个主站的周期任务展开从站只是顺着帧流动手。可一旦接受了这种设定你会发现调试流程反而清晰得多——链路通不通、配置对不对、状态机到没到位每一步都有明确的反馈。最后再分享一个小技巧真遇到排查不出来的通信问题建议手边常备一台能抓包的工控机或笔记本把EtherCAT主站网卡和一个从站之间串一个分线器抓它二三十秒的报文再用Wireshark的统计功能看看有没有周期性错误。很多现场让人抓狂的“偶发故障”抓包看一宿基本都能定位到某一节网线或者某一个网口的接口松动上。协议本身已经很扎实了剩下的问题往往都在物理世界。EtherCAT第一篇先聊到这里下一篇我可以展开讲讲从站开发里那些真正让人掉头发的细节EEPROM编址、同步管理器配置、以及从站应用代码和ESC的配合逻辑。
返回列表