做工业自动化快十五年,每次新人问我学啥通信协议——我脱口而出:Modbus。别笑!这玩意儿1979年出生,比我年纪还大,可现在车间里跑得欢的,还是它。你说气不气人?说起来,我当年刚入行,师傅丢给我一根西门子S7-200的编程电缆,让我去连一个温控器的Modbus RTU,结果折腾了两天两夜,就因为波特率没设对……那时候我就明白了,这个老家伙虽然简单,但一丁点错就给你颜色看。
。它没有什么复杂的对象模型,就四个东西:线圈、离散输入、保持寄存器、输入寄存器。用功能码去读去写,03读保持寄存器,06写单个,16写多个——就这些。协议栈薄得不像话,一个51单片机都能跑。而且,施耐德当年公开了它,不收专利费,谁都能用。这就导致今天,从ABB的DCS到汇川的变频器,甚至一个百来块的温控表,都带Modbus口。
硬件上,Modbus RTU通常骑在RS-485物理层上。两线差分,挂一堆设备,最远能传1200米。485这玩意儿也耐造,工厂里大的变频器干扰得示波器波形跟刺猬似的,它照样通。不过话说回来,485布线不能图省事,一定要手拉手菊花链,别弄星型——我有个项目吃了大亏,信号反射搞得数据错一片,最后加了终端电阻和信号中继器才搞定。
问:Modbus RTU和ASCII到底选哪个?我真的见过有人用ASCII连设备……
答:别傻了!除非你的设备老到只能发ASCII码,或者线路干扰大到RTU的紧凑帧都扛不住——但我告诉你,从99年开始我就没碰过ASCII模式。RTU用二进制,同样的信息量,报文长度比ASCII短一半。比如读一个寄存器,RTU请求8字节,ASCII要17字节,带宽浪费不说,解析还慢。而且RTU有CRC16校验,ASCII用的是LRC,纠错能力差远了。所以,✅记住:能用RTU绝不ASCII!
Modbus TCP出现得晚一些,把串口那套报文塞进TCP包里,用502端口。帧里加了个MBAP头,主要是事务元标识和长度,去掉了从站地址,用IP区分设备。听起来挺美——网线一插,不用配485参数了。我前几年给一个水厂做集控,上层SCADA走Modbus TCP去采下面几十个RTU,结果发现轮询周期忽快忽慢。查了好几天,起初怀疑网络交换机环路了,后来发现是SCADA软件默认发了改线圈的命令,结果TCP的确认机制一拥塞,整个链路就喘起来了。最后在从站侧做了命令过滤,才消停。
问:那用Modbus TCP就不需要CRC了吗?万一出错了怎么办?
答:问得好!TCP/IP协议栈本身有CRC32和重传机制,所以Modbus TCP把CRC校验去掉了,减轻CPU负担。但别太天真——有一次我用无线网桥传Modbus TCP,延时一大就丢包,TCP重传反而搞挂了整个轮询周期。后来我干脆在应用层加了冗余校验,自己弄了个简易的CRC。所以,不是说有了TCP就万事大吉,❗关键看你的链路质量和实时性要求。
问:都说Modbus是主从结构,那多个主站能共存吗?
答:理论上不行,一个RS-485网络上只能有一个主站。你敢接俩主站上去,总线电平打架,得不偿失。但你可以用网关或者高级PLC做中转。比如西门子1200两边都做主站,或者用Modbus TCP就允许多客户端同时连接。不过话说回来,多主站场景下,我更推荐用Modbus TCP或者干脆上OPC UA,别自己折腾485的多主。
坦白说,工业4.0、IIoT天天喊,OPC UA、MQTT、Profinet一堆新协议虎视眈眈。但你去长三角珠三角的工厂看看,流水线上跑得最欢的还是Modbus。为啥?改造花钱啊!一套老设备换个通信模块成本不比买台新设备低。于是,聪明的做法是上个边缘网关,把Modbus RTU转成MQTT上云。市面上百来块的DTU都能干这事。施耐德他们也在推Modbus Security,用TLS加密,不过用的人还不多。我觉得吧,至少未来十年,Modbus还是数据采集的基本功。而且去年我调试一个新出的机器人控制器,嘿,它居然还留着RS-485口,支持Modbus从站——你看,厂家都不敢砍掉这个口。
当然,Modbus也不是没有创新。2020年Modbus组织发布了Modbus over Bluetooth和Modbus TCP client/server扩展,甚至还有Modbus Safety(安全仪表系统用的),虽然还没大面积铺开。但说明这个老头也在尽力打扮自己。🦾
写到这里,忽然想起上个月面试一个应届生,他说学校只教了Profinet和EtherCAT,我问Modbus懂吗,他一脸茫然。我只能叹气:孩子,工业现场的破烂,你躲不掉的。
就这样吧,Modbus这东西,骂归骂,但每次去现场,看到那些挂着蛛网的PLC,闪着绿灯的485转接器,心里还是会有一丝踏实。也许等我退休了,这个老家伙还在工厂里吭哧吭哧传着数据。
免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:Modbus协议:就这么个“老古董”,工业圈里咋还没淘汰? https://www.dachanpin.com/a/tg/57469.html