Modbus RTU 通信格式详解学习笔记

news/2025/11/3 20:28:18/文章来源:https://www.cnblogs.com/LunaNorth/p/19188249

1️⃣ 核心思想:Modbus RTU 报文 = 一封结构化的“电报”

想象一下,你要给朋友发一封电报:

  • 你得先告诉邮局:“这封信是给谁的?” → 对应 从站地址
  • 然后告诉邮局:“这封信里说了什么?” → 对应 功能码 + 数据部分
  • 最后,为了确保信件没有被篡改,你还要加一个“验证码” → 对应 校验部分

Modbus RTU报文就是这样一个结构化的“电报”,它由三个主要部分组成:

✅ Modbus RTU报文结构:
[从站地址] + [功能码] + [数据部分] + [校验部分]

我们下面会逐一分解每一个部分。


2️⃣ 第一部分:从站地址(Slave Address)

🔹 定义

  • 这是报文的第一字节,用来指定这封“电报”是发给哪个设备的。
  • 在Modbus网络中,通常有一个主站(Master,如电脑、PLC)和多个从站(Slave,如传感器、变频器)。
  • 主站通过“从站地址”来区分不同的从站设备。

🔹 取值范围

  • 1 ~ 255(十进制)
  • 其中,0 是广播地址(不常用),255 是保留地址。
  • 实际应用中,常用的地址是 1 ~ 247

🔹 举例说明

假设你的网络中有3个设备:

  • 设备A:地址 01
  • 设备B:地址 02
  • 设备C:地址 03

当你想读取设备B的数据时,你发送的报文第一个字节就是 02

一句话总结
从站地址 = 收件人地址,告诉设备“这封信是给你的”。


3️⃣ 第二部分:功能码(Function Code)

🔹 定义

  • 这是报文的第二字节,用来告诉从站“你想干什么”。
  • 功能码决定了接下来的数据部分应该包含哪些内容。

🔹 取值范围

  • 1 ~ 8(实际上有更多,但常用的是这8个)
  • 每个功能码对应一个特定的操作,比如“读取线圈”、“写入寄存器”等。

🔹 常用功能码速查表

功能码 (Hex) 功能描述 操作对象
01 读取输出线圈 输出线圈 (0区)
02 读取输入线圈 输入线圈 (1区)
03 读取输出寄存器 输出寄存器 (4区)
04 读取输入寄存器 输入寄存器 (3区)
05 写入单个线圈 输出线圈 (0区)
06 写入单个寄存器 输出寄存器 (4区)
0F 写入多个线圈 输出线圈 (0区)
10 写入多个寄存器 输出寄存器 (4区)

💡 记忆口诀

  • 取功能码:01, 02, 03, 04 → 数字顺序排列,很好记!
  • 入功能码:05, 06 是单个;0F, 10 是多个。

🔹 举例说明

你想读取设备 01 的输出寄存器(地址 40001),那么功能码就是 03

所以,报文的前两个字节是:01 03

一句话总结
功能码 = 你想做什么,告诉设备“我要读/写什么数据”。


4️⃣ 第三部分:数据部分(Data Part)

这是报文的核心部分,包含了具体的“操作参数”。数据部分的长度不是固定的,它取决于功能码。

🔹 数据部分的结构

数据部分可以分为两种情况:

📌 情况1:配合功能码(用于读取操作)

当功能码是“读取”类(01, 02, 03, 04)时,数据部分包含:

  • 起始地址:2个字节(高字节+低字节)
  • 长度:2个字节(高字节+低字节)

总长度2 + 2 = 4 字节

🧩 举例说明

你想读取设备 01 的输出寄存器,从地址 40001 开始,读取1个寄存器:

  • 起始地址:40001 的相对地址是 0(因为地址从1开始,偏移量从0开始),所以是 00 00
  • 长度:读1个寄存器,所以是 00 01

数据部分 = 00 00 00 01

完整报文前6个字节 = 01 03 00 00 00 01

📌 情况2:配合功能码(用于写入操作)

