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