Modbus 通讯协议(超详细,简单易懂)
目录
一、协议中的寄存器定义
二、协议概述
三、使用串口的Modbus 报文帧
编辑 3.1、Modbus ASCII 模式
3.2、Modbus RTU 模式
3.3、功能码概要
3.4、Modbus 报文分析
四、什么是RS-485 RS-232?
一、协议中的寄存器定义
- 想得到按键输入状态时,读取到的是一位数据;
- 想控制 LED 时,需要输出一位数据,想读取 LED 当前状态时,也可以读取到一位数据
- 想读取参数时,读取到的“输入寄存器”,得到多位数据,比如 16 位数据
- 想设置参数时,写的是“保存寄存器”,写入的是多位数据,比如 16 位数据;也可以 读“保存寄存器”
各种寄存器名字花里胡哨的,其实最大区别就是有的可读可写,有的只可读,还有就是可操作的位数量不一样! 有的是位操作,有的是多位操作(在 Modbus 中,多位操作时都是 16 位(2bytes)的)。
- bit 操作涉及的寄存器有 2 类:线圈状态(可读可写)、离散输入状态(只读)
- 16bit 操作的寄存器有 2 类:保存寄存器(可读可写)、输入寄存器(只读)
寄存器种类 | 说明 |
线圈状态 | 输出端口。可设定端口 输出状态,也可以读取该位 的输出状态。 |
离 散 输入状 态 | 输入端口。通过外部设 定改变输入状态,可读但不 可以写 |
保 持 寄 存 器 | 输出参数或保持参数, 控制器运行时被设定的某些 参数,可读可写 |
输 入 寄 存 器 | 输入参数。控制器运行 时从外部设备获得的参数, 但可读不可写 |
序号 | 读写 | 储存类型 | 储存区名称 | 区号 |
1 | 只读 | bit类型 | 离散型 | 1 |
2 | 读写 | bit类型 | 线圈 | 0 |
3 | 只读 | 16bit类型 | 输入寄存器 | 3 |
4 | 读写 | 16bit类型 | 保持寄存器 | 4 |

但是这么多的地址,现实中我们根本用不完,所以就有了短地址模型 :
二、协议概述

它和IIC协议一样都是多从,但是IIC只能和单一丛机联系,但是 Modbus 不一样,他有单播模式和广播模式。
单播模式:
单播模式。主设备仅仅 寻址单个从设备 ,从设备接收并处理请求后,向主设备 返回一个响应报文,即应答 。在这种模式下,一个 Modbus 事务处理包含两个报文:一个是主设备的请求报文,另一个是从设备的响应报文。每个从设备必须有唯一的地址 (地址范围为 1~247) ,这样才能区别于其它从设备,从而可以独立被寻址,同时主设备不占用地址。
广播模式:
广播模式。此种模式下,主设备可以向所有从设备发送请求指令,而从设备在接收到广播指令后仅进行相关指令的事务处理,而不要求返回应答。因此广播模式下,请求指令必须是 Modbus 标准功能中的写指令。根据 Modbus 标准协议的要求,所有从设备必须接收广播模式下的写指令,且地址 0 被保留,用来识别广播通信
Modbus协议说明:
Modbus诞生于1979年 莫迪康公司 后来被施耐德电气公司收购。Modbus提供通用语言用于彼此通信的设备和设备。
Modbus已经成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式。Modbus作为目前工业领域应用最广泛的协议
最简单的说,Modbus就是一个总线通信协议,像IIC SPI这种,但是他不依赖于硬件总线
Modbus之所以使用广泛,是有他的优点的
- Modbus协议标准开放、公开发表且无版权要求
- Modbus协议支持多种电气接口,包括RS232、RS485、TCP/IP等,还可以在各种介质上传输,如双绞线、光纤、红外、无线等
- Modbus协议消息帧格式简单、紧凑、通俗易懂。用户理解和使用简单,厂商容易开发和集成,方便形成工业控制网络
三、使用串口的Modbus 报文帧
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,本质就是一串数据。
Modbus 报文是指主机发送给从机的一帧数据,其中包含着从机的地址,主机想执行的操作,校验码等内容
Modbus 使用串口中一共有两种模式:Modbus ASCII 模式和Modbus RTU 模式,常用的就是Modbus RTU 模式,Modbus ASCII 模式了解一下即可!
3.1、Modbus ASCII 模式

