赞
踩
本文参考《86 壳液晶温湿度变送器使用说明书(485 型)》,介绍基于485型 - 温湿度变表,通过node-red对数据进行读写的操作。
该变送器带有液晶显示,实时显示温湿度,背部免螺丝端子接线,可安装在标准86mm接线盒上。设备采用标准ModBus-RTU 通信协议,RS485信号输出
,通信距离最大可达2000米(实测)。探头内置型、外延型可选,广泛适用于通讯机房、仓库楼宇以及自控等需要温湿度监测的场所。
回到目录
采用 ModBus-RTU 通讯规约,格式如下:
根据第二章节对设备问询帧地址的定义,模拟读取如下配置信息的设备数据:
注意:这里地址码变了,我读的是地址码(devID)为40的设备地址数据,示例中读取的是地址码(devID)为1的数据,其他的设置是一样的
项 | 说明 | 十进制 | 十六进制 |
---|---|---|---|
设备地址 | DevID | 40 | 0x28 |
功能码 | 读 | 3 | 0x03 |
数据起始地址 | address | 0 | 0x00 0x00 |
数据长度 | len | 2 | 0x00 0x02 |
检验码 | crc | 2 | 0xC3 0xF2 |
CRC(Cyclic Redundancy Check,循环冗余校验)是一种数据校验方式,主要用于判断数据传输过程中数据是否发生改变、传输是否出错,并在传输时保证数据完整性。上位机须按照MODBUS协议的命令格式发送数据(包括计算的CRC值),从机才能正确辨识数据。若无CRC值,从机将返回含有错误号的应答包,不会得到正确结果。标准的做法,发送前计算CRC值并一起发送,接收后也计算CRC值并与接收的校验码对比是否相等,以辨别数据是否准确。CRC校验码的计算,参考链接:modbus rtu协议的CRC(循环冗余校验)在线计算
计算CRC为:F2 C3 ,高位在左,低位在右,交换得到数据为:0xC3, 0xF2
msg.payload = [0x28,0x03,0x04,0x01,0x3d,0x00,0xb8,0xd2,0xb3]
根据如下应答帧格式:
这里返回的数据为:
湿度值:0x01 0x3d -> 013dH -> 转换为10进制:11616+316+131 = 317
温度值:0x00,0xb8 -> 00b8H -> 转换为10进制:0+0+11×16+8×1 = 184
即温度是带符号的,需要进行处理
/** 有符号整数补码转换转成16位有符号整数:
* 如-80的补码为65456,读取出来是65456,需要通过该函数转换成-80
*/
function Signed16ToInt16Be(num){
//32767是16位带符号证书能表示的最大正数,当数值从32767再增加1时,就会上溢变成负数。
//即mod通信中所有的负数都是用补码形式存储(如‘-80’实际读\写出来是‘65456’)
//需要检测是否发生了从正数到负数的转换,即是否发生了上溢或下溢,如果有,进行转换
return num >= 32768 ? num - 65536 : num;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。