文章目錄
- 前言
- 一、溫濕度傳感器
- 二、傳感器與Smart200接線
- 三、PLC程序
- 四、讀取數據
-
- 以16位整數形式讀取數據
- 以32位浮點形式讀取數據
- 五、參考文獻
前言
正在學習西門子plc 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