
在工业自动化和物联网领域,Modbus 可以说是最常见、最“入门级”的通信协议之一。它历史悠久、简单易用、开放标准,被广泛应用在 PLC、传感器、仪表、远程 I/O 等设备的通信中。
但是,很多刚接触 Modbus 的同学,常常会被寄存器地址、功能码、RTU/TCP 区别这些细节绕晕。这里总结了 5 个快速入门的小技巧,帮你理清思路,避免踩坑。
技巧一:先搞清楚 RTU 和 TCP 的区别Modbus 协议本身是一种应用层协议,可以跑在不同的传输层之上:
Modbus RTU:基于串口(RS-232/RS-485),数据包紧凑,常用于现场设备之间的点对点或总线通信。
Modbus TCP:基于以太网,直接封装在 TCP/IP 报文里,支持更高的速率和更远的传输距离。
入门建议:
如果你在玩嵌入式或串口设备,从 RTU 入手更直观。
如果是工业网关、服务器对接,直接用 TCP 更方便。
技巧二:记住常见的功能码Modbus 通过 功能码(Function Code) 来定义操作类型。常用的就几条:
01:读线圈(Coil)
02:读离散输入(Discrete Input)
03:读保持寄存器(Holding Register)
04:读输入寄存器(Input Register)
05:写单个线圈
06:写单个保持寄存器
16:写多个保持寄存器
入门建议:先掌握 03 和 06,基本能覆盖大部分场景,其他的用到再查。
技巧三:别被寄存器地址迷惑Modbus 的“地址”常常让新手一脸懵:
官方文档里会写 40001、30001、00001 这种编号。
但协议实际传输的是 偏移量(从 0 开始)。
比如:
Holding Register 的 40001,实际上在报文里地址是 0x0000。
如果你要读第 2 个保持寄存器(40002),偏移就是 0x0001。
入门建议:
记住:应用层编号 ≠ 协议层地址。
不同厂家可能编号习惯不同,调试时多试几次对照文档。
技巧四:学会看报文结构很多人用 Modbus 的时候只会调用库函数,但一旦出错就不知所措。其实,只要学会看报文结构,就能快速定位问题。
以 Modbus RTU 为例:
从站地址(1 byte)
功能码(1 byte)
数据区(N byte)
CRC 校验(2 byte)
只要抓一帧数据,对照功能码和寄存器,就能判断是地址错了、功能码不支持,还是 CRC 校验失败。
入门建议:抓包工具推荐:
串口助手(RTU)
Wireshark(TCP)
技巧五:善用开源工具和库想入门 Modbus,不一定要从零写代码。市面上有很多开源库和工具,足够支撑开发和调试:
工具:Modbus Poll、QModMaster(测试读写寄存器)
Python 库:pymodbus
C 库:libmodbus
入门建议:先用工具模拟主站/从站,把功能码和寄存器跑通,再嵌入到项目里。
总结Modbus 协议虽然老,但依然是工业通信的“常青树”。入门关键在于:
弄懂 RTU 和 TCP 的区别。
记住常用功能码。
别被寄存器地址误导。
能看懂报文结构。
熟练使用工具和库。
只要掌握这 5 个技巧,你就能在短时间内快速上手 Modbus,少走弯路。