基于Linux的嵌入式實時數(shù)據(jù)庫的設(shè)計
在現(xiàn)代化的工業(yè)生產(chǎn)現(xiàn)場,產(chǎn)生了大量的生產(chǎn)數(shù)據(jù)和控制數(shù)據(jù),使得嵌入式環(huán)境下的數(shù)據(jù)管理成為工業(yè)控制系統(tǒng)中的重要部分,這就要求監(jiān)控軟件必須具備強(qiáng)大的數(shù)據(jù)處理能力,為人們提供實時、可靠的數(shù)據(jù),以反映現(xiàn)場運行的狀況,以便進(jìn)行相應(yīng)的控制操作。
嵌入式環(huán)境中數(shù)據(jù)的正確性不僅依賴于數(shù)據(jù)的邏輯結(jié)果,而且依賴于邏輯結(jié)果產(chǎn)生的時間。如何有效管理這些大量的、時效性強(qiáng)且有嚴(yán)格時序的數(shù)據(jù),如何使之以高可靠性、高實時性和大吞吐量的方式進(jìn)行處理是開發(fā)嵌入式系統(tǒng)必須解決的首要問題。
1 實時數(shù)據(jù)的處理過程
在監(jiān)控系統(tǒng)中,需要對大量的實時數(shù)據(jù)進(jìn)行處理,處理過程包括:現(xiàn)場數(shù)據(jù)的實時采集;對實時數(shù)據(jù)進(jìn)行處理和存儲;對結(jié)果進(jìn)行分析、判斷和報警;對歷史數(shù)據(jù)的處理等,如圖1。
將所有的實時數(shù)據(jù)集中進(jìn)行處理,建立實時數(shù)據(jù)庫,是嵌入式系統(tǒng)的一個中心環(huán)節(jié)。實時數(shù)據(jù)庫中的很大一部分?jǐn)?shù)據(jù)是從生產(chǎn)和測量現(xiàn)場實時采集到的數(shù)據(jù),因此及時準(zhǔn)確地采集數(shù)據(jù)是整個控制系統(tǒng)正常工作的基本前提。另外還有一些計算數(shù)據(jù)、控制數(shù)據(jù)和管理數(shù)據(jù)。
實時數(shù)據(jù)處理是在監(jiān)控系統(tǒng)中對實時數(shù)據(jù)庫中變量的值進(jìn)行的操作。包括對數(shù)據(jù)的顯示,存儲,報警,管理,提供控制參數(shù)等,同時它還可以根據(jù)需要把有關(guān)信息以事件的方式發(fā)送給系統(tǒng)的其它部分,以便觸發(fā)相關(guān)事件,進(jìn)行實時處理。
歷史數(shù)據(jù)處理是對定時存儲到歷史數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行處理,主要操作包括對原始數(shù)據(jù)的匯總、查詢,可以以曲線、報表等形式將數(shù)據(jù)形象地顯示出來。嵌入式設(shè)備存儲容量有限,系統(tǒng)中的大量數(shù)據(jù)將通過通信接口定期送入遠(yuǎn)程關(guān)系數(shù)據(jù)庫中保存。
在嵌入式系統(tǒng)中,實時數(shù)據(jù)庫從本質(zhì)上說不是一個真正意義上的數(shù)據(jù)庫系統(tǒng),只是一個由應(yīng)用程序管理的內(nèi)存緩沖區(qū),有時又稱為“內(nèi)存數(shù)據(jù)庫”,是一個供多個實時任務(wù)共同使用的共享數(shù)據(jù)區(qū),是嵌入在監(jiān)控軟件中、與應(yīng)用程序不可分割的部分,主要完成數(shù)據(jù)的存、取操作,不具有獨立性。一個完整的嵌入式實時數(shù)據(jù)庫系統(tǒng)除了內(nèi)存數(shù)據(jù)庫外,還應(yīng)包括歷史數(shù)據(jù)庫、數(shù)據(jù)庫管理等。因此在構(gòu)建嵌入式實時數(shù)據(jù)庫時,應(yīng)考慮系統(tǒng)的實時性、開銷大小、系統(tǒng)性能、可靠性,以及如何高效地利用嵌入式系統(tǒng)的有限資源、提高數(shù)據(jù)的存取速度、進(jìn)行數(shù)據(jù)保護(hù)、數(shù)據(jù)交換、算法的優(yōu)化、事務(wù)的優(yōu)先級分派、事務(wù)調(diào)度等。
2 嵌入式組態(tài)軟件中的實時數(shù)據(jù)庫的開發(fā)
隨著DCS的發(fā)展,利用組態(tài)軟件來支持工業(yè)應(yīng)用軟件的開發(fā),隨著Linux在嵌入式技術(shù)領(lǐng)域應(yīng)用的不斷推廣和深入,許多工控軟件都基于Linux開發(fā)。從結(jié)構(gòu)上看,基于Linux的嵌入式圖形化組態(tài)軟件(LEGCS:Linux-based Embedded Graphic Configuration Software)由系統(tǒng)開發(fā)環(huán)境和系統(tǒng)運行環(huán)境兩部分組成。系統(tǒng)開發(fā)境是作為一個平臺開發(fā)工具運行在PC機(jī)上,主要完成畫面繪制、指定組態(tài)的具體對象和內(nèi)容、完成設(shè)備屬性設(shè)定、設(shè)定控制策略、I/O管理等操作來對控制現(xiàn)場進(jìn)行全面的描述與設(shè)置,所有設(shè)定的結(jié)果保存到實時數(shù)據(jù)庫中,供系統(tǒng)運行時使用。保存到實時數(shù)據(jù)庫中的信息主要包括:現(xiàn)場數(shù)據(jù)、開關(guān)量、儀表值、實時時鐘、設(shè)備屬性等。運行環(huán)境實際就是工業(yè)控制應(yīng)用軟件,運行在嵌入式設(shè)備上,實時采集現(xiàn)場數(shù)據(jù)存入實時數(shù)據(jù)庫,讀取其中的數(shù)據(jù)并進(jìn)行解析,在目標(biāo)機(jī)上顯示組態(tài)內(nèi)容,實現(xiàn)設(shè)備的組態(tài)控制和仿真。維系組態(tài)環(huán)境與運行環(huán)境的紐帶是實時數(shù)據(jù)庫,如圖 2。
數(shù)據(jù)庫生成模塊運行在開發(fā)環(huán)境,主要完成如全局變量、內(nèi)存變量的數(shù)據(jù)定義,設(shè)置變量處理方式等,全局變量直接與工業(yè)現(xiàn)場設(shè)備狀態(tài)(如反應(yīng)容器壓力、閥門開關(guān)狀態(tài)等)相關(guān),這些數(shù)據(jù)在運行環(huán)境中由I/O 驅(qū)動模塊按組態(tài)要求實時采集;內(nèi)存變量是組態(tài)軟件中用到的中間變量。實時數(shù)據(jù)生成模塊將組態(tài)信息存放到實時數(shù)據(jù)庫中。在運行環(huán)境,由實時數(shù)據(jù)庫運行模塊執(zhí)行數(shù)據(jù)采集,響應(yīng)用戶控制請求,維護(hù)圖形界面與實時數(shù)據(jù)庫、被控對象之間的數(shù)據(jù)流動。運行環(huán)境中的實時曲線顯示和趨勢模塊定時從實時數(shù)據(jù)庫中獲取數(shù)據(jù),數(shù)據(jù)存儲模塊將實時數(shù)據(jù)庫中的數(shù)據(jù)存儲在磁盤上作為歷史數(shù)據(jù)。
3 LEGCS系統(tǒng)中實時數(shù)據(jù)庫的的設(shè)計
3.1 實時數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計
實時數(shù)據(jù)按其性質(zhì)可分為模擬量、開關(guān)量、數(shù)字量、字符串等多種,根據(jù)現(xiàn)場數(shù)據(jù)類型和系統(tǒng)所用到的系統(tǒng)常量和中間變量,在LEGCS中定義了八種變量類型:內(nèi)存離散型、I/O離散型、內(nèi)存整數(shù)型、I/O整數(shù)型、內(nèi)存實數(shù)型、I/O實數(shù)型、內(nèi)存字符串型、I/O字符串型,其中內(nèi)存變量類型用于創(chuàng)建系統(tǒng)常量和中間變量,I/O變量類型用于處理現(xiàn)場采集的數(shù)據(jù)。對各種類型的變量來說,均有其取值范圍:離散型變量只能取0和1,整型變量與一般程序設(shè)計語言中的有符號長整型變量類似,用于表示帶符號的整型數(shù)據(jù)。實型變量用于表示浮點數(shù)據(jù)。字符串變量用于記錄一些特定含義的字符串。每類變量一一對應(yīng)于一類實時數(shù)據(jù),它以結(jié)構(gòu)的形式來管理,變量的數(shù)據(jù)結(jié)構(gòu)RTVariant定義如表1。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論