Modbus通讯协议初学

目录

  • Modbus通讯协议初学
    • 什么是Modbus?
    • Modbus用来做什么?
    • 4个种类的寄存器
    • 协议速记
    • 功能码
    • Modbus 报文帧
    • 示例解读

Modbus通讯协议初学

什么是Modbus?

顾名思义,它是一个bus,即总线协议。比如串口协议、IIC协议、SPI都是通讯协议。你接触到这种协议,相信你所处的行业是工业方面或者你的产品用于工业。

Modbus用来做什么?

用两个来概括:通讯。

4个种类的寄存器

线圈状态(Coil Status) 可读可写

离 散 输入状 态(Discrete Input Status) 只读

保 持 寄 存 器(Holding Register) 可读可写

输 入 寄 存 器( Input Register)只读

在这里插入图片描述

协议速记

Modbus 是一主多从的协议

在这里插入图片描述

主控发出的数据里,必定含有如下信息:

① 设备地址:你要访问从设备 1,还是访问从设备 2

② 访问哪类寄存器,是读还是写,只访问 1 个寄存器,还是多个寄存器:这被称为功能码

③ 起始寄存器地址、寄存器数量:这在数据里定义

④ 为了保证数据传输的可靠,还附带有 CRC 检验码

以 Modbus RTU 协议为例,主控发出的数据包格式如下:

在这里插入图片描述

功能码

在这里插入图片描述

功能代码有哪些?常用的功能码如下:

① 读线圈状态(01)

② 读离散输入状态(02)

③ 写单个线圈(05)、写多个线圈(15)

④ 读保持寄存器(03)

⑤ 读输入寄存器(04)

⑥ 写单个保存寄存器(06)、写多个保存寄存器(16)

Modbus 报文帧

一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,本质就是一串数据。

Modbus 报文是指主机发送给从机的一帧数据,其中包含着从机的地址,主机想执行的操作,校验码等内容。

Modbus 协议 RTU 报文格式如下所示:

帧结构 = 地址 + 功能吗 + 数据 + 校验

地址: 占用一个字节,范围0-255,其中有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常的需要两个设备的地址一样才能进行查询和回复)。

功能码:占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改数据,所以不同功能码对应不同功能。

数据:根据功能码不同,有不同结构,在后续的实例中有说明。

校验:为了保证数据不错误,增加这个,然后再把前面的数据进行计算看数据是否一致,如果一致,就说明这帧数据是正确的,我再回复;如果不一样,说明你这个数据在传输的时候出了问题,数据不对的,所以就抛弃了。

示例解读

以(0x01)读取线圈为例

在这里插入图片描述

从我上图的这个例子中,进行如下的解析

主机发送:07 01 00 00 00 08 3D AA
从机回复:07 01 01 20 50 D8解析如下:
07(从设备地址) 01(功能码) 00 00(起始地址16bit,高位在前,低位在后) 00 08(寄存器数16bit 高位在前,低位在后) 3D AA (CRC校验) 07(从设备地址) 01(功能码) 01(数据域字节数) 20(数据 1) 50 D8(校验) 

参考资料:

https://blog.csdn.net/qq_39400113/article/details/118369506

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

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

相关文章

如何自定义Linux命令

说明:本文介绍如何将自己常用的命令设置为自定义的命令,以下操作在阿里云服务器CentOS上进行。 修改配置文件 修改配置文件前,先敲下面的命令查看当前系统配置的shell版本 echo $SHELL或者 echo $0区别在于,$SHELL查看的是系统…

落雪音乐 超好用的桌面端音乐播放器

之前一直都是充某Q音乐的会员,突然不想氪金了,终于找到一个开源的音乐播放器,在此先给落雪无痕大佬跪了 太爱了 简直白嫖怪的福音 话不多说,直接上操作:解压密码:www.1234f.com下载地址:极速云…

图片批量管理迈入智能新时代:一键输入关键词,自动生成并保存惊艳图片,轻松开启创意之旅!

在数字化时代,图片已成为我们表达创意、记录生活、传递信息的重要工具。然而,随着图片数量的不断增加,如何高效、便捷地管理这些图片,却成为了一个令人头疼的问题。 第一步,进入首助编辑高手主页面,在上方…

简单的Python示例母亲节的祝福

在Python中,我们通常不会直接编写HTML源码,但我们可以编写一个Python脚本来生成或发送包含母亲节祝福的HTML内容。以下是一个简单的Python示例,它使用字符串拼接来创建一个简单的HTML页面,其中包含母亲节的祝福。 # 定义一个包含…

【AMBA Bus ACE 总线 9.1 -- Non-cache Master 写操作 详细介绍】

请阅读【AMBA Bus ACE 总线与Cache 专栏 】 欢迎学习:【嵌入式开发学习必备专栏】 文章目录 Non-cache MasterACE 和系统级缓存一致性ACE 非缓存主控(Non-cacheable Master)Non-cache Master ARM的ACE(AXI Coherency Extension)是一种用于增强系统级缓存一致性的接口规范…

