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