西门子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直流电源上,按照厂家给的图接线即可。

组态

  1. 1215plc没有自带485接口,需要通过一个485扩展模块来实现,扩展模块型号是cm1241
    cm1241模块
  2. 传感器的485接口接到plc的485口上,plc的com口需要设置成modbus rtu从站模式,波特率9600,无奇偶校验,数据位8位,停止位1位。传感器的modbus地址默认是1。
    plc串口设置
  3. 同时plc需要在系统和时钟存储器中开启启用系统存储器字节启用时钟存储器字节
  4. 程序块中添加一个块,名字随意,fb还是fc都可以,这里用fc,在添加一个数据块db,用来存储读取到的温湿度数据。使用自定义,改成3,就是数据块_1[db3]
  5. 双击打开数据块,添加两个int类型的变量,分别命名为温度湿度,用来存储温度和湿度数据。
    数据块变量
  6. 右键点击数据库,选择属性,取消勾选优化的数据库,确定后退出,

编程

  1. 打开新建的fc块,从右侧指令选项中找到通信-通信处理器- MODBUS(RTU)中拖出Modbus_Comm_load指令,放到程序块中。
  2. 拖出Modbus_Master指令,放到程序块中。
  3. 对指令块进行参数设置

    • Modbus_Comm_load指令参数设置:

      • REQ: 连接使能,连接成功后为真,可以直接连一个常量TRUE,我这里使用的是M1.2位存储,也就是"Always True"
      • PORT:选择plc的com口,这里是"Local~CM_1241_(RS422_485)_1"
      • BAUD:波特率,这里是9600
      • PARITY:奇偶校验,这里选择0,表示无校验
      • MB_DBP#DB2.DBX24.0,这里是存储modbus通信数据的数据库地址,我这里使用的是db2,偏移量24,长度0,表示从db2的第24个字节开始存储modbus通信数据
    • Modbus_Master指令参数设置:

      • REQ:我这里使用的是M0.1Clock_5hz,表示每200ms触发一次
      • MB_addr:modbus从站地址,这里传感器的地址是1
      • DATE_ADDR:介绍书上说温度地址是40513,湿度地址是40514。
      • DATA_LEN:需要读取的寄存器数量,这里需要读取两个寄存器,温度和湿度,所以是2
      • DATA_PTE:存储读取的数据的数据库地址,这里是P#DB3.DBX0.0 INT2

查看数据

下载程序到plc中,打开监视窗口,可以看到数据块db3中的温度湿度变量已经有数据了。注意读取到的数据需要除以10才是实际的温湿度值。
监视窗口

发表评论