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