關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 一個分布式監控系統的軟件設計

        一個分布式監控系統的軟件設計

        作者: 時間:2016-12-22 來源:網絡 收藏

        摘 要討論了一個監控系統的軟件設計。給出了系統結構、冗余設計及軟件設計要點。

        本文引用地址:http://www.104case.com/article/201612/332865.htm

        關鍵詞: 式系統 網絡通信ActiveX自動化

        1 系統結構

        系統結構見圖1,這是一個兩級式監控系統。在現場級兩臺互為熱備的現場計算機通過現場總線與現場設備相連,實時采集現場數據并向現場設備傳送監控級發來的控制指令,同時把各種實時信息發送到監控級。在監控級,各監控計算機通過TCP/IP以太網與各現場計算機相連以獲取現場數據,并提供GUI以便操作人員監視及控制現場設備。

        2 冗余設計

        對于可靠性要求較高的系統,常常采用冗余設計以提高可靠性。本系統的現場計算機為雙機熱備,監控級計算機也可根據需要進行雙機熱備。

        雙機熱備必須解決故障識別和狀態鏡象兩個問題,但為實現快速切換,應盡量簡化算法,同時盡量減少交換信息,因此如果狀態信息不是很重要,則不必隨主備信息一起傳送。基于上述思想,定義的主備機報文格式見圖2,各字段的含義如下:

        (1)信息標識:標識報文類型,共定義了三種報文:

        a)普通報文:由主備機正常進行交互用的報文,稱主機發往備機的報文為請求報文,備機發往主機的報文為應答報文。

        b)切換報文:當主機想轉為備機時,發送此報文。該報文是非常必要的,一種情況是當現場計算機與現場設備失去聯系時,就需要主動進行切換。

        c)退出報文:當某一臺機器退出時,應發送此報文,否則對方將認為該機故障。

        (2)主備標志:指示本站是否為主機,“1”表示主機,“0”表示備機。

        (3)判決標志:當主備機的主備標志一致,即兩者同時為主機或同時為備機時,應根據判決標志進行切換,該標志可以預先設定為一個值,也可以取IP地址或啟動時間作為判決標志。判決條件可以取大于或小于。

        具體實現方法為:主機定時向備機發送請求報文,備機收到后就發一個應答報文;同時另設一定時器,當收到對方的一個報文就把該定時器清0,與此同時定時器定時加1。若定時器溢出,則表示對方故障,否則表示對方正常。程序包括定時發送、故障檢測及接收處理三部分,它們是并行工作的,流程圖見圖3。通過對發送定時器及檢測定時器定時間隔及檢測次數的設定,可以決定切換時間。

        3 軟件設計

        系統軟件分為現場級與監控級兩部分,其中監控級包括人機接口及監控級自動化服務器兩部分,見圖4。下面討論一下軟件設計中的關鍵問題。

        3.1 數據傳輸方式及通信可靠性

        本系統的網絡操作系統為Windows NT,網絡通信協議為TCP/IP,采用WindowsSocket進行通信程序的設計。Windows Socket有流式與數據報兩種。前者為面向連接服務,后者為無連接服務。考慮到監控系統的數據量較小,而對實時性要求較高,因此采用數據報方式。

        采用數據報方式的另一點考慮是,它可以廣播。在本系統中,現場工控機采用定時廣播的方式傳輸數據,這種方式有如下優點:

        1) 解決了主備機之間的數據鏡像問題。

        2) 不需設置IP地址。這有兩層含義,一方面發送方不需知道接收方的地址,因為IP廣播地址是個固定地址;另一方面,各監控計算機也不必知道各現場計算機的IP地址,因為當它收到廣播后,就可以獲得發送方的IP地址,然后把它存在一張地址表中,以后向該現場計算機發送指令時就可以直接從地址表中取出其IP地址。這種處理方法有點類似于TCP/IP協議地址解析中的動態聯編1。但數據報方式的可靠性不如流式高。對于現場計算機,因為數據定時廣播,這種可靠性的差別并無大礙。但對監控計算機而言,它發出一個請求,必須知道該請求是否被響應。因此采用了異步確認機制(見圖5),處理過程為:在發送端設一張表,當發送一個請求時為該請求分配(或預先分配)一個標識,然后把該標識隨同請求一起發出去,同時啟動超時定時器;接收端響應該請求后,發回一個含有請求標識的應答報文;若接收端收到該應答報文,則刪除表中的請求標識,同時定時器停止,否則將發生超時,表示請求未被響應。

        3.2 系統信息的處理

        監控系統中主要包括如下三種數據:

        (1)現場數據:包括現場信號測量值、設備運行狀態、報警信息及其它由現場計算機產生的數據。

        (2)控制指令:如控制數字量輸出、模擬量輸出及現場設備等的控制字。

        (3)系統信息:主要是一些系統管理信息,如控制權限,監控計算機登錄狀態等。

        這些信息要么由現場計算機采集或產生,要么由監控計算機寫入現場計算機,但最終還是要存入現場計算機并向外定時廣播。前兩種信息由于直接產生于或作用于現場,因此存于各自的現場計算機。但系統信息是全局信息,是所有站共享的信息,這樣存在著如下問題:當監控計算機寫入系統信息(如登錄)時,應把它發向哪個現場計算機呢?如果向所有站廣播,就存在著一致性問題。正確的做法是:把一臺現場計算機作為系統服務器,系統信息都寫入該服務器中,然后由它向其它站廣播。那么應選擇哪個現場計算機,并且使所有站(包括現場級與監控級)都選擇同一個現場計算機?本系統采取一種動態算法實現了這種選擇,并且當該現場計算機故障時自動轉移到另外的現場計算機。

        具體方法參見圖6:設一張表及一個定時器組,當收到一個站的信息時就把該站的IP地址存入該表中,同時把相應的定時器清0;若定時器溢出,則將該站的IP地址置為無效值。當各計算機尋找系統服務器時,就順序搜索該表,找到第一個有效IP地址,就把它作為系統服務器。

        3.3 監控級自動化服務器的設計

        監控級軟件主要是為操作人員提供人機界面,但它同時還要與現場計算機進行通信,為把界面設計分離開來,我們采用了MicrosoftActivX自動化技術實現了這一設計思想。這樣,界面設計人員可以采用目前流行的各種可視化開發工具集中精力進行界面設計,而且可以根據需要設計不同的界面,在我們的系統中就有兩種界面。

        自動化技術是Microsoft ActivX組件技術中的一種,它包括自動化服務器和自動化控制器兩種,其中自動化控制器是指使用和操縱自動化服務器的應用程序(如VBA),自動化技術通常是指自動化服務器。另一種最為常用的組件技術是ActiveX控件,但一個ActiveX控件只能提供一個lDispatch接口,而一個自動化服務器可以提供多個lDispatch接口。通過lDispatch接口,客戶程序可以訪問該接口的屬性和方法。對于VBA客戶程序來說,訪問lDispatch接口的語法與訪問VBA對象的語法是一樣的,因此,對于VBA客戶程序而言,一個lDispatch接口就相當于一個對象。

        自動化服務器通常采用層次結構來組織對象,Microsoft的許多自動化服務器都是這樣組織的,如數據訪問對象DAO。本系統的自動化服務器也采用了這樣一種結構,見圖7, 其中Workstation是指監控級各站,Station是指現場級各站,這只是個示意圖。這種結構一方面體現了對象間的層次及包含關系,另一方面對象的創建、刪除及組織也比較方便,整個服務器只需一個ProgID來標識。

        客戶程序創建服務器的過程為:首先利用ProgID創建頂層對象(Application),然后利用該頂層對象提供的方法創建各集合并向其中添加元素,對集合的操作類似于VBA中的Collection對象,主要有Count(),ltem(),Add()等幾種。應當指出,上面所討論的對象層次結構及集合的概念只是一種設計思想,并非有現成的設計工具,我們采用VC++6.0設計了自己的集合類及自動化服務器,客戶端采用VB6.0

        本系統是按照分布式的思想進行設計的。分布式的特點就在于各節點是平等的,在數據傳輸方式、冗余設計及系統服務器的選擇等處理上都體現了這一思想。本文給出的冗余設計,是基于網絡的一種方法,其實現不依賴于操作系統、編程語言,是一種比較通用的方法。組件技術是軟件發展的方向,本系統利用自動化技術將界面設計與底層設計分離開來,各自進行獨立設計,充分體現了組件技術的優越性。

        參考文獻

        1 周明天,汪文勇. TCP/IP網絡原理與技術.北京:清華大學出版社

        2 (美)Jerry Anderson. visual C++5 ActiveX編程指南.北京:清華大學出版社

        3 (美)Peter Norton, Rob McGregor.MFC開發windows95/NT4應用程序.北京:清華大學出版社

        (收稿日期:1999-06-16)

         

         



        關鍵詞: 分布

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 三门峡市| 淮安市| 资中县| 曲靖市| 炉霍县| 吴忠市| 依安县| 黑水县| 常熟市| 高州市| 西青区| 手游| 海城市| 邳州市| 松滋市| 随州市| 洞口县| 靖安县| 四会市| 泰宁县| 英德市| 武陟县| 东山县| 南京市| 铜川市| 汉寿县| 龙口市| 泗洪县| 长治县| 大足县| 浦东新区| 石楼县| 琼海市| 鄂伦春自治旗| 波密县| 准格尔旗| 三原县| 宕昌县| 通辽市| 常熟市| 武陟县|