Modbus-RTU数据帧

2023-12-21 11:41:45

介绍

Modbus-RTU数据帧,帧长度最大为256字节,由以下4部分构成:

  • 子节点地址: 1字节,范围0-247
  • 功能代码: 1字节
  • 数据块: 0-252字节
  • CRC校验值: 2字节,低8位在前

帧描述

Modbus-RTU帧间隔,Modbus-RTU要求两个RTU报文帧间隔要大于3.5个字节时间:

且每个报文帧内字节间隔小于1.5个字节时间,否则会认为接收不完整。

Modbus-RTU采用循环几余校验(CRC - Cyclical Redundancy Checking) 算法对报文顺全部数据进行计算,得到的校验值附加在报文末尾,低位在前。CRC-16_Modbus计算方法可以参考: CRC-16_Modbus校验算法。

实际请求/应答交互示例

示例1: 写单个寄存器。向01地址设备0x0105保持寄存器写入1个数据: 0x0190

主机发送: 01 06 01 05 01 90 99 CB从机回复: 01 06 01 85 01 90 99 CB

01表示从机地址,06功能码表示写单个保持寄存器,0105表示寄存器地址,0190表示写入寄存器的数值,99CB为CRC校验值。可以看出,当写1个寄存器数据时,从机响应的数据帧和主机发送的数据帧完成一致。

示例2: 写多个寄存器。向01地址设备0x0105、0x0106、0x0107地址保持寄存器,写入3个寄存器数据: 0x1102,0x0304,0x0566???????

主机发送: 01 10 01 05 00 03 06 11 02 03 04 05 66 4a 12从机回复: 01 10 01 05 00 03 91 f5

同理,01从机地址,10功能码表示写多个保持寄存器,0105表示起始地址0003表示写3个寄存器,06表示数据量为6个字节1102/0304/0566分别表示写入3个寄存器的数值,4a12表示CRC校验数值.

可以看出,写多个寄存器时使用10功能码,从机回复数据也比较精简。

示例3: 读单个寄存器。读01地址设备0x0105保持寄存器数据???????

主机发送: 01 03 01 05 00 01 95 f7从机回复: 01 03 02 56 78 87 c6

03表示读多个寄存器,0105表示起始地址,0001表示读1个寄存器

02表示2个字节,56 78表示寄存器的数据

示例4: 读多个寄存器。读01地址设备0x0105、0x0106、0x0107地址保持寄存器,共3个寄存器数据:???????

主机发送: 01 03 01 05 00 03 14 36从机回复: 81 03 06 11 22 33 44 55 66 2a 18

03表示读多个寄存器,0105表示起始地址,0003表示读3个寄存聚

06表示6个字节,11 22 33 44 55 66表示寄存器的数据

文章来源:https://blog.csdn.net/a7491772/article/details/135124813
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。