1.温湿度传感器
我们选用一款RS485接口且支持Modbus RTU的温湿度模块(如图1.2.22所示),同时参考图1.2.19的YF3300硬件接口图,把YF3300的RS485接口的A和B分别连接温湿度模块上的A和B,然后为温湿度模块接入电源(5~24V)。
● 图1.2.22 温湿度接线图
2. Modbus协议介绍
Modbus通信协议是由莫迪康(Modicon)公司在1979年首次提出的,目前已经是一个标准的,真正开发的,在工业自动化等领域应用最广泛的网络通信协议。主要包括Modbus ASCII、Modbus RTU、Modbus TCP。对智能设备来说,当前应用最广泛的是Modbus RTU通信协议。
Modbus通信协议是主从协议,一个主设备可以带若干台(理论上为247台)从设备。由主设备发送命令帧,从设备根据命令帧中的设备地址进行相应的响应。Modbus协议针对智能设备,定义了很多功能操作,其中最常用的功能就是保持寄存器的读和写功能,也就是3号和16号功能,下面就是对这两种功能的具体描述。
(1)读取保持寄存器(单个和多个,以字为最小单位)
发送命令帧:
帧长度:8个字节
设备地址:1~247
功能码:3H
数据地址:0~65535 具体范围与相关设备有关
数量:1~65535 具体范围与相关设备有关
校验码:CRC16校验
返回命令帧:
帧长度:5+N个字节
设备地址:1~247
功能码:3H
数据量:实际的读取数据数量
数据:返回数据的意义
a=HoldStart
n= DataNum-1
校验码:CRC16校验
命令有误:
1)没有任何返回
2)返回异议帧
(2)设置保持寄存器(多个,以字为最小单位)
发送命令帧:
帧长度:9+bytN个字节
设备地址:1~247
功能码:10H
数据地址:0~65535 具体范围与相关设备有关
数量:1~122 具体范围与相关设备有关
字节数:设置的字节个数bytN= DataNum×2
数据:具体的字节数据
校验码:CRC16校验
返回命令帧:
帧长度:8个字节
设备地址:1~247
功能码:10H
数据地址:0~65535 具体范围与相关设备有关
数量:1~122 具体范围与相关设备有关
校验码:CRC16校验
命令有误:
1)没有任何返回
2)返回异议帧
3.读取温湿度
YFSoft.ModbusRTU通信库,对上述通信帧进行了功能封装,直接调用对应的函数即可。
查询YF3300的系统手册,获知RS485的串口号为“COM2”,查询YFTH21系统手册,得知设备的通信波特率为9600Baud,无校验,默认设备地址为1(点对点地址253),在保持寄存器的0地址保存了温度值(温度实际值∗10),地址1保存了湿度值(湿度实际值∗10)。每秒钟读取一次温湿度值,相关代码如下:
编译成功后,单击“运行”按钮(或者按“F5”键),自动部署程序到硬件设备,然后运行(如图1.2.23所示)。可以发现温度值和湿度值已经正常获取,并且显示了出来。
● 图1.2.23 Modbus协议读取温湿度调试图