沈 尉,王 欣
(寶山鋼鐵股份有限公司設備部,上海 201999)
鋼鐵行業的生產過程是典型的流程型工業生產過程,為了實現企業全流程綜合經濟指標優化,企業通常會采用覆蓋全流程的綜合自動化系統,國內外大型鋼鐵企業的綜合自動化系統一般采用的是五層架構:決策支持系統,企業級或離線批處理為主的產銷系統,分廠級或在線實時處理為主的生產控制系統,過程控制系統及基礎自動化系統[1]。
與其他行業相比,鋼鐵行業通信的應用環境更為復雜多樣,對通信接口的開發提出了更加個性化的要求。伴隨著國內鋼鐵企業規模日益擴大的趨勢,以及更多新的生產系統的加入,如何實現新老系統間的通信兼容,如何在安全高效的前提下降低系統改造費用,如何確保生產系統運行與通信的連續性,如何向生產運維提供更為可靠的支撐,成為了當前鋼鐵行業通信接口開發的共同課題。
iPlature 是上海寶信軟件股份有限公司研制的面向各種過程控制系統的軟件開發平臺,適用各種操作系統。該軟件具有功能完備、可擴充能力強、效率高、支持多種操作系統、全面支持多線程、穩定可靠、服務程序運行狀態自動檢測和易用性好等優點,在國內工業生產及其他過程控制系統中得到廣泛應用[2]。該軟件的平臺任務開發為構建面向對象的客戶—服務器應用提供了工具、API和庫支持。iPlature::Component及iPlature::P99Component作為應用組件開發模板,解決了進程間的通信問題,大大減少了應用開發的復雜性,提高了開發效率和擴展能力。
iXCom是一款面向開發人員的外部通信中間件平臺,由上海寶信軟件股份有限公司研制,通過它可以實現計算機之間的數據通信。平臺內置了多種常用的通信規約。它起源于大型鋼鐵制造企業,專業解決不同供應商提供的平臺上的連通性問題,實現分布式應用中的信息交換[3]。iXCom作為通信中間件,對上層的應用程序提供了統一的編程界面(圖1)。平臺主要實現了發送和接收應用電文、支持多種通信協議、日志管理、分布式修改配置信息、分布式管理回線狀態、分布式模擬收發電文等功能。

圖1 基于iPlature和iXCom的系統間通信實現方式
在iXCom平臺上實現電文收發主要是通過客戶端來實現信息交互。首先需要在兩臺設備的iXCom客戶端上分別新建回線,保證兩臺設備回線號和協議相同,并填寫回線屬性,包括本方機器代碼、監聽端口、對方機器代碼、對方IP、對方端口,其中端口和機器代碼自行設置,兩臺交互的機器信息匹配即可,配置完成后便可以在客戶端進行收發電文的操作(圖2)。

圖2 回線屬性配置
iXCom平臺配置發送電文有兩種模式:高速模式和高可靠模式。高速模式發送表示對發送的電文不進行緩存,發送失敗則丟棄電文,不重發,一般在與PLC等高速設備進行通信時使用。高可靠模式發送表示會將發送的數據進行緩存,可查詢歷史數據,發送失敗會根據配置的重發次數進行重發,一般用于與生產管理系統進行通信。電文接收上,iXCom主要提供了4種電文接收方式:PCS_Receive方式、iPlature方式、外部數據庫方式、XMLRPC方式。其中,以iPlature方式接收電文能很好地將電文拋給進程,更利于后續的電文解析工作,因此更加適合應用于鋼鐵行業過程控制計算機系統。
開發中常用的基于iPlature 的電文收發主要包括兩部分內容,分別是電文處理及進程間的數據傳遞。
3.1.1 發送電文
使用進程發送電文(圖3)主要通過調用iXCom中的PCS_Send方法來實現。

圖3 發送電文程序框架與功能介紹
為了在進程中使用這個方法,至少在進程的基本結構中包括兩個頭文件app*.h(進程啟動頭文件)、*ICEI.h(電文收發功能頭文件),兩個源文件app*.cpp(進程啟動源文件)、*ICEI.cpp(電文收發功能源文件)。
app*.h和app*.cpp的作用主要是通過繼承iPlature平臺中定義的Component類,并實現start等方法,構建并啟動進程。
*ICEI.h和*ICEI.cpp的主要功能是通過繼承iPlature平臺中定義的MessageICE類,實現諸如SendDataShort(短電文發送),SendDataLong(長電文發送),TimeNotify(時間通知)等方法,并通過這些方法,向其他進程提供數據接收的接口;收到數據后,程序通過實現Autotele類中的Rebuild方法,根據在數據庫中定義的eventNo和電文結構,構建電文;最后調用PCS_Send,通過iXCom發送電文。
3.1.2 接收電文
通過進程接收電文也可以用iPlature的方式來實現(圖4)。

