張 勇 侯立剛 肖炎良 周 翔
(遼寧石油化工大學信息與控制工程學院,遼寧 撫順 113001)
組態軟件是工業控制系統中實現分散控制和集中管理的核心,而實時數據庫又是組態軟件的核心。實時數據庫保存著系統運行時所產生的動態數據和系統正常運行所需的各種內部信息,各功能模塊通過對實時數據庫中數據的存取和處理來完成系統所要求的各種功能。同時,實時數據庫也是聯系圖形系統、歷史數據系統、報表系統和報警系統的橋梁和紐帶[1]。實時數據庫及時準確地獲取現場數據是系統發揮作用的前提。鑒于商業性的原因,許多公司對實時數據庫技術嚴加保密。因此,有必要深入探討和研究實時數據庫的核心技術,自行開發適用的實時數據庫系統。
實時數據庫系統是指其數據和事務都具有顯式的定時特性或確定的定時限制的數據庫系統,系統的正確性不僅依賴于事務的邏輯結果,而且依賴于該邏輯結果所產生的時間[2]。實時數據庫系統的主要目標是使盡量多的事務在規定的時間內完成,而不是公平地分配系統資源,即系統寧可接收在時間限度內不準確的數據,也不接收超過時間限制的準確數據。實時數據庫系統的研究內容包括實時數據庫及其事務調度系統。總的來說,實時數據庫系統具有以下幾個特點:時間約束性、事務調度、數據存儲的特殊性和數據的在線壓縮。
①時間約束性。實時數據庫的特點是在其數據和事務上都具有明確的時間限制,即其中的數據不僅要滿足數據庫的普通一致性,還要滿足時間一致性。在實時系統中,具有時間約束的數據主要是外部現場動態變化的數據和由這些數據導出或衍生的數據。因此,可將數據的時間約束分為兩類:數據的絕對一致性和數據的相互一致性。數據的絕對一致性是指實時數據庫的數據與外部數據(即環境數據)相一致;相對一致性是要求從一組數據項導出另一組數據時,源數據項在時間上要盡量接近。
②事務調度。與傳統數據庫系統不同的是,為提高事務的吞吐率,實時數據庫是為了達到使盡量多的事務在規定期限內完成而使用事務調度。實時數據庫中的實時事務調度大部分是建立在事務的優先級之上的。因此,實時事務調度不僅要考慮事務的執行時間,還要考慮事務的截止時間和緊迫程度等。
③數據存儲方式。由于實時數據庫系統中存儲和管理的數據具有實時性,因此其存儲方式也有別于傳統的數據庫系統。在系統運行過程中,對實時性要求較高的數據應存于內存中,以實現讀取速度快、實時性良好等特點,易于數據的共享與傳遞;對實時性要求不高的非共享數據和共享數據,可以存放于外存儲空間。因此,在設計實時數據庫時,需要妥善處理時間與存儲空間之間的矛盾,以保證系統的實時性。
④數據在線壓縮。在實際的數據存儲中,實時數據庫還要解決如何高效處理海量數據的問題。如果數據被原封不動地存儲,勢必需要大量內存和磁盤空間以及耗費大量的CPU時間。因此,必須對實時數據進行在線壓縮存儲[3]。
由于傳統數據庫基本上都是面向事務的,它所使用的數據表示方法、存儲模式和存取手段已不能滿足工控組態軟件對實時性的要求,因此有必要根據組態軟件,對不同類型的數據所要求的響應速度和數據量的大小來定制存儲策略。對于工業現場中每個采樣周期都要更新、變化的實時性很強的數據,可以將這些數據存于內存數據庫,這樣就能滿足數據存取速度快、存取靈活的要求;對工控軟件并無特殊要求的非共享數據和共享數據,這些數據是非實時性要求的,可存放于外存數據庫(如Access數據庫等),并且可通過實時數據庫提供的接口函數進行數據的操作;對需要長期保存的非共享數據,如采樣值的數/模轉換系數、控制組態值等,可用文件管理系統進行直接存取[4]。
綜上所述,可通過使用外存數據庫(Access數據庫)、文件管理系統和內存數據庫(實時數據庫)等多種存取方式、多種存儲介質相結合的方法存儲數據,以保證數據的共享性和獨立性。同時還能達到節約內存、保證系統響應速度的目的[5]。
本文采用面向對象編程(object-oriented programming,OOP)技術,將實時數據庫定義為類的形式,各功能模塊通過對實時數據庫的接口函數調用,實現與實時數據庫的關聯。
系統運行時按用戶組態好的數據文件生成不同類型的實時數據類對象。這些類建立的對象分別對應于現場的每個實時量。由于實時量很多,為了能夠方便地管理這些對象,完成對數據的各種操作管理,將管理程序的所有功能封裝成一個專用的類Mdataunit,用Mdataunit類將這些實時數據庫的各個對象聚集起來,以便管理。具體的聚集方法是:首先根據不同的數據類建立起不同的List鏈表,通過鏈表將這些不同的結構連接起來;然后把這些建立起來的鏈表作為Mdataunit的數據成員進行管理。現將實時數據庫類的各操作函數定義為以下幾個模塊,如圖1所示。

圖1 實時數據庫類Fig.1 Category of real-time database
部分實時數據庫類的設計程序如下。


實時數據庫系統事務調度如圖2所示。

