劉 平,魏文軍
(蘭州交通大學(xué)光電技術(shù)與智能控制教育部重點(diǎn)實(shí)驗(yàn)室,蘭州730070)
隨著網(wǎng)絡(luò)技術(shù)與通信技術(shù)的迅速發(fā)展,使遠(yuǎn)程故障診斷系統(tǒng)實(shí)現(xiàn)成為可能。它突破了傳統(tǒng)故障診斷模式的束縛,通過(guò)信息交流而不是人員交流來(lái)解決現(xiàn)場(chǎng)的故障問(wèn)題,實(shí)現(xiàn)資源共享,避免重復(fù)開(kāi)發(fā)。將計(jì)算機(jī)科學(xué)、通信技術(shù)、虛擬現(xiàn)實(shí)技術(shù)與故障診斷技術(shù)相結(jié)合,使設(shè)備的故障診斷更加靈活方便。
與此同時(shí),隨著Web技術(shù)的迅速發(fā)展,B/S模式在很多領(lǐng)域被采用,在遠(yuǎn)程狀態(tài)監(jiān)測(cè)與診斷領(lǐng)域應(yīng)用相當(dāng)廣泛。
本文以基于B/S模式的遠(yuǎn)程故障診斷系統(tǒng)為例,對(duì)ActiveX技術(shù)進(jìn)行了詳細(xì)研究,并采用ActiveX技術(shù)和B/S模式結(jié)合的方式,來(lái)更好的實(shí)現(xiàn)遠(yuǎn)程故障診斷的功能。
B/S模式,即Browser/Server(瀏覽器/服務(wù)器)模式,它以Web為中心,采用了TCP/IP技術(shù),以HTTP為傳輸協(xié)議,客戶(hù)端通過(guò)瀏覽器訪(fǎng)問(wèn)Web以及與Web相連的后臺(tái)數(shù)據(jù)庫(kù)。其拓展了傳統(tǒng)C/S結(jié)構(gòu),為用戶(hù)提供了一個(gè)跨平臺(tái)的應(yīng)用環(huán)境:實(shí)現(xiàn)了開(kāi)發(fā)環(huán)境和應(yīng)用環(huán)境的分離;避免了為多種不同的操作系統(tǒng)開(kāi)發(fā)同一應(yīng)用軟件的重復(fù)操作;便于系統(tǒng)擴(kuò)展、維護(hù)及管理。
基于B/S模式的應(yīng)用系統(tǒng),由分布在Internet/Intranet上的瀏覽器、Web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器組成。如圖1是一個(gè)典型的3層結(jié)構(gòu)的B/S應(yīng)用系統(tǒng),其中連接在網(wǎng)絡(luò)中的客戶(hù)端通過(guò)瀏覽器向Web服務(wù)器提交請(qǐng)求,Web服務(wù)器根據(jù)客戶(hù)請(qǐng)求與數(shù)據(jù)庫(kù)服務(wù)器交互,并將操作結(jié)果返回客戶(hù)端瀏覽器。其中,Web服務(wù)器負(fù)責(zé)處理應(yīng)用業(yè)務(wù)邏輯,是3層結(jié)構(gòu)的核心,實(shí)現(xiàn)了客戶(hù)端與服務(wù)器的連接。
圖1 B/S應(yīng)用系統(tǒng)結(jié)構(gòu)圖
ActiveX是Microsoft提出的,采用COM(Component Object Model,部件對(duì)象模型)使軟件部件在網(wǎng)絡(luò)環(huán)境中進(jìn)行交互的一組技術(shù)集。它是在COM之上建立的一種理論和概念,與具體的編程語(yǔ)言無(wú)關(guān),包括ActiveX控件、ActiveX文檔和ActiveX部件,本文主要對(duì)ActiveX控件的應(yīng)用進(jìn)行研究。
ActiveX控件是直接插入到應(yīng)用程序的軟件模塊,它是為了適應(yīng)Internet環(huán)境而對(duì)OLE控件作的擴(kuò)充,其主要的作用是為其它程序提供具體特定的功能組件、減少重復(fù)開(kāi)發(fā)工作。ActiveX控件同其它的ActiveX組件相比具有以下特點(diǎn):能通過(guò)設(shè)置屬性控制其行為,從而實(shí)現(xiàn)用戶(hù)接口;在客戶(hù)端的瀏覽器執(zhí)行,能夠緩解服務(wù)器的負(fù)載。
采用VC++6.0開(kāi)發(fā)ActiveX控件主要有兩種方法:MFC ActiveX Control Wizard和ATL(ActiveX Template Library)。使用MFC可以不必理會(huì)控件接口的細(xì)節(jié),把注意力集中在控件本身的功能上,但是生成的控件比較大;使用ATL由于不涉及MFC的標(biāo)準(zhǔn)類(lèi)庫(kù),生成的控件相對(duì)較小。當(dāng)設(shè)計(jì)自己的控件時(shí),MFC支持更容易滿(mǎn)足人們的要求。
使用MFC開(kāi)發(fā)的ActiveX控件包括Cole-Control類(lèi)、事件引發(fā)函數(shù)和調(diào)度映射幾個(gè)基本組件,ActiveX控件使用這些程序元素與控制容器和用戶(hù)進(jìn)行有效的交互。MFC創(chuàng)建的ActiveX控件都會(huì)從MFC基類(lèi)ColeControl繼承一組強(qiáng)大的功能,ColeControl提供給控件許多與MFC窗口對(duì)象相同的功能,并提供引發(fā)事件的能力。ActiveX控件從ColeControl類(lèi)繼承一套事件引發(fā)函數(shù),在滿(mǎn)足一定條件時(shí),向控制容器發(fā)送或引發(fā)事件。調(diào)度映射用于向控件容器或控件用戶(hù)公開(kāi)控件的方法和屬性,控件容器或控件用戶(hù)可以通過(guò)屬性操作控件,如更改控件的外觀、某些參數(shù)或生成控件請(qǐng)求等。
ActiveX控件的開(kāi)發(fā)主要包括界面設(shè)計(jì),控件的屬性、方法和事件設(shè)計(jì)。ActiveX控件設(shè)計(jì)完成后,必須注冊(cè)后才能使用,可以采用下面的兩種方法注冊(cè):
(1)將ActiveX控件的文件*.Ocx放入Windows/system目錄下;
(2)采用VC++6.0中的Tools菜單的Register Control選項(xiàng)進(jìn)行注冊(cè)。
為了更好的完善B/S模式,克服其缺陷,本文在B/S體系結(jié)構(gòu)的基礎(chǔ)上,提出了一種基于ActiveX技術(shù)的B/S體系結(jié)構(gòu),將ActiveX技術(shù)應(yīng)用于系統(tǒng)的客戶(hù)端,開(kāi)發(fā)出一種高效、安全的Web應(yīng)用系統(tǒng)。ActiveX技術(shù)在B/S模式中的應(yīng)用如圖2。
圖2 基于ActiveX技術(shù)的B/S體系結(jié)構(gòu)
采用這種結(jié)構(gòu)的優(yōu)點(diǎn):
(1)充分發(fā)揮了B/S體系結(jié)構(gòu)的優(yōu)勢(shì),保持了瘦客戶(hù)端的優(yōu)點(diǎn)。既充分考慮了用戶(hù)的利益,使得瀏覽查詢(xún)更加方便快捷,又使得系統(tǒng)的更新維護(hù)更加簡(jiǎn)單靈活;
(2)將服務(wù)器端劃分為Web服務(wù)器和應(yīng)用服務(wù)器兩部分,有利于提高服務(wù)器的工作效率和安全性;
(3)通過(guò)在瀏覽器中嵌入ActiveX控件來(lái)實(shí)現(xiàn)在瀏覽器中實(shí)現(xiàn)起來(lái)比較困難的功能,比如通過(guò)瀏覽器進(jìn)行報(bào)表的應(yīng)答或在客戶(hù)端繪制出逼真的畫(huà)面等。另外,ActiveX控件在客戶(hù)端的加盟,將更有利于客戶(hù)端與服務(wù)器端之間信息的交互。
遠(yuǎn)程故障診斷系統(tǒng)一般是大型企業(yè)的關(guān)鍵設(shè)備,其內(nèi)部一般已有一套比較完整的局域網(wǎng)絡(luò),這套局域網(wǎng)絡(luò)對(duì)設(shè)備進(jìn)行在線(xiàn)監(jiān)測(cè)和一般故障診斷。以鐵路設(shè)備遠(yuǎn)程故障診斷系統(tǒng)為例,在其內(nèi)部已經(jīng)有功能齊全的信號(hào)微機(jī)監(jiān)測(cè)系統(tǒng),可以實(shí)時(shí)地監(jiān)測(cè)和診斷一般的設(shè)備故障,但對(duì)于較復(fù)雜的故障,需求助于專(zhuān)家的解答,而專(zhuān)家一般并不在現(xiàn)場(chǎng),所以就得開(kāi)發(fā)遠(yuǎn)程故障診斷系統(tǒng),來(lái)更好的排除故障和保障安全。本文就以鐵路設(shè)備遠(yuǎn)程故障診斷系統(tǒng)為例,來(lái)說(shuō)明ActiveX技術(shù)在B/S模式中的具體應(yīng)用。
如圖3,鐵路設(shè)備遠(yuǎn)程故障診斷系統(tǒng)的結(jié)構(gòu)為:
(1)在監(jiān)測(cè)現(xiàn)場(chǎng)采用Intranet結(jié)構(gòu),進(jìn)行現(xiàn)場(chǎng)設(shè)備的監(jiān)測(cè)和維護(hù);
(2)當(dāng)有故障產(chǎn)生時(shí),用戶(hù)使用瀏覽器通過(guò)Internet向遠(yuǎn)程Web服務(wù)器傳輸有關(guān)故障征兆和數(shù)據(jù)并請(qǐng)求故障解決方案;
(3)遠(yuǎn)程Web服務(wù)器收到請(qǐng)求以后,啟動(dòng)遠(yuǎn)程診斷專(zhuān)家系統(tǒng)進(jìn)行診斷推理,并同時(shí)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行相應(yīng)的處理,并產(chǎn)生診斷結(jié)果;
(4)Web服務(wù)器將診斷結(jié)果組織成HTML頁(yè)面,通過(guò)HTTP下載到用戶(hù)瀏覽器,對(duì)于一些實(shí)現(xiàn)起來(lái)比較困難的功能或一些需要豐富的HTML頁(yè)面,通過(guò)在頁(yè)面中嵌入ActiveX控件來(lái)實(shí)現(xiàn),此時(shí)用戶(hù)就可以得到診斷結(jié)果并進(jìn)行相應(yīng)的處理。
圖3 鐵路設(shè)備遠(yuǎn)程故障診斷系統(tǒng)結(jié)構(gòu)
采用圖3的系統(tǒng)結(jié)構(gòu),可以有效地實(shí)現(xiàn)異地遠(yuǎn)程多用戶(hù)診斷服務(wù),便于系統(tǒng)管理與升級(jí),可簡(jiǎn)便地構(gòu)造出一個(gè)異地遠(yuǎn)程人機(jī)會(huì)診與協(xié)作診斷環(huán)境,這樣就可以及時(shí)、準(zhǔn)確的解決現(xiàn)場(chǎng)故障,更加有利于提高鐵路的運(yùn)行效率和保證行車(chē)安全。
作為針對(duì)Internet應(yīng)用開(kāi)發(fā)的技術(shù),ActiveX控件嵌入HTML文本中,形成一定功能的程序模塊,被廣泛應(yīng)用于Web服務(wù)器和客戶(hù)端。以Active-X技術(shù)在客戶(hù)端的應(yīng)用為例,在ActiveX控件中,運(yùn)用socket網(wǎng)絡(luò)通信技術(shù)實(shí)現(xiàn)客戶(hù)端與服務(wù)器之間的通信,用戶(hù)可在不安裝客戶(hù)端程序的情況下直接通過(guò)瀏覽器與服務(wù)器或其他客戶(hù)端進(jìn)行通信。ActiveX控件可直接嵌入Web頁(yè)面,來(lái)實(shí)現(xiàn)其特定的功能,其在Web頁(yè)面中通過(guò)
本系統(tǒng)客戶(hù)端中許多報(bào)表的打印如電碼化實(shí)時(shí)測(cè)試報(bào)表、軌道電路實(shí)時(shí)值和故障診斷結(jié)果信息打印等需要特殊的格式,這一點(diǎn)瀏覽器所提供的打印功能無(wú)法實(shí)現(xiàn),因此可采用ActiveX技術(shù),實(shí)現(xiàn)在Web環(huán)境下的本地端打印和報(bào)表生成。具體實(shí)現(xiàn)過(guò)程為:
(1)Web服務(wù)器在接到用戶(hù)故障請(qǐng)求后調(diào)用應(yīng)用服務(wù)器中的相應(yīng)組件,啟動(dòng)診斷服務(wù)器,并通過(guò)組件訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),對(duì)診斷信息處理生成診斷數(shù)據(jù),以文件形式存儲(chǔ)于Web服務(wù)器中相應(yīng)目錄下;
(2)Web服務(wù)器向用戶(hù)瀏覽器發(fā)送內(nèi)嵌ActiveX控件的HTML頁(yè)面,并在HTML頁(yè)面里指明數(shù)據(jù)文件的URL地址;
(3)HTML頁(yè)面根據(jù)所提供的ActiveX標(biāo)志從Web服務(wù)器上下載ActiveX控件到本地端,并在瀏覽器里執(zhí)行,同時(shí)將數(shù)據(jù)文件從Web服務(wù)器下載到本地端;
(4)對(duì)數(shù)據(jù)文件進(jìn)行解析,并輸入到相應(yīng)的存儲(chǔ)顯示模塊里,用以存儲(chǔ)顯示;
(5)當(dāng)用戶(hù)需要打印時(shí),ActiveX調(diào)用打印模塊進(jìn)行打印輸出,供用戶(hù)參考。
在系統(tǒng)開(kāi)發(fā)的過(guò)程中,把控件壓縮成CAB文件可以節(jié)省下載時(shí)間,提高工作效率。當(dāng)Web頁(yè)上OBJECT元素的CODEBASE特性引用包含.INF文件的.CAB文件時(shí),瀏覽器將自動(dòng)把.CAB文件作為軟件分發(fā)單位下載并安裝,每次訪(fǎng)問(wèn)時(shí)還會(huì)自動(dòng)檢測(cè)版本并進(jìn)行更新。
當(dāng)Web服務(wù)器提供更高版本的ActiveX控件時(shí),瀏覽器會(huì)自動(dòng)下載新的控件,并自動(dòng)安裝,覆蓋原來(lái)的控件。在后繼開(kāi)發(fā)過(guò)程中,如果需要對(duì)CAB包中的某一個(gè)文件進(jìn)行升級(jí),首先在服務(wù)器端完成升級(jí),然后在客戶(hù)端下載CAB包,檢查本地對(duì)應(yīng)的系統(tǒng)文件,如果源文件已經(jīng)更新則自動(dòng)下載更新該文件,而不需要更新整個(gè)CAB包中的所有文件,所以更新和維護(hù)工作更加簡(jiǎn)化方便。
當(dāng)通過(guò)Internet發(fā)行軟件時(shí),軟件的安全性是一個(gè)非常引人注意的問(wèn)題,IE瀏覽器通過(guò)以下的方式來(lái)保證ActiveX插件的安全。ActiveX使用了兩個(gè)補(bǔ)充性的策略:安全級(jí)別和數(shù)字簽名,來(lái)進(jìn)一步保證軟件的安全性。在Internet上,當(dāng)用戶(hù)瀏覽到帶ActiveX組件的網(wǎng)頁(yè)時(shí),IE瀏覽器在自動(dòng)下載和提示用戶(hù)安裝之前,必須經(jīng)過(guò)用戶(hù)的同意及確認(rèn)。
設(shè)計(jì)的ActiveX控件或插件是自行開(kāi)發(fā)的,其狀態(tài)通常是未標(biāo)記為安全或是未經(jīng)簽名驗(yàn)證的。由于IE瀏覽器的默認(rèn)安全設(shè)置是禁止下載、運(yùn)行未簽名的ActiveX控件和插件,因此客戶(hù)機(jī)必須在IE瀏覽器的安全設(shè)置頁(yè)面中將“ActiveX控件和插件”下的相關(guān)選項(xiàng)設(shè)置由“禁用”改為“啟用”后,才能正常地進(jìn)行應(yīng)用。啟用下載、運(yùn)行未經(jīng)簽名驗(yàn)證的ActiveX控件和插件后,為了防止一些未經(jīng)簽名驗(yàn)證的插件會(huì)趁虛而入,影響系統(tǒng)的安全性或造成應(yīng)用異常中止,可以采取控制訪(fǎng)問(wèn)方式,分區(qū)域設(shè)置IE的安全選項(xiàng),只加載來(lái)自服務(wù)器站點(diǎn)的ActiveX控件,這樣我們就可以放心的使用我們自己設(shè)計(jì)的ActiveX控件了。
本文通過(guò)分析B/S體系結(jié)構(gòu),利用ActiveX技術(shù)的優(yōu)勢(shì),將這種技術(shù)應(yīng)用于鐵路設(shè)備遠(yuǎn)程故障診斷系統(tǒng)的客戶(hù)端,不僅彌補(bǔ)了B/S模式的不足,而且更有利于實(shí)現(xiàn)遠(yuǎn)程故障診斷的功能,且對(duì)于實(shí)現(xiàn)業(yè)務(wù)邏輯封裝、提高軟件的可重用性和可維護(hù)性、開(kāi)發(fā)高效和安全的Web應(yīng)用程序具有積極的意義。同時(shí),這種體系結(jié)構(gòu)可以用在工業(yè)化的遠(yuǎn)程狀態(tài)監(jiān)測(cè)、遠(yuǎn)程故障診斷等諸多領(lǐng)域,具有較大的應(yīng)用參考價(jià)值。
[1] 任泰明. 基于B/S結(jié)構(gòu)的軟件開(kāi)發(fā)技術(shù)[M] . 西安:西安電子科技大學(xué)出版社,2006:20-50.
[2] 王仲生.智能故障診斷與容錯(cuò)控制[M] .西安:西北工業(yè)大學(xué)出版社,2005:415-438.
[3] 萬(wàn)鈞,吳筱媛,等. 一個(gè)基于瀏覽器與組件技術(shù)的Web信息發(fā)布模型[J] . 計(jì)算機(jī)工程與應(yīng)用,2002(8):159-161.
[4] 朱前飛,高芒. COM組件和ActiveX技術(shù)在B/S體系結(jié)構(gòu)中的應(yīng)用[J] . 計(jì)算機(jī)工程與設(shè)計(jì),2005(3):654-656.
[5] 查衛(wèi)翔,譚南林. ActiveX控件在基于B/S結(jié)構(gòu)的遠(yuǎn)程監(jiān)控中的應(yīng)用[J] .北京交通大學(xué)學(xué)報(bào),2002,26(1):58-62.
[6] 毛紅保,徐卿,梁偉. 基于Web的遠(yuǎn)程故障診斷技術(shù)研究[J] . 計(jì)算機(jī)工程與設(shè)計(jì),2005, 26(3):686-687.