在組態(tài)運(yùn)行時(shí)捕獲ActiveX控件異常的系統(tǒng)和方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及綜合監(jiān)控領(lǐng)域,具體地,涉及在組態(tài)運(yùn)行時(shí)捕獲ActiveX控件異常的 系統(tǒng)和方法。
【背景技術(shù)】
[0002] 隨著硬件、通信、計(jì)算機(jī)技術(shù)的迅速發(fā)展,橋梁隧道、軌道交通等基礎(chǔ)設(shè)施的建設(shè) 也隨之向前推動(dòng),建設(shè)一個(gè)高效、先進(jìn)、智能化和信息化的監(jiān)控網(wǎng)絡(luò),成為綜合監(jiān)控系統(tǒng)面 臨的一大挑戰(zhàn)。在實(shí)施該樣的綜合監(jiān)控網(wǎng)絡(luò)項(xiàng)目時(shí),組態(tài)是綜合監(jiān)控系統(tǒng)人機(jī)界面展示的 核也。
[0003]"組態(tài)(configuration)"的概念是伴隨著分布式控制系統(tǒng)(distributed control system,DC巧的出現(xiàn)才開(kāi)始被廣大的生產(chǎn)過(guò)程自動(dòng)化技術(shù)人員所熟知的。每一套DCS都是 比較通用的控制系統(tǒng),可W應(yīng)用到很多領(lǐng)域,為了使用戶在不需要編寫(xiě)程序的情況下便可 生成適合自己需求的應(yīng)用系統(tǒng),每個(gè)DCS廠商在DCS中都預(yù)裝了系統(tǒng)軟件和應(yīng)用軟件,其中 的應(yīng)用軟件實(shí)際上就是組態(tài)軟件,但一直沒(méi)有人給出明確的定義,只是將使用該種應(yīng)用軟 件設(shè)計(jì)生成(定制)目標(biāo)應(yīng)用系統(tǒng)的過(guò)程稱為"組態(tài)(configure)"或"做組態(tài)"。相應(yīng)地,該 種應(yīng)用軟件和生成的目標(biāo)應(yīng)用系統(tǒng)一道被稱為"組態(tài)軟件",有時(shí)也稱為"監(jiān)控組態(tài)軟件"。 監(jiān)控組態(tài)軟件是面向過(guò)程監(jiān)控與數(shù)據(jù)采集(SupervisoiT Control And Data Acquisition, SCADA)的軟件平臺(tái),具有豐富的設(shè)置項(xiàng)目。監(jiān)控組態(tài)軟件最早出現(xiàn)時(shí),人機(jī)圖形界面(Human Machine Inte計(jì)ace,歷I)是其主要內(nèi)涵。隨著它的快速發(fā)展,實(shí)時(shí)數(shù)據(jù)庫(kù)、實(shí)時(shí)控制、通信 及聯(lián)網(wǎng)、開(kāi)放數(shù)據(jù)接口和對(duì)1/0設(shè)備的廣泛支持己經(jīng)成為它的主要內(nèi)容。
[0004] ActiveX是Microsoft對(duì)于一系列策略性面向?qū)ο蟪绦蚣夹g(shù)和工具的稱呼,其中 主要的技術(shù)是組件對(duì)象模型(COM)。在有目錄和其它支持的網(wǎng)絡(luò)中,COM變成了分布式COM (DCOM)。在創(chuàng)建包括ActiveX程序時(shí),主要的工作就是組件,一個(gè)可W自主的在ActiveX網(wǎng) 絡(luò)(現(xiàn)在的網(wǎng)絡(luò)主要包括Windows和Mac)中任意運(yùn)行的程序。該個(gè)組件就是ActiveX控件。 ActiveX是Microsoft為抗衡Sun Microsystems的JAVA技術(shù)而提出的,此控件的功能和 JAVA applet功能類似。
[0005] OCX代表"對(duì)象鏈接與嵌入控件"(0LE),該個(gè)技術(shù)是Microsoft提出的程序技術(shù), 用于處理桌面文件的混合使用。現(xiàn)在COM的概念已經(jīng)取代OLE的一部分,Microsoft也使 用ActiveX控件代表組件對(duì)象。
[0006] 組件的一大優(yōu)點(diǎn)就是可W被大多數(shù)應(yīng)用程序再使用(該些應(yīng)用程序稱為組件容 器)。一個(gè)COM組件(ActiveX控件)可由不同語(yǔ)言的開(kāi)發(fā)工具開(kāi)發(fā),包括C++和Visual Basic 或化we巧uilder,甚至一些技術(shù)性語(yǔ)言如VBScript。
[0007] ActiveX控件是一種可重用的軟件組件,通過(guò)使用ActiveX控件,可W很快地在 網(wǎng)址、臺(tái)式應(yīng)用程序、W及開(kāi)發(fā)工具中加入特殊的功能。如,動(dòng)畫(huà)控件可用來(lái)向網(wǎng)頁(yè)中加 入動(dòng)畫(huà)特性。開(kāi)發(fā)控件可W使用各種編程語(yǔ)言,如C,C++,下一代的Microsoft Visual Basic®,W及微軟公司的 Visual Java 開(kāi)發(fā)環(huán)境 MicrosoftVisual J++。ActiveX 控件 一旦被開(kāi)發(fā)出來(lái),設(shè)計(jì)和開(kāi)發(fā)人員就可w把它當(dāng)作預(yù)裝配組件,用于開(kāi)發(fā)客戶程序。w此種 方式使用ActiveX控件,使用者無(wú)需知道該些組件是如何開(kāi)發(fā)的,在很多情況下,甚至不需 要自己編程,就可W完成網(wǎng)頁(yè)或應(yīng)用程序的設(shè)計(jì)。
[0008] 在組態(tài)系統(tǒng)中,為滿足復(fù)雜的客戶端展示需求,需要在組態(tài)系統(tǒng)提供嵌入ActiveX 控件的功能,可W嵌入自己開(kāi)發(fā)或第H方的各類ActiveX控件。
[0009] 在工程使用中,會(huì)出現(xiàn)在組態(tài)運(yùn)行中的任何一個(gè)ActiveX控件異常,就會(huì)導(dǎo)致整 個(gè)組態(tài)崩潰。本發(fā)明的目的是能夠捕獲到該些異常,給用戶一些提示或記錄日志,而不使整 個(gè)組態(tài)崩潰,提局廣品穩(wěn)定性。
[0010] 經(jīng)檢索,發(fā)現(xiàn)相關(guān)文獻(xiàn)(申請(qǐng)?zhí)?;EP0965923,專利名稱;System and method for secure software component containment),該相關(guān)文獻(xiàn)提供了 一種 ActiveX 控件異常 的捕獲及處理方法,但與本發(fā)明相比,有2點(diǎn)本發(fā)明能夠?qū)崿F(xiàn),但該發(fā)明無(wú)法實(shí)現(xiàn);(1) ActiveX第一層界面異常捕獲;(2) OCX控件在派生線程中拋出的異常的捕獲。
【發(fā)明內(nèi)容】
[0011] 針對(duì)現(xiàn)有技術(shù)中的缺陷,本發(fā)明的目的是提供一種在組態(tài)運(yùn)行時(shí)捕獲ActiveX控 件異常的系統(tǒng)和方法。
[0012] 根據(jù)本發(fā)明提供的一種在組態(tài)運(yùn)行時(shí)捕獲ActiveX控件異常的系統(tǒng),包括如下裝 置:
[0013] 組態(tài)系統(tǒng),用于組態(tài)頁(yè)面的展示,ActiveX控件作為一個(gè)畫(huà)面元素嵌入到組態(tài)頁(yè)面 中;
[0014] 組態(tài)系統(tǒng)異常管理模塊,用于將所有的系統(tǒng)可能拋出的異常映射成組態(tài)系統(tǒng)自定 義的一個(gè)異常類型,當(dāng)系統(tǒng)拋出異常時(shí),轉(zhuǎn)換成該自定義的異常類型進(jìn)行處理;
[0015] 組態(tài)異常處理模塊,用于在組態(tài)系統(tǒng)進(jìn)程的消息鏈中嵌入異常捕獲機(jī)制,負(fù)責(zé)捕 獲并處理ActiveX控件中進(jìn)行消息處理時(shí)引發(fā)的異常;
[0016] 進(jìn)一步地,所述組態(tài)系統(tǒng),在加載每個(gè)ActiveX控件時(shí),在組態(tài)頁(yè)面中自動(dòng)創(chuàng)建一 個(gè)ActiveX容器,在ActiveX容器中創(chuàng)建ActiveX控件,由該ActiveX容器負(fù)責(zé)捕獲并處理 ActiveX控件加載和卸載時(shí)引發(fā)的異常;
[0017] 所述組態(tài)異常處理模塊,在組態(tài)系統(tǒng)進(jìn)程調(diào)用ActiveX控件方法的觸發(fā)機(jī)制中嵌 入異常捕獲機(jī)制,負(fù)責(zé)捕獲并處理ActiveX控件方法被組態(tài)系統(tǒng)調(diào)用時(shí)引發(fā)的異常。
[0018] 優(yōu)選地,所述ActiveX容器在卸載AcitveX控件時(shí),首先ActiveX容器去卸載其加 載的ActiveX控件,如果在ActiveX卸載時(shí)發(fā)生異常,ActiveX容器會(huì)捕獲到異常并進(jìn)行處 理。
[0019] 優(yōu)選地,所述在組態(tài)系統(tǒng)進(jìn)程的消息鏈中嵌入異常捕獲機(jī)制,具體為:先截獲消 息,并傳遞給后續(xù)處理環(huán)節(jié),在后續(xù)處理環(huán)節(jié)中發(fā)生的系統(tǒng)異常,被映射成組態(tài)系統(tǒng)自定義 異常類型,被異常捕獲機(jī)制捕獲并處理。
[0020] 優(yōu)選地,所述在組態(tài)系統(tǒng)進(jìn)程調(diào)用ActiveX控件方法的觸發(fā)機(jī)制中嵌入異常捕獲 機(jī)制,具體為;先截獲ActiveX控件方法調(diào)用的消息,并傳遞給實(shí)際被調(diào)用的ActiveX控件, 在ActiveX空間方法調(diào)用中發(fā)生的異常,被映射成組態(tài)系統(tǒng)自定義異常類型,被異常捕獲 機(jī)制捕獲并處理。
[0021] 優(yōu)選地,打開(kāi)畫(huà)面異常的處理流程具體如下:
[0022] a)接收用戶打開(kāi)畫(huà)面文件的指令;
[0023] b)開(kāi)始逐個(gè)讀取畫(huà)面對(duì)象,逐個(gè)創(chuàng)建;
[0024] C)若對(duì)象是普通對(duì)象,則按照普通對(duì)象處理,直接創(chuàng)建到組態(tài)畫(huà)面中;
[002引 d)若對(duì)象是ActiveX控件,則為該ActiveX控件自動(dòng)創(chuàng)建一個(gè)ActiveX容器,并啟 動(dòng)ActiveX創(chuàng)建異常處理;
[0026] e)在ActiveX容器中創(chuàng)建真正的ActiveX控件;
[0027] f)若創(chuàng)建ActiveX控件時(shí)發(fā)生異常,ActiveX容器捕獲到該異常,彈出提示信息給 用戶,結(jié)束畫(huà)面創(chuàng)建,關(guān)閉該畫(huà)面;
[0028] g)若控件創(chuàng)建無(wú)異常,繼續(xù)讀取、創(chuàng)建其它對(duì)象,直到所有對(duì)象創(chuàng)建完畢;然后開(kāi) 始畫(huà)面運(yùn)行。
[0029] 優(yōu)選地,關(guān)閉畫(huà)面的異常處理流程具體如下:
[0030] a)接收用戶關(guān)閉某一畫(huà)面的指令;
[003。b)開(kāi)始卸載畫(huà)面對(duì)象,若是普通對(duì)象,則按照普通對(duì)象的卸載機(jī)制卸載;
[0032] C)若是ActiveX控件,則啟動(dòng)ActiveX控件卸載異常處理;
[0033] d)開(kāi)始卸載ActiveX控件,若發(fā)生異常,則記錄日志,然后卸載ActiveX容器;若 無(wú)異常,則直接卸載ActiveX容器;
[0034] e)繼續(xù)其它對(duì)象的卸載,直到所有對(duì)象卸載完畢,關(guān)閉組態(tài)畫(huà)面。
[00巧]優(yōu)選地,定時(shí)的異常處理流程具體如下:
[0036]a)組態(tài)應(yīng)用啟動(dòng)組態(tài)畫(huà)面運(yùn)行;
[0037]b)檢測(cè)是否包含了ActiveX控件,所包含的ActiveX控件是否啟動(dòng)了定時(shí)任務(wù);
[0038] C)若無(wú)ActiveX控件的定時(shí)任務(wù),則按照正常邏輯運(yùn)行畫(huà)面;
[0039]d)若包含了ActiveX控件的定時(shí)任務(wù),貝Ij啟動(dòng)ActiveX定時(shí)異常處理;
[0040]e)檢測(cè)ActiveX定時(shí)異常處理,是否發(fā)生異常;
[0041]f)若發(fā)生了異常,首先記錄日志,然后彈出提示框給用戶,征求用戶的意見(jiàn),是否 要關(guān)閉定時(shí)器;若用戶選擇了關(guān)閉定時(shí)器,則關(guān)閉該ActiveX控件的定時(shí)任務(wù),若用戶選擇 繼續(xù)運(yùn)行,則不關(guān)閉定時(shí)器,繼續(xù)對(duì)定時(shí)任務(wù)進(jìn)行異常捕獲;
[0042]g)關(guān)閉頁(yè)面時(shí)卸載ActiveX定時(shí)異常處理。
[0043] 優(yōu)選地,方法調(diào)用的異常處理流程具體如下:
[0044] a)組態(tài)應(yīng)用啟動(dòng)組態(tài)畫(huà)面運(yùn)行;
[0045]b)檢測(cè)是否包含了ActiveX控件,檢測(cè)組態(tài)畫(huà)面是否通過(guò)腳本調(diào)用了ActiveX控 件的方法或設(shè)置了ActiveX控件的某些屬性;
[0046] C)若沒(méi)有調(diào)用ActiveX控件的方法或設(shè)置ActiveX控件的屬性,則按照正常邏輯 運(yùn)行畫(huà)面