视频封面一键提取:从指定时长中轻松获取您想要的帧图片

在数字媒体时代,视频已成为人们获取信息、娱乐和沟通的主要形式之一。而一个好的视频封面,往往能够吸引观众的眼球,增加视频的点击率和观看量。然而,对于很多视频创作者和编辑者来说,如何从视频中快速、准确地提取出合…

Git知识点总结

目录 1、版本控制 1.1什么是版本控制 1.2常见的版本控制工具 1.3版本控制分类 2、集中版本控制 SVN 3、分布式版本控制 Git 2、Git与SVN的主要区别 3、软件下载 安装:无脑下一步即可!安装完毕就可以使用了! 4、启动Git 4.1常用的Li…

Shell编程之循环语句之for

一.for循环语句 读取不同的变量值,用来逐个执行同一组命令 for 变量名 in 取值列表 do命令序列 done 示例: 1.计算从1到100所有整数的和 2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和 3.求从1到100所有整数的偶数和…

【牛客】SQL206 获取每个部门中当前员工薪水最高的相关信息

1、描述 有一个员工表dept_emp简况如下: 有一个薪水表salaries简况如下: 获取每个部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号dept_no升序排列,以上例子输出如下: 2、题目…

SBM模型、超效率SBM模型代码及案例数据(补充操作视频)

01、数据简介 SBM(Slack-Based Measure)模型是一种数据包络分析(Data Envelopment Analysis, DEA)的方法,用于评估决策单元(Decision Making Units, DMUs)的效率。而超效率SBM模型是对SBM模型的…

轮转数组 与 消失的数字

轮转数组 思路一 创建一个新内存空间,将需轮转的数依次放入,之后在把其它数放入 代码: void rotate(int* nums, int numsSize, int k) {k k % numsSize;// 确定有效的旋转次数if(k 0)return;int* newnums (int*)malloc(sizeof(int) * nu…

HarmonyOS应用开发者高级认证 试题+答案

判断题 云函数打包完成后,需要到AppGallery Connect创建对应函数的触发器才可以在端侧中调用(错误) 每一个自定义组件都有自己的生命周期(正确) 基于端云一体化开发,开发者需要精通前端、后端不同的开发语言…

h2 数据库Statement was canceled or the session timed out 解决办法

背景 某项目因需要存储的数据较少,选择了h2 数据库。数据库的某张表的数据需要全部加载到内存中使用。 最近,某个项目使用该应用时需求比较特殊,使得这张表的数据量增加到了一万条。此时,查询全量数据的 SQL 发生了异常&#xf…

递归求fabonacci数列 pta

斐波那契数列(Fibonacci sequence)是一个经典的数列,它由以下递归关系定义: [ F(n) F(n-1) F(n-2) ] 其中,( F(0) 0 ) 和 ( F(1) 1 )。 在编程中,递归是一种实现斐波那契数列的直观方法。以下是使用递…

git之tag操作

查看本地有哪些 tags # git tag -l v0.0.3 v0.0.5 v0.0.6查看远程有哪些 tags # git ls-remote --tags From https://github.com/eyjian/gomooon.git 1fe7f5ecf369cba34f4328285ce1ec72d62c091e refs/tags/v0.0.3 9371db55046109d7fc9a9f75625d5ec31c326ad1 re…

[muduo网络库]——muduo库Acceptor类(剖析muduo网络库核心部分、设计思想)

接着之前我们剖析的muduo库三大核心组件Channel类,Poller/EpollPoller类,EventLoop类,我们接下来继续看muduo库中的其他类,这一篇,我们先来介绍Acceptor类。 Acceptor类 主要功能 Acceptor类用于创建套接字&#xf…

企业OA办公系统开发笔记:1、搭建后端环境

文章目录 企业办公系统:搭建环境一、项目介绍1、介绍2、技术栈3、项目模块4、数据库 二、搭建环境1、搭建后端1.1、搭建父工程clfwzx-oa-parent1.2、搭建工具类父模块common1.3、搭建工具类common的子模块1.4、搭建实体类模块model和项目模块service-oa 2、配置依赖…

亲测!史上最全数据库基础?!

为什么要学习数据库 以前在程序中存储数据是一个变量,对象;数据都存储在内存中,程序运行结束后就销毁。 后来学习IO之后,将数据存储在文件中,做到持久存储,但是使用不方便。 学习专业的数据存储软件——…

基于POSIX的信号量模拟DAG上的并行计算的同步问题

本代码主题借鉴nju的jyy老师的代码 自己增加了随机生成DAG(有向无环图)(不保证连通)数据进行测试 运行打印结果即为并行计算DAG的拓扑序 #include <pthread.h> #include <semaphore.h> #include <unistd.h> #include <iostream> #include <vector&g…

2024最新最全【NMAP】零基础入门到精通

一、Nmap介绍 Nmap(Network Mapper&#xff0c;网络映射器)是一款开放源代码的网络探测和安全审核工具。它被设计用来快速扫描大型网络&#xff0c;包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹识别、WAF识别及常见安全漏洞。它的图形化界面是Zenmap&#xff…