0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Modbus协议的读取保持寄存器值

瑞萨MCU小百科 来源:瑞萨MCU小百科 2024-10-30 10:54 次阅读

10.5.4

0x03)读取保持寄存器

1. 功能说明

03功能码用于读取从设备保持寄存器的内容,不支持广播模式。消息顿中指定了需要读取的保持寄存器的起始地址和数目。而保持寄存器中各地址的具体内容和意义则由设备开发者自行规定。

2. 查询报文

在查询报文中,必须指定保持寄存器的开始地址和需要读取的寄存器数量,例如,如下表所示,从设备地址为7(0x07),需要读取保持寄存器地址40201~40203共计3个寄存器的内容即读取Modbus协议地址200~202的内容,在报文中表示如下。

起始地址:0x00C8(十进制200)。

读取数量:0x0003(十进制3)。

功能码03查询报文示例:

字段 例(Hex) ASCII模式字符型 RTU模式8位
(Hex)
帧头 “:”
从设备地址 0x07 “0”,“7” 0x07
功能码 0x03 “0”,“3” 0x03
起始地址
(高位)
0x00 “0”,“0” 0x00
起始地址
(低位)
0xc8 “c”,“8” 0xc8
寄存器数
(高位)
0x00 “0”,“0” 0x00
寄存器数
(低位)
0x03 “0”,“3” 0x03
差错校验 LRC(2字符) CRC(2字节)
帧尾 CR/LF
合计字节数 17 8

本功能码的起始地址由2字节构成,取值范围为0x00000xFFFF;寄存器数量由2字节构成取值范围为0x00010x007D(即十进制1~125),即最多可以连续读取125个寄存器。

需要特别注意的是,Modbus的保持寄存器和输入寄存器是以字(Word)为基本单位的(1Word=2Byte),所以如果读取保持寄存器地址为40001开始的一个16位(bit)的无符号数,那么返回2字节,并可以从40002开始读取下一个16位的无符号数。如果需要读取寄存器地址为40001开始的一个32位浮点数,则需要返回4字节,即必须连续读取40001和40002的内容,而且下一个32位的浮点数必须从40003开始读取。对于浮点数(或者32位的整数)而言,连续读取的两个寄存器之间存在字节序和大小端的问题,这一点在开发时必须引起注意。

3. 响应报文

响应报文的各项构成和意义如下表所示。因为Modbus的保持寄存器和输入寄存器是以字为基本单位的,在上面的例子中,查询报文连续读取3个寄存器的内容,将返回6 字节,参考表下表中数据1~3的高位和低位。

功能码03响应报文示例:

字段 例(Hex) ASCII模式字符型 RTU模式8位
(Hex)
帧头 “:”
从设备地址 0x07 “0”,“7” 0x07
功能码 0x03 “0”,“3” 0x03
数据域字节数 0x06 “0”,“6” 0x06
数据1(高位) 0x03 “0”,“3” 0x03
数据1(低位) 0x53 “5”,“3” 0x53
数据2(高位) 0x01 “0”,“1” 0x01
数据2(低位) 0xF3 “F”,“3” 0xF3
数据3(高位) 0x01 “0”,“1” 0x01
数据3(低位) 0x05 “0”,“5” 0x05
差错校验 LRC(2字符) CRC(2字节)
帧尾 CR/LF
合计字节数 23 11

10.5.5

(0x04)读取输入寄存器值

1. 功能说明

与功能码03类似,04功能码用于读取从设备输入寄存器的内容,不支持广播模式。消息顿中指定了需要读取的输入寄存器的起始地址和数目,而输入寄存器中各地址的具体内容和意义则由设备开发者自行规定。

2. 查询报文

在查询报文中必须指定输入寄存器的起始地址和需要读取的寄存器数量。例如,如表4-9所示,从设备地址为7(0x07),需要读取输入寄存器地址30301~30303共计 3个寄存器的内容即读取Modbus协议地址300~302的内容,在报文中表示如下。

起始地址:0x012C(十进制300)。

读取数量:0x0003(十进制3)。

功能码04查询报文示例:

字段 例(Hex) ASCII模式字符型 RTU模式8位
(Hex)
帧头 “:”
从设备地址 0x07 “0”,“7” 0x07
功能码 0x04 “0”,“4” 0x04
起始地址
(高位)
0x01 “0”,“1” 0x01
起始地址
(低位)
0x2c “2”,“c” 0x2c
寄存器数
(高位)
0x00 “0”,“0” 0x00
寄存器数
(低位)
0x03 “0”,“3” 0x03
差错校验 LRC(2字符) CRC(2字节)
帧尾 CR/LF
合计字节数 17 8

本功能码中,起始地址由2字节构成,取值范围为0x0000~0xFFFF;寄存器数量由2字节构成,取值范围为0x0001~0x007D(即十进制1~125),即最多可以连续读取125个寄存器同样有一点需要注意,Modbus的保持寄存器和输入寄存器是以字为基本单位的。所以对于浮点数(或者32位的整数)而言,连续读取的两个寄存器之间存在字节序和大小端的问题,这一点在开发时必须引起注意。

3. 响应报文

