核心比喻
办公楼 = 一条RS485通讯总线。
每个房间 = 一个设备(例如:1号房间是电表,2号房间是温湿度传感器)。
对讲机频道 = 设备地址。只有调到正确频道(地址)的房间才会应答。
说话内容 = 数据帧。必须快速、连续地说完一整句话,不能有长时间的停顿。
说话格式 = 协议格式。每句话都必须按照固定的格式说,否则对方听不懂。
Modbus RTU 数据帧的固定格式
一帧完整的数据(一句话)就像下面这个表格,它是一串十六进制数:
关键特点:
一问一答:主设备问一帧,从设备答一帧。
连续传输:一帧数据中的所有字节必须连续发出,帧与帧之间需要有至少3.5个字符时间的静止间隔(就像说完一句话要停顿一下,表示说完了)。
二进制/十六进制:它传输的是原始的二进制数据(通常用十六进制显示),非常紧凑高效。
两个最常见的例子(一看就懂)
例子1:主设备读取数据(功能码03)
主设备问: “201房间(地址=0xC8),把你从第0号表格开始(起始地址=0x0000)的2个数据(数量=0x0002)读给我听!”
对应的RTU报文(十六进制):
C8 03 00 00 00 02 **CRC码**
C8 = 设备地址(201)
03 = 功能码(读)
00 00 = 起始寄存器地址(0)
00 02 = 要读的寄存器数量(2)
CRC码 = 由前面所有字节计算得出的校验码
从设备答: “201房间收到!我读了2个数据,每个数据占2字节,所以一共4字节,数值分别是1234和5678。”
对应的RTU报文(十六进制):
C8 03 04 04 D2 16 2E **CRC码**
C8 = 我的地址(201)
03 = 功能码(读)
04 = 后面数据字节的总数(4个字节)
04 D2 = 第一个寄存器的值(0x04D2 = 十进制1234)
16 2E = 第二个寄存器的值(0x162E = 十进制5678)
CRC码 = 校验码
例子2:主设备写入单个数据(功能码06)
主设备问: “201房间,请把你的第1号表格(寄存器地址=0x0001)的值改成288(数据=0x0120)!”
对应的RTU报文(十六进制):
C8 06 00 01 01 20 **CRC码**
06 = 功能码(写单个寄存器)
00 01 = 要写的寄存器地址(1)
01 20 = 要写入的值(0x0120 = 十进制288)
从设备答(成功时): “已修改成功!”(原样返回主设备发来的命令作为确认)
C8 06 00 01 01 20 **CRC码**
总结要点
地址先行:每句话开头都要先喊名字(设备地址)。
功能码定意图:第二个字节***说明要“读”还是“写”等操作。
数据域是细节:说明具体操作哪里、操作多少。
CRC保安全:结尾的校验码像“暗号”,确保数据在传输途中没出错。
RTU模式:数据是紧凑的二进制,用十六进制表示,帧间有停顿。
简单说,Modbus RTU就是一种结构简单、格式固定、高效可靠的串行通讯约定,让主设备能够有序地访问和操作各个从设备的数据。工业上广泛应用就是因为其简单和稳定。
————————————————
版权声明:本文为CSDN博主「运气值爆棚」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40539316/article/details/155784373
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|