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