一文看懂 Modbus RTU 协议:核心架构、报文解析与现场调试避坑指

一文看懂 Modbus RTU 协议:核心架构、报文解析与现场调试避坑指

目录

一、 核心架构:主从式结构 (Client/Server)

二、 常见传输模式:RTU 与 TCP

三、 数据模型:四类存储寄存器

四、 常用功能码 (Function Codes)

五、 报文结构示例 (Modbus RTU)

六、 常见问题与排查思路


一、 核心架构:主从式结构 (Client/Server)

Modbus 采用典型的主从式通信模型

主站 (Master/Client):唯一的指令发起方,同一网络内同一时刻仅存在一台主站,负责主动查询从站数据 / 下发控制指令;

从站 (Slave/Server):指令被动响应方,每台从站配备唯一站号(ID),仅在被主站点名调用时反馈数据 / 执行指令,无主动发送数据的权限;

  • 注意: 从站不会主动发送数据,只有在被主站“点名”后才会做出应答。

二、 常见传输模式:RTU 与 TCP

虽然 Modbus 的应用层逻辑一致,但物理层传输方式主要分为以下两种:

对比维度

Modbus RTU

Modbus TCP

通信架构

主从式半双工(一主多从,同一时间仅一台设备发数据)

客户端 / 服务器式全双工(支持多客户端并发访问)

传输速率

600~115200 bps

10/100/1000 Mbps

地址标识

(1~247)区分设备

IP 地址 + 端口号(默认 502)区分设备

传输距离

RS-485 总线最长 1200 米(可加中继延长)

以太网有线传输最长 100 米(交换机 / 光纤可拓展)

抗干扰性

RS-485 差分传输,抗电磁干扰能力强

需做好以太网防雷、防静电措施

三、 数据模型:四类存储寄存器

Modbus 将数据抽象为四个基本的表。理解这四张表,就理解了数据该如何读写:


四、 常用功能码 (Function Codes)

主站通过“功能码”告诉从站要做什么。最常用的功能码如下:

01 (Read Coils): 读线圈状态

02 (Read Discrete Inputs): 读线圈状态输入

03 Read Holding Registers): 读保持寄存器

04 Read Input Registers): 读输入寄存器

05 (Write Single Coil): 写单个线圈

06 (Write Single Register): 预置单个寄存器

15 (Write Multiple Coils): 写多个线圈

16 (Write Multiple Registers):预置多个寄存器

五、 报文结构示例 (Modbus RTU)

请求帧结构

站号

命令号

起始地址

寄存器数量

校验位

一个字节

一个字节

个字节

个字节(N)

个字节

响应帧结构

站号

命令号

字节数

数据

校验位

一个字节

一个字节

个字节(2N)

N*2个字节

两个字节

我们以一个称重仪表的数据点表来举例

根据该点表显示皮重数据的寄存器地址为40001、40002,两个寄存器

假设台秤站号为10号,则主站发送的请求帧为

站号

命令号

起始地址

寄存器数量

校验位

0A

03

00 00

00 02

70 C5

台秤响应帧应为

站号

命令号

字节数

数据

校验位

0A

03

04

00 00 00 00

F3 40

六、 常见问题与排查思路

在现场调试 Modbus 时,如果通信不通,请按以下顺序排查:

  1. 物理连接:
    1. 通信异常时,需逐一校验 RS-485 D+/D- 接线极性、RS-232 TX/RX 收发交叉关系;若使用网关其串口指示灯状态是判断链路通断的核心依据,可通过灯态来快速定位问题;
    2. 核查总线拓扑是否合规:从站需采用手拉手串联方式,终端电阻仅在总线两端设备并联启用;
  2. 参数匹配:波特率(Baud rate)、数据位、停止位和校验位(N,8,1 或 E,8,1)两端必须完全一致
  3. 设备 ID:确认从站站号是否冲突或设置错误
  4. 偏置地址:注意“0-based”与“1-based”地址的区别。有些说明书写地址 1,但在报文中需要发 0。例如Modbus 40001在报文中是00 00;注意读取的寄存器数量不要超出从站的上限

本期 Modbus RTU 技术分享就到这里。

