本實(shí)例我們介紹下西門子S7-200 SMART PLC如何通過(guò)Modbus-RTU協(xié)議讀取溫濕度傳感器的數(shù)值。實(shí)例使用的硬件如下:
- S7-200 SMART CPU ST20;
- 溫濕度傳感器(支持Modbus-RTU協(xié)議);
本文包括如下幾個(gè)主題:
1、溫濕度傳感器外觀、接線及通信參數(shù)介紹
2、CPU ST20與溫濕度傳感器的接線;
3、CPU ST20的編程;
1、TH10S-B-H溫濕度傳感器外觀、接線及通信參數(shù)介紹
本例程使用的溫濕度傳感器能檢測(cè)的溫度范圍為:-40℃~120℃,濕度范圍為:0%~100% rh,其外觀如下圖所示:
該溫濕度傳感器有四條線,顏色分別是:紅、黑、黃、綠,各線的定義如下:
該溫濕度傳感器支持Modbus-RTU協(xié)議,相關(guān)通信參數(shù)如下:
- 支持的波特率:1200bps、2400bps、4800bps、9600bps、19200bps,默認(rèn)為9600bps;
- 通信設(shè)置:起始位1位,數(shù)據(jù)位8位,停止位1位,無(wú)校驗(yàn)位;
- 支持站地址范圍:1~247,默認(rèn)為1;
- 支持Modbus功能碼0x03讀取數(shù)據(jù),數(shù)據(jù)格式如下表所示:
支持Modbus功能碼0x10或者0x06修改傳感器的站地址或者波特率,數(shù)據(jù)格式如下表所示:
①0=1200bps;1=2400bps;2=4800bps;3=9600bps;4=19200bps;
2、CPU ST20與溫濕度傳感器的接線
本例程使用CPU ST20本體集成的串口(編號(hào):Port0)連接溫濕度傳感器。Port0針腳定義如下表所示:
需要說(shuō)明的是,西門子RS485信號(hào)線定義與很多廠家不同:多數(shù)廠家定義RS485信號(hào)A線為正極,信號(hào)B線為負(fù)極;但是西門子定義A線為負(fù)極,信號(hào)B線為正極。
因此,在本例程中,溫濕度傳感器的黃線(RS485+)應(yīng)該與CPU ST20本體串口Port0的3號(hào)引腳相連;同時(shí),溫濕度傳感器的綠線(RS485-)應(yīng)該與Port0的8號(hào)引腳相連;
3、CPU ST20的編程
使用S7-200 SMART的庫(kù)指令【Modbus RTU Master】中的MBUS_CTRL指令和MBUS_MSG指令來(lái)與溫濕度傳感器進(jìn)行Modbus-RTU通信。
MBUS_CTRL指令用來(lái)配置Modbus主站的通信參數(shù),需要在每個(gè)掃描周期都調(diào)用。指令各參數(shù)含義如下:
- Mode:通信協(xié)議的類型;0=PPI協(xié)議;1=Modbus協(xié)議;
- Baud:波特率;
- Parity:校驗(yàn)位,0=無(wú)校驗(yàn),1=奇校驗(yàn),2=偶校驗(yàn);
- Port:端口號(hào),CPU本體串口編號(hào)為0,通信板編號(hào)為1;
- Timeout:超時(shí)的時(shí)間值,單位為毫秒;
- Done:指令是否完成;
- Error:指令執(zhí)行的狀態(tài)值,0=沒(méi)有錯(cuò)誤;
指令執(zhí)行在線狀態(tài)如下圖所示:
MBUS_MSG指令用來(lái)與子站進(jìn)行數(shù)據(jù)交換,其各參數(shù)含義如下:
- First:請(qǐng)求數(shù)據(jù)交換,需要上升沿信號(hào);
- Slave:從站地址;
- RW:讀取或?qū)懭霐?shù)據(jù),0=讀取,1=寫入;
- Addr:Modbus寄存器地址;
- Count:要讀取的數(shù)據(jù)長(zhǎng)度;
- DataPtr:數(shù)據(jù)的存放地址;
- Done:指令是否執(zhí)行完成,1=完成;
- Error:指令執(zhí)行的狀態(tài)值,0=沒(méi)有錯(cuò)誤;
指令執(zhí)行在線狀態(tài)如下圖所示:
通過(guò)狀態(tài)圖表,可以監(jiān)控到讀取的數(shù)值為293和639,分別表示溫度為29.3℃和63.9%rh的濕度,如下圖所示:
好了,這就是CPU ST20通過(guò)Modbus-RTU協(xié)議讀取溫濕度傳感器數(shù)值的例程。