这两天在开发STM32的Modbus主站,就买了一个RS485总线的温湿度传感器来,温湿度传感器说明要求将传感器返回的Modbus报文数据转换为10进制后再除以10得到真实数据,以下是举例
Modbus主站发送报文:
01 04 00 01 00 01 60 0A
意思是读取从站地址01的输入寄存器1号位1位数据
| SlaveID | FunctionCode | StartADDR | Length | CRC |
|---|---|---|---|---|
| 从站ID | 功能码 | 起始地址 | 寄存器数量 | CRC校验 |
| 01 | 04 | 00 01 | 00 01 | 60 0A |
Modbus主站接收报文:
01 04 02 01 2D 78 BD
意思是从站ID为01,功能码为04,数据有两位(一个数据是通过两位来返回),数据高位01,数据低位2D
| SlaveID | FunctionCode | Length | Data | CRC |
|---|---|---|---|---|
| 从站ID | 功能码 | 寄存器数量 | 数据 | CRC校验 |
| 01 | 04 | 02 | 01 2D | 78 BD |
以上是数据解析
那么问题来了,返回的01 2D怎么变成我们需要的数据
根据传感器说明书,我们需要将返回值变成10进制数据后除以10得到温度值,可以理解为以下流程

本文详细解析了STM32通过Modbus协议读取RS485温湿度传感器数据的过程,介绍了如何将16进制数据转换为10进制温度值,并给出了具体计算公式。
2404

被折叠的 条评论
为什么被折叠?