当功能码是“写入”类(05, 06, 0F, 10)时,数据部分包含:

  • 写入地址:2个字节(高字节+低字节)
  • 数据:N个字节(N取决于要写入多少数据)

总长度2 + N 字节

🧩 举例说明

你想写入设备 01 的输出寄存器,地址 40001,写入值 1234(十六进制 04D2):

  • 写入地址:40001 的相对地址是 0,所以是 00 00
  • 数据:04 D2(2个字节)

数据部分 = 00 00 04 D2

完整报文前6个字节 = 01 06 00 00 04 D2

一句话总结
数据部分 = 操作的具体参数,告诉设备“从哪里开始”、“写入什么数据”。


5️⃣ 第四部分:校验部分(Checksum)

🔹 定义

  • 这是报文的最后两个字节,用来保证报文的准确性和完整性。
  • 如果在传输过程中数据被干扰或篡改,校验码就会不匹配,接收方会丢弃这个报文。

🔹 校验方式

  • Modbus RTU 使用 CRC(循环冗余校验),这是一种非常可靠的校验算法。
  • CRC校验码是根据前面所有字节(从站地址到数据部分)计算出来的。

🔹 计算方法(简单理解)

虽然CRC的计算公式很复杂,但你不需要手动计算!现代的Modbus软件或库都会自动帮你生成和验证CRC校验码。

📌 举例说明

我们继续上面的例子:

  • 报文前6个字节:01 03 00 00 00 01
  • 计算CRC校验码:84 0A(这是一个固定值,由算法计算得出)

完整报文 = 01 03 00 00 00 01 84 0A

一句话总结
校验部分 = 数据的“验证码”,确保报文在传输过程中没有出错。


6️⃣ 完整报文示例解析

下面我们用一个完整的例子,把前面所有的知识点串起来。

🎯 场景:读取设备 01 的输出寄存器,从地址 40001 开始,读取1个寄存器。

📌 步骤1:确定从站地址

  • 设备地址 = 01

📌 步骤2:确定功能码

  • 读取输出寄存器 = 03

📌 步骤3:确定数据部分

  • 起始地址:40001 的相对地址是 000 00
  • 长度:读1个寄存器 → 00 01
  • 数据部分 = 00 00 00 01

📌 步骤4:计算校验部分

  • CRC校验码 = 84 0A(由软件自动计算)

📌 最终报文(十六进制):

01 03 00 00 00 01 84 0A

📌 报文结构分解:

部分 字节位置 内容 说明
从站地址 第1字节 01 发送给设备1
功能码 第2字节 03 读取输出寄存器
数据部分 第3-6字节 00 00 00 01 起始地址0,读1个寄存器
校验部分 第7-8字节 84 0A CRC校验码

恭喜你!你已经掌握了Modbus RTU报文的完整结构!


7️⃣ 常见问题与避坑指南

❓ 问题1:为什么我发送的报文没有响应?

  • 可能原因
    1. 从站地址错误 → 检查设备地址是否正确。
    2. 功能码错误 → 检查功能码是否匹配存储区。
    3. 数据部分错误 → 检查起始地址和长度是否正确。
    4. 校验码错误 → 使用正确的CRC算法计算校验码。
    5. 通信参数错误 → 检查波特率、数据位、停止位、校验位是否一致。

❓ 问题2:CRC校验码怎么计算?

  • 不要手动计算! 使用Modbus调试软件或编程库(如Python的pymodbus)自动生成。
  • 如果你一定要手动计算,可以使用在线CRC计算器,选择“Modbus RTU CRC16”。

❓ 问题3:报文长度是多少?

  • 报文长度不是固定的,它取决于功能码和数据部分。
  • 最短报文:从站地址(1) + 功能码(1) + 校验(2) = 4字节(如写入单个线圈)
  • 最长报文:理论上可达256字节(受协议限制)

🚨 重要提醒
Modbus RTU协议规定,报文之间必须有3.5个字符时间的静默间隔,否则会被认为是同一个报文。这个细节在调试时很重要!