圖4 接收電文程序框架與執行流程
類似發送電文的進程,用于接收電文的進程,其基本結構包括一個頭文件app*.h,兩個源文件*Cus.cpp(電文賦值轉發功能源文件)和*Base.cpp(其他功能實現源文件)。
首先在app*.h中繼承iPlature平臺中的P99Component類;然后在*Base.cpp中使用PostInitCall(進程啟動)來構建并啟動進程,并定義關聯的數據處理進程;進程啟動后,通過HandleMessage(服務接口)來接收通過iXCom接收到的電文數據,簡單解析出電文號后,發送到DispatchData(賦值轉發)進行后續電文處理;最后在*Cus.cpp中通過DispatchData,將電文內容和電文號通過關聯的數據處理進程的ICEI中定義的SendDataShort等方法進行傳送。
內部進程收發主要依托于iPlature平臺(圖5),并不涉及到iXCom平臺。因此,可以視作發送電文示例中的SendDataShort實現過程,與接收電文實例中的DispatchData實現過程的結合。

圖5 基于iPlature的內部進程收發設計結構
首先需要建立兩個進程,分別負責發送數據(進程S)與接收數據(進程R)。兩個進程的基本結構包括頭文件app*.h/*Func.h/*ICEI.h共3個,對應的3個實現源文件為app*.cpp/*Func.cpp/*ICEI.cpp。
構建負責發送電文的進程(進程S)時,首先要在app*.cpp文件中定義一個app組件類,并定義其對應的構造函數。其中,MessageICEPrx *_proxy定義了進程發送電文的目標進程(進程R),主要的實現內容代碼可以通過*Func.cpp(電文發送功能源文件)實現,通過給預先定義的變量或者數據結構賦值,并且通過vector將數據轉換為流數據,再調用進程R類中的SendDataShort()函數,將數據發送至進程R。*ICEI.cpp中則定義了進程S用于接收數據的相關方法。
負責接收數據的進程R,結構和進程S類似,在SendDataShort收到數據后,可以根據與進程S共同約定的數據結構,對收到的流數據進行解析,然后發送到Func類中定義的內部方法進行處理(log記錄或者其他操作)。
在實際的應用中,iXCom往往用以配合iPlature來使用,即通過iXcom上配置的回線來發送電文,然后在另一臺機器上以iPlature的方式通過進程來接收并解析電文。相關操作完成之后,接收電文的信息可以通過進程的日志來進行查詢。
整體開發流程如圖6所示。
通過iPlature平臺實現進程管理,首先在$iPlature/conf中的admin.xml文件里為新增的進程進行配置(如表1所示設置,*為新建進程名),其次通過運行$iPlature/bin路徑下的iPlatureAdmin腳本啟動和關閉全部進程。

表1 Admin文件新增配置內容
iPlature平臺可以使用IceGrid工具監視進程狀態,控制進程的起停。IceGrid是負責對Ice分布式應用集合中各種服務進行定位和激活的服務,是一個Ice的核心基礎服務設施。作為一個進程管理工具,IceGrid同樣需要讀取admin.xml里的配置,其優點在于可以比較方便地對單個進程進行啟動和關閉。在使用IceGrid管理進程前,還需要在IceGridGUI中完成進程的創建。進程創建完成后,需要執行$iPlature/bin/boot_update.bat來實現更新,使服務生效。
iPlature平臺提供Log4cplus方法。用戶進程可以在代碼中繼承并使用這個方法,在程序的日志文件里就可以查到日志信息,如圖7所示。

圖7 接收端日志文件主要內容
面對鋼鐵行業復雜的通信應用環境,基于iPlature與iXCom的過程控制系統通信接口的開發方法能夠更加高效地接收與解析電文,與過程控制系統及鋼鐵生產工藝的適配性更強。
在鋼鐵企業持續發展的進程中,相關開發平臺也需要與時俱進,結合行業特點開發更多個性化的應用,積累更多核心技術,提高平臺的可靠性、實時性、易用性,為鋼鐵行業的智能化、信息化發展做出更多貢獻。