圖2 實時數據庫系統事務調度Fig.2 Transaction scheduling of real-time database system
在組態軟件系統進入運行環境時,還要進行現場數據采集、數據處理、圖形顯示和報警事務等操作,所有的事務要求并行處理。如果等待時間過長,將無法滿足實時性要求,這就需要一個事務調度并按照事務的優先級統一調度,完成各事務的協調工作,以滿足系統實時性要求[6]。為此,先建立三個優先級:實時數據請求類、趨勢數據請求類和歷史數據類。在進行調度時,根據先到先服務的原則將任務放置于不同的優先級隊列中,然后以不同的優先級進行調度,在同一隊列中采用時間片輪轉算法實現服務先后。
時間片輪轉法是一種經典的調度算法,其基本思想是將處理機的處理時間劃分成一個個的時間片,就緒隊列中的諸進程按所分配的時間片輪流使用處理機資源。進程調度程序總是選擇就緒隊列中的第一個進程,當進程分配的時間片用完時,這個進程就被強迫讓出處理機,并且進入就緒隊列的末尾重新排隊,等待下一次調度。同時,進程調度又去選擇就緒隊列中的下一個進程,分配給它一個時間片,以投入運行。如此循環往復,實現實時調度各事務。
工業控制中的數據包括現場采集的數據、組態參數、計算數據、屬性數據和控制數據等。這些數據既有模擬量、數字量,也有字符型量。本文選用VC++作為開發工具,利用面向對象技術,將實時數據庫中的數據對象類分為模擬量、數字量和字符串三種,分別定義為模擬量類CAnalog、數字量類CDigital和字符串類CMystring。所有的類均派生自CObject類。CObject類是Windows系統下用于表示對象的最基本類,是一個抽象類。實時數據庫定義的所有域都是相應實時數據庫類的屬性。此外,每種實時數據庫類由特定的成員函數進行屬性的處理。下面給出模擬量類定義的部分程序,其他類的定義基本相似。


為了節省內存、提高程序的執行效率,本文利用動態鏈接庫(dynamic link library,DLL)和全局內存共享技術來建立系統運行時的實時數據庫。動態鏈接庫DLL是Windows中的一種特殊的程序單元,被稱為非任務的可執行模塊,它們由調用者的任務所驅動。動態鏈接是相對于靜態鏈接來定義的,靜態鏈接是由連接程序將靜態連接庫中的函數或資源在連接時拷貝給每個運行程序[7-8]。
在VC++6.0新建窗口中擴展生成DLL的VC程序框架,在生成的程序框架中定義動態鏈接庫的數據結構后,把實時數據封裝為一個類 CVariable-Database[8],它是 MFC 中的類 CDatabase的派生。所有數據庫接口訪問函數定義為類CVariableDatabase的成員函數。將CVariableDatabase類作為輸出類,便于管理和維護。下面是動態鏈接庫類的具體實現。


實時數據庫接口是系統提供給用戶的一個開放的接口規范,它允許用戶利用該接口直接訪問實時數據庫。這就為用戶開發輸入輸出接口驅動程序和用戶算法模塊提供了方便快捷的途徑[9-10]。動態鏈接庫中的類CVariableDatabase的實現,為數據庫提供了一套實時數據庫接口,用于實現用戶與實時數據庫之間的高速數據傳遞和對實時數據庫的讀寫、查詢和管理等功能。
由于系統直接利用這些接口函數實現和實時數據庫的數據交換,因此,系統不但具有全面的開放性和二次開發的功能,且其實時性也大大優于其他數據交換協議。
組態軟件中的實時數據庫技術是當前較新的數據庫研究方向,有很大的發展空間與潛力。本文采用面向對象的設計思想,將實時數據庫的操作以類的方式實現,并且利用類的繼承、派生和重載等特性提高程序質量;利用動態鏈接庫和全局內存共享技術來建立系統實時數據庫,并為用戶提供一組接口函數實現數據庫的訪問,大大提高了實時數據庫系統的實時性與開放性。
[1]王荃,金海東,李福中.工控組態軟件實時數據庫系統的設計與實現[J].化工自動化及儀表,2000,27(3):40 -43.
[2]王成光,蘇宏業,褚健.石化企業大型實時數據庫系統的結構設計[J].化工自動化及儀表,2002,29(5):7 -11.
[3]錢笑宇,張彥武.工業實時數據庫的研究和設計[J].計算機工程,2005,31(5):98 -132.
[4]張會彥,周麗虹.新型構件化組態軟件中實時數據庫設計與實現[J].計算機應用于軟件,2009,26(7):153 -174.
[5]楊華麗,石銳,胡捷,等.組態軟件中實時數據庫系統的設計和實現[J].實驗技術與管理,2007,24(3):80 -83.
[6]宋清昆,孫元娜,王學偉,等.組態軟件實時數據庫系統的設計[J].計算機應用,2008,27(1):55 -57.
[7]闞宏進,劉希遠,李翠玲.基于VC++工控組態軟件實時數據庫系統的設計[J].甘肅工業大學學報,2001,27(4):73 -76.
[8]孫鑫,余安萍.VC++深入詳解[M].北京:電子工業出版社,2006.
[9]楊立保,許忠仁.組態軟件實時數據庫的研究與設計[J].自動化儀表,2009,30(8):19 -21.
[10]姜軍銀,侯立剛.基于COM技術的通用數據庫存取組件的設計[J].遼寧石油化工大學學報,2005,25(1):75-77.