侯胡的,李永燕,楊云國
(上海鐵大電信設(shè)備有限公司,上海 200070)
微機監(jiān)測系統(tǒng),主要用于集中監(jiān)測鐵路信號設(shè)備的運行狀態(tài)和運行參數(shù),目前已經(jīng)廣泛應(yīng)用于我國鐵路行業(yè)。微機監(jiān)測系統(tǒng)組成部分主要有數(shù)據(jù)采集系統(tǒng)和上位機處理軟件系統(tǒng)。而現(xiàn)有的上位機軟件系統(tǒng)主要由3部分組成:站機、服務(wù)器和終端程序。其中站機位于車站機械室內(nèi),通過與下位機軟件的通信,獲取、匯總并分析數(shù)據(jù)采集機采集到的信息,同時上傳到服務(wù)器。服務(wù)器用于轉(zhuǎn)發(fā)站機數(shù)據(jù)到各個終端,同時存儲歷史數(shù)據(jù)。終端則提供查詢數(shù)據(jù)并進(jìn)行綜合顯示的功能。
該系統(tǒng)2種軟件架構(gòu)見圖1和圖2。
圖1表示每一個車站都設(shè)有一臺監(jiān)測主機,上面裝有站機程序。所有站機程序通過使用相同的網(wǎng)絡(luò)應(yīng)用層協(xié)議連接到電務(wù)處、電務(wù)段2個服務(wù)器上;各家終端只連接自己的服務(wù)器。
圖2表示每一個車站也都裝有一臺監(jiān)測主機,上面裝有站機程序。電務(wù)處終端要查看的各個站機送來的信息,都是經(jīng)過電務(wù)段服務(wù)器轉(zhuǎn)發(fā)給電務(wù)處服務(wù)器,然后再由電務(wù)處服務(wù)器發(fā)送到各個終端;反之,電務(wù)處終端的查詢命令也是先要經(jīng)過電務(wù)處服務(wù)器發(fā)送到電務(wù)段服務(wù)器,再由電務(wù)段服務(wù)器轉(zhuǎn)發(fā)到各個車站。
圖2 微機監(jiān)測軟件架構(gòu)模式2
上面2種方式,都有以下一些缺點:
(1)系統(tǒng)運行效果很大程度上依賴于服務(wù)器的穩(wěn)定性,服務(wù)器出現(xiàn)問題時,整個網(wǎng)絡(luò)看不到數(shù)據(jù)。
(2)站機層面,所有的設(shè)備驅(qū)動都在一個程序模塊類,可重用性差。各個廠家的設(shè)備接口眾多,缺乏統(tǒng)一的接口協(xié)議, 修改程序影響范圍大。
(3)終端軟件調(diào)看數(shù)據(jù)如日曲線的數(shù)據(jù)量少,且功能單一。
(4)與其他既有系統(tǒng),如電務(wù)信息管理系統(tǒng)CSMIS的交互不方便,采用數(shù)據(jù)庫交互的方式效率較低。
(5)與信號專家診斷系統(tǒng)的交互不方便,采用socket通信的方式較為麻煩。
這里的組件技術(shù)是指微軟公司提出的COM/DCOM技術(shù)。
COM(組件對象模型)是一種以組件為架構(gòu)單元的對象模型,這種模型使系統(tǒng)中各個組件能夠以二進(jìn)制接口的方式進(jìn)行交互。該模型具有3個特性:語言無關(guān)性、進(jìn)程透明性和可重用性。
DCOM(分布式組件對象模型)是COM的無縫擴展,它支持不同計算機上的組件對象與客戶對象之間的相互通信。對于客戶程序而言,這些組件程序所在的位置是透明的,編程人員不用考慮不同機器上程序之間的通信的具體細(xì)節(jié),而是關(guān)注于系統(tǒng)業(yè)務(wù)本身的實現(xiàn)上。
有了組件技術(shù),就可以將一些可重用模塊如微機聯(lián)鎖、智能電源屏等I/O驅(qū)動程序做成組件,然后在這些組件的基礎(chǔ)上對現(xiàn)有微機監(jiān)測軟件系統(tǒng)進(jìn)行重新架構(gòu)。
采用組件技術(shù)后,微機監(jiān)測軟件系統(tǒng)是用戶界面交互程序和實時值、日報表等模塊以及各個I/O驅(qū)動模塊。在基于組件的微機監(jiān)測軟件架構(gòu)里,服務(wù)器程序可以不用,以前的終端程序也就相當(dāng)于一個用戶界面程序去連接遠(yuǎn)端的硬件I/O驅(qū)動模塊。
具體的模塊劃分和系統(tǒng)結(jié)構(gòu)如圖3。聯(lián)鎖、智能電源屏等I/O驅(qū)動模塊位于軟件系統(tǒng)的最低層,所有這些模塊和CAN總線數(shù)據(jù)收發(fā)模塊Can-ModuleEx(通過CAN協(xié)議收集軌道電壓、絕緣漏流、道岔電流等數(shù)據(jù))組成一個軟件虛擬層,這個虛擬軟件層由許多組件組成。這些組件對外提供接口,通過這些接口,就可以獲取緩存在這些組件中的數(shù)據(jù)。另外,對數(shù)據(jù)的處理過程如報警、實時值、日報表等也可以編寫成獨立模塊,這樣可以針對不同的應(yīng)用場合使用不同的模塊。
圖3 微機監(jiān)測系統(tǒng)模塊劃分和系統(tǒng)結(jié)構(gòu)
模塊與模塊之間則是采用隊列數(shù)據(jù)結(jié)構(gòu)進(jìn)行數(shù)據(jù)的交互,交互的接口使用自定義結(jié)構(gòu)體。比如變化開關(guān)量在idl文件中的定義如下:
typedef
[
uuid(7E42E7AD-2C3F-48ae-B5EEE1979493E6A6),helpstring("變化開關(guān)量結(jié)構(gòu)"),
]
struct COM_DigitChangeQueueTemplate
{
[helpstring("分機號")]BYTE FenJiNo;
[helpstring("開關(guān)量序號(最高位表示變化狀態(tài))")] WORD DigitNo;
}COM_DigitChangeQueueTemplate;然后在程序中使用封裝好的隊列類取出數(shù)據(jù):
COM_DigitStatusQueueTemplate *pDigit;
OutQueue(DigitStatusQueueNo,pDigit);
對于在有多個微機監(jiān)測廠商的環(huán)境里,如電務(wù)段里往往會有多個廠商的軟件和設(shè)備,在新的軟件架構(gòu)下就不需要另外再設(shè)立各自的服務(wù)器,而是只要將用戶界面主程序直接連接到相應(yīng)的車站機中的相應(yīng)的I/O模塊即可。
重新架構(gòu)后的微機監(jiān)測軟件系統(tǒng)架構(gòu)如圖4。
圖4 新微機監(jiān)測軟件架構(gòu)圖
由于微機監(jiān)測軟件系統(tǒng)采用了MFC多線程方式實現(xiàn),因此不可避免的牽涉到多線程調(diào)用組件的問題。在本軟件系統(tǒng)中,我們使用了STA(單線程套間)啟動線程,同時通過列集和散集將COM對象的指針傳遞到各個線程。
(1)在主線程里獲取組件的接口指針,比如將開關(guān)量組件指針pDigit通過列集封送成IStream接口指針pStream:
IStream *pStream = NULL;
static IDigitComp *pDigit;
HRESULT hr = ::CoMarshalInterThreadInterfaceInStream(__uuidof(IDigitComp), pDigit,&pStream);
(2)通過散集在各功能模塊線程中內(nèi)部使用和釋放該接口指針:
DWORD WINAPI DigitProcMain(LPVOID pWndView)
{
IStream *pStream = (IStream*) pWndView;
HRESULT hr=::CoGetInterfaceAnd-Release-Stream(pStream, __uuidof(IDigitComp), (void**)&pDigit);
其他邏輯處理過程 ……
}
鐵路上對信號設(shè)備的監(jiān)測具有采集點眾多,數(shù)據(jù)量較大,各個模塊之間關(guān)聯(lián)緊密,實時性要求高等特點。
微機監(jiān)測系統(tǒng)已經(jīng)開發(fā)了10多年,鐵路內(nèi)有數(shù)千個微機監(jiān)測系統(tǒng)使用的都是老的系統(tǒng)架構(gòu),在這基礎(chǔ)上又有一系列應(yīng)用層通信協(xié)議,而且每個微機監(jiān)測廠家又有自己的一些特色功能,這些都使得微機監(jiān)測的功能變得比較復(fù)雜。
采用組件技術(shù)的優(yōu)勢:
(1)所有的驅(qū)動程序都被獨立出來,如同在硬件層之上行成一個與硬件無關(guān)的虛擬層,在此基礎(chǔ)上可以形成統(tǒng)一接口協(xié)議。
(2)由于這些組件繼承了自動化接口IDispatch,因此可以采用ASP或者JSP進(jìn)行編程,通過Web界面與微機監(jiān)測系統(tǒng)交互。
(3)一定程度上增強程序的穩(wěn)定性,因為當(dāng)出現(xiàn)異常時,可以隔離到個別模塊,其他模塊仍然可以照常運行,從而增強軟件系統(tǒng)的整體穩(wěn)定性。
(4)更容易添加擴展功能,如信號故障診斷分析等。
(5)可以不用專門的終端軟件,甚至服務(wù)器軟件。
(6)不再需要下載配置庫,因此站機配置的改變會實時反映出來。
采用組件技術(shù)的不利之處:
(1)軟件開發(fā)和運行環(huán)境的配置較為復(fù)雜,軟件調(diào)試不如以前方便。
(2)網(wǎng)絡(luò)中各個主機須有相同的用戶名和密碼,或者需要配置網(wǎng)絡(luò)的工作域。
重新設(shè)計后的微機監(jiān)測軟件系統(tǒng)能夠使各廠家統(tǒng)一接口協(xié)議,甚至制定類似于OPC (OLE Process Control) 的統(tǒng)一接口協(xié)議。由硬件廠家提供I/O驅(qū)動程序模塊和接口。通過連接到不同的組件上,可以實現(xiàn)雙網(wǎng)冗余系統(tǒng)。
[1] 趙相榮,李 萍. TJWX-2000型信號微機監(jiān)測系統(tǒng)[M]. 北京:中國鐵道出版社, 2001.
[2] 潘愛民. COM原理與應(yīng)用[M]. 北京:清華大學(xué)出版社,1999.
[3] Christopher Tavares. 深入解析ATL[M]. 2版. 北京:電子工業(yè)出版社,2007.