第二课 · Modbus RTU:工业界的"普通话"

2026-11-04
  • 2

第二课 · Modbus RTU:工业界的"普通话"

上一课搞懂了串口和协议的概念。这一课讲工业界最常用的串口协议——Modbus RTU:主从机制、帧结构、功能码、CRC 校验,全部讲透。学会它,全世界的 PLC、变频器、电表你都能对话。

1. Modbus 是什么

Modbus 是一种主从式(Master/Slave)通讯协议,RTU 是它跑在串口(RS485)上的形态。

所谓一主多从:

主从机制

  • 主站发起请求,从站负责应答,从站永远不会主动说话

  • 一条总线上只有一个主站,最多可以挂 247 个从站

  • 每个从站有唯一的地址,范围 1 ~ 247,地址 0 留作广播

主站像点名老师:问 1 号,1 号答;问 2 号,2 号答。没人问的时候,从站就安安静静待着。


2. RTU 帧结构:四段式

一帧 RTU 报文由四部分组成:

帧结构

部分长度作用
地址1 字节发给哪个从站(1 ~ 247)
功能码1 字节要干什么(读 / 写)
数据长度可变寄存器地址、数量、写入值等
CRC162 字节校验码,判断传输有没有出错

还有个容易忽略的细节:帧与帧之间至少要有 3.5 个字符时间的静默,接收方靠这段"安静"来判断一帧从哪开始、到哪结束。所以串口助手连续发送时粘包,很多时候就是静默时间不够。


3. 常用功能码

功能码就是"动词",告诉从站要执行什么动作:

常用功能码

功能码动作说明
03读保持寄存器最常用,读传感器数据
06写单个寄存器改参数、下命令
10(16)写多个寄存器批量下发
04读输入寄存器读只读数据
01 / 02读线圈 / 输入离散量读开关量

记住 03 和 06 就能应付大部分现场:一个读、一个写。


4. 完整例子:读从站 1 的两个寄存器

请求:主站要读从站 1、从地址 0 开始的 2 个寄存器:

请求报文

01     03     00 00     00 02     C4 0B
地址   功能码  起始地址   寄存器数   CRC16

应答:从站正常响应:

应答报文

01     03     04       00 0A 00 14        B4 06
地址   功能码  字节数    数据(2 个寄存器)   CRC16

逐段解读:

  • 01:从站 1 在回答

  • 03:功能码原样返回,表示"我执行的是读"

  • 04:后面有 4 个数据字节(2 个寄存器 × 2 字节)

  • 00 0A = 10,00 14 = 20:两个寄存器的值

  • B4 06:从站对这帧算出的 CRC

注意请求和应答的字节数变化:请求里数据是"起始地址 + 数量"(4 字节),应答里多了一个字节数字段,因为主站需要知道后面跟了几个字节。


5. 出错怎么办:异常响应

如果地址不存在、功能码不支持,从站不会沉默,而是返回异常响应:

01     83       02       ...
地址   功能码+80  异常码

两个特征:功能码最高位置 1(03 → 0x83),后面跟一个异常码(01 = 非法功能,02 = 非法地址,03 = 非法数据……)。看到 0x8x 开头的应答,别慌,去查异常码表就行。


6. RS485 组网实战

多设备组网时的注意事项:

RS485 总线

轮询机制:主站依次询问从站 1、2、3……同一时刻只允许一问一答(半双工的物理限制决定的)。

终端电阻

组网检查清单:

项目要求
地址每个从站唯一,不能重复
通讯参数波特率、校验位、停止位全部一致
终端电阻总线两端各加 120Ω,吸收反射信号
线材屏蔽双绞线,减少干扰
超时重试某从站掉线不能拖垮整个总线
轮询周期= 各从站响应时间 + 帧间隔的总和

7. 应用与调试

Modbus RTU 的应用面极广:PLC、变频器、电表、温控表、称重变送器……几乎所有的工业仪表都支持。它也常通过网关转成 Modbus TCP 接入 SCADA 系统(第六课详讲)。

调试时的顺序:

  1. 先确认串口参数(波特率 / 校验 / 停止位)一致;

  2. 用串口调试助手发报文(下一课手把手做);

  3. 重点看 CRC 对不对、应答字节数对不对;

  4. 没有应答先查 A/B 线有没有接反。


8. 本课小结:四个关键词

主从 · 地址 · 功能码 · CRC
  • 主从:主站问、从站答,一问一答

  • 地址:1~247,总线上唯一

  • 功能码:03 读、06 写

  • CRC:两个字节的校验,错了就丢弃

下一篇,我们把传感器接进来:称重传感器是怎么把重量变成电信号的。

微信二维码

扫码添加微信