首页 > 其他分享 >ModbusRTU数据返回格式(成功返回格式、错误返回格式、成功响应格式、错误响应格式)

ModbusRTU数据返回格式(成功返回格式、错误返回格式、成功响应格式、错误响应格式)

时间:2024-08-03 22:26:08浏览次数:14  
标签:返回 响应 CRC 地址 低字节 寄存器 格式 高字节

文章目录


Modbus协议的返回格式取决于所使用的功能码。在Modbus RTU(通过串行通信实现的Modbus)中,响应格式通常包括以下部分:

  1. 设备地址(Slave Address)

    • 通信中的设备地址,用来标识消息的目标设备(或从设备的响应来源)。这通常是一个字节。
  2. 功能码(Function Code)

    • 表示操作类型的功能码。响应中的功能码通常与请求中的功能码相同,除非发生错误,这时最高位(第7位)会被置为1(例如,功能码03的错误响应将变为83)。
  3. 数据(Data)

    • 依据功能码,数据部分的内容和格式会有所不同。对于读请求(如读保持寄存器),数据部分包含请求的寄存器值;对于写请求,数据部分通常回显写入操作的地址和数量。
  4. 校验和(CRC)

    • 在RTU模式下,每条消息的末尾包括两个字节的循环冗余校验(CRC)校验和,用于错误检测。

常见的响应示例

以下是一些常用Modbus RTU功能码的标准响应格式:

读保持寄存器(功能码03)

请求:[设备地址] 03 [起始地址高字节] [起始地址低字节] [数量高字节] [数量低字节] [CRC低字节] [CRC高字节]

响应:[设备地址] 03 [字节计数] [数据n...] [CRC低字节] [CRC高字节]

  • 字节计数:接下来的数据字节数。
  • 数据:请求的寄存器值。
写单个寄存器(功能码06)

请求:[设备地址] 06 [寄存器地址高字节] [寄存器地址低字节] [值高字节] [值低字节] [CRC低字节] [CRC高字节]

响应:[设备地址] 06 [寄存器地址高字节] [寄存器地址低字节] [值高字节] [值低字节] [CRC低字节] [CRC高字节]

  • 寄存器地址:被写的寄存器地址。
  • :写入的值。
写多个寄存器(功能码10)

请求:[设备地址] 10 [起始地址高字节] [起始地址低字节] [数量高字节] [数量低字节] [字节计数] [数据...] [CRC低字节] [CRC高字节]

响应:[设备地址] 10 [起始地址高字节] [起始地址低字节] [数量高字节] [数量低字节] [CRC低字节] [CRC高字节]

  • 起始地址:第一个寄存器的地址。
  • 数量:写入的寄存器数量。

错误响应

当Modbus设备接收到不能处理的请求或请求无效时,它会返回一个错误响应。错误响应的功能码是原请求的功能码加上80(十六进制)。错误响应还包含一个异常码,说明错误的类型。

格式:[设备地址] [错误功能码] [异常码] [CRC低字节] [CRC高字节]

通过这些响应格式,你可以设计和调试Modbus网络通信,确保数据的正确传输和设备的正确响应。

标签:返回,响应,CRC,地址,低字节,寄存器,格式,高字节
From: https://blog.csdn.net/Dontla/article/details/140814982

相关文章

  • Python中定义(创建)、调用函数及返回值
    1.定义(创建)函数要调用一个函数,首先要定义它。在Python中使用关键字def来定义一个函数。函数通常由函数名、参数列表以及一系列语句组成的函数体构成的。函数定义的一般格式如下:def函数名(参数列表):函数体例如:defsayhello(): print('hello')最简单的函数:defm......
  • BLE属性格式权限属性声明
    前言:BLE属性的分类(四大类):PrimaryService(首要服务项)SecondaryService(次要服务项)Include(包含服务项)Characteristic(特征) 本次主要对属性权限的使用进行描述:先看协议Attributepermissionsareacombinationofaccesspermissions,encryptionpermissions,authentication......
  • 深入探究 Vue.js 高级技术:从响应式系统到高效组件设计的实战指南
    这里有一些实用的Vue.js高级示例,涵盖了前面提到的高级知识点,适合在实际项目中应用:1.自定义响应式数据使用Vue3的customRefAPI创建一个自定义的响应式输入框,带有防抖功能。import{customRef}from'vue';functionuseDebouncedRef(value,delay=300){......
  • 每隔一个 Keras 纪元在所有日志中都会返回零
    我正在尝试使用Keras和Python构建一个简单的二进制图像分类器。每隔一个训练周期,准确性、损失、val_accuracy和val_loss都会返回零。其他时期运行良好,训练进展正常。我正在使用25000张独特的图像进行训练,其中包含三组卷积和池化。我对训练/测试图像进​​行了90-10的......
  • Linux 分区和格式化
    分区常用命令行工具:fdisk:适用于MBR分区表gdisk:适用于GPT分区表parted:适用于MBR和GPT分区表,功能更强大。现在基本都用GPT分区表了。列出所有物理磁盘及其分区表:sudoparted-l在上一步中选择你要进行分区操作的磁盘,例如/dev/sda,然后进入交互式分区编辑界面......
  • 2024中国天气网 实况天气API JSON格式接口
    中国天气网API接口GBK格式json数据:http://www.weather.com.cn/data/sk/101010100.htmlhttp://www.weather.com.cn/data/cityinfo/101010100.html{“weatherinfo”:{“city”:“鍖椾含”,“cityid”:“101010100”,“temp”:“18”,“WD”:“涓滃崡椋�”,“WS”:“1绾�”,......
  • 返回列中负数最多的组的最佳方法是什么?
    我的数据帧是:importpandasaspddf=pd.DataFrame({'a':[-3,-1,-2,-5,10,-3,-13,-3,-2,1,2,-100],})预期输出:a0-31-12-23-5逻辑:我想返回最大的负数条纹。如果有多个连续最大,我想返回第一个连续。......
  • Oracle处理时间戳和时间格式的日期
    一、将时间格式转换为时间戳格式select(to_date('2024-08-0215:00:00','yyyy-mm-ddhh24:mi:ss')-to_date('1970-01-0108:00:00','yyyy-mm-ddhh24:mi:ss'))*24*60*60*1000AStimestampsfromdual;--1722582000000二、将时间戳格式......
  • {Python} 有没有办法从函数中“提取”返回值变量并在其他地方使用它,而不调用原始函数?
    第一次在这里发帖。对python来说相对较新,我正在开发一个程序,它基本上是一个随机故事生成器,用于学习语言、发展技能并添加到我的投资组合中。我有一个主文件(最初启动该程序)、一个简介文件(对于介绍部分,获取用户名以及我试图“提取”user_name变量的位置),一个函数文件,其中包......
  • PixiJS源码分析系列:第四章 响应 Pointer 交互事件(上篇)
    响应Pointer交互事件(上篇)上一章我们分析了sprite在canvasRenderer上的渲染,那么接下来得看看交互上最重要的事件系统了最简单的demo还是用一个最简单的demo演示example/sprite-pointerdown.html为sprite添加一个pointerdown事件,即点击事件,移动设备上就是touc......