Modbus协议你必须知道的十件事情

2025-07-16 16:27:12 钡铼技术

—— 看似简单的协议,其实一点都不简单

工业物联网关


1

 它比很多程序员都老

Modbus协议是1979年由Modicon公司搞出来的,那时候还没有互联网,更别说什么5G了。它是工业通信界的“爷爷辈”,但至今还在坚强服役,活跃在PLC、电表、温湿度传感器等各类设备中。


2

RTU 和 TCP,不是一个味儿

Modbus RTU 是串口协议(用RS485或232线连的),Modbus TCP 是以太网协议(网口的)。它俩“长得像”,但“走的路不一样”。别想着一个驱动搞定两种,直接套用只会调不通。


3

它不主动发消息,得你先问

Modbus是个“社恐协议”,自己不说话,全靠主设备一个个轮着问:“你那边数据有了吗?”它不支持MQTT那种“我有消息就推给你”的玩法,所以实时性差点意思。


4

常用功能码没你想象的多

Modbus指令多?其实常用的就这几个:

  • 01:读开关量(线圈)

  • 03:读模拟量(保持寄存器)

  • 05:写一个开关

  • 06:写一个数值

  • 15/16:一次写多个开关/寄存器

其他功能码?大部分人一辈子都用不上。


5

没加密,数据是“裸奔”的

Modbus的数据是明文传输的,谁在网络中“蹲守”,都能看到你采集了什么值。想安全点,就得靠VPN、TLS等方式“穿件衣服”,否则很容易被“偷听”甚至被“改数”。


6

最多只能带247个设备

Modbus RTU里,从设备的地址范围是1~247。理论上可以接247个从站,但现实里你挂太多设备,主机轮询就忙不过来,通信速度越来越慢,掉线、超时的情况说来就来。


7

03和04,有时候压根没区别

标准上说:

  • 03:读“保持寄存器”

  • 04:读“输入寄存器”

但很多设备厂家懒得分这两个区域,直接都放在一个地方了——你用03或04,拿到的数据可能一样,只不过名字不一样,别太认真。


8

地址40001,其实是0

文档里写40001,你要是真在程序里填40001,就惨了。从设备可能直接懵了:“这是谁?”因为实际发送的地址是从0开始的,40001 = 0,40002 = 1,以此类推。Modbus这个“地址系统”,经常让人脑袋打结。


9

RTU里那个CRC校验,小小一个却至关重要机

你发的每一条Modbus RTU指令,最后两个字节都是校验码,确保传输没出错。如果CRC不对,从设备压根不理你。很多时候设备“装死”,问题就出在这。


10

不同厂家的Modbus ≠ 相同的Modbus

Modbus虽然是标准协议,但每家厂商的实现都不一样,有的从0开始,有的从1开始;有的高字节在前,有的低字节在前;有的用整数,有的用浮点……通用驱动?听起来很美,真用起来——小心翻车。


深圳市钡铼技术有限公司提供全系列 Modbus协议转换网关与解决方案可实现 Modbus 与多种工业协议之间的灵活互通,包括:

微信公众号

首页
产品
案例
联系钡铼