8️⃣ 实战模拟:手把手教你构造报文

假设你现在有一个任务:

“我要写入设备 02 的输出线圈,地址 00001,设置为‘开’(值为1)。”

📌 步骤1:确定从站地址

  • 设备地址 = 02

📌 步骤2:确定功能码

  • 写入单个线圈 = 05

📌 步骤3:确定数据部分

  • 写入地址:00001 的相对地址是 000 00
  • 数据:设置为“开” → FF 00(Modbus规定,开=FF00,关=0000)
  • 数据部分 = 00 00 FF 00

📌 步骤4:计算校验部分

  • CRC校验码 = 8C 4B(由软件自动计算)

📌 最终报文(十六进制):

02 05 00 00 FF 00 8C 4B

你已经成功构造了一个写入报文!


🎯 下一步学习建议

  1. 动手实践:使用Modbus调试软件(如Modbus Poll, QModBus),输入不同的地址、功能码和数据,观察返回结果。
  2. 学习CRC校验:虽然不需要手动计算,但了解其原理有助于深入理解协议。
  3. 阅读设备手册:任何Modbus设备都会在手册中列出支持的功能码、地址范围和通信参数,一定要学会看手册!
  4. 学习Modbus TCP:这是以太网上的Modbus协议,结构更简单,适合网络通信。

希望这篇超详细的笔记能帮你彻底搞懂Modbus RTU通信格式!记住,Modbus RTU报文就像一封结构化的“电报”,每个字节都有它的特定含义。只要掌握了这套规则,你就能轻松应对各种工业通信场景。加油,你已经迈出了成为工业通信高手的关键一步!💪

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/954866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Selenium3+Python3 自动化项目项目实战day1

HTML CSS JavaScript HTMl总体脉络 CSS皮肤组织 JavaScript二者神经组织 HTML 超文本标记语言 HTMl元素 HTML表单 CSS JaveScript

P1.python环境的配置和安装

P1.python环境的配置和安装1.1CUDA安装: 1.查看CUDA Version 在终端输入nvidia-smi2.下载安装配置CUDA1.2python3.8安装 C:\Users\ASUS\AppData\Local\Programs\Python\Python381.3Anaconda安装 1.软件下载安装测试一…

Python 中可变对象的“引用赋值”特性——可变对象的“引用传递”

一、踩坑代码 某程序老鸟讲了一个故事: “2019年夏天,我在做一个推荐系统的用户画像模块。当时写了这样的代码: # 当时的蠢代码,现在想起来都脸红 default_preferences = [] # 想着所有用户共享一个默认偏好 user…

CSP-S 2025 游寄喵

使用了新的文风喵……希望能缓解气氛喵……poi 酱写下这篇游记的时候大概心态很炸喵……不过还是尽量收住了我的垃圾情绪喵,如果不慎伤到您的话欢迎指出喵……poi 酱谢罪喵……(跪着) 如果您有帮到 poi 酱没有 ack …

Modbus协议分类及测试学习笔记

只是两个人相处,那么喜欢一个人,可能会觉得她所有都好,但是以后在一起了,就要学会喜欢她的不好。记住,Modbus不是一种协议,而是一套“通信规则”,它可以在不同的“交通工具”上运行 1️⃣ 核心思想:Modbus是“…

MarkDown初入

MarkDown学习 标题 几个“#”后+一个空格,就是几级标题,最多6级 文字修饰 Hello,Word! 前后+”**“是+粗 一个”*“斜体 三个就是全都要 双波浪就是划掉 Hello,Word! Hello,Word! Hello,Word! 引用学习狂神教…

英语_作文_8AU3_Curiosity

Curiosity is one of the most important qualities the human have.It let us have ability to explore the unknown. We always asked "why", even we found our question‘s answers surpringly and amaz…

习题-极大原理

习题1. 若\(a\)和\(b\)是两个实数,当\(b-a\)为正有理数时定义\(a\prec b\),证明这是\(\mathbb{R}\)上的一个严格偏序。它的极大全序子集是什么?2. (a) 设\(\prec\)是集合\(A\)中的一个严格偏序,\(A\)中的一个关系\…

