本实例我们介绍下西门子S7-200 SMART PLC如何通过Modbus-RTU协议读取温湿度传感器的数值。实例使用的硬件如下:
- S7-200 SMART CPU ST20;
- 温湿度传感器(支持Modbus-RTU协议);
本文包括如下几个主题:
1、温湿度传感器外观、接线及通信参数介绍
2、CPU ST20与温湿度传感器的接线;
3、CPU ST20的编程;
1、TH10S-B-H温湿度传感器外观、接线及通信参数介绍
本例程使用的温湿度传感器能检测的温度范围为:-40℃~120℃,湿度范围为:0%~100% rh,其外观如下图所示:
该温湿度传感器有四条线,颜色分别是:红、黑、黄、绿,各线的定义如下:
该温湿度传感器支持Modbus-RTU协议,相关通信参数如下:
- 支持的波特率:1200bps、2400bps、4800bps、9600bps、19200bps,默认为9600bps;
- 通信设置:起始位1位,数据位8位,停止位1位,无校验位;
- 支持站地址范围:1~247,默认为1;
- 支持Modbus功能码0x03读取数据,数据格式如下表所示:
支持Modbus功能码0x10或者0x06修改传感器的站地址或者波特率,数据格式如下表所示:
①0=1200bps;1=2400bps;2=4800bps;3=9600bps;4=19200bps;
2、CPU ST20与温湿度传感器的接线
本例程使用CPU ST20本体集成的串口(编号:Port0)连接温湿度传感器。Port0针脚定义如下表所示:
需要说明的是,西门子RS485信号线定义与很多厂家不同:多数厂家定义RS485信号A线为正极,信号B线为负极;但是西门子定义A线为负极,信号B线为正极。
因此,在本例程中,温湿度传感器的黄线(RS485+)应该与CPU ST20本体串口Port0的3号引脚相连;同时,温湿度传感器的绿线(RS485-)应该与Port0的8号引脚相连;
3、CPU ST20的编程
使用S7-200 SMART的库指令【Modbus RTU Master】中的MBUS_CTRL指令和MBUS_MSG指令来与温湿度传感器进行Modbus-RTU通信。
MBUS_CTRL指令用来配置Modbus主站的通信参数,需要在每个扫描周期都调用。指令各参数含义如下:
- Mode:通信协议的类型;0=PPI协议;1=Modbus协议;
- Baud:波特率;
- Parity:校验位,0=无校验,1=奇校验,2=偶校验;
- Port:端口号,CPU本体串口编号为0,通信板编号为1;
- Timeout:超时的时间值,单位为毫秒;
- Done:指令是否完成;
- Error:指令执行的状态值,0=没有错误;
指令执行在线状态如下图所示:
MBUS_MSG指令用来与子站进行数据交换,其各参数含义如下:
- First:请求数据交换,需要上升沿信号;
- Slave:从站地址;
- RW:读取或写入数据,0=读取,1=写入;
- Addr:Modbus寄存器地址;
- Count:要读取的数据长度;
- DataPtr:数据的存放地址;
- Done:指令是否执行完成,1=完成;
- Error:指令执行的状态值,0=没有错误;
指令执行在线状态如下图所示:
通过状态图表,可以监控到读取的数值为293和639,分别表示温度为29.3℃和63.9%rh的湿度,如下图所示:
好了,这就是CPU ST20通过Modbus-RTU协议读取温湿度传感器数值的例程。