做自动化项目这么多年,遇到最烦的事就是设备接口不统一。现场的伺服、变频器、仪表、传感器,各说各的话;新项目要是用了 EtherCAT 主站,想兼容这些老设备,就得一台一台去换或者加网关。智嵌物联这次发布的 EtherCAT 协议转换器,就是专门干这个的:把 EtherCAT 网络和 Modbus RTU/TCP、CANopen、串口等传统协议打通,让老设备无缝接入 EtherCAT,同时又不会牺牲太多实时性和稳定性。
那它跟市面上那些普通网关有什么本质区别?我拆解完样机和技术文档之后,觉得有三个点值得好好聊聊:一是它对 EtherCAT 从站协议栈的处理方式,二是在寄存器映射层做的高度可配置设计,三是它对各种来源的主站软件做了哪些兼容性适配。这篇文章我会以工程师视角,从底层原理讲到实操配置,再讲到我踩过的几个坑,给正在调研 EtherCAT 网关、协议转换器,或者准备把手头旧设备接入 EtherCAT 网络的朋友一个完整参考。
1. 这款产品到底解决什么问题
1.1 EtherCAT 生态的“接入难”问题
在过去几年里,我做了不少运动控制与产线改造项目。EtherCAT 逐渐成为中高端设备里相对“约定俗成”的选择:它基于标准以太网物理层,主站发一帧数据,从站硬件处理读取与转发,实时性比传统现场总线高了好几个数量级。但凡是搞过实际产线的人都知道,一个项目现场从来不是“全新设备+全新总线”的理想环境。老产线上通常有一堆 Modbus RTU 仪表、Modbus TCP 温控器、CANopen 驱动器甚至裸串口扫码枪。
这些设备通常还能继续用,但新上位机或者控制器想要统一采集、统一调度时,问题就来了——EtherCAT 主站不认识它们。你当然可以把所有老设备全部换掉,但那是一笔不小的预算,而且很多时候设备本身并没有坏。再说,换设备意味着要重新做控制逻辑、重新调参数,停产损失和调试工期都是实打实的成本。
所以,协议转换器(也叫总线桥接器、网关)在这里就起到一个“翻译官”的作用。智嵌物联这款 EtherCAT 协议转换器,简单说就是把 EtherCAT 网络与各种传统协议的设备之间的数据打通。它对外作为 EtherCAT 从站,将自己注册成主站网络里的一个设备;对内通过 Modbus RTU、Modbus TCP、CANopen 或串口透传等方式,把现场老设备的数据映射到自身的过程数据对象(PDO)里。主站看到的是一个统一的、整洁的从站设备,而那些乱七八糟的协议细节都被隐藏在转换器内部了。
1.2 “翻译官”的三层核心逻辑
要理解协议转换器,不能只看它有几个网口、几个串口。核心要看三层:
第一层是物理层转换。EtherCAT 用的是标准 RJ45 以太网物理层,而 Modbus RTU 是 RS485,CANopen 是 CAN 收发器。转换器要做的第一件事,就是把这些物理接口的电平、帧格式转成 EtherCAT 能识别的以太网帧。这也是为什么好的协议转换器必须把隔离、防雷、静电保护都做好,因为现场总线端口长期暴露在生产环境里,一个浪涌就可能烧掉一片设备。
第二层是协议栈转换。EtherCAT 主站发过来的是一个包含所有从站数据的以太网帧,每个从站处理属于自己的那一段。转换器内部跑着 EtherCAT 从站协议栈(常见方案是基于倍福 SSC 生成的从站代码,也有用 FPGA 实现的硬实时方案),把自己变成一个标准的 CoE(CANopen over EtherCAT)从站。这一步决定了一款产品对不同主站的兼容性到底好不好。
第三层才是数据映射。用户在配置工具里把本地的 Modbus 寄存器地址、CAN ID、串口命令拆成一格一格的映射关系,对应到 EtherCAT 的对象字典(OD)里。这样主站程序里只需读写一个结构体或数组,就能间接控制底下的所有老设备。
这三层里,最容易出问题的是第三层,因为映射做得不灵活,实际场景里总会有“要读的寄存器不连续”“要写的指令带校验位”等麻烦。新品把映射表做成了可视化的拖拽式配置,字段长度、字节序、周期读取开关都能单独设置,基本覆盖了现场常见的各种地址碎片情况。
2. 核心硬件与协议栈选型解析
2.1 从站协议栈:SSC 还是 FPGA
在当前 EtherCAT 从站研发里,常见的是一条门槛更低的路和一条更高性能的路。前面那条是用从站控制器 ESC(如 ET1100/ET1200 或 LAN9252 这类芯片)加微控制器,微控制器里跑 SSC(EtherCAT Slave Stack Code)生成的从站协议栈代码,处理非实时应用层逻辑,ESC 则负责 EtherCAT 数据帧的硬件解析。后面那条是用 FPGA 拉网口,将数据帧处理直接下沉到硬件逻辑门里,适合超高速、超大 IO 的场景。
作为一款面向产线改造的协议转换器,它的实时性要求没有高端伺服那么极致,但也绝不能出现抖动掉帧。使用带内部 ESC 的集成式从站控制芯片是比较稳妥的做法。这类方案的优点有三:第一,协议栈相对成熟,兼容性经过了大量主站验证;第二,MCU 有充足资源处理 Modbus/CAN 的协议解析;第三,后续固件升级时可以单独更新应用逻辑而不动实时部分。
有人问,为什么不直接全部用软件中断模拟 EtherCAT?理论上 PC 主站在某些实时系统下可以跑纯软从站,但产品的稳定性和抖动特性很难保证,尤其在复杂电磁环境的工业现场。做产品,首要目标是“不翻车”,成熟的硬件设计远比追新更重要。
2.2 主站侧兼容性:TwinCAT、CODESYS、汇川、欧姆龙都试过
协议转换器必须面对一个现实:用户现场的主站千奇百怪。有的用倍福 TwinCAT,有的用 CODESYS 软 PLC,有的用汇川 H5U/H3U 系列自带 EtherCAT 接口,有的用基恩士、欧姆龙、松下等日系控制器,还有不少人直接用免费的开源主站库(比如 SOEM)做上位机集成。
新品在出厂前会把常见的 EtherCAT 主站都过一遍,确保 ESI 描述文件(即 XML 文件)能正常导入、PDO 映射能正常下发、DC 同步能正常对齐。实际测试下来,除了个别主站对 XML 版本号比较挑剔外,大体都能在 5 分钟内完成配置。这里面最有价值的一点是:产品默认开启 DC(分布式时钟)同步模式。即使只是做协议转换,DC 同步也能保证数据采集的节拍稳定,避免出现“数据明明到了,时间戳却不连续”的怪问题。
2.3 目标协议侧的灵活设计
我尤其欣赏的是它把串口、RS485、CAN 做到了一台机器上,而不是像很多老网关那样只能支持单一协议。你可以在配置页面里随意切换串口模式为 Modbus RTU 主站、Modbus RTU 从站、自由协议透传或 DL/T 645 电表协议。CAN 口则支持 CANopen 主站/从站(NMT、SDO、PDO)、J1939 和 CAN 透传。
这种多合一设计减少了一二线项目的备件压力。以前你起码要备三五种不同网关,现在一台设备就能覆盖大多数点位。当然,多协议也意味着配置项复杂,所以它配套的组态软件把协议分成了“模板”。比如你选“Modbus RTU 采集 20 路温度”,软件会自动把功能码、寄存器字长、轮询周期都预设好,你只需要填从站地址和寄存器起始位。对新人不算友好这件事,厂商显然考虑过了。
3. 快速上手:把一台 Modbus 仪表接入 EtherCAT
3.1 接线、供电与 IP 分配
先说最基础的接线。设备一般提供至少两个 RJ45 网口作为 EtherCAT IN 和 OUT,用于链式级联。注意,EtherCAT 的 IN/OUT 千万不能接反,接反的典型现象是主站扫描不到设备或者链路中断报错。此外,转换器通常也提供一个调试网口(默认 IP 一般是 192.168.1.xx 之类),用于本地配置和固件升级。
供电方面,工业现场 24V 直流供电,建议单独走开关电源,避免和电机的动力线同槽。如果必须同槽走线,屏蔽层要做好单端接地,这一点对 EtherCAT 这种百兆以太网尤其重要,不然偶发断站可能查到你怀疑人生。
配置前的第一件事:把电脑网卡 IP 设到和调试口同一个网段,浏览器打开配置页面,先把基础参数(波特率、从站 ID、超时时间)设置好。多数协议转换器都内置 Web 配置页面,不需要安装客户端软件,这在实际调试时非常方便——你用手机浏览器都能进去改参数。
3.2 在 TwinCAT/CODESYS 中添加从站
在倍福 TwinCAT 里,操作路径一般是:进入 Solution Explorer -> I/O -> Devices,右键 New Device,选择 EtherCAT Master。然后点击 Scan Devices 扫描网络;如果找不到设备,把网络中断电重启再扫描,也可以手动导入 XML 文件。导入过程会校验 ESI 文件,如果版本不对会提示,这时到官网下载对应版本的 XML 覆盖到TwinCAT\3.1\Config\Io\EtherCAT目录再重新扫描即可。
CODESYS 类似,在 Device 右键 -> Add Device,选中 EtherCAT Master,再 Scan。注意 CODESYS 版本和主站库版本差异较大,个别老版本可能需要手动 Update Device。扫描到转换器后,展开下面的 Slave,能看到它提供的输入/输出条目。默认情况下,转换器的 256 字节输入和 256 字节输出会被映射成两个数组变量,你可以直接把这些变量绑定到 PLC 程序里。
3.3 映射表配置案例:采集 20 路温度
实战中最常见的就是采集一批仪表数据。假设我有一台 Modbus RTU 温控器,从站地址 01,要读保持寄存器 0x0000 和 0x0002 的温度值,以及线圈 0x0001 的报警状态。
在配置页面里我新建一条“Modbus 采集任务”:
- 从站地址:1
- 功能码:03 读保持寄存器
- 起始地址:0x0000
- 数据长度:2 字(4 字节)
- 周期:100ms
然后第二条再读报警线圈:
- 功能码:01 读线圈
- 起始地址:0x0001
- 数据长度:1 位
- 周期:200ms
配置完成后,软件会自动把这些数据整理成 PDO。在主站侧,输入数组的前几个字节依次对应温度高字节、温度低字节、报警位。你要做的是记住这个顺序,或者在配置软件里给每一段映射起个自定义名称,这样 TwinCAT 里的变量注释就能直接关联上。
提示:如果温度值读出来变成乱码或者数字大得离谱,九成是字节序问题,见 5.4 节的处理方法。
3.4 用免费主站软件快速验证
如果你的项目预算有限,还在评估阶段,不想买商业授权,那么用开源的 EtherCAT 主站库做快速验证是一条很实用的路子。我经常用的有这两类:
一类是底层库型,比如 SOEM(Simple Open EtherCAT Master)。它在 Ubuntu 或 Windows 下都能编译,小程序几百行就能完成扫描、配置、周期运行。另一类是带界面的免费试用版 TwinCAT(倍福官网可以申请试用授权),或 CODESYS Control SL 的试用授权,通常够你验证一台转换器和几个伺服。
实测下来,用 SOEM 跑一个 1ms 周期的过程数据循环,对 i5 以上 CPU 完全无压力。你甚至可以把抓包脚本跑起来,用 Wireshark 同时在另一块网卡上观察 EtherCAT 帧。对于只是验证协议转换器通不通的场景,这套组合拳足够了。
4. 场景化拆解:关节模组、PLC 扩展与 STM32 从站
4.1 Easy521 控制关节模组
“Easy521 控制关节模组”是最近搜得比较多的组合。Easy521 其实是一个集成式 PLC/运动控制器,自带 EtherCAT 主站口,常用于小型机器人或关节模组控制。协议转换器在这种场景里扮演的角色是:把关节模组内部的力矩传感器、温度传感器、抱闸状态等非实时数据通过 Modbus/CAN 汇总到 EtherCAT 网络,让 Easy521 主站统一读取,而关节电机本身可能仍然走自身的 CANopen 高速 PDO。
我实际搭过类似的测试台,重要的是把总线周期对齐。如果关节模组的 CANopen 周期是 2ms,而 EtherCAT 周期是 1ms,那么不要强行让所有数据都以 1ms 周期刷新,否则 CAN 侧容易堆积丢包。合理做法是把 EtherCAT 周期设置成整数倍匹配 CAN 的刷新周期,比如基于 DC 同步,让转换器在每个 EtherCAT 周期的固定相位采集 CAN 数据,保证数据的新鲜度一致。
另外,关节模组一般都有使能、抱闸、错误复位这类控制字。用转换器映射的时候,建议把这些布尔量做成单独的位映射,而不是拼到整形数据里,这样主站程序可以直接用slave.output.bit0这种形式访问,调试的时候一眼就能看到状态。
4.2 汇川 PLC 控制 EtherCAT 从站扩展
汇川的中大型 PLC(例如 H5U、AM400/600 系列)本身就集成 EtherCAT 主站,配置界面跟 TwinCAT 类似,但菜单汉化度较高,初次上手更容易。在汇川 InoProShop 里,扫描到从站后,如果出现“设备未激活”或“同步错误”,多数是 XML 文件与固件版本不匹配,或者 ESC 地址冲突。这时候去官网下载最新的 XML 文件,更新到 EtherCAT 设备库,再重新扫描基本能解决。
还有一种坑:有些工程师直接把 PLC 的 ENET 网口当作 EtherCAT 口插进去。汇川 PLC 上通常标有专门的 EtherCAT 口(单独的一个 RJ45),别插错。插错之后往往也能扫描到,因为 EtherCAT 本身就是标准以太网帧,但通信会极不稳定,时断时续,而且报错信息指向不明确。
4.3 用 STM32 开发板自己做从站的启发
很多嵌入式工程师会问:我想用 STM32 做个 EtherCAT 从站,是不是很难?如果直接用 STM32 的普通以太网 MAC 做 EtherCAT,确实很难,因为 EtherCAT 从站必须有专用 ESC 硬件负责帧的实时提取与转发。比较现实的路线是:用 STM32 接一个 LAN9252 或者其他 ESC 芯片,基于倍福 SSC 生成的代码框架来移植。
对于只是想验证协议或者做数据采集的原型,有一个更省事的思路:用一块现成的 EtherCAT 从站开发板(比如带 LAN9252 的板子),把它当作“协议转换器”的实验平台,先把从站通信跑通,再接外部传感器到 MCU 的串口或 SPI。这样你能快速体会到 EtherCAT 的寻址、映射、DC 同步等机制。等到对协议熟悉了,再回到 SSC 里配置自己的对象字典,生成专属固件。
这条思路其实跟智嵌物联这款转换器的设计理念是相通的:硬件上把 EtherCAT 实时部分和业务逻辑分开,业务部分交给 MCU 处理。你理解了这一层,后面不管是调试现成网关,还是自己画板子做从站,都会顺手很多。
5. 常见问题与排查技巧实录
5.1 扫描不到设备,先查这三处
如果主站扫描不到转换器,经验上 90% 是这三种原因。
第一,IN/OUT 口接反。很多人觉得无所谓,实际上 EtherCAT 是从站链路上的一个节点,帧只能按 IN 进、OUT 出,接反后主站就断链了。第二,电源没到位或者供电不足。很多从站在上电瞬间电流很大,如果开关电源余量不足,会导致从站启动失败,现象是扫描时设备列表时有时无。第三,XML 文件没装好。Windows 下 TwinCAT 对 ESI 文件有缓存机制,更新后要重启 TwinCAT 或者手工刷新,不然它用的还是旧描述。
另外,强烈建议在主站扫描前用 Wireshark 抓一把链路里的 EtherCAT 帧。如果能看到主站周期性发送 BRD(广播读)命令,说明物理层和主站工作基本正常,问题大概率出在从站配置上。
5.2 通信抖动、断站与 DC 失同步
运行一段时间后偶发断站,这在现场属于最难查的一类问题。可能的原因包括:网线质量差(用了非屏蔽或超五类以下的线)、接地电位差大、从站 DC 时钟漂移超出主站容忍范围等。
排查顺序建议是:换一根带屏蔽的成品网线(别自己做水晶头,压不好很容易出现隐藏故障);检查网络里是否还有其他设备在跑非 EtherCAT 业务流量(比如调试口和 EtherCAT 共用交换机),EtherCAT 一般要求独占物理链路;再检查 DC 同步状态字(在 TwinCAT 在线监视里看从站的 DC 状态位)是否在 0 和 1 之间跳变。如果确实漂移厉害,可以在转换器配置里把 DC 同步的“时钟补偿”相关参数打开,或者稍微调大主站的同步超时余量。
5.3 Wireshark 抓包 EtherCAT 的关键姿势
用 Wireshark 看 EtherCAT 其实是不少工程师忽略的神技。你不需要理解每个 bit,只需要抓到几个关键时刻的帧就行。
抓包的姿势要注意:EtherCAT 是标准以太网帧(EtherType 0x88A4),所以普通电脑网卡配合 Npcap 就能抓。但是,如果电脑直连主站和从站之间,会影响链路的实时性;更安全的做法是使用 TAP 或者把电脑接在交换机镜像口上。工业现场没条件时,我通常用一块双网卡电脑:一块网卡接入 EtherCAT 链路(旁路监听),另一块连正常局域网,用 Wireshark 选择对应网卡开始抓包。
抓到帧以后,关注几个字段:EtherCAT 头里的 Type(1 表示 ECR_DATAGRAM),数据报里的 Cmd(比如 NOP、APRD、APWR、BRD 等),以及每个数据报末尾的 WKC(Working Counter)。如果 WKC 一直为 0,说明对应从站没有正确处理这个命令;如果 WKC 有时对有时不对,大概率是链路有间歇性干扰或者从站状态机卡住了。
5.4 寄存器映射和字节序的错误
这种错误最隐蔽:数据明明“通了”,但数值不对。最常见的坑是字节序。EtherCAT 过程数据默认是小端,而很多 Modbus 设备却是大端存储寄存器。比如温度值 0x1234,在 Modbus 报文里是高字节 0x12 在前;映射到 EtherCAT PDO 后,如果没有做字节交换,你读到的就是 0x3412。
解决方式一般有两种。一种是在转换器配置界面里给每条映射开启“字交换”或“字节交换”;另一种是在 PLC 程序里用 SWAP 指令转换。推荐前者,因为改配置比改程序省事得多,而且后续维护也直观。
另一个易错点是映射长度溢位。比如你分配了 8 字节的输入区域,却把 20 个 Modbus 寄存器(40 字节)塞进去,超出部分的映射会被软件静默丢弃。保守做法是先算一下数据总量:输入区字节数除以每个寄存器字节数,再看够不够放。
6. 关于选型和落地的一点个人看法
6.1 先想清楚:你要的是透传还是可编程数据管道
现在市面上的 EtherCAT 网关很多,但我一直觉得选型最重要的是先想清楚一个问题:你要的是“纯透传”,还是要“能改造数据”。纯透传网关只把 EtherCAT 数据原封不动地搬到另一侧,适合两边协议已经能对齐的场景;而像智嵌物联这款支持可视化作映射的转换器,适合更需要灵活性的现场,因为它的数据在路途中间是可以被截获、重组、按需上报的。
在实际项目里,这种“中间可编程”的价值往往比想象中大。我遇到过很多次,现场仪表的数据格式很奇葩,主站程序根本不想解析那些协议细节,所以由转换器统一处理好,主站拿到的永远是经过整理的“干净数据”。这样主站工程师的日子会好过很多,整个系统的可维护性也上来了。
6.2 判断产品好用不好用的几个小标准
最后给几个我自己总结的判断标准,供参考。
一看支持的从站数量与链路深度。别买回来发现级联几台就报错,尤其是跑 DC 同步的时候,链路深度会影响时钟同步精度。
二看配置工具是否自带协议模板。这决定了现场调试时间。模板越丰富,调试一个陌生仪表的周期就越短;反之,如果每个点位都要从头手填寄存器地址,你会在现场耗到生无可恋。
三看固件更新频率。工业协议栈这种技术更新不算快,但能持续更新至少说明厂商在维护,遇到新主站或者新协议版本时,你能更安心。
四看技术支持是否回答“为什么”。我买工业产品,最怕遇到“问题复现不出来”的厂商。一个愿意跟你一起抓包、一起查寄存器映射工具的技术支持,价值远超那一两百块的价差。
如果你也正在做 EtherCAT 相关项目,手里有老设备想接入新总线,不妨先用免费主站软件做一轮验证,再决定要不要投入采购。协议转换器这个东西,功能参数再好,也要看它能不能在你那个具体机台、具体主站版本、具体接线方式下稳定跑上几个月。我的习惯是:先小批量用起来,再谈大规模替换,这个思路到现在还没让我后悔过。