modbus学习笔记(一)

news/2025/4/2 20:18:02/文章来源:https://www.cnblogs.com/dayang12525/p/18803575
Modbus是工业领域应用最广泛的通信协议

主从架构

Modbus 采用主从(Master/Slave)架构。一个主设备可以与多个从设备通信,从设备之间不直接通信。主设备发出命令,从设备响应。

传输方式

Modbus 协议支持以下三种主要传输方式

1. Modbus RTU:基于串行通信的 Modbus 变体,通常使用 RS-232 或 RS-485 作为物理层。数据以二进制形式传输,具有较高的效率和较低的通信开销。
传输介质:RS-485(最常用)、RS-232(短距离)。
数据格式:二进制编码,紧凑高效。
特点:
采用主从轮询机制,支持多设备(最多 247 个从站)。
需配置波特率(如 9600、19200 bps)、数据位(8位)、校验位(无/奇/偶)、停止位(1/2位)。
抗干扰能力强,适合工业环境。
2、Modbus ASCII:另一种基于串行通信的变体,数据以 ASCII 字符形式传输,便于调试,但效率较低。
3、Modbus TCP/IP:基于以太网的 Modbus 变体,通过 TCP/IP 协议进行传输,适用于现代网络环境。
传输介质:以太网(TCP/IP 协议)。
数据格式:基于 TCP 封装的 Modbus 协议(端口号默认 502)。
特点:
支持高速、远距离通信(跨网络)。
无需校验位(由 TCP 保证可靠性),主从地址由 IP 区分。

常见功能码

读取数据的功能码:
01(读线圈):读取开关量状态。
02(读离散输入):读取外部开关信号。
03(读保持寄存器):读取设备的配置参数。
04(读输入寄存器):读取设备实时测量数据。
写入数据的功能码:
05(写单个线圈):控制一个开关量的状态。
06(写单个保持寄存器):调整单个参数值。
15(写多个线圈):一次性控制多个开关量。
16(写多个保持寄存器):同时修改多个参数值。

ModbusRTU的通用报文格式如下:

0
【1】从站地址:这个报文发送给谁或来自于谁。
【2】功能码:要干什么,读/写/线圈/寄存器。
【3】数据部分:配合功能码提供对应的参数。
【4】校验部分:保证报文的正确性和完整性。

通信流程

主站负责向从站发送请求(如读取数据、写入数据)
从站在收到主站的命令时回复数据。
典型通信步骤(以 Modbus RTU 为例)
1、主站发送请求
 
包含:从站地址(1-247)、功能码(如 0x03 读保持寄存器)、起始地址、数据长度、CRC 校验。
 
示例(读取从站 0x01 的保持寄存器 40001,即地址 0x0000):
01 03 00 00 00 01 84 0A
2、从站解析并响应
如果成功,返回:从站地址、功能码、数据字节数、数据、CRC。
示例(返回寄存器 40001 的值 0x00A5):
01 03 02 00 A5 F8 4B
 
3、主站处理数据

调试工具

主站模拟:Modbus Poll、QModMaster
从站模拟:Modbus Slave
以Modbus TCP/IP为例用调试工具调试:
0
 
0
 
0
 

解析通信报文示例

示例报文(Tx:070)
01 64 00 00 00 06 01 03 00 00 00 0A
逐字段解析
字节位置
字段
值(Hex)
说明
1-2
事务标识
01 64
Transaction ID = 356
3-4
协议标识
00 00
Modbus TCP 固定值
5-6
长度
00 06
后续字节数(6字节)
7
单元标识
01
从站地址 = 1
8
功能码
03
读保持寄存器(功能码03)
9-10
起始地址
00 00
起始寄存器地址 = 0(对应40001)
11-12
寄存器数量
00 0A
读取10个寄存器(40001-40010)
请求总结
  • 主站请求读取
从站1 的保持寄存器 40001-40010(共10个寄存器)。
响应报文(Rx)解析
示例报文(Rx:071)
01 64 00 00 00 17 01 03 14 00 02 00 5A 00 6A 1F 42 00 00 00 00 00 00 00 00 00 00 00 17
逐字段解析
字节位置
字段
值(Hex)
说明
1-2
事务标识
01 64
Transaction ID = 356(与Tx匹配)
3-4
协议标识
00 00
Modbus TCP 固定值
5-6
长度
00 17
后续字节数(23字节)
7
单元标识
01
从站地址 = 1
8
功能码
03
读保持寄存器(功能码03)
9
字节计数
14
返回数据字节数 = 20(10寄存器×2字节)
10-29
寄存器数据
00 02...
10个寄存器的值(见下表)
寄存器数据解析(大端格式)
寄存器地址
值(Hex)
十进制值
40001
00 02
2
40002
00 5A
90
40003
00 6A
106
40004
1F 42
8002
40005-40010
00 00
0
 

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

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

