沈 尉,王 欣
(寶山鋼鐵股份有限公司設備部,上海 201999)
鋼鐵行業(yè)的生產(chǎn)過程是典型的流程型工業(yè)生產(chǎn)過程,為了實現(xiàn)企業(yè)全流程綜合經(jīng)濟指標優(yōu)化,企業(yè)通常會采用覆蓋全流程的綜合自動化系統(tǒng),國內(nèi)外大型鋼鐵企業(yè)的綜合自動化系統(tǒng)一般采用的是五層架構(gòu):決策支持系統(tǒng),企業(yè)級或離線批處理為主的產(chǎn)銷系統(tǒng),分廠級或在線實時處理為主的生產(chǎn)控制系統(tǒng),過程控制系統(tǒng)及基礎自動化系統(tǒng)[1]。
與其他行業(yè)相比,鋼鐵行業(yè)通信的應用環(huán)境更為復雜多樣,對通信接口的開發(fā)提出了更加個性化的要求。伴隨著國內(nèi)鋼鐵企業(yè)規(guī)模日益擴大的趨勢,以及更多新的生產(chǎn)系統(tǒng)的加入,如何實現(xiàn)新老系統(tǒng)間的通信兼容,如何在安全高效的前提下降低系統(tǒng)改造費用,如何確保生產(chǎn)系統(tǒng)運行與通信的連續(xù)性,如何向生產(chǎn)運維提供更為可靠的支撐,成為了當前鋼鐵行業(yè)通信接口開發(fā)的共同課題。
iPlature 是上海寶信軟件股份有限公司研制的面向各種過程控制系統(tǒng)的軟件開發(fā)平臺,適用各種操作系統(tǒng)。該軟件具有功能完備、可擴充能力強、效率高、支持多種操作系統(tǒng)、全面支持多線程、穩(wěn)定可靠、服務程序運行狀態(tài)自動檢測和易用性好等優(yōu)點,在國內(nèi)工業(yè)生產(chǎn)及其他過程控制系統(tǒng)中得到廣泛應用[2]。該軟件的平臺任務開發(fā)為構(gòu)建面向?qū)ο蟮目蛻簟掌鲬锰峁┝斯ぞ?、API和庫支持。iPlature::Component及iPlature::P99Component作為應用組件開發(fā)模板,解決了進程間的通信問題,大大減少了應用開發(fā)的復雜性,提高了開發(fā)效率和擴展能力。
iXCom是一款面向開發(fā)人員的外部通信中間件平臺,由上海寶信軟件股份有限公司研制,通過它可以實現(xiàn)計算機之間的數(shù)據(jù)通信。平臺內(nèi)置了多種常用的通信規(guī)約。它起源于大型鋼鐵制造企業(yè),專業(yè)解決不同供應商提供的平臺上的連通性問題,實現(xiàn)分布式應用中的信息交換[3]。iXCom作為通信中間件,對上層的應用程序提供了統(tǒng)一的編程界面(圖1)。平臺主要實現(xiàn)了發(fā)送和接收應用電文、支持多種通信協(xié)議、日志管理、分布式修改配置信息、分布式管理回線狀態(tài)、分布式模擬收發(fā)電文等功能。
圖1 基于iPlature和iXCom的系統(tǒng)間通信實現(xiàn)方式
在iXCom平臺上實現(xiàn)電文收發(fā)主要是通過客戶端來實現(xiàn)信息交互。首先需要在兩臺設備的iXCom客戶端上分別新建回線,保證兩臺設備回線號和協(xié)議相同,并填寫回線屬性,包括本方機器代碼、監(jiān)聽端口、對方機器代碼、對方IP、對方端口,其中端口和機器代碼自行設置,兩臺交互的機器信息匹配即可,配置完成后便可以在客戶端進行收發(fā)電文的操作(圖2)。
圖2 回線屬性配置
iXCom平臺配置發(fā)送電文有兩種模式:高速模式和高可靠模式。高速模式發(fā)送表示對發(fā)送的電文不進行緩存,發(fā)送失敗則丟棄電文,不重發(fā),一般在與PLC等高速設備進行通信時使用。高可靠模式發(fā)送表示會將發(fā)送的數(shù)據(jù)進行緩存,可查詢歷史數(shù)據(jù),發(fā)送失敗會根據(jù)配置的重發(fā)次數(shù)進行重發(fā),一般用于與生產(chǎn)管理系統(tǒng)進行通信。電文接收上,iXCom主要提供了4種電文接收方式:PCS_Receive方式、iPlature方式、外部數(shù)據(jù)庫方式、XMLRPC方式。其中,以iPlature方式接收電文能很好地將電文拋給進程,更利于后續(xù)的電文解析工作,因此更加適合應用于鋼鐵行業(yè)過程控制計算機系統(tǒng)。
開發(fā)中常用的基于iPlature 的電文收發(fā)主要包括兩部分內(nèi)容,分別是電文處理及進程間的數(shù)據(jù)傳遞。
3.1.1 發(fā)送電文
使用進程發(fā)送電文(圖3)主要通過調(diào)用iXCom中的PCS_Send方法來實現(xiàn)。
圖3 發(fā)送電文程序框架與功能介紹
為了在進程中使用這個方法,至少在進程的基本結(jié)構(gòu)中包括兩個頭文件app*.h(進程啟動頭文件)、*ICEI.h(電文收發(fā)功能頭文件),兩個源文件app*.cpp(進程啟動源文件)、*ICEI.cpp(電文收發(fā)功能源文件)。
app*.h和app*.cpp的作用主要是通過繼承iPlature平臺中定義的Component類,并實現(xiàn)start等方法,構(gòu)建并啟動進程。
*ICEI.h和*ICEI.cpp的主要功能是通過繼承iPlature平臺中定義的MessageICE類,實現(xiàn)諸如SendDataShort(短電文發(fā)送),SendDataLong(長電文發(fā)送),TimeNotify(時間通知)等方法,并通過這些方法,向其他進程提供數(shù)據(jù)接收的接口;收到數(shù)據(jù)后,程序通過實現(xiàn)Autotele類中的Rebuild方法,根據(jù)在數(shù)據(jù)庫中定義的eventNo和電文結(jié)構(gòu),構(gòu)建電文;最后調(diào)用PCS_Send,通過iXCom發(fā)送電文。
3.1.2 接收電文
通過進程接收電文也可以用iPlature的方式來實現(xiàn)(圖4)。
圖4 接收電文程序框架與執(zhí)行流程
類似發(fā)送電文的進程,用于接收電文的進程,其基本結(jié)構(gòu)包括一個頭文件app*.h,兩個源文件*Cus.cpp(電文賦值轉(zhuǎn)發(fā)功能源文件)和*Base.cpp(其他功能實現(xiàn)源文件)。
首先在app*.h中繼承iPlature平臺中的P99Component類;然后在*Base.cpp中使用PostInitCall(進程啟動)來構(gòu)建并啟動進程,并定義關(guān)聯(lián)的數(shù)據(jù)處理進程;進程啟動后,通過HandleMessage(服務接口)來接收通過iXCom接收到的電文數(shù)據(jù),簡單解析出電文號后,發(fā)送到DispatchData(賦值轉(zhuǎn)發(fā))進行后續(xù)電文處理;最后在*Cus.cpp中通過DispatchData,將電文內(nèi)容和電文號通過關(guān)聯(lián)的數(shù)據(jù)處理進程的ICEI中定義的SendDataShort等方法進行傳送。
內(nèi)部進程收發(fā)主要依托于iPlature平臺(圖5),并不涉及到iXCom平臺。因此,可以視作發(fā)送電文示例中的SendDataShort實現(xiàn)過程,與接收電文實例中的DispatchData實現(xiàn)過程的結(jié)合。
圖5 基于iPlature的內(nèi)部進程收發(fā)設計結(jié)構(gòu)
首先需要建立兩個進程,分別負責發(fā)送數(shù)據(jù)(進程S)與接收數(shù)據(jù)(進程R)。兩個進程的基本結(jié)構(gòu)包括頭文件app*.h/*Func.h/*ICEI.h共3個,對應的3個實現(xiàn)源文件為app*.cpp/*Func.cpp/*ICEI.cpp。
構(gòu)建負責發(fā)送電文的進程(進程S)時,首先要在app*.cpp文件中定義一個app組件類,并定義其對應的構(gòu)造函數(shù)。其中,MessageICEPrx *_proxy定義了進程發(fā)送電文的目標進程(進程R),主要的實現(xiàn)內(nèi)容代碼可以通過*Func.cpp(電文發(fā)送功能源文件)實現(xiàn),通過給預先定義的變量或者數(shù)據(jù)結(jié)構(gòu)賦值,并且通過vector將數(shù)據(jù)轉(zhuǎn)換為流數(shù)據(jù),再調(diào)用進程R類中的SendDataShort()函數(shù),將數(shù)據(jù)發(fā)送至進程R。*ICEI.cpp中則定義了進程S用于接收數(shù)據(jù)的相關(guān)方法。
負責接收數(shù)據(jù)的進程R,結(jié)構(gòu)和進程S類似,在SendDataShort收到數(shù)據(jù)后,可以根據(jù)與進程S共同約定的數(shù)據(jù)結(jié)構(gòu),對收到的流數(shù)據(jù)進行解析,然后發(fā)送到Func類中定義的內(nèi)部方法進行處理(log記錄或者其他操作)。
在實際的應用中,iXCom往往用以配合iPlature來使用,即通過iXcom上配置的回線來發(fā)送電文,然后在另一臺機器上以iPlature的方式通過進程來接收并解析電文。相關(guān)操作完成之后,接收電文的信息可以通過進程的日志來進行查詢。
整體開發(fā)流程如圖6所示。
通過iPlature平臺實現(xiàn)進程管理,首先在$iPlature/conf中的admin.xml文件里為新增的進程進行配置(如表1所示設置,*為新建進程名),其次通過運行$iPlature/bin路徑下的iPlatureAdmin腳本啟動和關(guān)閉全部進程。
表1 Admin文件新增配置內(nèi)容
iPlature平臺可以使用IceGrid工具監(jiān)視進程狀態(tài),控制進程的起停。IceGrid是負責對Ice分布式應用集合中各種服務進行定位和激活的服務,是一個Ice的核心基礎服務設施。作為一個進程管理工具,IceGrid同樣需要讀取admin.xml里的配置,其優(yōu)點在于可以比較方便地對單個進程進行啟動和關(guān)閉。在使用IceGrid管理進程前,還需要在IceGridGUI中完成進程的創(chuàng)建。進程創(chuàng)建完成后,需要執(zhí)行$iPlature/bin/boot_update.bat來實現(xiàn)更新,使服務生效。
iPlature平臺提供Log4cplus方法。用戶進程可以在代碼中繼承并使用這個方法,在程序的日志文件里就可以查到日志信息,如圖7所示。
圖7 接收端日志文件主要內(nèi)容
面對鋼鐵行業(yè)復雜的通信應用環(huán)境,基于iPlature與iXCom的過程控制系統(tǒng)通信接口的開發(fā)方法能夠更加高效地接收與解析電文,與過程控制系統(tǒng)及鋼鐵生產(chǎn)工藝的適配性更強。
在鋼鐵企業(yè)持續(xù)發(fā)展的進程中,相關(guān)開發(fā)平臺也需要與時俱進,結(jié)合行業(yè)特點開發(fā)更多個性化的應用,積累更多核心技術(shù),提高平臺的可靠性、實時性、易用性,為鋼鐵行業(yè)的智能化、信息化發(fā)展做出更多貢獻。