西門子S7-1200 MODBUS通信的一個(gè)應(yīng)用案例分享
做過一個(gè)換熱站設(shè)備運(yùn)行監(jiān)測(cè)的項(xiàng)目,需采集管網(wǎng)一次側(cè)和二次側(cè)的供水壓力、溫度以及ABB變頻器的工作狀態(tài)?,F(xiàn)場(chǎng)各類變送器已經(jīng)接到了原有的智能儀表上,因此采用1200PLC通過MODBUS-RTU與現(xiàn)場(chǎng)智能儀表和變頻器通信是比較經(jīng)濟(jì)的方案,并且可通過MODBUS-TCP與遠(yuǎn)程上位機(jī)通信。
智能儀表及變頻器作為從站,只需在設(shè)定中選擇Modbus-RTU通信協(xié)議并且為設(shè)備分配不重復(fù)的站地址即可。1200 PLC作為主站必須配備RS485通信模塊,其通信的基本原理是:首先程序開始運(yùn)行時(shí),調(diào)用一次Modbus庫中的功能塊MB_COMM_LOAD來組態(tài)RS485模塊上的端口;其次調(diào)用庫中的功能塊MB_MASTER作為Modbus主站與設(shè)備進(jìn)行通信。
1200PLC作為主站通信是由DATA_ADDR(從站中的起始Modbus地址)和MODE(讀、寫、診斷模式)參數(shù)一起確定實(shí)際Modbus消息中使用的功能代碼。DATA_PTR(數(shù)據(jù)指針)指向要寫入或讀取的數(shù)據(jù)的CPU DB地址,該DB必須為“非僅符號(hào)訪問”DB類型。在TIA V12以上平臺(tái)中,將該DB屬性中的“優(yōu)化的塊訪問”選項(xiàng)取消。
PLC主站發(fā)送帶有站地址標(biāo)識(shí)的數(shù)據(jù)來尋址不同的從站,同時(shí)不同的從站通過響應(yīng)帶有站地址標(biāo)識(shí)的數(shù)據(jù)給主站,以完成整個(gè)通信過程。這種輪詢通信,可以根據(jù)發(fā)送和接收完成的標(biāo)志來完成,也可以以固定的時(shí)間間隔進(jìn)行輪詢,實(shí)際應(yīng)用時(shí)需要考慮CPU的性能以及輪循Modbus子站時(shí)間。程序編好后先用MODBUS調(diào)試工具測(cè)試一下,正常后再開始接線。
在接線時(shí)遇到一個(gè)小插曲:PLC及變頻器的485接線端子B為正,A為負(fù),很多廠家儀表的485接線端子是A為正,B為負(fù),一開始通信始終不正常,當(dāng)查看儀表說明書時(shí)才發(fā)現(xiàn)。
項(xiàng)目中我使用的是Modbus-TCP通過PLC上PN接口與上位機(jī)進(jìn)行通信,Modbus-TCP使用開放式用戶通信連接作為Modbus通信路徑。在S7-1200 PLC的庫函數(shù)中嵌套了Modbus-TCP功能塊庫, 它包含了Server和Client的庫函數(shù),編程時(shí)可以直接調(diào)用該庫函數(shù)可實(shí)現(xiàn)與上位機(jī)的Modbus-TCP通信。
在該系統(tǒng)應(yīng)用中S7-1200 PLC作為Modbus Tcp Server(服務(wù)器),調(diào)用 “MB_SERVER”指令處理Modbus-TCP客戶機(jī)的連接請(qǐng)求、接收Modbus功能的請(qǐng)求并發(fā)送響應(yīng),設(shè)置連接ID、IP端口等參數(shù),使用起來比較簡(jiǎn)單。
S7-1200 PLC作為網(wǎng)絡(luò)的服務(wù)器端,上位機(jī)可以按需建立連接訪問PLC的數(shù)據(jù)區(qū),這樣在上位機(jī)對(duì)多個(gè)換熱站的PLC連接中不會(huì)占用太多的資源。前提是PLC必需要有固定的IP才行,如果是動(dòng)態(tài)撥號(hào)連接上位機(jī),PLC端就需要作為客戶端,通過修改MODE管腳的值改變發(fā)送或接收狀態(tài),按照主機(jī)的請(qǐng)求來按需向主機(jī)發(fā)送數(shù)據(jù)或主動(dòng)接收主機(jī)的改寫數(shù)據(jù)就比較麻煩了。
這是我在MODBUS通信協(xié)議項(xiàng)目應(yīng)用中的一點(diǎn)小體會(huì),一些觀點(diǎn)或許過于幼稚,望各位同行多我指正,僅以此文起到拋磚引玉的作用。
評(píng)論