相关文章

Apple Safari 18.4 - macOS 专属浏览器 (独立安装包下载)

Apple Safari 18.4 - macOS 专属浏览器 (独立安装包下载)Apple Safari 18.4 - macOS 专属浏览器 (独立安装包下载) 适用于 macOS Sonoma 和 macOS Ventura 的 Safari 浏览器 18 请访问原文链接:https://sysin.org/blog/apple-safari-18/ 查看最新版。原创作品,转载请保留出处…

Xcode 16.3 (16E140) - Apple 平台 IDE

Xcode 16.3 (16E140) - Apple 平台 IDEXcode 16.3 (16E140) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-16/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org2025 年 3 月 31 日(北京…

macOS Sequoia 15.4 (24E248) 正式版 ISO、IPSW、PKG 下载

macOS Sequoia 15.4 (24E248) 正式版 ISO、IPSW、PKG 下载macOS Sequoia 15.4 (24E248) 正式版 ISO、IPSW、PKG 下载 iPhone 镜像、Safari 浏览器重大更新和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org/blog/macOS-Sequoia/ 查…

代码片段的创建 snippet generator

搜索 snippet generator: 点进去之后: 里面这样写 点击Copied复制内容 在项目里面点击 点击“代码片段”英文叫“User Snippets” 搜索vue.json,如果没有就点击新建代码片段,命名为vue.json 把刚才Copied的粘贴进来,保存一下 在一个新的项目中输入vue就会跳出来之前我们写…

SVN提交过滤忽略的文件

SVN提交过滤忽略的文件 1、设置svn忽略文件 右键空白处-TortoiseSVN --》Settings--》General--》右边的Subversion 输入 (忽略文件如: .dll 忽略文件夹如 */bin 每个规则用空格隔开)--》保存即可 下面这段自用的c# 规则.suo *.o *.lo *.la *.al .libs *.so *.so.[0-9…

Visual Studio 2022 检测不到新安装SDK问题

由于工作中需要用到NET9 SDK于是官网下载安装 安装完毕后打开Visual Studio工具发现始终检测不到NET9环境网上查阅一番 根据大伙历来经验发现以下 1、net sdk安装目录是否有安装到多个目录以及环境变量配置是否正确删除多余目录 照教程操作一番重启电脑后发现依然没用 但是发现…

Nacos 2.3.x版本控制台命名空间配置数量限制的问题

今天打开Nacos控制台点了下各个菜单,发现命名空间这里的详情,点击进去显示命名空间配置数限制200个,去官方文档查了下没有相关说明,去百度和Github仓库查了下,应该是一个未实现的废案,详见这个Github issues,这里记录下这个问题以作备忘。既然没有实现为什么不直接删掉?…

大模型 Token 究竟是啥:图解大模型Token

前几天,一个朋友问我:“大模型中的 Token 究竟是什么?” 这确实是一个很有代表性的问题。许多人听说过 Token 这个概念,但未必真正理解它的作用和意义。思考之后,我决定写篇文章,详细解释这个话题。我说:像 DeepSeek 和 ChatGPT 这样的超大语言模型,都有一个“刀法精湛…

gitlab自动化脚本

命令集合1.查看特定时间段的提交信息 timedatectl set-time "2021-10-02 13:00:00" git log --since="2021-10-01" --before="2021-10-30" --author="张斌" git log --until="2021-08-01"2.截取commitid创建新的分支 timeda…

Web前端入门第 23 问:CSS 选择器的优先级

任何地方都存在阶级,CSS 选择器也不例外,也会讲一个三六九等。选择器类别通配符选择器 标签选择器 类选择器 ID选择器 属性选择器 伪类选择器 伪元素选择器 关系选择器流传已久的阶级划分选择器 权重继承父标签的样式、* 通配符选择器 0,0,0,0标签选择器 0,0,0,1类选择器、属…

掌握设计模式--状态模式

状态模式(State Pattern) 状态模式(State Pattern)是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,看起来像是改变了其类。这种模式通常用于解决对象在运行时状态多变且行为复杂的问题。 核心思想:将状态与行为绑定,每种状态对应一个具体类有独立的行为逻…

MySQL 主从复制:数据库的克隆军团

MySQL 主从复制:数据库的"克隆军团" 👯‍♂️ 如果说数据库世界也有科幻电影,那么 MySQL 的主从复制绝对堪比《星球大战》中的克隆人军队,一个原版,无数复制品,却保持着惊人的同步... 什么是主从复制?🤔 MySQL 主从复制是一种数据库技术,允许将一台 MySQL…