基于Linux的嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)的設(shè)計(jì)
表1 實(shí)時(shí)數(shù)據(jù)庫(kù)的結(jié)構(gòu)
域名 | 作用 | 類型 | 長(zhǎng)度 |
VariantName | 變量名 | string | 50 |
VariantType | 變量類型 | string | 30 |
VariantDesc | 變量描述 | string | 50 |
ChangeLmd | 變量變化靈敏度,變化幅度大于該值才被記錄 | float | |
InitValue | 軟件開始運(yùn)行時(shí)非離散型變量的初始值 | float | |
InitBoolValue | 軟件開始運(yùn)行時(shí)離散型變量的初始值 | int | 1 |
MinValue | 變量在實(shí)時(shí)數(shù)據(jù)庫(kù)的最小值 | float | |
MaxValue | 變量在實(shí)時(shí)數(shù)據(jù)庫(kù)的最大值 | float | |
InitMinValue | 變量所對(duì)應(yīng)的設(shè)備的數(shù)值的下限 | float | |
InitMaxValue | 變量所對(duì)應(yīng)的設(shè)備的數(shù)值的上限 | float | |
DeviceName | I/O類型的變量對(duì)應(yīng)的設(shè)備名稱 | string | 50 |
Register | I/O類型的變量對(duì)應(yīng)的設(shè)備寄存器 | string | 50 |
DataType | 該變量的數(shù)據(jù)類型,為上述8種類型之一 | string | 20 |
ReadWrite | I/O變量的讀寫特性,只讀、只寫或讀寫 | string | 10 |
TimeScan | 讀寫外部設(shè)備的時(shí)間頻率 | float | |
RunMode | 獲取變量值的模式:仿真方式、直接采集 | string | 50 |
SoftMode | 定義仿真獲取數(shù)據(jù)時(shí)是否隨機(jī)產(chǎn)生 | string | 50 |
FltValue | 變量的當(dāng)前值 | float |
實(shí)時(shí)數(shù)據(jù)庫(kù)生成模塊運(yùn)行在組態(tài)開發(fā)環(huán)境,為了方便對(duì)應(yīng)用程序中的數(shù)據(jù)管理,將所有的實(shí)時(shí)變量用單向鏈表定形式來(lái)實(shí)現(xiàn)管理,用以完成對(duì)數(shù)據(jù)庫(kù)的操作,鏈表定義如下:
typedef struct ClsRTVariantSet//實(shí)時(shí)數(shù)據(jù)庫(kù)結(jié)構(gòu)定義 { int count; //鏈表中所有實(shí)時(shí)數(shù)據(jù)變量的個(gè)數(shù) Position currentpos; //標(biāo)記鏈表中的當(dāng)前元素所處的位置 RTVariant * head; //指向鏈表的第一個(gè)元素,類型為RTVariant RTVariant * current; //標(biāo)記鏈表中的當(dāng)前元素 }RTVariantSet; |
再定義一組與該鏈表相關(guān)的操作來(lái)實(shí)現(xiàn)數(shù)據(jù)的管理,如數(shù)據(jù)的初始化、插入數(shù)據(jù)、更新、獲取、設(shè)置實(shí)時(shí)數(shù)據(jù)庫(kù)對(duì)象的值等操作,操作原型定義如下:
Status InitRTVariantSet(RTVariantSet* mlist, char* mstrFileName,
char* mstrFilter, int mintFiltered); //鏈表的初始化
void FreeRTVariantSet(RTVariantSet* mlist); //清空鏈表
void InsertRTVariantList(Position p, RTVariant* mObjItem, RTVariantSet* mlist);//插入數(shù)據(jù)對(duì)象
Status UpdateRTValue(RTVariantSet* mlist,char* FldNameAndValue);//更新數(shù)據(jù)
float GetRTValueByName(RTVariantSet* mlist,char* FldName);//獲取變量的值
Status SetRTValueByName(RTVariantSet* mlist,char* FldName,float mfltValue);
// 設(shè)置變量的值
3.3.實(shí)時(shí)數(shù)據(jù)庫(kù)運(yùn)行模塊的設(shè)計(jì)
實(shí)時(shí)數(shù)據(jù)庫(kù)運(yùn)行模塊運(yùn)行在仿真環(huán)境或者嵌入式設(shè)備上,主要完成實(shí)時(shí)數(shù)據(jù)的采集以及實(shí)時(shí)數(shù)據(jù)的分析處理,依據(jù)功能的不同編寫不同的處理函數(shù)。如實(shí)時(shí)曲線分析(RealCurve)就是用于觀察外部變量或表達(dá)式的值隨時(shí)間變化的趨勢(shì)的一個(gè)模塊。實(shí)時(shí)曲線的X軸代表時(shí)間、Y軸代表變量值,運(yùn)行時(shí)曲線可以自動(dòng)卷動(dòng),以快速反映變量隨時(shí)間的變化。在設(shè)計(jì)實(shí)時(shí)曲線時(shí)主要用到如下的變量屬性:
域名 | 作用 | 類型 |
FltValue | 變量的當(dāng)前值 | float |
Count | 顯示數(shù)據(jù)的個(gè)數(shù) | int |
FltModel | 實(shí)時(shí)曲線中設(shè)定的參照曲線的數(shù)值,一維數(shù)組,在開發(fā)環(huán)境中設(shè)置 | float* |
FltRealValue | 當(dāng)前值之前的時(shí)間段的實(shí)際值數(shù)組 | float* |
FltRealValue是一個(gè)一維數(shù)組,其中存放了實(shí)時(shí)曲線實(shí)際顯示的數(shù)值,存放的數(shù)據(jù)是自動(dòng)卷動(dòng)的,當(dāng)由外部設(shè)備采集到一個(gè)當(dāng)前時(shí)刻的數(shù)值后,存放在數(shù)組中的采集時(shí)間最老的一個(gè)數(shù)據(jù)將被丟棄,而加入當(dāng)前新采集到的數(shù)據(jù),數(shù)組中有效數(shù)據(jù)的總數(shù)保持不變。實(shí)時(shí)趨勢(shì)曲線就是根據(jù)這個(gè)的數(shù)據(jù)結(jié)構(gòu)來(lái)滾動(dòng)顯示的。
4 小結(jié)
嵌入式應(yīng)用系統(tǒng)的運(yùn)行要處理大量的實(shí)時(shí)數(shù)據(jù),這就要求開發(fā)嵌入式應(yīng)用系統(tǒng)的組態(tài)軟件具有處理大量實(shí)時(shí)數(shù)據(jù)的功能。實(shí)時(shí)數(shù)據(jù)庫(kù)模塊分為開發(fā)環(huán)境和運(yùn)行環(huán)境分別設(shè)計(jì),在組態(tài)開發(fā)環(huán)境中完成實(shí)時(shí)數(shù)據(jù)庫(kù)結(jié)構(gòu)、數(shù)據(jù)來(lái)源、數(shù)據(jù)連接、數(shù)據(jù)類型及相關(guān)的各種參數(shù)的定義,生成目標(biāo)實(shí)時(shí)數(shù)據(jù)庫(kù),然后在系統(tǒng)運(yùn)行環(huán)境中,將從外部設(shè)備采集來(lái)的實(shí)時(shí)數(shù)據(jù)送入實(shí)時(shí)數(shù)據(jù)庫(kù),讀取目標(biāo)實(shí)時(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行解析,自動(dòng)完成顯示、報(bào)警、存盤等操作,同時(shí)把有關(guān)信息發(fā)送給系統(tǒng)的其它部分,以便觸發(fā)相關(guān)事件,進(jìn)行實(shí)時(shí)處理。
參考文獻(xiàn):
[1] 周東球,杜殿林等.先進(jìn)控制軟件系統(tǒng)實(shí)時(shí)數(shù)據(jù)庫(kù)的設(shè)計(jì)[J].微計(jì)算機(jī)信息,2003
[2] 沙寶良,陳云飛,周正林.工業(yè)控制系統(tǒng)的實(shí)時(shí)數(shù)據(jù)庫(kù)設(shè)計(jì)[J].信息技術(shù),2003
[3] Olson,M.A. Selecting and Implementing an Embedded Database System. IEEE Computer.2000,33(9):27-34
[4] J Stankovic,et al. Misconceptions about Real-Time Databases. IEEE Computer,1999,
32(6):29-36
[5] 劉震 羅欣. 嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)技術(shù)研究.電子產(chǎn)品世界.2005.2
[6]錢笑宇,張彥武. 工業(yè)實(shí)時(shí)數(shù)據(jù)庫(kù)的研究和設(shè)計(jì). 計(jì)算機(jī)工程. 2005年1月
創(chuàng)新觀點(diǎn)
對(duì)實(shí)時(shí)數(shù)據(jù)的處理是工控系統(tǒng)的核心,組態(tài)軟件主要用于開發(fā)嵌入式工控軟件,實(shí)時(shí)數(shù)據(jù)庫(kù)的設(shè)計(jì)和實(shí)現(xiàn)是組態(tài)軟件的重要組成部分。將實(shí)時(shí)數(shù)據(jù)庫(kù)的設(shè)計(jì)分為開發(fā)環(huán)境和運(yùn)行環(huán)境分別設(shè)計(jì),在系統(tǒng)開發(fā)環(huán)境就可以只定義數(shù)據(jù)庫(kù)結(jié)構(gòu)和數(shù)據(jù)字典,在運(yùn)行環(huán)境中完成數(shù)據(jù)和變量的綁定,實(shí)時(shí)獲取或處理數(shù)據(jù),并完成了兩部分軟件的分析和設(shè)計(jì)。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論