文章目錄
- 前言
- 一、溫濕度傳感器
- 二、傳感器與Smart200接線
- 三、PLC程序
- 四、讀取數(shù)據(jù)
-
- 以16位整數(shù)形式讀取數(shù)據(jù)
- 以32位浮點(diǎn)形式讀取數(shù)據(jù)
- 五、參考文獻(xiàn)
前言
正在學(xué)習(xí)西門子plc SMART200的Modbus通訊,手里正好有一塊淘寶買的溫濕度傳感器,型號是SD123-T10,故拿來試試學(xué)習(xí)成果。
一、溫濕度傳感器
1、外觀及引腳
2、默認(rèn)通訊參數(shù)
查詢隨機(jī)資料,波特率:9600;無奇偶校驗(yàn),8位數(shù)據(jù)位,停止位1位。
本次,我們分別用整型和浮點(diǎn)型從設(shè)備讀取數(shù)據(jù)。
二、傳感器與Smart200接線
1、西門子Port 0口
SMART200 的Port 0口可以支持Modbus RTU協(xié)議,作為Modbus主站,對傳感器進(jìn)行讀寫。這里,我們把PLC當(dāng)作主站,傳感器當(dāng)作從站。
2、西門子 Port 0 口引腳
這里我們要注意下,溫度傳感器的3號引腳(RS485-A)對應(yīng)西門子連接器3號端口(RS485-B),而溫度傳感器的4號引腳(RS485-B)卻對應(yīng)西門子連接器的8號端口(RS485-A)。
三、PLC程序
1、調(diào)用主站通訊
西門子在 STEP 7-Micro/WIN SMART 中正式推出 Modbus RTU 主站協(xié)議庫,見下圖:
這里有兩組通訊庫,一個(gè)Master,一個(gè)Master2,我這里用的是第一個(gè),另外一個(gè)小伙伴們可以試試。
2、 MBUS_CTRL主站初始化和控制子程序引腳說明
根據(jù)上述引腳說明,MBUS_CTRL程序?yàn)椋?BR>
3、主站讀寫子程序MBUS_MSG,引腳說明
根據(jù)上述引腳說明,MBUS_MSG程序?yàn)椋?BR>
這里的幾個(gè)參數(shù)要重點(diǎn)說下
- Slave是溫濕度傳感器的站號,也叫地址,從樣本上可以查到。
- Addr是要讀取參數(shù)的地址,在樣本上也能查到,如16位溫度地址40513。
- Count,是讀取數(shù)據(jù)個(gè)數(shù),比如,要同時(shí)讀取16位的溫度和濕度,你這里就給賦值2,如果只讀一個(gè)參數(shù),這里賦值就是1。也就是說,當(dāng)Count=2時(shí),系統(tǒng)從從40513開始,往下再多讀取一個(gè),讀到40514停止。如果count是3,那么從40513開始,再讀取40514和40515,以此類推。
- DataPtr 是讀取數(shù)據(jù)指針,指針指向讀取數(shù)據(jù)的地址。這里只能用字節(jié),所以要讀取實(shí)際數(shù)據(jù),還得進(jìn)行拼接。
四、讀取數(shù)據(jù)
以16位整數(shù)形式讀取數(shù)據(jù)
讀取整形16位數(shù)據(jù)就按上述程序來即可,數(shù)據(jù)指針為&VB100,因?yàn)橹羔槍?yīng)8位,所以需要2個(gè)8位字節(jié)組成一個(gè)自字來裝載數(shù)據(jù),也就是VW100是設(shè)備內(nèi)溫度的實(shí)際讀取值,然后再除以10,得到實(shí)際溫度值。
如果同時(shí)讀取了濕度,也就是count參數(shù)為2是,那么濕度就是VW102,再除以10后,得到實(shí)際濕度值,讀取值見下圖:
根據(jù)上圖,實(shí)際溫度值為VW100/10=17°,實(shí)際濕度值VW102/10=35%
以32位浮點(diǎn)形式讀取數(shù)據(jù)
根據(jù)設(shè)備樣本,溫度和濕度數(shù)值可以以浮點(diǎn)形式讀取,那么程序要進(jìn)行修改。
MBUS_CTRL 不需要修改。
MBUS_MSG 修改如下:
a)僅讀取浮點(diǎn)溫度
Addr :40516 count =2, 因?yàn)楦↑c(diǎn)32位,需要讀取2個(gè)字的地址組成一個(gè)雙字代表一個(gè)浮點(diǎn)。所以count=2. 其他不變。
b) 讀取浮點(diǎn)溫度和濕度
Addr :40516 count =4, 因?yàn)楦↑c(diǎn)32位,需要讀取4個(gè)字的地址代表兩個(gè)32位浮點(diǎn)。所以count=4. 其他不變。
重點(diǎn):
當(dāng)你用VD100和VD104 讀取出數(shù)據(jù)的時(shí)候,你發(fā)現(xiàn)不對,見下圖:
那是因?yàn)槿绻鸐ODBUS tcp對方不是西門子設(shè)備時(shí)候,讀上來的連續(xù)2個(gè)字要交換高低字。也就是說:
原來VD100=VW100+VW102,但是對方因?yàn)槭欠俏鏖T子產(chǎn)品,高地位要換位,即VD100=VW102+VW100。程序見下圖:
五、參考文獻(xiàn)
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