蹲在产线控制柜旁半小时,我才搞懂Modbus为啥能活40多年

上个月去无锡的一家气动元件加工厂,帮他们排查一条装配线的通讯故障。那天36度,控制柜里的温度快摸到45度,我蹲在那扒拉端子排上的线,裤腿蹭了一层黑油。折腾了快四十分钟,问题找着了——通讯线的屏蔽层被老鼠咬断了,接的还是老掉牙的Modbus RTU。

那堆拧在端子排上的小黑盒,到底在说啥

Modbus本质上就是一套固定格式的“传话规则”。没有啥加密,没有啥复杂的身份验证。就像车间里两个班组的工人,约好见面了先递个小纸条:我是3号工位的,我现在要问你要当前的压力值。你收到纸条了,就按照约定的格式把数值写在纸条上递回来。

1979年Modicon公司搞出来的,本来是配自家的PLC用,结果直接把协议公开了,不收专利费。这一下就炸开锅了。谁都能用,谁都能改。

产线控制柜内Modbus通讯线接线端子特写
产线控制柜内Modbus通讯线接线端子特写

最开始的Modbus,跑在RS485线上,两芯线,半双工——说白了就是一根线上,不能同时说话,你说完我说,我说的时候你听着。最远能传1200米,一条线上最多挂32个设备。我第一次用这东西的时候还是刚毕业,拿个USB转485的头,接在电脑上,读温控表的数值,跳出来一串十六进制的数,当时觉得这东西太原始了,跟现在用的WiFi、蓝牙比,简直是祖宗辈的。

别把Modbus当什么上不了台面的老古董

刚入行的时候我真这么想。觉得这协议慢,帧结构简单,没有冗余,没有安全机制,跟现在那些吹得天花乱坠的工业以太网协议比,差远了。

直到那次加热炉的故障。

汗顺着后颈流下来。

当时客户的加热炉一直触发超温保护,查了热电偶是好的,查了PLC的AI模块是好的,查了温控表的参数是好的,最后拿调试软件抓Modbus的通讯帧,才发现——表上实际显示的是182度,PLC读过来的数是582度。差在哪?字节序。不同厂家的Modbus设备,对16位寄存器的高低字节排序,没有统一的强制标准。温控表默认是高字节在前,PLC那边的驱动默认是低字节在前,就这一点点差别,读出来的数能翻好几倍。

Modbus RTU协议帧结构与字节序对比示意图
Modbus RTU协议帧结构与字节序对比示意图

很多人吐槽Modbus的坑:没有统一的寄存器地址映射,每个厂家的点表都得自己导,你买个A厂家的变频器,跟B厂家的变频器,同样是读运行频率,寄存器地址可能一个是40001,一个是40101,要是没看手册,光靠猜,能踩一下午的坑。半双工的通讯效率低,挂的设备多了,轮询周期长,要是读几十个设备的数值,可能一秒钟都刷不完一次。

那为啥不扔了它?

稳。

真的稳。

车间里啥环境?电焊机一开机,电磁干扰能让旁边的触摸屏闪屏,变频器的谐波能把模拟量信号飘出去几十度。Modbus的帧结构简单到离谱,从站收到一帧数据,先算CRC校验,对不上就直接扔,根本不跟你扯别的。我见过最夸张的现场,485线的屏蔽层没接,甚至中间断了一股线,剩下的一根芯线加地线,愣是跑了三年没出过大问题。换别的娇气的工业协议,早罢工八百回了。

老东西的生命力,从来不是靠堆功能

现在的Modbus,早就不是当年那个只能跑在RS485上的老东西了。有跑在以太网上的Modbus TCP,速度快,距离远,甚至还有跑在物联网模块上的Modbus,能把设备数据直接传到云平台。但是不管怎么改,核心的功能码定义、寄存器读写规则,跟40年前第一版的协议,几乎没有差别。

为啥不搞点新花样?

因为所有的设备厂家,早就把这套规则刻进骨子里了。你现在去买个压力变送器,买个温度传感器,买个小型PLC,产品手册上列的支持协议,打头的肯定是Modbus。没有厂家敢说自己的设备不支持Modbus——真不支持,客户转头就去买别家的。

我上次跟个做仪表的厂家工程师喝酒,他说他们新出的智能仪表,加了振动监测、温度预警、云端分析一堆功能,卖之前客户问的头一句永远是:“能接老PLC不?支持Modbus不?” 你要是说不支持,再花哨的功能,客户都不掏这个钱。

说个我至今没完全摸透的细节:Modbus里写单个寄存器用功能码06,写多个寄存器用功能码16,我在不同厂家的PLC上试过,同样的写操作,有时候用06的响应速度快一倍,有时候又反过来,至今也没找到个统一的规律,干了快十年现场,还是会在这种小细节上踩坑。

昨天路过那个气动元件厂,老电工又蹲在控制柜旁边,手里拿个破笔记本,屏幕上跳着十六进制的通讯帧。没有什么高大上的技术,没有什么复杂的架构。就是简单,可靠,能把数据从A传到B,不出错。

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:蹲在产线控制柜旁半小时,我才搞懂Modbus为啥能活40多年
文章链接:https://zystgy.cn/a/63588