前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【MODBUS】Modbus-RTU数据帧

【MODBUS】Modbus-RTU数据帧

作者头像
帐篷Li-物联网布道师
发布2024-03-19 21:41:40
1870
发布2024-03-19 21:41:40
举报
介绍

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

代码语言:javascript
复制
主机发送: 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

代码语言:javascript
复制
主机发送: 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保持寄存器数据

代码语言:javascript
复制
主机发送: 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个寄存器数据:???????

代码语言:javascript
复制
主机发送: 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表示寄存器的数据

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 帧描述
  • 实际请求/应答交互示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com