响应报文的各项构成和意义如下表所示。因为Modbus的保持寄存器和输入寄存器是以字为基本单位的,上面的例子中,查询报文连续读取3个寄存器的内容,那么将返回6字节,参考下表中数据1~3的高位和低位。

功能码04响应报文示例:

字段 例(Hex) ASCII模式字符型 RTU模式8位
(Hex)
帧头 “:”
从设备地址 0x07 “0”,“7” 0x07
功能码 0x04 “0”,“4” 0x04
数据域字节数 0x06 “0”,“6” 0x06
数据1(高位) 0x03 “0”,“3” 0x03
数据1(低位) 0x53 “5”,“3” 0x53
数据2(高位) 0x01 “0”,“1” 0x01
数据2(低位) 0xF3 “F”,“3” 0xF3
数据3(高位) 0x01 “0”,“1” 0x01
数据3(低位) 0x05 “0”,“5” 0x05
差错校验 LRC(2字符) CRC(2字节)
帧尾 CR/LF
合计字节数 23 11

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120231
  • MODBUS
    +关注

    关注

    28

    文章

    1799

    浏览量

    76954
  • 功能码
    +关注

    关注

    0

    文章

    10

    浏览量

    2117

原文标题:读取保持寄存器值 - RZ MPU工业控制教程连载(31)

文章出处:【微信号:瑞萨MCU小百科,微信公众号:瑞萨MCU小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Modbus协议的疑问

    逻辑线圈的当前状态(ON/OFF)2读取输入状态取得一组开关输入的当前状态(ON/OFF)3读取保持寄存器在一个或多个保持寄存器中取得当前的
    发表于 02-20 11:57

    基于Modbus协议的485总线,当功能码为03H,读取N个读寄存器数据时,从设备需要进行N次消息回送吗?

    基于Modbus协议的485总线,采用C51单片机作为主机,多个智能传感作为从设备,欲准确高效得采集多传感数据,应该功能码为03H读多个寄存器
    发表于 03-07 13:38

    求助大神关于modbus协议保持寄存器的问题

    我想用电脑向传感发送采集指令,但是输入保持寄存器时传感没有反应连接应该没有问题,能读到设备标识
    发表于 05-18 20:04

    Modbus协议说明及VC代码

    名称 作用 01 读取线圈状态 取得一组逻辑线圈的当前状态(ON/OFF) 02 读取输入状态 取得一组开关输入的当前状态(ON/OFF) 03 读取保持寄存器 在一个或多个
    发表于 08-03 15:14

    Modbus库开发笔记之九:利用协议栈开发Modbus TCP Server应用

    GetInputStatus(uint16_tstartAddress,uint16_t quantity,bool *statusValue); /*获取想要读取保持寄存器*
    发表于 08-26 15:56

    modbus协议笔记

    1 Modbus协议概要​ Modbus通信协议由Modicon公司(现在的施耐德电气Schneider Electric)于1979年为可编程逻辑控制(即PLC)通信而发表。目前,Modbu
    发表于 07-02 07:17

    Modbus协议是什么?Modbus协议主要有哪些应用?

    请问一下Modbus协议是什么?Modbus协议主要有哪些应用?
    发表于 07-15 12:04

    Modbus协议是什么

    Modbus协议是什么?MODBUS功能码有哪些?MODBUS协议有哪几种传输模式?
    发表于 09-29 07:06

    libmodbus寄存器个数的疑问

    MODBUS_MAX_READ_BITS2000MODBUS_MAX_READ_REGISTERS125根据modbus协议寄存器地址是从0到65535的,那这几个宏定义,应该是指的是每次最多可连接
    发表于 06-30 15:39

    RS485和Modbus通信协议让工业自动化更高效

    。以下是Modbus RTU协议中常用的功能码及其含义:   01:读取线圈寄存器   02:读取离散输入
    发表于 05-05 16:25

    Modbus协议的理解

    系统的兼容,最好采用通用的通讯协议。   我们可以Modbus协议进行修改,使之能使用在自己的系统中。Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控
    发表于 05-05 16:47

    modbus协议中的输入寄存器可以读写吗?

    modbus协议中的输入寄存器可以读写吗
    发表于 10-13 08:03

    C#使用Modbus协议读写汇川PLC的M区寄存器

    C#使用Modbus-TCP协议读取汇川PLC,Modbus读写是按照MW地址来处理的 【寄存器单位是字WORD,占用两个字节,类似于C#中
    发表于 04-19 10:34 15次下载
    C#使用<b class='flag-5'>Modbus协议</b>读写汇川PLC的M区<b class='flag-5'>寄存器</b>

    工程监测无线中继采集仪的参数读写MODBUS协议

    如下 工程监测无线中继采集仪的参数读写MODBUS协议 例:读取地址为 129 的无线中继采集仪寄存器寄存器
    的头像 发表于 05-22 11:30 601次阅读
    工程监测无线中继采集仪的参数读写<b class='flag-5'>MODBUS协议</b>

    modbus协议功能码分类 modbus协议功能码是什么,有什么作用

    的分类及其作用。 Modbus协议功能码分类: Modbus协议定义了一系列的功能码,每个功能码都代表不同的请求类型和操作。根据Modbus规范,功能码可以分为以下几类: 读功能码(0x03和0x04): 功能码0x03用于
    的头像 发表于 01-31 14:47 7041次阅读