西门子1210与485温湿度传感器通信
前端时间买了一个温湿度传感器,正好家里有一个二手的西门子S7-1215plc,就想着用这个plc来读取传感器的数据,看下江苏冬天室内的温湿度情况。
传感器介绍
厂家说是进口芯片的,芯片型号SHT30.设备支持modbus rtu协议,485接口,测量范围温度-30~70摄氏度,湿度0~100%RH,精度温度±0.5度,湿度±3%RH。传感器的接线图如下:
根据厂家给的说明书,温湿度只要通过modbus rtu协议读取地址40513和40514就可以了,数据格式是整形uint16,读取到的数据需要除以10才是实际的温湿度值。
硬件连接
传感器的485接口接到plc的485接口上,传感器的电源接到24v直流电源上,按照厂家给的图接线即可。
组态
- 1215plc没有自带485接口,需要通过一个485扩展模块来实现,扩展模块型号是cm1241
![cm1241模块 cm1241模块]()
- 传感器的485接口接到plc的485口上,plc的com口需要设置成modbus rtu从站模式,波特率9600,无奇偶校验,数据位8位,停止位1位。传感器的modbus地址默认是1。
![plc串口设置 plc串口设置]()
- 同时plc需要在
系统和时钟存储器中开启启用系统存储器字节和启用时钟存储器字节 - 在
程序块中添加一个块,名字随意,fb还是fc都可以,这里用fc,在添加一个数据块db,用来存储读取到的温湿度数据。使用自定义,改成3,就是数据块_1[db3]。 - 双击打开数据块,添加两个
int类型的变量,分别命名为温度和湿度,用来存储温度和湿度数据。![数据块变量 数据块变量]()
- 右键点击数据库,选择属性,取消勾选
优化的数据库,确定后退出,

编程
- 打开新建的
fc块,从右侧指令选项中找到通信-通信处理器-MODBUS(RTU)中拖出Modbus_Comm_load指令,放到程序块中。 - 拖出Modbus_Master指令,放到程序块中。
对指令块进行参数设置
Modbus_Comm_load指令参数设置:REQ: 连接使能,连接成功后为真,可以直接连一个常量TRUE,我这里使用的是M1.2位存储,也就是"Always True"PORT:选择plc的com口,这里是"Local~CM_1241_(RS422_485)_1"BAUD:波特率,这里是9600PARITY:奇偶校验,这里选择0,表示无校验MB_DB:P#DB2.DBX24.0,这里是存储modbus通信数据的数据库地址,我这里使用的是db2,偏移量24,长度0,表示从db2的第24个字节开始存储modbus通信数据
![]()
Modbus_Master指令参数设置:REQ:我这里使用的是M0.1,Clock_5hz,表示每200ms触发一次MB_addr:modbus从站地址,这里传感器的地址是1DATE_ADDR:介绍书上说温度地址是40513,湿度地址是40514。DATA_LEN:需要读取的寄存器数量,这里需要读取两个寄存器,温度和湿度,所以是2DATA_PTE:存储读取的数据的数据库地址,这里是P#DB3.DBX0.0 INT2。![]()
查看数据
下载程序到plc中,打开监视窗口,可以看到数据块db3中的温度和湿度变量已经有数据了。注意读取到的数据需要除以10才是实际的温湿度值。




