嵌入式數(shù)據(jù)庫(kù)礦場(chǎng)安全系統(tǒng)的設(shè)計(jì)
設(shè)備安裝信息和實(shí)時(shí)數(shù)據(jù)信息的存儲(chǔ)代碼具有一定的相似性,作者以實(shí)時(shí)數(shù)據(jù)信息的存儲(chǔ)代碼為例說明其設(shè)計(jì)過程,程序流程如下所示:
圖 2 設(shè)備安裝信息數(shù)據(jù)庫(kù)存儲(chǔ)程序流程
3.3 數(shù)據(jù)查詢模塊
實(shí)時(shí)/歷史數(shù)據(jù)查詢模塊設(shè)計(jì)主要就是GetDevKey、DataQueryByRealTime 和DataQuery函數(shù)設(shè)計(jì)。
1. DataQueryByRealTime 函數(shù)設(shè)計(jì)
若用戶輸入的查詢時(shí)間段內(nèi)設(shè)備安裝信息沒有改變,GetDevKey 函數(shù)會(huì)直接返回FALSE,程序接著會(huì)調(diào)用DataQueryByRealTime 函數(shù)查詢實(shí)時(shí)數(shù)據(jù)庫(kù)文件,設(shè)備安裝信息直接從m-devList 結(jié)構(gòu)體鏈表中獲得,函數(shù)設(shè)計(jì)包括如下:
?、俑鶕?jù)用戶輸入的查詢?nèi)掌?,形成?shí)時(shí)數(shù)據(jù)庫(kù)文件如2007-02-09.db,打開實(shí)時(shí)數(shù)據(jù)庫(kù)。
?、跇?gòu)建游標(biāo)cursor,使用get 方法,以查詢時(shí)間為key,flag 標(biāo)簽為DB_ SET_ RANGE 游標(biāo)定位到數(shù)據(jù)庫(kù)文件多重記錄的首一記錄。
?、郾闅v數(shù)據(jù)庫(kù)文件擁有相同 kev 的多重記錄,將data 中傳感器ID 號(hào)與用戶輸入ID 號(hào)相等的REALDATA 結(jié)構(gòu)體與相應(yīng)的m devList 鏈表節(jié)點(diǎn)DEVDATA 結(jié)構(gòu)體在列表框控件(CC1istCtrl)中顯示出來。
2. DataQuery 函數(shù)設(shè)計(jì)
若設(shè)備查詢時(shí)間對(duì)應(yīng)的安裝信息相對(duì)于當(dāng)前時(shí)間段己經(jīng)改變,GetDevKey 函數(shù)會(huì)返回正確的設(shè)備安裝信息查詢時(shí)間devKey,這個(gè)查詢時(shí)間可能跟用戶輸入的傳感器查詢時(shí)間不同;程序接著會(huì)調(diào)用DataQuery 函數(shù),并將這個(gè)正確的設(shè)備查詢時(shí)間devKey、用戶輸入的傳感器實(shí)時(shí)數(shù)據(jù)查詢時(shí)間realKey、傳感器ID 號(hào)strDevID 以及實(shí)時(shí)數(shù)據(jù)庫(kù)文件名strRealDbName以形參方式傳給DataQuery 函數(shù),其函數(shù)設(shè)計(jì)包括如下:
?、俅蜷_設(shè)備數(shù)據(jù)庫(kù) dev.db 文件,根據(jù)形參strRealDbName 打開實(shí)時(shí)數(shù)據(jù)庫(kù)文件。
?、跇?gòu)建游標(biāo) cursor,使用get 方法,分別以devKey 和realKey 為數(shù)據(jù)庫(kù)的key, flag標(biāo)簽為DB_ SET_ RANGE,游標(biāo)定位到設(shè)備數(shù)據(jù)庫(kù)文件和實(shí)時(shí)數(shù)據(jù)庫(kù)文件的首記錄。
?、郾闅v數(shù)據(jù)庫(kù)文件擁有相同key 的多重記錄,若設(shè)備數(shù)據(jù)庫(kù)文件記錄的data 中(DEVDATA 結(jié)構(gòu)體)傳感器ID 號(hào)與實(shí)時(shí)數(shù)據(jù)庫(kù)文件記錄的data 中(REALDATA 結(jié)構(gòu)體)傳感器ID 號(hào)相等,則將這兩個(gè)data 信息在列表框控件(CC1istCtrl)中顯示出來。
4.總結(jié)
本文的創(chuàng)新點(diǎn):分析嵌入式煤礦井上監(jiān)控系統(tǒng)的功能需求,開發(fā)設(shè)計(jì)了基于Berkeley DB數(shù)據(jù)庫(kù)和Windows CE 的礦場(chǎng)安全系統(tǒng),實(shí)現(xiàn)了窗口登錄、數(shù)據(jù)采集、系統(tǒng)界面、數(shù)據(jù)庫(kù)存儲(chǔ)、實(shí)時(shí)/歷史數(shù)據(jù)查詢、實(shí)時(shí)曲線顯示等功能模塊,深入討論研究了系統(tǒng)的數(shù)據(jù)采集方法、數(shù)據(jù)庫(kù)KEY/DATA 對(duì)存儲(chǔ)方案及實(shí)時(shí)/歷史傳感器數(shù)據(jù)的數(shù)據(jù)庫(kù)查詢策略。在實(shí)際生產(chǎn)中工作穩(wěn)定,查詢速度快,達(dá)到了預(yù)期的設(shè)計(jì)目標(biāo)。
評(píng)論