黃 麗,黃 輝,仝秋紅
(1.武漢科技大學城市學院信息工程學部,湖北武漢430083;2.中國電力工程顧問集團中南電力設計院,湖北武漢430070;3.長安大學汽車學院,陜西西安710064)
目前,為了滿足快速故障定位和故障診斷的要求,車輛故障診斷系統(tǒng)朝著智能化和小型化的方向發(fā)展,嵌入式技術得到了廣泛的應用。在此類系統(tǒng)中,不便于采用大型的數(shù)據(jù)庫對數(shù)據(jù)進行管理。SQLite嵌入式數(shù)據(jù)庫具有體積小、速度快、維護方便、接口豐富等優(yōu)點,將其應用到發(fā)動機故障診斷系統(tǒng)中,極大提高了故障診斷系統(tǒng)中數(shù)據(jù)管理的效率。
1 SQLite數(shù)據(jù)庫簡介
SQLite是一款開源文件型數(shù)據(jù)庫,在嵌入式系統(tǒng)中廣泛應用。它具備一般關系型數(shù)據(jù)庫的基本特征,如SQL語法、事務處理、數(shù)據(jù)表管理和索引。作為嵌入式數(shù)據(jù)庫,又具備容量小、可靠性高、管理簡單、維護方便等特征,生成的數(shù)據(jù)庫文件可以在各個平臺無縫移植,可以靜態(tài)庫和動態(tài)庫的形式植入嵌入式系統(tǒng)中。
SQLite的主要優(yōu)點[1]如下:(1)源代碼開放。一個完整的數(shù)據(jù)庫在系統(tǒng)中以單文件的形式存在,支持數(shù)據(jù)庫大小至2TB。(2)SQLite并非數(shù)據(jù)庫服務器,它和程序運行在同一進程,速度快,節(jié)省了系統(tǒng)調(diào)度時間。(3)體積小,運行時占用資源少,無需管理,廣泛適用于嵌入式或移動設備。(4)部署數(shù)據(jù)庫操作簡單易行,直接在應用程序的進程中以零配置模式運行。(5)單一磁盤文件,容易實現(xiàn)數(shù)據(jù)庫的共享訪問。(6)簡單易用的API接口。
2 故障診斷系統(tǒng)設計
2.1 系統(tǒng)總體設計
本系統(tǒng)結合故障樹分析法和產(chǎn)生式規(guī)則的診斷專家系統(tǒng),以QT和嵌入式SQLite數(shù)據(jù)庫作為開發(fā)平臺,實現(xiàn)了基于嵌入式數(shù)據(jù)庫的發(fā)動機故障診斷功能,該系統(tǒng)的框架結構如圖1所示。

圖1 故障診斷系統(tǒng)的框架結構圖
系統(tǒng)主要由三大部分組成。
2.1.1 數(shù)據(jù)采樣模塊
采集傳感器信息,并將這些信息經(jīng)過預處理和轉(zhuǎn)換保存到實時數(shù)據(jù)庫中。主要采集的信息有:燃油壓力、進氣管路的真空度、燃油管內(nèi)的壓力、空氣流量、轉(zhuǎn)速等。
2.1.2 推理診斷模塊
整個診斷系統(tǒng)的核心部分,完成對知識庫數(shù)據(jù)的增加、修改、刪除、查詢等操作,運用獲取的診斷信息和相關知識完成診斷任務,并完善系統(tǒng)的知識庫,提高系統(tǒng)診斷能力。主要包括知識庫的知識管理維護和自學習功能、推理機引擎及動態(tài)數(shù)據(jù)庫的實現(xiàn)。
2.1.3 人機交互模塊
系統(tǒng)的控制和協(xié)調(diào)機構,通過接口從用戶處獲得信息,引導用戶參與診斷過程,回答系統(tǒng)提出的問題及完成系統(tǒng)相關操作指示。主要以圖形的方式顯示診斷結果,提供豐富多樣的呈現(xiàn)形式,如曲線、表格、消息框等。其中曲線用來顯示溫度和壓力等緩變量的變化趨勢,表格用來統(tǒng)計診斷結果,消息框則以消息方式提供診斷建議。
2.2 故障樹的建立
系統(tǒng)根據(jù)故障源和故障現(xiàn)象之間的因果關系構建了故障樹模型。以“發(fā)動機啟動異常振動”為例,建立故障樹如圖2所示。故障樹中從頂事件到底事件的路徑,對應知識庫規(guī)則的前提,基本事件對應規(guī)則的結論,如故障源或故障原因[2]。

圖2 發(fā)動機啟動異常振動故障樹診斷圖
2.3 數(shù)據(jù)庫設計實例
根據(jù)以上分析,設計的“發(fā)動機啟動異常振動”數(shù)據(jù)庫表文件結構如表1—表4所示[3]。

表1 基本事實數(shù)據(jù)表abnvibration.db

表2 故障樹數(shù)據(jù)表faltree.db

表3 規(guī)則前件數(shù)據(jù)表forule.db

表4 規(guī)則后件數(shù)據(jù)表bkrule.db
3 SQLite在故障診斷系統(tǒng)中的應用
3.1 基于API的SQLite3基本數(shù)據(jù)庫操作
在SQLite提供的C/C++接口中,其中5個APIs屬于核心接口,即數(shù)據(jù)庫操作的5個基本函數(shù),其函數(shù)功能、語法結構及參數(shù)介紹如下[4]。
3.1.1 sqlite3_open
打開數(shù)據(jù)庫函數(shù),操作SQLite數(shù)據(jù)庫的入口函數(shù)。
int sqlite3_open(
const char*filename, /*數(shù)據(jù)庫文件路徑(UTF-8編碼)*/
sqlite3**ppDb, /*輸出:SQLite數(shù)據(jù)庫句柄*/
);
3.1.2 sqlite3_close
關閉數(shù)據(jù)庫函數(shù)。
int sqlite3_close(sqlite3*);/*使用該函數(shù)可以關閉數(shù)據(jù)庫*/
3.1.3 sqlite3_prepare
數(shù)據(jù)庫操作函數(shù),執(zhí)行SQL語句。
int sqlite3_prepare_v2(
sqlite3*db, /*打開的數(shù)據(jù)庫句柄*/
const char*zSql, /*UTF8編碼的SQL語句,可以參數(shù)化*/
int?nByte, /*SQL語句的字節(jié)長度,可以傳遞-1,即字符串以寬字符