需要注意的是,在消息中的每个字节都作为两个ASCII字符发送
十六进制的0-F 分别对应ASCII字符的0…9,A…F,也就是0x30~0x3A 0x41~0x46

3.2、Modbus RTU 模式
Modbus 协议 RTU 报文格式如下所示:
帧结构 = 从机地址 + 功能码 + 数据 + 校验
3.3、功能码概要
Modbus 标准在协议中规定了以下 3 类 Modbus 功能码。
公共功能码:
- 被明确定义的功能码;
- 保证唯一性;
- 由 Modbus 协会确认,并提供公开的文档;
- 可进行一致性测试;
- 包括协议定义的功能码和保留将来使用的功能码。
- 有两个用户自定义功能码区域,分别是 65~72 和 100~110;
- 用户自定义,无法保证唯一性。

3.4、Modbus 报文分析
这里我们就主要分析RTU模式就好了,因为这个模式最常用!
读取保存寄存器报文解析:
我们点击Display查看接收的信息的格式: 如果忘记报文帧可以回头看看:帧结构 = 从机地址 + 功能码 + 数据 + 校验
其中数据包括起始地址+寄存器数量的高低位: 我们是从0开始一次性读取10个寄存器,所以起始地址高低位都为00,而A对应的就是10.
那么丛机回应的信息格式:
需要关注的是字节数,因为保存寄存器都是16位的,假如有N个寄存器,所以对应的字节数量就是2N个字节,这里有10个寄存器,所以就会有20个字节,HEX14对应的就是DEC的20。
后面的就是每个寄存器的高低位和CRC校验位了。
温馨提示:如果是线圈,每个寄存器都是一位,所以答应报文中的字节数需要将寄存器数N/8,然后如果有余数家需要+1.
例:有9个线圈寄存器,9/8=1......1,所以需要+1,所以就需要两个字节。
四、什么是RS-485 RS-232?
我们在看Modbus的时候,经常会看到485串口,232串口,这些是什么呢?
RS232,RS485是一种电平标准
数据在通信双方之间传输,本质是传输物理的电平 比方说传输5V的电压 -1V的电压信号,这些物理信号在传输过程中会受到很多干扰,比方说你传输一个5V的电压,到了接收端可能就变成了4.8V,并且通信的双方高低电平的参考电压可能不同。
那么这个时候就需要一个电平标准,来判断多少V的电压是高电平 1,多少V的电压是低电平 0 这就诞生了 RS-485 RS-232
RS232:是电子工业协会(Electronic Industries Association,EIA) 制定的异步传输标准接口,同时对应着电平标准和通信协议(时序),其电平标准:+3V~+15V对应0,-3V~-15V对应1。
- 全双工
- 逻辑1:-15V–5V
- 逻辑0:+3V–+15V
RS485:RS485是一种串口接口标准,为了长距离传输采用差分方式传输,传输的是差分信号,抗干扰能力比RS232强很多。两线压差为-2~-6V表示0,两线压差为+2~+6V表示1
- 半双工
- 逻辑1:+2V~+6V
- 逻辑0: -2V~ -6V
注意485的电平指的是485-A和485-B两根传输线,两线间的电压差。而不是传输线上的电压
相关文章:
Modbus 通讯协议(超详细,简单易懂)
目录 一、协议中的寄存器定义 二、协议概述 三、使用串口的Modbus 报文帧 编辑 3.1、Modbus ASCII 模式 3.2、Modbus RTU 模式 3.3、功能码概要 3.4、Modbus 报文分析 四、什么是RS-485 RS-232? 一、协议中的寄存器定义 阅读 Modbus 协议时会发现它的概念别扭…...
单细胞测序试验设计赏析(一)
单细胞测序试验设计赏析(一) 单细胞测序试验设计中,单细胞测序技术通常会结合其它的技术来共同说明问题,或者结合年龄、性别等临床数据,进行分层分析说明问题以下以发表文章来进行一定的分析。 Single-cell RNA seque…...
ES6入门---第二单元 模块三:对象新增、
一:对象简洁语法: 1、变量简洁 <script>let name Strive;let age 18;let json {name, //name:name,age //age:age};console.log(json);</script> 2、函数简洁 let json {name, //name:name,age, //age:age/* showA:functi…...
多元随机变量协方差矩阵
主要记录多元随机变量数字特征相关内容。 关键词:多元统计分析 二元随机变量(X, Y) 说明:可以理解变量中的 X为身高、Y为体重 总体协方差 σ X Y c o v ( X , Y ) E [ ( X − μ X ) ( Y − μ Y ) ] E ( X Y ) − μ X μ Y \sigma_{XY}cov(X, Y)E[…...
计算机网络-同等学力计算机综合真题及答案
计算机网络-同等学力计算机综合真题及答案 (2003-2024) 2003 年网络 第二部分 计算机网络(共 30 分) (因大纲变动因此 2004 年真题仅附真题,不作解析。) 一、填空题(共 10 分&#…...
[案例二] 菜单条制作(Menuscript)与工具条制作(Toolbar)
最近五一正好毕业论文盲审,抽时间研究一下菜单条制作(Menuscript)与工具条制作(Toolbar)的制作,在NX二次开发中唐康林老师已经讲的很详细了,在这里只对视频中的内容进行总结,并且根据自己的想法进行补充。在里海博主的直播教学中发现一个很有趣的NX图标工具,本人大概做了一…...
bellard.org : QuickJS 如何使用 qjs 执行 js 脚本
参阅上一篇:Fabrice Bellard(个人网站:bellard.org)介绍 Fabrice Bellard(个人网站:bellard.org)是计算机领域最具影响力的程序员之一,其贡献跨越多个技术领域并持续推动开…...
计组复习笔记 3
前言 继续做例题。昨天做到第一个就把我难住了。可恶。 4.1 地址码越长,操作码越短。因为两者加起来是指令字,指令字的大小一般是固定的。扩展编码按照操作码从短到长进行编码。算了先放一下。我先看一下别的复习资料。等会儿再看这个题。 鼓励自己 …...
GCD 深入解析:从使用到底层实现
前言 Grand Central Dispatch (GCD) 是 Apple 基于 C 语言开发的一套完整的并发编程框架。它不仅仅是一个简单的线程管理工具,而是一个高度优化的并发编程解决方案。GCD 的设计理念是将并发编程的复杂性封装在框架内部,为开发者提供简单易用的接口。本文…...
JavaScript中的AES加密与解密:原理、代码与实战
前言 关于有js加密、js解密,js业务相关,找jsjiami官网站长v。 另外前段时间做了个单子跑单了,出售TEMU助手。eller点kuajingmaihuo点com的全自动化助手,可以批量合规,批量实拍图,批量资质上传等。 一、A…...
计算机组成原理实验(7) 堆指令部件模块实验
实验七 堆指令部件模块实验 一、实验目的 1、掌握指令部件的组成方式。 2、熟悉指令寄存器的打入操作,PC计数器的设置和加1操作,理解跳转指令的实现过程。 二、实验要求 按照实验步骤完成实验项目,掌握数据打入指令寄存器IR1、PC计数器的…...
Windows系统下Node.js环境部署指南:使用nvm管理多版本
Windows系统下Node.js环境部署指南:使用nvm管理多版本 一、Node.js介绍二、为什么需要nvm?三、安装前的准备工作1. 本次环境说明2. 卸载现有Node.js(如有) 三、nvm-windows安装步骤1. 下载安装包2. 安装过程3. 验证安装 四、使用n…...
数据结构*队列
队列 什么是队列 是一种线性的数据结构,和栈不同,队列遵循“先进先出”的原则。如下图所示: 在集合框架中我们可以看到LinkedList类继承了Queue类(队列)。 普通队列(Queue) Queue中的方法 …...
C语言蓝桥杯真题代码
以下是不同届蓝桥杯C语言真题代码示例,供参考: 第十三届蓝桥杯省赛 C语言大学B组 真题:卡片 题目:小蓝有很多数字卡片,每张卡片上都是数字1-9。他想拼出1到n的数列,每张卡片只能用一次,求最大的…...
Sharding-JDBC分库分表中的热点数据分布不均匀问题及解决方案
引言 在现代分布式应用中,使用Sharding-JDBC进行数据库的分库分表是提高系统性能和扩展性的常见策略。然而,在实际应用中,某些特定的数据(如最新订单、热门商品等)可能会成为“热点”,导致这些部分的数据处…...
Dagster中的Ops与Assets:数据管道构建的两种选择
Dagster是一个强大的数据编排平台,它提供了多种工具来帮助数据工程师构建可靠的数据管道。在Dagster中,Ops和Assets是两种核心概念,用于定义数据处理逻辑。本文将全面介绍Ops的概念、特性及其使用方法,特别补充了Op上下文和Op工厂…...
thonny提示自动补全功能
THONNY IDE 自动补全功能配置 在 Thonny IDE 中启用和优化自动补全功能可以显著提升编程体验。为了确保该功能正常工作,需要确认几个设置选项。 配置自动补全 Thonyy IDE 的自动补全默认情况下是开启的。如果发现自动补全未按预期运行,可以通过调整首选…...
PyTorch_阿达玛积
阿达玛积指的是矩阵对应位置的元素相乘,可以使用乘号运算符,也可以使用mul函数来完成计算。 代码 import torch import numpy as np # 1. 使用 mul 函数 def test01():data1 torch.tensor([[1, 2], [3, 4]])data2 torch.tensor([[5, 6], [7, 8]])dat…...
蓝桥杯 摆动序列
摆动序列 原题目链接 题目描述 如果一个序列的奇数项都比前一项大,偶数项都比前一项小,则称为一个摆动序列。 即对于任意整数 i(i ≥ 1)满足: a₂ᵢ < a₂ᵢ₋₁,a₂ᵢ₊₁ > a₂ᵢ 小明想知道&…...
AI 与生物技术的融合:开启精准医疗的新纪元
在科技飞速发展的今天,人工智能(AI)与生物技术的融合正在成为推动医疗领域变革的重要力量。精准医疗作为现代医学的重要发展方向,旨在通过深入了解个体的基因信息、生理特征和生活方式,为患者提供个性化的治疗方案。AI…...
三、shell脚本--运算符与表达式:让脚本学会“思考”
一、算术运算符:加减乘除取模 在我们写shell脚本时,做点基本的数学运算还是经常需要的。常用的算术运算符跟我们平时学的一样: : 加- : 减* : 乘 (小提示:有时候在某些命令里可能需要写成 \*)/ : 除 (在 Shell 里通常是取整数部分…...
c++ 指针参数传递的深层原理
指针参数传递的深层原理 理解为什么可以修改指针指向的内容但不能直接修改指针本身,需要深入理解指针在内存中的表示方式和函数参数传递机制。 1. 指针的内存表示 指针本质上是一个变量,它存储的是另一个变量的内存地址。在内存中: 假设有…...
【查看.ipynp 文件】
目录 如何打开 .ipynb 文件? 如果确实是 .ipynp 文件: .ipynp 并不是常见的 Jupyter Notebook 文件格式。通常,Jupyter Notebook 文件的扩展名是 .ipynb(即 Interactive Python Notebook)。如果你遇到的是 .ipynb 文…...
C++ 简单工厂模式详解
简单工厂模式(Simple Factory Pattern)是最简单的工厂模式,它不属于GoF 23种设计模式,但它是工厂方法模式和抽象工厂模式的基础。 概念解析 简单工厂模式的核心思想是: 将对象的创建逻辑集中在一个工厂类中 客户端不…...
ubuntu使用apt安装软件
1、使用apt list |grep jdk查看要安装的软件 此处以jdk为例 2、执行名称:安装指定版本的软件 sudo apt install openjdk-11-jdk...
TFT(薄膜晶体管)和LCD(液晶显示器)区别
TFT(薄膜晶体管)和LCD(液晶显示器)是显示技术中常见的术语,二者既有联系又有区别。以下是它们的核心区别和关系: 1. 基本概念 LCD(液晶显示器) LCD是一种利用液晶材料特性控制光线通…...
【文献阅读】中国湿地随着保护和修复的反弹
一、研究背景 滨海湿地是全球最具生态价值的生态系统之一,广泛分布在河口、潮间带、泻湖和盐沼等地带,在调节气候、水质净化、生物栖息以及防止海岸侵蚀等方面发挥着关键作用。然而,近年来滨海湿地正面临严峻威胁,全球估计约有50%…...
用Ensaio下载GIS数据
文章目录 简介重力场绘制 简介 Ensaio在葡萄牙语中是随笔的意思,是一个用于下载开源数据集的python库。其底层基于Pooch来下载和管理数据。 Ensaio可通过pip或者conda来安装 pip isntall ensaio conda install ensaio --channel conda-forge由于这个库功能较为单…...
【算法基础】递归算法 - JAVA
一、递归基础 1.1 什么是递归算法 递归算法是一种通过函数调用自身来解决问题的方法。简单来说,就是"自己调用自己"。递归将复杂问题分解为同类的更简单子问题,直到达到易于直接解决的基本情况。 1.2 递归的核心要素 递归算法由两个关键部…...
连续变量与离散变量的互信息法
1. 互信息法简介 互信息(Mutual Information, MI) 是一种衡量两个变量之间相互依赖程度的统计量,它来源于信息论。互信息可以用于评估特征与目标变量之间的相关性,无论这些变量是连续的还是离散的。互信息法是一种强大的特征选择…...
java_Lambda表达式
1、背景 lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式和一个代码块)。La…...
Python Cookbook-6.17 NuIl对象设计模式的实现
任务 你想减少代码中的条件声明,尤其是针对特殊情况的检查。 解决方案 一种常见的代表“这里什么也没有”的占位符是 None,但我们还可以定义一个类,其行为方式和这种占位符相似,而且效果更好: class Null(object):Null对象总是…...
Java接口全面教程:从入门到精通
目录 接口的基本概念 接口的特性 1. 访问修饰符 2. 接口中的常量 3. 接口中的方法 3.1 抽象方法(传统用法) 3.2 默认方法(Java 8 引入) 3.3 静态方法(Java 8 引入) 3.4 私有方法(Java …...
Power Query精通指南3:数据库(查询折叠与数据隐私)、批量合并文件、自定义函数
文章目录 九、批量合并文件9.1 案例背景9.2 合并文件的标准流程9.3 示例:合并文件9.3.1 连接到文件夹9.3.1.1 连接到本地 / 网络文件夹9.3.1.2 连接到 SharePoint 文件夹9.3.1.3 连接到 OneDrive for Business9.3.1.4 连接到其他文件系统 9.3.2 筛选文件9.3.3 合并文…...
Python 学习
这里主要是为了记录我学习Python的过程,更多是使我规范书写Pyhton语言! 1. 第一章 Python 定义:一种解释型的语言,区别于其他的高级语言,逐行翻译进行执行。 过程:首先编写编程语言,利用Pytho…...
生成式 AI 的优势
在科技飞速发展的今天,人工智能已经不再是一个遥不可及的概念,而是逐渐渗透到我们生活的方方面面。其中,生成式 AI 更是如同一颗璀璨的新星,在人工智能的浩瀚星空中闪耀着独特的光芒。它究竟有哪些令人瞩目的优势,又为何会成为我们这个时代无法忽视的存在呢? 生成式 AI …...
Hal库下备份寄存器
首先要确保有外部电源给VBAT供电 生成后应该会有这两个文件(不知道为什么生成了好几次都没有,复制工程在试一次就有了) 可以看到stm32f407有20个备份寄存器 读写函数 void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t Backup…...
P1537 数字反转(升级版)详解
这个题目还是对于新手比较锻炼思维严谨性的,我认为是在我做过的一些题目中,此题算上等马 先看题目 我先说明我自己的思路,以及这个题目你需要特别注意的地方 1,数字反转,①可用<algorithm>库里面的reverse函数…...
operator 可以根据需要重载 == 运算符进行比较
要将 vector<AppInfo> 类型的 A 和 B 两个容器进行比较,并且当 B 中有 A 中没有的元素时,插入到数据库中,你可以通过以下步骤实现: 比较元素:遍历 vector<B>,检查每个元素是否在 vector<A&…...
网格不迷路:用 CSS 网格生成器打造完美布局
前言 你是否曾因写错 grid-template-areas 而捶键盘?是否在面对千层嵌套的复杂布局时,瞬间怀疑人生,甚至思考要不要转行去卖奶茶?别慌,CSS 网格生成器闪亮登场,像拼乐高一样,帮你轻松搭建网页结构,还能自动输出干净代码,堪称“前端界的乐高大师”。让我们放下枯燥的代…...
Go小技巧易错点100例(二十八)
本期分享: 1. runtime.Caller(1)获取调用者信息 2. for循环 select{}语法 正文: runtime.Caller(1)获取调用者信息 在 Go 语言中,runtime.Caller(1) 是 runtime 包提供的一个函数,用于获取当前 goroutine 的调用堆栈中的特定…...
Java变量简介
Java变量 -为什么需要变量? 一个程序就是一个世界 变量是程序的基本组成单位 不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位,比如: //变量有三个基本要素(类型+名称+值) class Test{public static void main(String [largs){int a=1;int b=3:b=89;Syst…...
Java快速上手之实验六
1. 编写ItemEventDemo.java,当选中或取消选中单选钮、复选钮和列表框时显示所选的结果。 2.编写GUIExample.java,当选中或取消选中单选钮、复选钮时在标签中显示相应结果。 import javax.swing.*; import java.awt.*; import java.awt.event.…...
【算法应用】基于灰狼算法优化深度信念网络回归预测(GWO-DBN)
目录 1.深度信念网络(Deep Belief Networks, DBNs)2.灰狼算法GWO原理3.结果展示4.参考文献5.代码获取6.读者交流 1.深度信念网络(Deep Belief Networks, DBNs) 深度信念网络(Deep Belief Networks, DBNs)是…...
基于Spring Boot实现STDIO通信的MCP Server与验证
STDIO 是一种基于标准输入输出(Standard Input/Output)的本地通信机制,旨在实现客户端与服务端之间的高效交互。 STDIO 是 MCP 协议支持的传输方式之一,通过操作系统的管道机制(stdin/stdout)进行数据传输,适用于客户端与服务端在同一台机器上的本地通信场景。 本篇基于…...
springboot基于推荐算法的景点推荐系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 本景点推荐系统采用B/S架构,数据库是MySQL,网站的搭建与开发采用了先进的Java进行编写,使用了协同过滤推荐算法和Spring Boot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。前台主要功能包括:用户…...
【LeetCode Hot100】栈篇
前言 本文用于整理LeetCode Hot100中题目解答,因题目比较简单且更多是为了面试快速写出正确思路,只做简单题意解读和一句话题解方便记忆。但代码会全部给出,方便大家整理代码思路。 20. 有效的括号 一句话题意 验证括号序列有效性。 一句话…...
IO模型和多路复用
一、IO模型的基础理解 什么是IO? IO全称是 Input/Output(输入/输出),在计算机科学里主要指程序与外部设备(硬盘、网络、用户终端等)进行数据交换的操作。首要特点是: IO通常很慢(从CPU和内存的视角看)经常需要等待外部设备响应1. 为什么要谈IO模型? 当一个程序需要…...
私人医生通过AI分析基因数据,是否有权提前告知癌症风险?
首席数据官高鹏律师团队编著 在精准医疗的浪潮中,私人医生借助AI技术解析基因数据、预判癌症风险,已成为高端医疗服务的“隐形标配”。然而,这一技术的光环之下,潜藏着法律与伦理的复杂博弈——医生是否有权基于AI的基因分析提前…...
day 11 超参数调整
一、内参与外参(超参数) 内参是模型为了适应训练数据而自动调整的,是模型内部与训练数据紧密相关的因素,不同的训练数据会导致模型学习到不同的参数值,这些参数在模型训练完成后就固定下来。 超参数是在模型训练前需…...