西门子SMART200 通过Modbus 读取温湿度传感器数据实例


前言

正在学习SMART200的Modbus通讯,手里正好有一块淘宝买的温湿度传感器,型号是SD123-T10,故拿来试试学习成果。


一、温湿度传感器

1、外观及引脚
在这里插入图片描述
2、默认通讯参数
查询随机资料,波特率:9600;无奇偶校验,8位数据位,停止位1位。
在这里插入图片描述
本次,我们分别用整型和浮点型从设备读取数据。

二、传感器与Smart200接线

1、西门子Port 0口
SMART200 的Port 0口可以支持Modbus RTU协议,作为Modbus主站,对传感器进行读写。这里,我们把PLC当作主站,传感器当作从站。
2、西门子 Port 0 口引脚
在这里插入图片描述
这里我们要注意下,温度传感器的3号引脚(RS485-A)对应西门子连接器3号端口(RS485-B),而温度传感器的4号引脚(RS485-B)却对应西门子连接器的8号端口(RS485-A)。

三、PLC程序

1、调用主站通讯
西门子在 STEP 7-Micro/WIN SMART 中正式推出 Modbus RTU 主站协议库,见下图:
在这里插入图片描述
这里有两组通讯库,一个Master,一个Master2,我这里用的是第一个,另外一个小伙伴们可以试试。
2、 MBUS_CTRL主站初始化和控制子程序引脚说明
在这里插入图片描述
根据上述引脚说明,MBUS_CTRL程序为:
在这里插入图片描述
3、主站读写子程序MBUS_MSG,引脚说明
在这里插入图片描述
根据上述引脚说明,MBUS_MSG程序为:
在这里插入图片描述
这里的几个参数要重点说下

  • Slave是温湿度传感器的站号,也叫地址,从样本上可以查到。
  • Addr是要读取参数的地址,在样本上也能查到,如16位温度地址40513。
  • Count,是读取数据个数,比如,要同时读取16位的温度和湿度,你这里就给赋值2,如果只读一个参数,这里赋值就是1。也就是说,当Count=2时,系统从从40513开始,往下再多读取一个,读到40514停止。如果count是3,那么从40513开始,再读取40514和40515,以此类推。
  • DataPtr 是读取数据指针,指针指向读取数据的地址。这里只能用字节,所以要读取实际数据,还得进行拼接。

四、读取数据

以16位整数形式读取数据

读取整形16位数据就按上述程序来即可,数据指针为&VB100,因为指针对应8位,所以需要2个8位字节组成一个自字来装载数据,也就是VW100是设备内温度的实际读取值,然后再除以10,得到实际温度值。
如果同时读取了湿度,也就是count参数为2是,那么湿度就是VW102,再除以10后,得到实际湿度值,读取值见下图:
在这里插入图片描述
根据上图,实际温度值为VW100/10=17°,实际湿度值VW102/10=35%

以32位浮点形式读取数据

根据设备样本,温度和湿度数值可以以浮点形式读取,那么程序要进行修改。
MBUS_CTRL 不需要修改。
MBUS_MSG 修改如下:
a)仅读取浮点温度
Addr :40516 count =2, 因为浮点32位,需要读取2个字的地址组成一个双字代表一个浮点。所以count=2. 其他不变。
b) 读取浮点温度和湿度
Addr :40516 count =4, 因为浮点32位,需要读取4个字的地址代表两个32位浮点。所以count=4. 其他不变。
重点:
当你用VD100和VD104 读取出数据的时候,你发现不对,见下图:
在这里插入图片描述

那是因为如果MODBUS tcp对方不是西门子设备时候,读上来的连续2个字要交换高低字。也就是说:
原来VD100=VW100+VW102,但是对方因为是非西门子产品,高地位要换位,即VD100=VW102+VW100。程序见下图:
在这里插入图片描述

五、参考文献

1、http://www.ad.siemens.com.cn/productportal/prods/s7-200-smart-portal/200smarttop/smartsms/020.html
2、https://zhuanlan.zhihu.com/p/161890397
3、http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1578456&b_id=64

  • 17
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值