ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

EtherCAT协议转换器:老设备低成本接入新网络的改造指南

EtherCAT协议转换器:老设备低成本接入新网络的改造指南 最近车间做产线改造遇到一个特别典型的场景一侧是用了十来年的Modbus RTU温控器、电能表、IO模块另一侧是刚上线的EtherCAT主站和运动控制器。新系统要的是微秒级同步、分布时钟和实时诊断老设备却只会按自己的节奏一条一条回报文两边根本聊不到一块去。智嵌物联这款EtherCAT协议转换器就是冲着这个卡脖子点来的——把非EtherCAT的工业设备低成本、低门槛地并入EtherCAT网络让老设备不用报废、新系统不用迁就。这台设备解决的不是“能不能通”的问题而是“通了之后能不能用得好”的问题。如果你正在做设备改造、控制系统升级或者在EtherCAT从站选型、主站配置、通讯调试上踩坑这篇文章值得花几分钟看完。我会从产品设计的底层逻辑讲起再给出一套完整的部署流程和调试排错经验里面很多内容是翻产品手册也找不到的。1. 为什么非得用EtherCAT以及老设备接入的三条路1.1 EtherCAT主站生态为什么能铺开EtherCAT能火最核心的原因是它把“实时性”和“易用性”这两个原本矛盾的东西揉到了一起。传统现场总线要么实时性不够比如Modbus RTU靠轮询一个站几百毫秒延迟要么工程实施复杂比如Profibus DP要设置总线终端、地址拨码、GSD文件稍不注意就通讯失败。EtherCAT用“集总帧”的方式一个以太网帧经过所有从站时每个从站实时抽取和插入数据无需逐帧转发这让它的同步精度能稳定做到亚微秒级同时拓扑结构又非常灵活线型、星型、树型都可以。主站生态也是个关键因素。TwinCAT、Codesys、SOEM这些主站软件和协议栈的出现让做控制系统的团队可以低成本拉起来一套EtherCAT网络。再加上从站侧有标准化的ESC芯片EtherCAT Slave Controller和SSC工具链从站开发的门槛被压得很低。这也是为什么这几年EtherCAT几乎成了运动控制领域的新标配。1.2 老设备进新系统的常规思路和代价如果你手头有一堆非EtherCAT设备想并进新的EtherCAT控制系统一般有三条路可以走。第一条是把旧设备全部换掉换成原生支持EtherCAT的新款。这个方案最省心但成本最高设备停机时间最长很多产线的老设备其实还能稳定跑几年直接报废太可惜。第二条是改控制器侧在PLC或运动控制器上加一个网关模块对整个网络做协议转换。这个方案的麻烦在于网关一旦成为中心节点它本身就会成为性能瓶颈而且转换逻辑往往写死在固件里遇到非标协议就很难扩展。第三条是在设备侧加一个协议转换器逐台把Modbus、CANopen等接口转化为EtherCAT从站。每个转换器只服务它接的那台设备独立性好哪里不行换哪里改造过程不需要停整条产线。智嵌物联这套EtherCAT协议转换器走的就是第三条路线。它把Modbus RTU/TCP以及部分CANopen场景转换成标准EtherCAT从站主站侧看到的完全是一个标准的EtherCAT设备后续扩容、诊断、更换都非常直观。1.3 这台转换器在系统里的位置举个实际例子。一个包装设备上原有6台Modbus RTU温控模块现要把整个设备并入新上线的EtherCAT运动控制系统。传统做法是让PLC这边用串口服务器或Modbus主站模块轮询但轮询延迟在高速生产线上往往不可接受。用协议转换器之后每台温控模块后面挂一个转换器转换器以EtherCAT从站身份接入主站网络主站通过DPRAM映射出来的过程数据直接读写温控的PV/SV值。实测数据刷新周期从原来的几十毫秒级别缩短到1毫秒以内而且可以在主站诊断界面直接看到每个从站的丢帧计数和状态变化。这是一个非常典型的应用画像EtherCAT协议转换器不是用来“替代”什么东西的它是在过渡期把异构设备统一进同一个实时网络里让系统先跑起来再逐步演进。2. 硬件和固件设计的几个关键幕后选择2.1 从站控制器和协议栈的选型逻辑一台协议转换器的灵魂不是外壳也不是电源而是它内部从站协议栈和ESC芯片的组合。目前市面上的方案大致有几种LAN9252加外部MCU、AX58100这种集成两口的SoC、或者直接用带ESC外设的MCU比如某些STM32系列。智嵌物联这款产品选择的是“成熟ESC芯片独立MCU做协议转换”的架构。这样做的好处有两个。第一ESC芯片专门负责EtherCAT链路层的帧收发底层实时性有保障第二MCU跑协议转换逻辑Modbus请求解析、寄存器映射、对象字典维护都在MCU这边完成两者解耦调试起来清晰。实际项目中如果ESC和MCU分不开同步抖动和丢帧问题会非常难排查因为你不知道问题出在链路层还是应用层。另外从站协议栈用的是SSC DIY生成的工程。SSC这套工具可以按需裁剪PDO映射、CoE对象、DC同步等能力生成的代码结构虽然看起来繁琐但稳定性是经过大量现场验证的。如果你准备自己从零写从站协议栈我的建议是除非你有专门的研发团队否则别碰这个坑SSC也许不够优雅但它够稳。2.2 报文转换的数据流从Modbus寄存器到CoE对象字典协议转换器最核心的机制是怎么把Modbus的寄存器读写映射成EtherCAT主站能直接读写的对象字典。这里我用一个表格来铺开数据方向Modbus侧EtherCAT侧转换逻辑主站到设备写保持寄存器 (0x06/0x10)FSoE/CoE写对象字典索引主站写PDO映射MCU解析后按功能码组织Modbus帧设备到主站读保持寄存器 (0x03)CoE读对象字典/PDO输出MCU轮询或定时读取寄存器刷新到PDO缓存实时状态异常码/通讯状态从站状态机/看门狗Modbus超时映射为EtherCAT看门狗事件具体实现时转换器内部维护一张映射表把Modbus的寄存器地址区间映射到CoE对象字典的索引和子索引。主站写入一个对象字典值MCU就按预设的映射关系组装成Modbus RTU帧发下去设备返回的数据再按同样逻辑填回PDO区域等待主站下次周期读取。这个过程最需要注意的是Modbus RTU的应答延迟。EtherCAT是1毫秒甚至更快的周期而Modbus RTU从站设备往往需要几十毫秒才能回一条报文。如果转换器用同步阻塞的方式等待应答整个从站都会卡住。好的实现应该是“EtherCAT周期照常跑PDO里的值先维持旧值Modbus侧在后台异步排队处理”通过状态标志位告诉主站当前数据是否刷新成功。这一点决定了一台转换器是好用还是难用。2.3 硬件细节供电、防护和接线硬件设计层面有几个容易被忽略但现场一定会踩的细节。第一是供电范围很多现场电源电压波动大转换器如果只有窄幅输入很容易在上电冲击时重启这台设备的宽压输入和反接保护算是基本配置。第二是EtherCAT IN/OUT双口设计IN口接主站OUT口可以继续级联下一台从站这样整条线型拓扑可以串很多台千万注意不要把IN和OUT插反虽然插反不会烧但会导致链路上的设备全部失去通讯。第三是DIN导轨卡扣和螺丝端子别看这个不起眼在振动环境下螺丝端子比弹簧端子更抗松动锁紧后千万不要偷懒。拨码开关也值得一说。地址拨码设置设备站号部分型号还支持波特率拨码。上电前先确认拨码状态特别是多台转换器同时接入网络时站号冲突会导致主站扫描不到设备或者通讯间歇性中断这类问题在产线排查时非常隐蔽。2.4 固件升级和可靠性保护固件升级入口这块智嵌物联提供了一个本地配置网页浏览器直接打开升级页面拖拽固件包就能完成升级不需要额外安装软件。同时内置了双备份固件区升级中途掉电也不会变砖恢复出厂设置可以回滚到上一个稳定版本。对现场工程师来说这个设计能省下很多售后沟通成本值得给产品团队点个赞。3. 从拆箱到跑通一台Modbus设备的完整接入实录3.1 硬件接线与上电顺序以最常见的“Modbus RTU设备转EtherCAT”为例我用一个具体流程来讲。这里有一个硬性规则EtherCAT侧和Modbus侧属于两个不同的电域接线时千万不要把两者的地混在一起否则轻则通讯不稳定重则损坏接口芯片。接线完成后上电顺序也有讲究。建议先给转换器和Modbus设备上电确认本地的Modbus通讯正常再接EtherCAT主站侧。这样可以避免EtherCAT链路一启动Modbus侧还没准备好导致看门狗误报。先用USB转串口模块通过配置软件或网页确认Modbus端口能读到设备数据再继续下一步。3.2 首次配置设置站号、波特率和数据映射首次配置建议通过产品的网页配置界面操作。入口一般是给转换器临时指定一个IP或者通过USB连接打开浏览器输入默认地址。界面里需要配置这么几个东西EtherCAT从站地址站号要和实际拨码或主站分配一致。Modbus从站地址、串口参数波特率、数据位、停止位、校验位。数据映射规则把Modbus寄存器地址映射到指定的CoE对象字典索引。刷新方式和周期轮询间隔建议先设短一点比如10毫秒看实际设备能不能跟上。这里有个经验之谈如果你有多台设备每台的Modbus参数可能不一样先把每台的映射表在Excel里列清楚再录入配置页面不要边配边想。真到了现场设备标识不清晰、地址表混乱是最大的时间杀手。3.3 在Codesys环境里配置主站并导入ESI文件主站侧我用Codesys来演示因为它的EtherCAT主站配置方式非常有代表性。新建工程后首先需要一个描述从站能力的ESI文件EtherCAT Slave Information这个文件是以XML格式发布的。获取方式一般是找转换器厂商的官网支持页面下载或者从设备里导出。文件名通常叫“SmartIO_XXX.xml”之类的这就是热词里说的“如何配置从站XML”。把ESI文件复制到Codesys的EtherCAT设备描述目录后在设备树里右键扫描或者手动添加从站。扫描完成后会出现一个设备节点双击能看到对象字典和PDO映射。在PDO映射选项卡里可以看到默认映射好的过程数据。这里你要确认一下输入输出数据长度和你配置的Modbus映射是否一致。很多用户遇到“主站通讯正常但数据全是0”的问题排查后发现是PDO映射没勾全某个字节没映射进去。Codesys连接真实硬件后把从站状态切到OPOperational然后在线监视PDO里的值。这里有一个关键判断标准如果OP状态能保持且PDO数值能跟随设备变化说明链路已经通了。3.4 用主站诊断功能验证数据完整性组态跑通后不要急着做业务逻辑。先打开主站的诊断窗口重点看这几个指标从站状态是否稳定在OP有没有掉回Safe-OP。丢帧计数器的数值变化理想情况应该是0增长或极少增长。分布时钟的同步误差普通应用几百纳秒到几微秒都算正常。看门狗有没有被触发特别是Modbus侧设备长时间不应答时。我习惯在验证阶段故意拔掉一台Modbus设备的通讯线观察转换器这边的表现。好的转换器应该能通过状态标志位把异常上报给主站而不应该让EtherCAT链路整个断掉或卡死。这个测试能帮你提前发现很多隐蔽的故障模式。4. 调试排错编译报错、同步类型、抓包以及脉冲当量4.1 PIC32从站代码移植时的典型编译报错热词里有一条特别典型的报错信息..\middlewares\ethercat\pic32 ethercat slave.c(197): error: #136: struct u...这个报错出在PIC32平台编译EtherCAT从站代码时表现形式是结构体成员访问报错。大多数情况下它不是真的语法写错了而是SSC工具生成的代码和当前编译器版本之间宏定义不匹配导致的。最常见的原因有这几个SSC生成的“ecat_def.h”和“pic32_ethercat_slave.c”文件版本不一致比如你用SSC 5.11生成了应用层文件但底层文件是从老项目拷贝来的两边对结构体定义的处理方式不同。缺少必要的头文件搜索路径编译器的Include路径没把middleware目录加全。宏定义冲突某些全局宏比如时钟、中断优先级相关在别的文件里被重复定义。遇到这类报错我建议第一步先看SSC工具生成的示例工程能不能直接编译过排除工具链环境问题。如果示例工程没问题再对比你的工程和示例工程的宏定义差异不要上来就注释代码。很多时候改一行宏定义比追一堆编译错误要快得多。4.2 SM3同步类型的修改时机从站必须在什么状态热词里还有一个非常专业的问题“EtherCAT修改SM3输入同步类型为0x0001SM-Sync从站在什么状态下可以改”。这个问题如果理解不透会在调试现场卡很久。先解释一下SMSync Manager是EtherCAT从站里同步管理器的缩写SM2一般管输出主站到从站SM3一般管输入从站到主站。同步类型0x0001表示SM-Sync模式即输入输出数据和同步信号绑定用于分布式时钟同步的场景0x0002是自由运行模式不绑定同步信号。修改SM3同步类型切切注意要在从站处于Pre-Operational预运行状态下进行不能等到Safe-Operational或Operational再改。原因是EtherCAT状态机里从站的邮箱通讯CoE在Pre-Op阶段是开启的而过程数据在Safe-OP/OP阶段才正式启用。如果你在OP状态下试图写SM类型主站会直接给你一个状态码错误从站可能还会报错跳到Init。实际操作流程是主站先发命令让从站进入Pre-Op然后通过CoE写对象字典或直接通过ESC寄存器操作修改SM3同步类型修改成功后再从Pre-Op切到Safe-OP最后切到OP。有人图省事想在线改结果从站通讯直接断掉还要重新上电。这个坑我亲眼见过好几次。4.3 在Windows下用Wireshark抓取EtherCAT帧抓包是定位EtherCAT问题最有效的武器。很多人以为EtherCAT是基于以太网的随便选个网卡抓就行实际上Wireshark抓EtherCAT是有前置条件的。首先Windows下需要安装Npcap驱动Wireshark才能抓到原始数据包。注意抓包网卡要选连接EtherCAT主站设备的物理网卡不要选虚拟网卡或蓝牙适配器否则什么都看不到。其次EtherCAT帧的类型是0x88A4不是常见的IP帧Wireshark里直接用过滤表达式ecat就可以把EtherCAT的报文全部筛出来。如果想看某个从站的PDO数据可以进一步过滤ecat.cmd ecat.autoinc 1抓包时还要注意PC本身不能作为EtherCAT主站或从站参与通讯否则网卡驱动会干扰帧的收发。建议用一台独立笔记本接到EtherCAT链路的空闲口上或者用支持镜像端口的交换机旁路抓包。抓包能看到的东西非常直观主站有没有在发帧、从站有没有回应工作计数器WKC、APRD/APWR指令的寄存器地址和值、分布时钟的周期等。有一次现场排查通讯闪断抓包一看发现是某个从站在特定时刻返回了WKC错误顺藤摸瓜找到一台接触不良的终端设备问题当场解决。4.4 步进电机场景下的脉冲当量换算热词里“EtherCAT 步进电机 脉冲当量”也是搜索量很高的一个点。这类场景一般是原有系统用PLC发脉冲控制步进驱动器现在改成EtherCAT主站控制中间加了协议转换器就会出现“主站发多少用户单位对应电机走多少距离”的换算问题。脉冲当量定义为每个用户单位对应的脉冲数计算公式很简单脉冲当量 电机每转所需脉冲数 ÷ 每转对应的用户单位数举个例子某步进驱动器设定为20000脉冲/转丝杠导程是5毫米/转用户单位想用毫米那么脉冲当量 20000 ÷ 5 4000 脉冲/毫米在EtherCAT主站里目标位置值经过这个系数换算后发送给转换器/驱动器。如果只算速度模式还需要换算速度的单位别把位置和速度的当量搞混。这类问题发生频率极高而且往往不是转换器本身的问题是上位机换算逻辑的问题我建议项目调试时第一件事就把当量表打印出来贴在现场电柜门上。5. 三个典型应用场景和主站软件选择的实用参考5.1 传统IO模块快速并入EtherCAT网络现场有大量传统IO模块只有开关量输入输出通过Modbus RTU和PLC通讯。现在要用EtherCAT主站集中采集如果把IO模块全部换成EtherCAT原生从站成本不低且停机时间长。用协议转换器做桥接后转换器把Modbus轮询到的DI/DO状态映射到PDO里主站只需要读一个输入字就能看到全部DI的状态写一个输出字就能控制全部DO。这样IO点数越多单点改造成本摊得越薄。实测一条线型拓扑挂8台转换器总IO点数超过200点刷新周期设2毫秒依然稳定运行。5.2 步进电机脉冲控制的低成本改造伺服电机带EtherCAT原生接口当然最好但很多旧设备上是国产步进驱动器只有脉冲口PUL/DIR。这些电机本身精度够用只是接口不对。这种场景下“EtherCAT协议转换器步进驱动器”的组合是一条性价比非常高的改造路径。主站的周期位置指令通过转换器转换成脉冲频率和方向信号发给步进驱动器。需要注意的是脉冲输出方式的最高频率决定了电机的最高转速转换器的硬件如果最高只支持500kHz脉冲输出就不要硬上20000脉冲/转的高速应用否则会丢步。选型时先算好最高频率需求再决定用哪一档转换器。5.3 用汇川Easy521控制关节模组近年来协作机器人和模组化关节越来越多很多关节模组内部电机的驱动接口是CANopen或Modbus而控制器用的是汇川Easy521这类自带EtherCAT主站的PLC。要把两类设备捏到一起就需要协议转换器把CANopen/Modbus协议先转换为EtherCAT从站接口再接入Easy521。这个场景下最要注意的是关节模组通常有多个参数需要实时读写比如目标位置、速度、力矩、状态字映射到PDO里字节数可能比较多。ESI文件能不能支持你自定义PDO映射决定了一套方案顺不顺手。好消息是智嵌物联这款转换器支持自定义PDO映射可以在主站里很方便地配置输入输出数据长度。5.4 免费或者低成本的EtherCAT主站软件怎么选择很多人刚接触EtherCAT不想一上来就买商业主站这里整理几个常见的选择软件/方案适合场景注意事项TwinCAT 3Windows下做运动控制和PLC开发免费版有一定功能限制但评估够了Codesys嵌入式PLC、软PLC开发运行授权和IDE授权要分清试用版可以用一阵SOEM需要自己写主站逻辑、做研究和验证开源但需要一定的C语言功底商业主站板卡对实时性要求极高的产线级应用成本高但稳定性有保障个人建议前期评估直接上TwinCAT或Codesys图形化界面、在线诊断、抓帧功能都齐全先把通讯链路跑通、把问题实验清楚再决定要不要上商业主站。我自己做项目通常会先在这个阶段花两天时间认真看诊断数据看不明白的地方用Wireshark抓帧分析往往能省掉后期的一堆麻烦。最后分享一点个人体会协议转换器这类产品看着是个不起眼的小盒子但它处在异构网络的咽喉位置调试时一定要学会用主站的在线诊断窗口而不是等通讯断了才发现问题。每次上项目我都习惯先抓一把正常状态下的帧保存成pcap留档等哪天出了稀奇古怪的问题再拿出来对比效率会高很多。EtherCAT这套东西思路理清了不难但细节处不经折腾慢慢来反而最快。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进