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