首页 > 其他分享 >如何看懂Modbus数据帧?

如何看懂Modbus数据帧?

时间:2023-08-29 19:45:16浏览次数:40  
标签:RTU Modbus 如何 寄存器 格式 数据 设备

转载:https://www.ngitech.cn/mobile/news/show/3246.html

在介绍Modbus RTU数据帧格式之前,首先让我们先了解一下Modbus的通讯模式。

 丨Modbus通讯模式

Modbus协议是典型的主-从通讯结构,链路中只能有一台主设备,可以有多台从设备。主设备向从设备发送请求指令,从设备对该指令进行响应。从设备不能主动向主设备发送指令,并且从设备之间也不能进行通信。

Modbus协议通过这些请求、响应指令,实现了主设备对从设备中数字量或模拟量数据的访问和控制。通常,主设备是人机界面、监控或数据采集系统,从设备是传感器、可编程自动化控制器、智能仪器仪表等。

 

 

丨Modbus数据帧格式

了解Modbus是典型的主-从式通讯方式后,我们再来看Modbus RTU数据帧格式。

Modbus RTU数据帧是由四部分组成的,他们分别是:设备地址、功能码、数据和校验。

 


 

设备地址占1个字节,范围是0~255之间。0是广播地址,1~247是从站设备地址,248~255保留不用。


功能码占1个字节,由协议明确规定,表中列出了一些常用的功能码。譬如03功能码是读保持寄存器,16功能码是写多个寄存器。

 

 

 

数据部分0~252字节,其长度和内容由功能码决定。功能码不同,数据部分的定义不尽相同。

校验2个字节,由发送设备计算,将校验码之前的数据按照CRC16算法进行计算,生成2个字节的数据,放置于发送信息的尾部。接受信息的设备再重新计算接收到的信息的CRC码,比较计算得到的CRC码是否与接收到的相符,如果不相符,则表明数据在传输过程中出错。通过数据校验增加了系统的安全与效率。

 

丨常用功能码数据帧格式

1) 功能码-0x04(读输入寄存器)

举例:读取2号站,30008~30009 2个输入寄存器的数值。

Modbus RTU主站设备请求帧格式:

 

 

2号站设备响应帧格式:

 

 

2) 功能码-0x10(写多个寄存器)

举例:向2号站,40002~40003 2个保持寄存器分别写入0x000A,0x0102数值

Modbus RTU主站设备请求帧格式:

 

2号站设备响应帧格式:

 

3) 功能码-0x02(读离散量输入)

举例:读取2号站,10197~10218 22个离散量的状态。

Modbus RTU主站设备请求帧格式:

 


 

2号站设备响应帧格式:

 

丨数据传输模式

通过前面的介绍,可以看到Modbus RTU协议数据帧是没有起始符和结束符,所以两个数据帧之间需要靠时间间隔来区分。协议中规定信息帧发送至少要有3.5个字符时间的停顿间隔。即在一个数据帧的最后一个字符传输完成之后,需要至少3.5个字符时间的停顿标定数据帧的结束,一个新的数据帧可在此停顿之后开始。如果一个新消息在小于3.5个字符时间内接着前个消息开始,接受的设备将认为它是前一数据帧的延续,这将导致CRC校验出错。同时整个数据帧必须作为一连续的流传输。如果在帧完成之前有超过1.5字符时间的停顿时间,接受设备将刷新不完整的数据帧从而认为存在丢包现象。

 

那么一个字符是什么呢,他由1个bit起始位,8bit数据位,1个bit奇偶校验位,1个bit停止位组成,在发送时从起始位开始。

 


 

以上就是关于Modbus数据帧的一些基础知识

 

*本文章部分资料、图片来源于网络,版权归原作者所有,如有侵权,请与我联系删除,谢谢!

标签:RTU,Modbus,如何,寄存器,格式,数据,设备
From: https://www.cnblogs.com/cxxtreasure/p/17665698.html