极大原理

我们已经说过,由选择公理可以得到任意集合都能良序化这一深刻的定理。在数学中,选择公理还有更加重要的推论。这里所提及的“极大原理”有多种版本。在1914年至1935年间,多位数学家曾对极大原理独立地予以论述,他们…

P7. TensorBoard的使用(一)

P7. TensorBoard的使用(一)7.1SummaryWriter类使用 1.官方文档对SummaryWriter的介绍 按住Ctrl,点中SummaryWriter点击查看代码 Writes entries directly to event files in the log_dir to be consumed by TensorB…

二分搜索优化DP(子序列问题)

P1020 [NOIP 1999 提高组] 导弹拦截 题解 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一…

如何从手机内部恢复数据?2025年9大最佳手机数据恢复软件

如何从手机内部存储中恢复数据?手机存储着许多重要数据,例如照片、视频、短信和其他文件。如果您的手机损坏且无法访问,该怎么办?手机中存储的所有重要文件都丢失了,或者您不小心删除了重要文件。接下来,我们将向…

如何将数据从 Mac 硬盘恢复数据到电脑:所有方法

需要将数据从 Mac 硬盘传输或恢复到电脑吗?这两项任务都有不同的方法——选择最适合您情况的方法取决于您可用的工具。在本文中,我们将逐步指导您如何将 Mac 数据传输或恢复到电脑。 每种方法都附有简短的摘要,以便…

接口编号

箱式交换机。G 0/0/1 G 表示千兆 X(T, 10) 表示万兆 H(100) 表示十万兆接口编号的第一位数字 槽位号 第二位数字 子卡号,坐标部分的是0,右边部分的是1 第三位 接口号

Windows 10操作技巧:如何在 Windows 10 中恢复永久删除的文件

即使您从PC或笔记本电脑中永久删除了文件或文档,也可以轻松恢复它们。因此,在本文中,我们将介绍一些轻松恢复丢失数据的最佳且最可靠的方法。 添加图片注释,不超过 140 字(可选) 人生难免会犯错。这是我们作为个…

Mac数据恢复:Mac 十大数据恢复软件详细评测

当您的手机或相机已满时,Mac 将成为数据保管者,存储您的照片、视频、音乐和其他重要数据。 然而,一旦珍贵的数据因意外删除或未知原因而丢失,那将是一场巨大的灾难。 Mac 十大数据恢复软件详细评测 幸运的是,这篇…

iPad照片、联系人、笔记恢复工具: iPad 数据恢复软件

您是否正在寻找最佳的 iPad 数据恢复软件,但又不确定选择哪一款?又或者,您已经尝试过一些软件,需要更好的选择?我们对一些顶级恢复工具进行了测试,并找到了真正有效的工具。无论是丢失的照片、联系人还是笔记,这…

2026 年预估适用于 Windows 10_11 的 10 款最佳数据恢复软件

我们使用最优质的硬盘和SD卡来存储所有必要的数据,但是如果您意外丢失数据该怎么办?无论是个人还是专业环境,数据丢失都是很常见的;如果您在办公室犯了这么大的错误,甚至可能会丢掉工作。 适用于 Windows 10/11 的…

2025 年 9 款最佳 PDF 文档管理编辑工具

如果您正在寻找用于管理、旋转、删除、插入、替换和重新排列 PDF 页面的顶级 PDF 整理器,请查看以下列表。我收集了一些用户友好的软件,适合初学者和专业人士,可让您快速整理 PDF 并将其导出为所需的格式。 添加图片…

CF1736C2 Good Subarrays (Hard Version)

设 \(c_i = \max(i - a_i + 1, 1)\),\(p_i\) 为 \(\le i\) 的 \(j\) 中 \(c_j\) 最大的 \(j\) 的值。 那么答案即为 \(\frac{n(n + 1)}{2} + n - \sum p_i\),单点修改使用单侧递归线段树即可。