一個(gè)分布式監(jiān)控系統(tǒng)的軟件設(shè)計(jì)
摘 要討論了一個(gè)分布式監(jiān)控系統(tǒng)的軟件設(shè)計(jì)。給出了系統(tǒng)結(jié)構(gòu)、冗余設(shè)計(jì)及軟件設(shè)計(jì)要點(diǎn)。
本文引用地址:http://cafeforensic.com/article/201612/332865.htm關(guān)鍵詞: 分布式系統(tǒng) 網(wǎng)絡(luò)通信ActiveX自動(dòng)化
1 系統(tǒng)結(jié)構(gòu)
系統(tǒng)結(jié)構(gòu)見圖1,這是一個(gè)兩級(jí)分布式監(jiān)控系統(tǒng)。在現(xiàn)場級(jí)兩臺(tái)互為熱備的現(xiàn)場計(jì)算機(jī)通過現(xiàn)場總線與現(xiàn)場設(shè)備相連,實(shí)時(shí)采集現(xiàn)場數(shù)據(jù)并向現(xiàn)場設(shè)備傳送監(jiān)控級(jí)發(fā)來的控制指令,同時(shí)把各種實(shí)時(shí)信息發(fā)送到監(jiān)控級(jí)。在監(jiān)控級(jí),各監(jiān)控計(jì)算機(jī)通過TCP/IP以太網(wǎng)與各現(xiàn)場計(jì)算機(jī)相連以獲取現(xiàn)場數(shù)據(jù),并提供GUI以便操作人員監(jiān)視及控制現(xiàn)場設(shè)備。
2 冗余設(shè)計(jì)
對(duì)于可靠性要求較高的系統(tǒng),常常采用冗余設(shè)計(jì)以提高可靠性。本系統(tǒng)的現(xiàn)場計(jì)算機(jī)為雙機(jī)熱備,監(jiān)控級(jí)計(jì)算機(jī)也可根據(jù)需要進(jìn)行雙機(jī)熱備。
雙機(jī)熱備必須解決故障識(shí)別和狀態(tài)鏡象兩個(gè)問題,但為實(shí)現(xiàn)快速切換,應(yīng)盡量簡化算法,同時(shí)盡量減少交換信息,因此如果狀態(tài)信息不是很重要,則不必隨主備信息一起傳送?;谏鲜鏊枷耄x的主備機(jī)報(bào)文格式見圖2,各字段的含義如下:
(1)信息標(biāo)識(shí):標(biāo)識(shí)報(bào)文類型,共定義了三種報(bào)文:
a)普通報(bào)文:由主備機(jī)正常進(jìn)行交互用的報(bào)文,稱主機(jī)發(fā)往備機(jī)的報(bào)文為請(qǐng)求報(bào)文,備機(jī)發(fā)往主機(jī)的報(bào)文為應(yīng)答報(bào)文。
b)切換報(bào)文:當(dāng)主機(jī)想轉(zhuǎn)為備機(jī)時(shí),發(fā)送此報(bào)文。該報(bào)文是非常必要的,一種情況是當(dāng)現(xiàn)場計(jì)算機(jī)與現(xiàn)場設(shè)備失去聯(lián)系時(shí),就需要主動(dòng)進(jìn)行切換。
c)退出報(bào)文:當(dāng)某一臺(tái)機(jī)器退出時(shí),應(yīng)發(fā)送此報(bào)文,否則對(duì)方將認(rèn)為該機(jī)故障。
(2)主備標(biāo)志:指示本站是否為主機(jī),“1”表示主機(jī),“0”表示備機(jī)。
(3)判決標(biāo)志:當(dāng)主備機(jī)的主備標(biāo)志一致,即兩者同時(shí)為主機(jī)或同時(shí)為備機(jī)時(shí),應(yīng)根據(jù)判決標(biāo)志進(jìn)行切換,該標(biāo)志可以預(yù)先設(shè)定為一個(gè)值,也可以取IP地址或啟動(dòng)時(shí)間作為判決標(biāo)志。判決條件可以取大于或小于。
具體實(shí)現(xiàn)方法為:主機(jī)定時(shí)向備機(jī)發(fā)送請(qǐng)求報(bào)文,備機(jī)收到后就發(fā)一個(gè)應(yīng)答報(bào)文;同時(shí)另設(shè)一定時(shí)器,當(dāng)收到對(duì)方的一個(gè)報(bào)文就把該定時(shí)器清0,與此同時(shí)定時(shí)器定時(shí)加1。若定時(shí)器溢出,則表示對(duì)方故障,否則表示對(duì)方正常。程序包括定時(shí)發(fā)送、故障檢測及接收處理三部分,它們是并行工作的,流程圖見圖3。通過對(duì)發(fā)送定時(shí)器及檢測定時(shí)器定時(shí)間隔及檢測次數(shù)的設(shè)定,可以決定切換時(shí)間。
3 軟件設(shè)計(jì)
系統(tǒng)軟件分為現(xiàn)場級(jí)與監(jiān)控級(jí)兩部分,其中監(jiān)控級(jí)包括人機(jī)接口及監(jiān)控級(jí)自動(dòng)化服務(wù)器兩部分,見圖4。下面討論一下軟件設(shè)計(jì)中的關(guān)鍵問題。
3.1 數(shù)據(jù)傳輸方式及通信可靠性
本系統(tǒng)的網(wǎng)絡(luò)操作系統(tǒng)為Windows NT,網(wǎng)絡(luò)通信協(xié)議為TCP/IP,采用WindowsSocket進(jìn)行通信程序的設(shè)計(jì)。Windows Socket有流式與數(shù)據(jù)報(bào)兩種。前者為面向連接服務(wù),后者為無連接服務(wù)??紤]到監(jiān)控系統(tǒng)的數(shù)據(jù)量較小,而對(duì)實(shí)時(shí)性要求較高,因此采用數(shù)據(jù)報(bào)方式。
采用數(shù)據(jù)報(bào)方式的另一點(diǎn)考慮是,它可以廣播。在本系統(tǒng)中,現(xiàn)場工控機(jī)采用定時(shí)廣播的方式傳輸數(shù)據(jù),這種方式有如下優(yōu)點(diǎn):
1) 解決了主備機(jī)之間的數(shù)據(jù)鏡像問題。
2) 不需設(shè)置IP地址。這有兩層含義,一方面發(fā)送方不需知道接收方的地址,因?yàn)镮P廣播地址是個(gè)固定地址;另一方面,各監(jiān)控計(jì)算機(jī)也不必知道各現(xiàn)場計(jì)算機(jī)的IP地址,因?yàn)楫?dāng)它收到廣播后,就可以獲得發(fā)送方的IP地址,然后把它存在一張地址表中,以后向該現(xiàn)場計(jì)算機(jī)發(fā)送指令時(shí)就可以直接從地址表中取出其IP地址。這種處理方法有點(diǎn)類似于TCP/IP協(xié)議地址解析中的動(dòng)態(tài)聯(lián)編1。但數(shù)據(jù)報(bào)方式的可靠性不如流式高。對(duì)于現(xiàn)場計(jì)算機(jī),因?yàn)閿?shù)據(jù)定時(shí)廣播,這種可靠性的差別并無大礙。但對(duì)監(jiān)控計(jì)算機(jī)而言,它發(fā)出一個(gè)請(qǐng)求,必須知道該請(qǐng)求是否被響應(yīng)。因此采用了異步確認(rèn)機(jī)制(見圖5),處理過程為:在發(fā)送端設(shè)一張表,當(dāng)發(fā)送一個(gè)請(qǐng)求時(shí)為該請(qǐng)求分配(或預(yù)先分配)一個(gè)標(biāo)識(shí),然后把該標(biāo)識(shí)隨同請(qǐng)求一起發(fā)出去,同時(shí)啟動(dòng)超時(shí)定時(shí)器;接收端響應(yīng)該請(qǐng)求后,發(fā)回一個(gè)含有請(qǐng)求標(biāo)識(shí)的應(yīng)答報(bào)文;若接收端收到該應(yīng)答報(bào)文,則刪除表中的請(qǐng)求標(biāo)識(shí),同時(shí)定時(shí)器停止,否則將發(fā)生超時(shí),表示請(qǐng)求未被響應(yīng)。
3.2 系統(tǒng)信息的處理
監(jiān)控系統(tǒng)中主要包括如下三種數(shù)據(jù):
(1)現(xiàn)場數(shù)據(jù):包括現(xiàn)場信號(hào)測量值、設(shè)備運(yùn)行狀態(tài)、報(bào)警信息及其它由現(xiàn)場計(jì)算機(jī)產(chǎn)生的數(shù)據(jù)。
(2)控制指令:如控制數(shù)字量輸出、模擬量輸出及現(xiàn)場設(shè)備等的控制字。
(3)系統(tǒng)信息:主要是一些系統(tǒng)管理信息,如控制權(quán)限,監(jiān)控計(jì)算機(jī)登錄狀態(tài)等。
這些信息要么由現(xiàn)場計(jì)算機(jī)采集或產(chǎn)生,要么由監(jiān)控計(jì)算機(jī)寫入現(xiàn)場計(jì)算機(jī),但最終還是要存入現(xiàn)場計(jì)算機(jī)并向外定時(shí)廣播。前兩種信息由于直接產(chǎn)生于或作用于現(xiàn)場,因此存于各自的現(xiàn)場計(jì)算機(jī)。但系統(tǒng)信息是全局信息,是所有站共享的信息,這樣存在著如下問題:當(dāng)監(jiān)控計(jì)算機(jī)寫入系統(tǒng)信息(如登錄)時(shí),應(yīng)把它發(fā)向哪個(gè)現(xiàn)場計(jì)算機(jī)呢?如果向所有站廣播,就存在著一致性問題。正確的做法是:把一臺(tái)現(xiàn)場計(jì)算機(jī)作為系統(tǒng)服務(wù)器,系統(tǒng)信息都寫入該服務(wù)器中,然后由它向其它站廣播。那么應(yīng)選擇哪個(gè)現(xiàn)場計(jì)算機(jī),并且使所有站(包括現(xiàn)場級(jí)與監(jiān)控級(jí))都選擇同一個(gè)現(xiàn)場計(jì)算機(jī)?本系統(tǒng)采取一種動(dòng)態(tài)算法實(shí)現(xiàn)了這種選擇,并且當(dāng)該現(xiàn)場計(jì)算機(jī)故障時(shí)自動(dòng)轉(zhuǎn)移到另外的現(xiàn)場計(jì)算機(jī)。
具體方法參見圖6:設(shè)一張表及一個(gè)定時(shí)器組,當(dāng)收到一個(gè)站的信息時(shí)就把該站的IP地址存入該表中,同時(shí)把相應(yīng)的定時(shí)器清0;若定時(shí)器溢出,則將該站的IP地址置為無效值。當(dāng)各計(jì)算機(jī)尋找系統(tǒng)服務(wù)器時(shí),就順序搜索該表,找到第一個(gè)有效IP地址,就把它作為系統(tǒng)服務(wù)器。
3.3 監(jiān)控級(jí)自動(dòng)化服務(wù)器的設(shè)計(jì)
監(jiān)控級(jí)軟件主要是為操作人員提供人機(jī)界面,但它同時(shí)還要與現(xiàn)場計(jì)算機(jī)進(jìn)行通信,為把界面設(shè)計(jì)分離開來,我們采用了MicrosoftActivX自動(dòng)化技術(shù)實(shí)現(xiàn)了這一設(shè)計(jì)思想。這樣,界面設(shè)計(jì)人員可以采用目前流行的各種可視化開發(fā)工具集中精力進(jìn)行界面設(shè)計(jì),而且可以根據(jù)需要設(shè)計(jì)不同的界面,在我們的系統(tǒng)中就有兩種界面。
自動(dòng)化技術(shù)是Microsoft ActivX組件技術(shù)中的一種,它包括自動(dòng)化服務(wù)器和自動(dòng)化控制器兩種,其中自動(dòng)化控制器是指使用和操縱自動(dòng)化服務(wù)器的應(yīng)用程序(如VBA),自動(dòng)化技術(shù)通常是指自動(dòng)化服務(wù)器。另一種最為常用的組件技術(shù)是ActiveX控件,但一個(gè)ActiveX控件只能提供一個(gè)lDispatch接口,而一個(gè)自動(dòng)化服務(wù)器可以提供多個(gè)lDispatch接口。通過lDispatch接口,客戶程序可以訪問該接口的屬性和方法。對(duì)于VBA客戶程序來說,訪問lDispatch接口的語法與訪問VBA對(duì)象的語法是一樣的,因此,對(duì)于VBA客戶程序而言,一個(gè)lDispatch接口就相當(dāng)于一個(gè)對(duì)象。
自動(dòng)化服務(wù)器通常采用層次結(jié)構(gòu)來組織對(duì)象,Microsoft的許多自動(dòng)化服務(wù)器都是這樣組織的,如數(shù)據(jù)訪問對(duì)象DAO。本系統(tǒng)的自動(dòng)化服務(wù)器也采用了這樣一種結(jié)構(gòu),見圖7, 其中Workstation是指監(jiān)控級(jí)各站,Station是指現(xiàn)場級(jí)各站,這只是個(gè)示意圖。這種結(jié)構(gòu)一方面體現(xiàn)了對(duì)象間的層次及包含關(guān)系,另一方面對(duì)象的創(chuàng)建、刪除及組織也比較方便,整個(gè)服務(wù)器只需一個(gè)ProgID來標(biāo)識(shí)。
客戶程序創(chuàng)建服務(wù)器的過程為:首先利用ProgID創(chuàng)建頂層對(duì)象(Application),然后利用該頂層對(duì)象提供的方法創(chuàng)建各集合并向其中添加元素,對(duì)集合的操作類似于VBA中的Collection對(duì)象,主要有Count(),ltem(),Add()等幾種。應(yīng)當(dāng)指出,上面所討論的對(duì)象層次結(jié)構(gòu)及集合的概念只是一種設(shè)計(jì)思想,并非有現(xiàn)成的設(shè)計(jì)工具,我們采用VC++6.0設(shè)計(jì)了自己的集合類及自動(dòng)化服務(wù)器,客戶端采用VB6.0
本系統(tǒng)是按照分布式的思想進(jìn)行設(shè)計(jì)的。分布式的特點(diǎn)就在于各節(jié)點(diǎn)是平等的,在數(shù)據(jù)傳輸方式、冗余設(shè)計(jì)及系統(tǒng)服務(wù)器的選擇等處理上都體現(xiàn)了這一思想。本文給出的冗余設(shè)計(jì),是基于網(wǎng)絡(luò)的一種方法,其實(shí)現(xiàn)不依賴于操作系統(tǒng)、編程語言,是一種比較通用的方法。組件技術(shù)是軟件發(fā)展的方向,本系統(tǒng)利用自動(dòng)化技術(shù)將界面設(shè)計(jì)與底層設(shè)計(jì)分離開來,各自進(jìn)行獨(dú)立設(shè)計(jì),充分體現(xiàn)了組件技術(shù)的優(yōu)越性。
參考文獻(xiàn)
1 周明天,汪文勇. TCP/IP網(wǎng)絡(luò)原理與技術(shù).北京:清華大學(xué)出版社
2 (美)Jerry Anderson. visual C++5 ActiveX編程指南.北京:清華大學(xué)出版社
3 (美)Peter Norton, Rob McGregor.MFC開發(fā)windows95/NT4應(yīng)用程序.北京:清華大學(xué)出版社
(收稿日期:1999-06-16)
評(píng)論