金星
(上海市政養(yǎng)護管理有限公司,上海 201105)
城市地鐵具有快速、安全、運載能力強的優(yōu)點,是解決城市交通擁堵最有效的手段之一[1]。地鐵的環(huán)境與設(shè)備監(jiān)控系統(tǒng)(BAS)主要對車站及區(qū)間隧道內(nèi)的空調(diào)通風、給排水、照明和電梯扶梯等機電設(shè)備進行全面的運行管理與控制[2]。地鐵環(huán)境與設(shè)備監(jiān)控系統(tǒng)在特殊工況下須承擔一定的防災(zāi)任務(wù),因此對地鐵的正常運營和乘客人身安全至關(guān)重要,屬于安全系統(tǒng),因此《地鐵設(shè)計規(guī)范》對系統(tǒng)的可靠性提出要求[3]。地鐵運行要求BAS系統(tǒng)具有極高的可靠性,特別是選擇具有支持冗余技術(shù)的高可靠系統(tǒng),通過冗余設(shè)計進一步提高系統(tǒng)的可靠性[4]。其中對于PLC及上位機系統(tǒng)通信的冗余度要求也較高,某些情況下要求支持PLC與上位機雙機雙網(wǎng)冗余通信。
西門子S7-400H系列冗余PLC提供使用以太網(wǎng)CP443-1模塊的開放式Modbus/TCP進行冗余通信的功能。但該功能基于單CPU配置一塊以太網(wǎng)CP443-1模塊的方式,只支持上位機雙機單網(wǎng)的通信方式,無法支持上位機雙機雙網(wǎng)冗余通信的方式。在西門子S7-400H系列冗余PLC提供使用以太網(wǎng)CP443-1模塊的開放式Modbus/TCP進行冗余通信功能的基礎(chǔ)上,通過與上位機通信標志位的判斷進行內(nèi)部DB數(shù)據(jù)塊的切換,實現(xiàn)單CPU配置兩塊以太網(wǎng)卡與上位機雙機雙網(wǎng)冗余通信的方式。
圖1 雙機單網(wǎng)冗余通信示意圖
地鐵地下車站兩端的冗余PLC控制器采用西門子的S7-400H型,以靠近車控室端為主端, 遠離車控室端為從端[5]。在主端西門子S7-400H系列冗余PLC中,通過CP443-1以太網(wǎng)模塊基于開放式Modbus TCP冗余通信的方式與上位機進行雙機單網(wǎng)的冗余通信,如圖1所示。但在地鐵項目中,由于對系統(tǒng)的冗余度與穩(wěn)定性要求較高,提出PLC與上位機應(yīng)采用雙機雙網(wǎng)冗余通信的方式,如圖2所示。
圖2 雙機雙網(wǎng)冗余通信示意圖
在雙機單網(wǎng)冗余通信系統(tǒng)中,PLC的以太網(wǎng)CP443-1模塊及上位機均處于一個網(wǎng)段中。S7-400H在同一時刻只有通過其中一個連接與通信伙伴建立通信,但正在通信的連接中斷時,功能塊庫會使CPU自動切換到其他通信鏈路而無須用戶手動切換。
而在雙機雙網(wǎng)冗余通信系統(tǒng)中,PLC中一塊CPU下掛載的兩塊以太網(wǎng)CP443-1模塊處于不同的網(wǎng)段中,而一臺上位機也安裝了兩塊以太網(wǎng)卡,處于兩個網(wǎng)段中。
西門子對于使用以太網(wǎng)CP443-1模塊的開放式Modbus TCP進行冗余通信的功能,提供“Modbus TCP CP Redundant V1.0”安裝包,里面提供了相應(yīng)的安裝軟件及使用說明。
雙機單網(wǎng)Modbus TCP冗余通信系統(tǒng)中,對PLC的以太網(wǎng)CP443-1模塊及上位機的網(wǎng)卡進行配置,使之處于同一個網(wǎng)段中,見圖1。圖3給出了對系統(tǒng)功能塊FB1733"MODB4H"背景數(shù)據(jù)塊數(shù)據(jù)的配置。
圖3 雙機單網(wǎng)FB1733"MODB4H"的背景數(shù)據(jù)塊數(shù)據(jù)配置
按圖3配置后,將上位機需讀取的PLC數(shù)據(jù)存放在地址為4****的Input Register中,用上位機使用功能碼04進行讀取。而上位機對相應(yīng)設(shè)備進行遙控或遙信的PLC地址則在3****的Holding Register中。具體相應(yīng)DB塊對應(yīng)的Modbus地址如圖4所示。
通過該配置,上位機通過圖1中1A、1B、2A、2B這4條鏈路對冗余PLC進行數(shù)據(jù)讀寫操作,所進行讀寫的均為對DB1*數(shù)據(jù)塊的操作。
圖4 DB1*塊數(shù)據(jù)對應(yīng)Modbus地址
為實現(xiàn)雙機雙網(wǎng)冗余通信結(jié)構(gòu),應(yīng)按西門子所提供的以太網(wǎng)CP443-1模塊的開放式Modbus TCP冗余通信鏈路,重復(fù)配置兩個Modbus TCP通信鏈路。圖5給出了對系統(tǒng)功能塊FB1733"MODB4H"的背景數(shù)據(jù)塊數(shù)據(jù)的配置。
圖5 雙機雙網(wǎng)FB1733"MODB4H"的背景數(shù)據(jù)塊數(shù)據(jù)配置
圖5中Sever1部分的配置對應(yīng)圖2中從10.101.3.50、51這兩張網(wǎng)卡讀寫的PLC數(shù)據(jù)塊DB3*。圖5中Sever2部分的配置對應(yīng)圖2中從10.1.3.50、51這兩張網(wǎng)卡讀寫的PLC數(shù)據(jù)塊DB4*。
圖6為Sever1對應(yīng)的數(shù)據(jù)塊DB3*和Sever2對應(yīng)的數(shù)據(jù)塊DB4*,分別對應(yīng)Modbus地址。
圖6 DB3*、 DB4*塊數(shù)據(jù)對應(yīng)Modbus地址
如圖6所示,雖然Modbus地址相同,但是從10.101.3.50、51這兩張網(wǎng)卡進行讀寫操作對應(yīng)的DB數(shù)據(jù)塊和從10.1.3.50、51這兩張網(wǎng)卡進行讀寫操作對應(yīng)的DB數(shù)據(jù)塊是不同的,無法直接實現(xiàn)雙機雙網(wǎng)冗余通信功能。要上位機通過圖2中1A、1B、2C、2D、3A、3B、4C、4D這八條鏈路實現(xiàn)雙機雙網(wǎng)冗余通信的功能,還需進行以下功能設(shè)計。
對于上位機和PLC之間的通信要先進行通信鏈路的選擇與判斷。
上位機采用輪詢機制,按照1A、1B、2C、2D、3A、3B、4C、4D的順序,對這八個鏈路通道進行輪詢。如先對鏈路1A狀態(tài)進行檢測,如果通道狀態(tài)正常,則只通過鏈路1A對相應(yīng)10.101.3.50網(wǎng)卡進行讀寫操作。如鏈路1A狀態(tài)監(jiān)測不響應(yīng)或返回錯誤,則對鏈路1B進行檢測,如鏈路1B檢測通道狀態(tài)正常,則通過鏈路1B對相應(yīng)10.101.3.51網(wǎng)卡進行讀寫操作,以此類推。
在上位機與冗余PLC建立相應(yīng)通信鏈路后,上位機在每次讀寫操作前發(fā)心跳下去,以便PLC確定激活的通信鏈路。具體辦法為:上位機在每次讀寫操作前,向雙方約定的一個Mobus地址寫入1,而PLC通過在每次運行程序時檢測該地址對應(yīng)的DB3*或DB4*數(shù)據(jù)塊地址哪個為1,來確認上位機是通過1A、1B、3A、3B鏈路進行讀寫,還是通過2C、2D、4C、4D鏈路進行讀寫操作的。PLC程序判斷過后,然后對約定的Mobus地址進行復(fù)位,以便每次運行時判斷上位機進行讀寫操作建立的鏈接。
如確定上位機與PLC約定發(fā)送心跳的Modbus地址為40002,發(fā)送數(shù)值為1。冗余PLC中編寫程序在每次執(zhí)行前,先檢測DB31.DBX3.0和DB41.DBX3.0。如果DB31.DBX3.0值為1,判斷上位機是通過1A、1B、3A、3B鏈路對PLC進行讀寫操作。如果DB41.DBX3.0值為1,則判斷上位機是通過2C、2D、4C、4D鏈路對PLC進行讀寫操作。
在上位機與冗余PLC通信鏈路檢測后,上位機對冗余PLC進行讀寫操作。如圖6所示,上位機通過鏈路1A、1B、3A、3B所讀取數(shù)據(jù)對應(yīng)的內(nèi)部數(shù)據(jù)塊為DB36、37數(shù)據(jù)塊,通過鏈路2C、2D、4C、4D所讀取的數(shù)據(jù)對應(yīng)內(nèi)部數(shù)據(jù)塊為DB46、47數(shù)據(jù)塊。對于上位機讀取PLC內(nèi)數(shù)據(jù),無需判斷通信鏈路,只需將上位機所需讀取數(shù)據(jù)同時復(fù)制到DB36、37和DB46、47相同的地址即可。
如上位機需讀取PLC中DI點I0.0~I99.7的值,可在程序中將DI點I0.0~I99.9復(fù)制到DB36.DBX0.0~DB36.DBX99.7,并同時在程序中將DI點I0.0~I99.9復(fù)制到DB46.DBX0.0~DB46.DBX99.7。上位機讀取DI點I0.0~I99.7的值Modbus地址為30001~30050,無論上位機與PLC的通信鏈路走哪條鏈路,讀取的數(shù)值均相同且為DI點I0.0~I99.7的值。
在上位機與冗余PLC通信鏈路檢測后,上位機對冗余PLC進行寫入操作。首先根據(jù)DB3*和DB4*的格式、大小,設(shè)置相同格式、大小的DB11、12、13數(shù)據(jù)塊,作為上位機寫入數(shù)據(jù)的轉(zhuǎn)存地址。
如圖6所示,上位機通過鏈路1A、1B、3A、3B所讀取數(shù)據(jù)對應(yīng)的內(nèi)部數(shù)據(jù)塊為DB31、32、33數(shù)據(jù)塊,通過鏈路2C、2D、4C、4D所讀取數(shù)據(jù)對應(yīng)的內(nèi)部數(shù)據(jù)塊為DB41、42、43數(shù)據(jù)塊。由于上位機在同一時間只可能通過1A、1B、2C、2D、3A、3B、4C、4D這八條鏈路中的一條鏈路向PLC寫入數(shù)據(jù),這就需要通過3.1章節(jié)中的上位機與冗余PLC通信檢測機制來判斷具體建立的是哪條通信鏈路,并以此判斷被上位機寫入數(shù)據(jù)的是DB31、32、33數(shù)據(jù)塊還是DB41、42、43數(shù)據(jù)塊。最后根據(jù)判斷結(jié)果將DB31~33或DB41~33數(shù)據(jù)塊使用SFC20(BLKMOV)系統(tǒng)功能塊復(fù)制到DB11~13數(shù)據(jù)塊,程序?qū)⒏鶕?jù)DB11~13數(shù)據(jù)塊中的遙控、遙調(diào)數(shù)據(jù)執(zhí)行相應(yīng)程序。
通過基于西門子冗余PLC“OPEN Modbus TCP CP Redundant V1.0”軟件包,在此基礎(chǔ)上通過PLC內(nèi)部程序的開發(fā),并與上位機通信軟件的配合,實現(xiàn)了西門子冗余PLC本身并不支持的PLC與上位機雙機雙網(wǎng)Modbus/TCP冗余通信功能。系統(tǒng)冗余的目的主要是讓系統(tǒng)具有高可靠性[6],該功能明顯達到了增加PLC與上位機通信可靠性的目的。該功能在南京地鐵項目中投入實際使用,使用效果達到設(shè)計目標,運行情況良好。