Modbus RTU 是工业串口通信领域应用范围广泛的协议。PLC、传感器、仪表、变频器——几乎所有支持串口通信的工业设备都支持 Modbus RTU。
这篇文章带你从零开始:接线 → 配置 → 发送第一条命令 → 读到数据。不需要提前掌握任何 Modbus 知识,一步一步跟着做就行。
Modbus RTU 是什么
一句话:Modbus RTU 是跑在 RS485 总线上的通信协议。
主从架构: 一个主站发起请求,从站响应。主站问”你的温度是多少”,从站答”25.6°C”。从站不会主动说话,永远是主站先问。
为什么是工业通信的通用语言: Modbus 协议完全开放、规范简洁、容易实现。发布四十多年来,全球范围内积累了庞大的设备生态。不管你买哪家的温度传感器、电力仪表、变频器,说明书里几乎都会有一章叫”Modbus 通信”。
好消息: 你不需要学完整个 Modbus 规范。掌握两个功能码——03(读保持寄存器) 和 06(写单个寄存器)——就能覆盖 90% 的实际场景。
Modbus RTU 主从架构
主站(Master)
电脑 + USB转485
请求:读寄存器 40001
响应:值 = 256(25.6°C)
从站 #1
温度传感器
从站 #2
电力仪表
RS485 总线(A+ / B- / GND)
主站发起请求 → 指定从站响应 → 其他从站保持沉默
从站不会主动发送数据,永远是主站先问
准备工作
硬件
三样东西:
1. 电脑(Windows 10/11) 2. USB 转 RS485 转接线——推荐摩可灵 CH368(CH343 芯片,免驱)或 CH348A(FT231 芯片,低延迟)。免驱产品插上就能用,不需要额外安装驱动 3. 一台 Modbus RTU 从站设备——温度传感器、电力仪表、变频器等,任何支持 Modbus RTU 的设备都可以
软件
Modbus 调试工具,推荐以下两款:
| 工具 |
费用 |
特点 |
| Modbus Poll |
付费(有试用) |
功能全面,界面直观,工程师常用 |
| ModbusMaster |
免费 |
轻量够用,适合入门 |
确认从站信息
在发送任何命令之前,你需要从设备手册中获取四个参数:
| 参数 |
说明 |
示例 |
| 站地址 |
从站的 Modbus 地址(1~247) |
1 |
| 波特率 |
通信速率 |
9600 |
| 数据格式 |
数据位 / 停止位 / 校验 |
8-N-1(8 数据位、无校验、1 停止位) |
| 寄存器地址 |
你想读的数据在哪个寄存器 |
40001(保持寄存器起始地址) |
这四个参数缺一不可。翻不到手册就找设备厂家要。参数不对,通信一定不上——不是你的线有问题,是参数没配对。
接线
USB 转 RS485 到 Modbus 从站设备,只需要三根线:A+、B-、GND。
Modbus RTU 接线示意
电脑
USB 口
Modbus 调试工具
USB
USB 转 RS485
摩可灵 CH368
(CH343 免驱)
A+
B-
GND
Modbus 从站
温度传感器 / 仪表
/ 变频器 等
三根线:A+ 对 A+,B- 对 B-,GND 对 GND
入门阶段短距离接一台设备,终端电阻可先不接
接线规范的完整说明(A/B 辨别、终端电阻、线缆选型)详见《RS485 接线规范与常见错误:A+/B-/GND/终端电阻全解》。入门阶段只接一台设备、距离很短的话,接对 A/B/GND 三根线就够了,终端电阻可以先不管。
第一次读取数据
步骤一:插上转接线,确认 COM 口
把 USB 转 RS485 转接线插入电脑 USB 口。打开设备管理器(Win+X → 设备管理器),在”端口(COM 和 LPT)”下找到新出现的 COM 口,记住编号(比如 COM3)。
如果用的是免驱产品(CH343 或 FT231 芯片),插上就会出现。如果用的是 CH340 芯片产品,需要先安装驱动,详见《CH340 芯片 USB转串口驱动安装指南(Windows 10/11)》。
步骤二:配置串口参数
打开 Modbus 调试工具,配置连接参数:
| 参数 |
填什么 |
对应手册中的 |
| COM 口 |
步骤一记下的编号(如 COM3) |
— |
| 波特率 |
设备手册中的值(如 9600) |
Baud Rate |
| 数据位 |
通常 8 |
Data Bits |
| 停止位 |
通常 1 |
Stop Bits |
| 校验 |
通常 None |
Parity |
[图片占位:Modbus 调试工具串口配置界面截图——标注每个参数填写位置]
步骤三:发送读取命令(功能码 03)
功能码 03 = 读取保持寄存器(Read Holding Registers)。这是用得多的一个命令。
在 Modbus 工具中设置:
| 参数 |
值 |
含义 |
| Slave ID |
1 |
从站地址(看设备手册) |
| Function |
03 |
读保持寄存器 |
| Start Address |
0 |
起始寄存器地址(注意:有的工具从 0 开始,有的从 1 开始) |
| Quantity |
10 |
读取 10 个寄存器 |
寄存器地址有两种表述方式:Modbus 地址 40001 = 协议地址 0x0000,两者差 40001。有些工具和文档用 Modbus 地址,有些用协议地址。混淆这两种地址是 Modbus 通信中常见的错误之一——如果读不到数据,先检查地址有没有搞混。
点击”发送”或”读取”,如果接线和参数都正确,你会看到返回的数据。
Modbus RTU 数据帧结构(功能码 03:读保持寄存器)
请求帧(主站 → 从站)
01
站地址
03
功能码
00 00
起始地址
00 02
寄存器数量
C4 0B
CRC 校验
从站 #1
读寄存器
从第 0 个
读 2 个
自动计算
响应帧(从站 → 主站)
01
站地址
03
功能码
04
字节数
01 00
寄存器 1
00 64
寄存器 2
XX XX
CRC 校验
2×2=4字节
= 256
= 100
数据含义由设备决定
例:温度传感器返回 256 → 实际温度 25.6°C(原始值 ÷ 10)
步骤四:解读响应
Modbus RTU 的数据帧结构很规整。以读取 2 个寄存器为例:
请求帧(主站发出):
| 字节 |
内容 |
含义 |
| 01 |
01 |
从站地址 |
| 02 |
03 |
功能码(读保持寄存器) |
| 03-04 |
00 00 |
起始寄存器地址(0000 = 第 1 个) |
| 05-06 |
00 02 |
寄存器数量(2 个) |
| 07-08 |
C4 0B |
CRC 校验(工具自动计算) |
响应帧(从站返回):
| 字节 |
内容 |
含义 |
| 01 |
01 |
从站地址 |
| 02 |
03 |
功能码 |
| 03 |
04 |
数据字节数(2 个寄存器 × 2 字节 = 4) |
| 04-05 |
01 00 |
寄存器 1 的值(0x0100 = 256) |
| 06-07 |
00 64 |
寄存器 2 的值(0x0064 = 100) |
| 08-09 |
XX XX |
CRC 校验 |
数据怎么解读: 寄存器返回的是原始数值,具体含义由设备决定。比如温度传感器返回 256,可能表示 25.6°C(原始值除以 10)。这些换算关系在设备手册的寄存器表里都有说明。
写入数据
功能码 06 = 写入单个保持寄存器(Write Single Register)。
比如你要把从站地址 1 的寄存器 0x0010 写入值 100:
| 字节 |
内容 |
含义 |
| 01 |
01 |
从站地址 |
| 02 |
06 |
功能码(写单个寄存器) |
| 03-04 |
00 10 |
寄存器地址 |
| 05-06 |
00 64 |
写入值(100) |
| 07-08 |
XX XX |
CRC |
写入成功后,从站会原样返回这个帧作为确认。
写入操作会实际改变设备状态。比如写变频器的频率寄存器,电机转速会立刻变化。操作前确认目标寄存器的含义和安全范围,不要盲目写入。
Modbus RTU 关键概念速查
常用功能码
| 功能码 |
名称 |
用途 |
| 01 |
读线圈状态 |
读开关量(ON/OFF) |
| 02 |
读离散输入 |
读只读开关量 |
| 03 |
读保持寄存器 |
读数据(温度、电压等) |
| 04 |
读输入寄存器 |
读只读数据(传感器实时值等) |
| 06 |
写单个寄存器 |
写一个数据 |
03 和 06 覆盖绝大多数场景。04 用于读取只读的实时采集值。01 和 02 在数字量 I/O 场景下用到。
数据格式注意事项
大端序(Big-Endian): Modbus 标准规定数据高字节在前。一个 16 位的值 0x0100,传输时先发 01,再发 00。
32 位浮点数: 有些设备用两个连续的 16 位寄存器拼一个 32 位浮点数(IEEE 754)。拼接顺序(高位在前还是低位在前)因设备而异——手册会说明。
CRC 校验: Modbus RTU 帧末尾的 2 字节 CRC-16 校验。调试工具会自动计算,不需要手算。
寄存器地址约定
| 地址范围 |
功能码 |
类型 |
| 00001 ~ 09999 |
01 |
线圈(读写开关量) |
| 10001 ~ 19999 |
02 |
离散输入(只读开关量) |
| 30001 ~ 39999 |
04 |
输入寄存器(只读数据) |
| 40001 ~ 49999 |
03/06 |
保持寄存器(读写数据) |
下一步
读到了第一笔数据,Modbus 入门就完成了。后续根据你的实际需求:
单台设备通了,要接多台设备 → 需要 RS485 集线器做组网。详见《RS485 集线器组网指南:一主多从架构设计与选型》。
通信不稳定,偶尔丢数据 → 详见《RS485 通信不稳定:干扰、断连、乱码的系统排查》。
多台设备波特率不一致 → 摩可灵 CH1402-21C / CH1402-21C1 波特率修改器可以解决。详见《485 波特率修改器使用指南:小程序设置全流程》。
要连接具体品牌的 PLC → 详见各品牌 PLC 配置指南(西门子、三菱、台达等)。