相关文章

  • 【数据结构】表达式计算 - 栈
    表达式与栈栈的一大用处是做算术表达式的计算。——李煜东栈是一种基础的线性数据结构,在计算机科学与OI中有许多运用。CCFCSP-J复赛曾两年(2020,2022)考察表达式计算与表达式树,三种表达式之间的转换也是初赛常见考点。表达式计算在计算机科学中,算术表达式有以下三种常见......
  • UE如何制作C++函数事件蓝图
    一.蓝图类中的函数在新建的actor中的C++ .h文件中,声明UFUNCTION(BlueprintCallable,Category="XXXX"),然后在.cpp中写函数的内容即可。编译后用蓝图继承C++类,可以进行函数的调用了二.建立函数库任意蓝图可以调用建立BlueprintFunctionLibrary的C++类,参考一中进行函数......
  • 重启python-数据类型-字典和集合
    一,字典和集合初始字典:d1={'name':'jason','age':20,'gender':'male'}集合:s1={1,2,3,4,5}二,二者的区别唯一的区别,就是集合没有键和值的配对,是一系列无序的、唯一的元素组合。三,内置操作字典:增删改查集合:增删改查注意:集合的pop()操作是删除集合中最后一个元素,可是......
  • 一台云服务器一个域名下,如何运行多个JAVA后端项目和多个VUE前端项目
    拿若依前后端分离版项目举例:修改前端代码ruoyi-ui/vue.config.js//二级目录名称ruoyi-uipublicPath:'/ruoyi-ui/',ruoyi-ui/src/router/index.jsexportdefaultnewRouter({mode:'history',//去掉url中的#base:'/ruoyi-ui/',//二级目录路径scrol......
  • 【NestJS系列】连接数据库及优雅地处理响应
    前言Node作为一门后端语言,当然也可以连接数据库,为前端提供CURD接口我们以mysql为例,自行安装mysqlTypeORMTypeORM是一个ORM框架,它可以运行在NodeJS、Browser、Cordova、PhoneGap、Ionic、ReactNative、Expo和Electron平台上,可以与TypeScript和JavaScript一起使用。......
  • 如何获取和分析Java堆信息
    引言在Java应用程序的开发和维护过程中,了解和分析Java堆信息是一项重要的任务。本文将介绍如何获取Java堆信息的不同方法,并提供一些分析堆信息的实用技巧。获取Java堆信息的方法Java虚拟机(JVM)工具:使用jcmd命令:在命令行中运行jcmd<pid>GC.heap_info,其中<pid>是Java进程的......
  • Apache Commons Logging 是如何决定使用哪个日志实现类的
    ApacheCommonsLogging像SLF4J一样,是个通用日志框架,广泛应用在各个开源组件中。说其通用,是因为它本身只提供了简单的日志输出的实现(org.apache.commons.logging.impl.SimpleLog和org.apache.commons.logging.impl.NoOpLog),主要是为你统一使用其他专业日志实现(Log4j、jdk1.4......
  • 如何根据MAC地址发现设备制造商
    什么是MAC地址媒体访问控制也称为MAC地址,是实际属于设备本身并由其供应商分配的物理地址。该地址由48位组成,使用由双冒号分隔的6个八位字节(8位/1个字节)表示,并显示为十六进制值而不是二进制/十进制表示。该地址与IP(互联网协议)一起用于确定网络(包括互联网)中传输数据包的目......
  • 数据库备份和Shell基础测试及AWK(运维)
    第一题:使用MySQL命令进行备份和恢复的步骤如下:备份test库:使用mysqldump命令备份test库,并将备份写入一个.sql文件中。命令示例:mysqldump-u用户名-p密码test>backup.sql恢复备份:使用mysql命令将备份文件中的数据恢复到test库中。命令示例:mysql-u用户名-p密码test<backu......
  • DataX数据同步- 不同时间Where条件
    DataX数据同步工具一、介绍:DataX是用来数据同步得第三方工具,能够进行分片,高效得数据同步二、时间自增,根据时间进行数据同步:1.相关截图:  2.where条件处理:主要分为三个数据库的数据同步,不同的处理1.postgresqlreader:ic_shopee_shopperformance"where":"customer_id......