本实例我们介绍下西门子S7-200 SMART PLC如何通过Modbus-RTU协议读取温湿度传感器的数值。实例使用的硬件如下:
S7-200 SMART CPU ST20;
温湿度传感器(支持Modbus-RTU协议);
本文包括如下几个主题:
1、温湿度传感器外观、接线及通信参数介绍
2、CPU ST20与温湿度传感器的接线;
3、CPU ST20的编程;
1、温湿度传感器外观、接线及通信参数介绍
本例程使用的温湿度传感器能检测的温度范围为:-40℃~120℃,湿度范围为:0%~100% rh,其外观如下图所示:
该温湿度传感器有四条线,颜色分别是:红、黑、黄、绿,各线的定义如下:
线色 | 定义 | 备注 |
---|---|---|
红色 | 电源正极 | 电压范围:DC 5~24V |
黑色 | 电源负极 | |
黄色 | RS485-A | RS485-信号A线(+) |
绿色 | RS285-B | RS485-信号B线(-) |
该温湿度传感器支持Modbus-RTU协议,相关通信参数如下:
支持的波特率:1200bps、2400bps、4800bps、9600bps、19200bps,默认为9600bps;
通信设置:起始位1位,数据位8位,停止位1位,无校验位;
支持站地址范围:1~247,默认为1;
支持Modbus功能码0x03读取数据,数据格式如下表所示:
数据起始地址 | 数据内容 | 字节数 | 单位 |
---|---|---|---|
0 | 温度值 | 2 | 0.1℃ |
1 | 湿度值 | 2 | 0.1rh |
支持Modbus功能码0x10或者0x06修改传感器的站地址或者波特率,数据格式如下表所示:
数据起始地址 | 数据内容 | 字节数 | 范围 |
---|---|---|---|
100 | 站地址 | 2 | 1~247 |
101 | 波特率 | 2 | 0~4① |
①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协议读取温湿度传感器数值的例程。我的新书《西门子S7-200 SMART PLC应用技术——编程、通信、装调、案例》有更多通信的内容介绍,点击【这里】查看关于该书的介绍。
我最近开通了微信视频号,以视频的方式分享工控小知识,欢迎扫描下方的二维码查看:
实例:S7-200 SMART通过Modbus-RTU读取温湿度传感器数据
来源:本站| 大小:917KB| 下载次数:3043次
发表评论