下期我们将对 MODBUS RTU 其他功能码进行详解,以及相对应的错误报文解析。

从功能码的场景化落地应用,到错误报文的快速定位排障,全是工业现场可直接复用的实操干货。

点击关注本企业号,第一时间获取更新,技术成长不迷路!

Read more

C++火中取栗 2024年9月c++二级 电子学会中小学生软件编程C++等级考试二级真题答案解析

C++火中取栗 2024年9月c++二级 电子学会中小学生软件编程C++等级考试二级真题答案解析

C++火中取栗 2024年9月 C++编程等级考试二级真题解析 博主推荐 * 所有考级比赛学习相关资料合集【推荐收藏】 1、C++专栏  1. 电子学会C++一级历年真题解析 2. 电子学会C++二级历年真题解析 3. 蓝桥杯C++选拔赛真题解析 4. 信息素养大赛C++算法编程挑战赛  2、Python专栏 1. 蓝桥杯python选拔赛真题详解 2. 蓝桥杯python省赛真题详解 3. 蓝桥杯python国赛真题详解 4. 信息素养大赛python编程挑战赛 5. python等级一级真题解析【电子学会】 6. python等级二级真题解析【电子学会】 7. python等级三级真题解析【电子学会】 一、题目要求 1、编程实现 据法国诗人拉封丹的寓言《猴子与猫》里说,猴子骗猫取火中的栗子,

By Ne0inhk
C++手撕红黑树:从0到200行,拿下STL map底层核心

C++手撕红黑树:从0到200行,拿下STL map底层核心

文章目录 * C++手撕红黑树:从0到200行,拿下STL map底层核心 * 1. 红黑树的概念 * 1.1 红黑树的规则 * 1.2 红黑树如何确保最长路径不超过最短路径的2倍? * 1.3 红黑树的效率 * 2. 红黑树的实现 * 2.1 红黑树的结构 * 2.2 红黑树的插入 * 2.2.1 插入的大概过程 * 2.2.2 情况1:变色 * 2.2.3 情况2:单旋 + 变色 * 2.2.4 情况3:双旋 + 变色 * 2.3 红黑树的插入代码实现 * 2.

By Ne0inhk
扒透 STL 底层!map/set 如何封装红黑树?迭代器逻辑 + 键值限制全手撕----《Hello C++ Wrold!》(23)--(C/C++)

扒透 STL 底层!map/set 如何封装红黑树?迭代器逻辑 + 键值限制全手撕----《Hello C++ Wrold!》(23)--(C/C++)

文章目录 * 前言 * map和set的封装 * 底层红黑树的模拟实现 * 迭代器的模拟实现 前言 你是不是也有过这种 “知其然不知其所以然” 的困惑: 用 map 存键值对、用 set 去重排序时很顺手,但一被问 “map 的 [] 怎么既插入又访问”“set 为啥不能改元素”“它们底层的红黑树到底存的啥”,就瞬间卡壳?甚至看 STL 源码时,被 “KeyOfT”“迭代器 ++ 逻辑” 绕得晕头转向? 其实 map 和 set 的本质,就是对红黑树的 “定制化封装” —— 红黑树是 “通用骨架”,map 和 set 通过 “提取键的规则(KeyOfT)”“迭代器权限控制”“键值修改限制”,分别适配了 “键值对存储”

By Ne0inhk
初学者:《C++ STL容器入门:手把手教你使用常用容器》

初学者:《C++ STL容器入门:手把手教你使用常用容器》

🎬 博主名称:个人主页 🔥 个人专栏: 《算法通关》,《Java讲解》 ⛺️心简单,世界就简单 目录 序言 vector 倍增思想: 一,初始化 常用函数 遍历方式 黑科技 pair 定义方式 取出元素方式 构造一个pair 用来干嘛 string 常用函数 操作 queue队列 priority_queue优先队列 常用函数 如何构造小根堆 stack 栈 常用函数 deque 双端队列 set,multiset 常用函数 map,multimap unordered_set,  unordered_map,   unordered_multiset,  unordered_multimap 序言 我们今天来讲一下 vector

By Ne0inhk