首页 / 资讯中心 / 文章详情

EtherCAT转Modbus TCP/IP网关:混合协议产线改造实践

EtherCAT转Modbus TCP/IP网关:混合协议产线改造实践 ★ FEATURED ARTICLE
前些日子碰到一个涂布设备的旧线改造项目新的主控是走ETHERCAT总线的运动控制器现场两台变频器和几块温控表却只认Modbus TCP/IP。我找了块疆鸿智能的ETHERCAT转Modbus TCP/IP网关一天半把数据全部打通端到端延迟稳定在毫秒级。这篇文章不聊广告就把这类混合协议现场从接线、配置、映射到排障的完整过程写透正在做产线改造、非标设备集成或者被PLC和仪表通讯折腾过的朋友应该能用得上。1. 先从一场设备联调说起EtherCAT和Modbus TCP为什么需要翻译官做设备集成越久越会发现现场永远是新旧混杂的。新来的高端PLC为了跑多轴同步运动总线清一色选ETHERCAT但车间里那些变频器、温控表、远程IO厂商手册翻到最后网络接口只给了Modbus TCP/IP。两种协议要协同工作光靠一个交换机是绝对不行的必须有一个设备在中间做协议翻译这就引出了网关存在的根本意义。1.1 两种协议的性格差异决定了为什么需要转换ETHERCAT属于实时工业以太网主站每1ms甚至几百微秒就发一个数据帧帧在网络里依次穿过所有从站每个从站在帧经过自己的瞬间把数据塞进去或者取出来最后由最后一个从站把帧送回主站。整个过程像接力赛延迟极低同步性极好这也是高端运动控制PLC普遍选择它当总线的原因。Modbus TCP/IP则是典型的请求-响应模型。主站拿着问卷挨个问设备你现在什么状态设备回答一句再问下一台。这种机制胜在简单、开放、几乎什么设备都支持但本质上快不起来也没有多轴同步的概念。于是现场就出现了一头快、一头慢的混合协议局面高端PLC内部跑着微秒级的ETHERCAT网络外部却要面对一批只懂Modbus TCP/IP的通用设备。这两种协议的直接报文格式完全不同ETHERCAT用的是实时以太网帧接力Modbus TCP/IP走的是TCP 502端口的标准请求响应谁也没法直接读懂对方的内容。没有翻译官高端设备和通用设备就只能大眼瞪小眼。1.2 没有网关时大家是怎么硬凑的最传统的做法是加硬接线IO。给每台Modbus TCP设备增加数字量或模拟量通道把启停、运行状态、设定值通过继电器和模拟量信号接到PLC的IO模块上。点位少于10个还好说一旦设备一多控制柜体积变大接线工作量翻倍后期想改一个点位还得跑现场重新拉线维护成本相当难看。第二种做法是干脆把所有Modbus设备换成带ETHERCAT接口的新款。这是技术上最干净、交付后最省心的方案但预算基本不允许。一条产线上几十台仪表为了通信接口全部报废重买这个成本没有哪个甲方愿意痛快地掏。第三种做法是在高端PLC侧挂一个Modbus TCP主站模块让PLC亲自去轮询下挂设备。表面上可行实际会占用PLC通讯任务的大量时间扫完一圈几十台设备几百毫秒已经过去了。在一条以实时性为卖点的ETHERCAT整网里硬塞一个慢速尾巴整体设计思路也变得不伦不类。所以用一个专用网关让两种协议各干各擅长的事往往是最省心也最划算的方案。文章里用的就是疆鸿智能的ETHERCAT转Modbus TCP/IP网关。1.3 网关在链路里的真实角色疆鸿智能这款网关做的是双向翻译ETHERCAT侧它作为从站接入接受高端PLC主站的管理Modbus TCP侧它作为主站按照配置好的IP、功能码和轮询周期主动去访问下游变频器、仪表、IO模块。网关内部维护着一个数据缓冲区。PLC写入的输出数据放进缓冲区网关再作为Modbus主站发给下游设备下游设备的响应被写回缓冲区PLC在下一个ETHERCAT周期就能读到。相当于PLC是老板网关是秘书下游Modbus设备是执行层员工。老板不直接给每个员工打电话而是把工作交代给秘书秘书再挨个联络。这里要先把一个话讲清楚毫秒级对话不等于Modbus设备获得了ETHERCAT级别的同步性能。它指的是从PLC发出修改设定值的命令到变频器真正执行或者从变频器状态变化到PLC下一轮读到这个往返过程可以控制在几十毫秒甚至个位数毫秒量级对参数下发、状态采集、过程控制完全够用。真要做多轴同步运动或者位置锁存关键轴还是得挂原生ETHERCAT伺服。2. 动手之前硬件接口、安装与两种必懂模式网关买回来先别急着接线搞清楚硬件布局和工作模式能省掉后面很多返工。这个环节我吃过亏第一次拿到类似设备时想当然把两个网口全插到交换机上结果ETHERCAT侧扫描怎么都扫不到设备后来才发现两套网络在物理上是隔离的不能混插。2.1 先认清网关上的每一个接口拿到的网关正面一般有两组RJ45网口丝印会明确区分。一组标着ETHERCAT用来连接PLC主站的网口或网卡另一组标着Modbus TCP或LAN用来连接下游设备或工业交换机。两组口在硬件上是独立的以太网通道相当于桥两端的引桥各自通向不同协议的国家。侧面或底部通常有DC 24V电源端子正负标识清晰。有的型号带复位按键用来恢复出厂设置。状态指示灯至少包括电源灯、ETHERCAT运行灯、Modbus TCP运行灯和故障灯调试时观察指示灯能迅速判断哪一侧出了问题。安装一般就是DIN导轨卡扣直接卡在控制柜的导轨上。注意周围留出散热空间不要把网关紧贴在伺服驱动器或者大功率变频器旁边这类设备发热大长时间高温会让网关内部元器件老化加速。2.2 两种工作模式主站和从站千万别搞反这类协议转换网关通常支持两种角色组合最常用的是ETHERCAT从站 Modbus TCP主站模式。简单说ETHERCAT侧它是下属Modbus TCP侧它是管理者。PLC不直接跟每台Modbus设备通信而是把数据放到网关缓冲区由网关以Modbus主站身份主动去轮询。另一种模式是让网关作为Modbus TCP从站供第三方系统来读取它获取到的数据。比如有些现场已经有上位机在跑Modbus采集想顺便把ETHERCAT侧的数据也开放出去就会用到这种反向用法。选型阶段必须确认清楚谁发起通信两边各是什么角色是PLC主动写数据给Modbus设备还是Modbus设备的数据要被PLC轮询角色搞反了配置出来的链路是死的怎么调都不通。2.3 安装和供电一顿操作前的准备清单接线和安装没什么高深技术但细节决定后面调试是否顺利我按经验列了一份检查单供电DC 24V端子接线建议用0.75-1.5mm²的线现场开关电源容量至少留3A余量尽量避免和伺服驱动器共用一个开关电源防止驱动器启停造成电压跌落。网线工业环境建议用带屏蔽的超五类及以上网线两端压好屏蔽层接头带金属护套更稳别拿普通办公网线凑合。IP规划Modbus TCP侧一定要单独规划网段比如192.168.2.x不要和ETHERCAT侧或办公网络混在一起否则IP冲突排查起来极其痛苦。交换机下挂设备超过一台时用一台工业交换机做汇聚百兆足够大部分场景关键是线材和接头质量。下面这张表是我做项目时经常发给现场施工人员的你可以直接参考设备建议IP子网掩码说明网关Modbus TCP口192.168.2.10255.255.255.0固定IP变频器1192.168.2.21255.255.255.0从站1温控表1192.168.2.31255.255.255.0从站2远程IO模块192.168.2.41255.255.255.0从站3把这些规划在接线前整理成表发给现场实施人员和最终用户各一份后面调试时能省下大量沟通成本。3. 第一关让ETHERCAT主站看见这台网关硬件接好之后接下来的任务就是让PLC编程软件能够识别这个新接入的ETHERCAT从站。很多人第一次调网关就卡在这一步设备明明连好了软件里却只看到一个未知设备怎么都添加不上。这多半是漏了ESI文件。3.1 ESI文件是设备的身份证每个ETHERCAT从站出厂时都附带一个ESI文件格式是XML里面描述了设备的生产厂商、设备名称、支持的输入输出数据长度、对象字典等关键信息。PLC编程软件必须靠这个文件才能正确识别和管理从站。操作上先把随网关附带的ESI文件拷贝到调试电脑打开PLC编程软件里的设备描述文件管理功能导入这个XML文件然后软件的工具箱或设备库中就会出现一个来自疆鸿智能的从站设备。不同品牌PLC软件的具体入口名称不同但原理完全一样。导入完成后在以太网组态界面里添加这个从站给它分配一个在ETHERCAT网络中的节点位置。ETHERCAT从站不需要传统IP地址它靠主站扫描时的物理位置识别这一点和Modbus TCP侧要设置IP完全不同别把两个概念混在一起。3.2 状态机从INIT到OP的必经之路ETHERCAT从站有严格的状态机依次是INIT、PREOP、SAFEOP、OP。INIT表示上电初始化PREOP状态参数访问正常但还没交换过程数据SAFEOP表示输入数据有效但输出仍被禁止只有到达OP状态输入输出才完全开放数据才能真正收发。配置完成后从站状态会自动尝试从INIT一路切换到OP。如果卡在PREOP或SAFEOP不往OP走常见原因有三个一是项目周期设置与从站能力不匹配比如从站要求的周期是250us项目里却设成了125us二是看门狗参数没配置对三是过程数据对象PDO的长度和数量与网关侧配置对不上。遇到这种情况不用慌先把从站参数清空回到默认状态再逐步添加自定义PDO每加一个就试一次状态切换很快就能定位问题。3.3 把进程数据区留够后面映射才不慌ETHERCAT从站的数据交换依靠进程数据区分成输出区主站到网关和输入区网关到主站。在PLC侧你看到的实际上就是两个字节数组程序向输出数组写数据就是发指令从输入数组读数据就是收状态。我的建议是起步阶段就把数据区按项目实际需求留好余量。比如本期只读写10个寄存器配置时可以把输出区留到64字节、输入区留到256字节。因为后期一旦增加设备或增加点位再去改PDO长度两边配置都要重新做重新扫描、重新映射相当费时间。一次性预留好后续多数情况下只是增加几条映射记录的事。4. 核心中的核心寄存器映射是两边数据真正的翻译过程ETHERCAT和Modbus TCP两边硬件都通上电、软件都识别到了并不意味着数据就能流通。真正决定翻得好不好的是寄存器映射表怎么建。这一节是整个调试里信息密度最高的地方值得多花时间理解。4.1 Modbus TCP这一侧要用的功能码Modbus寄存器大体分四类对应不同的功能码。实际项目中最常用的是保持寄存器和输入寄存器03功能码读保持寄存器适合读变频器运行频率、电流、温度等运行参数。04功能码读输入寄存器适合读模拟量模块采集到的电压、电流值。06功能码写单个保持寄存器下发一个设定值比如速度给定。16功能码写多个保持寄存器一次写入多个参数或命令字比如启停命令加目标速度。看清楚每台Modbus设备手册里定义的寄存器含义是映射前必须做的功课。有些设备的启动命令在40001有些在40100漏看一页手册后面就要花几小时排错。4.2 在配置界面里建映射表疆鸿智能这款网关一般提供网页配置界面或上位机配置工具。核心操作就是创建设备列表和映射关系我在项目里通常按下面步骤执行进入配置界面找到Modbus TCP主站功能项。添加一台从站设备填写它的IP地址和端口号Modbus TCP默认端口是502。选择功能码填入起始寄存器地址和需要读写的寄存器数量。指定这些寄存器映射到网关数据缓冲区里的偏移地址。保存全部配置并下发必要时复位网关让配置生效。顺序上我习惯先配置Modbus TCP侧从站再回到ETHERCAT侧检查PDO长度是否匹配。因为映射关系确定了才知道ETHERCAT侧需要多少字节的输入输出区。4.3 一张典型的映射表长什么样下面是我在某包装线项目里用到的映射思路贴出来供参考。注意不同设备寄存器定义不同结构可以照抄地址务必以你设备手册为准。网关缓冲区偏移ETHERCAT侧方向Modbus TCP侧操作对应设备用途输出字节0-1PLC→网关06/16写保持寄存器变频器速度给定输出字节2-3PLC→网关06/16写保持寄存器变频器启停控制字输入字节0-1网关→PLC03读保持寄存器变频器运行频率反馈输入字节2-3网关→PLC03读保持寄存器变频器输出电流输入字节100-149网关→PLC04读输入寄存器温控表温度采集输入字节150-199网关→PLC01读线圈远程IO开关状态映射表建完相当于把Modbus世界里一个个零散的寄存器地址翻译成了ETHERCAT世界里一段连续的缓存区。PLC程序里只需要读写这个缓存区所有Modbus设备的数据就像本地IO一样被访问。4.4 字节序和地址偏移新手最爱翻车的地方Modbus寄存器每个16位占两个字节。这两个字节在缓冲区里的高低顺序不同网关的实现可能不同。顺序没匹配好时PLC读到的数值会表现得非常诡异本来1600读出来变成6.25或者两个值互相错位非常容易让人怀疑硬件坏了。地址偏移问题更加隐蔽也更容易浪费调试时间。很多设备手册上写频率地址40001但在标准Modbus协议报文中实际数据地址是0x0000。有的配置工具会主动帮你做这个偏移换算有的不会换算规则不一致时配置出来的地址要么整体前移一位要么后移一位表现出来就是每个数据都对应上但内容全部错位。我现在的习惯是任何一台新设备接入前先用通用Modbus调试工具直接对着设备读写一遍确认地址和字节序完全正确再把这些确认过的参数填进网关映射表。不要直接凭设备手册闭眼填这一步能避免后面绝大部分莫名其妙的数据错乱问题。5. 毫秒级对话实测时间都花在哪里有了正确的映射表就进入实际验证环节。我在某个模拟产线测试环境里做了完整的时延测试结论很好但拆开看数据后对毫秒级的理解会更准确。5.1 测试条件ETHERCAT总线周期1ms。网关Modbus TCP侧轮询周期先设置100ms。下挂设备一台支持Modbus TCP的变频器实测响应时间约10ms。测试工具PLC编程软件在线监控、通用Modbus调试软件。测试方法很简单在PLC程序里往输出区写入一个速度设定值同时在Modbus调试软件里观察变频器侧是否收到了对应数值反过来在变频器里修改运行状态观察PLC输入区多久能读到变化。5.2 从PLC下发一个设定值的完整链路我往PLC输出区偏移0写入速度给定1600对应Modbus侧的40001寄存器。点击在线更改后大致经历以下过程ETHERCAT主站在下一个周期最多1ms把数据更新到网关输出缓冲区。网关内部把ETHERCAT输出缓存里的数据拷贝到Modbus发送缓冲区这个过程是微秒级。网关等待下一次Modbus TCP轮询到达因为轮询周期是100ms最坏情况要等将近100ms。变频器收到报文后解析并执行响应时间大约10ms。实测下来从PLC写入数值到变频器侧读到变化平均在120ms左右。反向从变频器改状态字到PLC读到也稳定在130ms量级。这个数字对工艺参数下发和状态监控来说已经非常舒服了。5.3 把测试结果拆开看把不同轮询周期下的实测数据整理成表能更清楚看到时间到底花在哪里Modbus轮询周期平均端到端延迟最大抖动适用场景50ms约70ms±25ms设备响应快、点位少100ms约120ms±30ms产线监控、参数下发200ms约210ms±40ms仪表类慢速设备整体延迟基本等于一个ETHERCAT周期 一个轮询周期 设备响应时间也就是网关的处理时间非常短真正占时间的是Modbus TCP侧的轮询节奏和被控设备本身的响应速度。想缩短整体延迟优先调轮询周期其次选响应更快的设备而不是去折腾网关本身。5.4 诚实的结论毫秒级对话确实能实现而且表现稳定。但必须清醒认识到这里的毫秒级指的是过程控制层面的数据刷新不是运动控制层面的轴同步精度。如果做的是温度控制、速度给定、状态监控这套链路完全合格如果要做高速位置锁存或多轴插补请绕开网关直接用原生ETHERCAT伺服别拿网关去顶这个位置。6. 调试中躲不开的坑这个环节写几个我在现场真实踩过的坑每一个都真实浪费过我的时间。有些问题看起来很小排查起来却能耗掉大半天。6.1 IP冲突一次翻车复盘最早调类似网关时我把Modbus TCP口的IP随便填成了PLC同一网段的地址结果整个网络一会儿通一会儿断。排查了很久才意识到Modbus TCP侧和ETHERCAT侧虽然物理上是两个独立网口但它们都连着同一个调试电脑电脑上有多个网卡路由表混乱后发往PLC的数据包和发往网关的数据包互相干扰。现在的规范做法是ETHERCAT侧按PLC编程软件的规范配置Modbus TCP侧独立规划网段并固定IP电脑调试时把两张网卡的网段严格区分必要时禁用不用的网卡。这样网络路由才干净。6.2 轮询周期调得太短反而更慢刚开始调某变频器时我追求更高实时性把网关Modbus轮询周期从100ms改到了20ms。结果变频器响应跟不上大量请求超时重传最终现象是数据刷新一会儿快一会儿慢PLC里偶尔读到旧值仪表盘一样的跳动。原因是Modbus从站设备内部主控大多在10ms到50ms级别处理一个请求轮询周期比设备响应还短时设备就频繁超时。后来把轮询周期拉回100ms数据稳定得一批。记住一句话轮询周期要按最慢的从站设备决定不是越小越好。6.3 从站断电重连主站侧恢复不过来调试现场还遇到过这样的情况某台Modbus从站设备施工时断电了恢复供电后PLC侧的数据却一直停在断电前那一刻新数据怎么都不进来。一开始以为是网关坏了后来发现是网关Modbus主站在遇到从站无响应后默认进入等待重试状态而重试参数设置得比较保守。解决方法是进入网关配置打开断线自动重连功能把重试间隔设为3到5秒重试次数设大一些。同时建议在PLC侧程序里对网关输入区加上心跳计数器每收到一次新数据就递增计数超时未变化就报警这样现场出问题时第一时间就能判断是通信断了还是设备真停了。6.4 寄存器偏一和字节序问题这个坑前面提过但值得单独讲一个实例。某次接温控表手册上明确写温度寄存器地址是40001我在网关配置里填了40001结果PLC里读到的温度值跟表头显示完全对不上。后来用通用Modbus调试软件直接读这台温控表发现在协议层面数据地址其实是0x0000而网关配置工具内部已经做了减一处理我又在界面上填了一次偏一等于双重偏移。最后把配置改成0数据就正常了。我说这个例子是想提醒配置工具之间差异很大有的按协议地址填有的按人机地址填。每换一个品牌的设备、每换一款配置工具都要用调试软件先打一个点验证规则再批量填表。6.5 日常排障手段看网关LED灯状态ETHERCAT侧OP状态灯和Modbus TCP侧通信灯是否正常。进入网关状态页面查看错误计数和最后一条错误码很多问题直接就有文字提示。用通用Modbus TCP调试软件直接访问下游设备能快速判断问题出在网关还是设备本身。必要时候用抓包软件抓取502端口报文确认请求有没有发出去、响应有没有回来。这些手段组合使用基本能覆盖99%的通信故障场景。7. 除了联调它还能用在哪儿这样一套ETHERCAT转Modbus TCP/IP的链路除了最常见的新PLC带旧设备场景还有几个场景也相当实用。7.1 老产线改造老产线PLC升级是常事新PLC往往采用ETHERCAT总线旧设备里的变频器、仪表大多还是Modbus TCP/IP。全部换掉成本太高全部保留又和新系统对话不上。网关是这里面的最小改动方案只加一个小盒子旧设备一条网线接过来新PLC按ETHERCAT从站管理整线就能重新跑起来。7.2 非标设备快速交付非标设备项目工期紧主控用高端ETHERCAT PLC各种仪器仪表采购周期长的往往只有Modbus TCP接口。用网关统一接入配置量小半天就能把通信打通不用等定制IO模块也不用为几种不同的通讯协议分别写驱动程序。7.3 数据采集与上位机对接很多现场除了PLC自身控制还需要把设备运行数据送给上位机。ETHERCAT总线本身不友好对外开放但网关把Modbus设备数据映射进PLC数据区之后PLC这侧就等于有了一个统一的数据汇总区上位机无论从PLC这里读还是从网关侧取数都变得简单清晰。8. 最后几句实在话网关本身不是一个复杂设备但能不能用好取决于你有没有把通信链路当成一个整体来设计。IP怎么规划、哪个端口接哪里、谁来发起通信、寄存器怎么映射、轮询周期设多少、断线了怎么恢复这些问题都要在接线之前想清楚而不是等设备到场了边接边想。我调过几次之后最大的体会是别把网关当万能转接头。它有自己的技术边界和配置逻辑用对了就是连接新旧设备最省心的一座桥用错了它会变成整个项目里最难排查的故障源。上面写的这些步骤和坑你照着做大概率能比我第一次调试时从容很多。也希望这篇东西能帮你少熬几个夜。
阅读完成 · 觉得有帮助?
咨询建站