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