徐 陽 孫俊杰
(鄭州大學振動工程研究所,河南鄭州450001)
準在線故障診斷系統(tǒng)是一種可以對設備進行精密診斷和故障監(jiān)測的便攜式故障診斷系統(tǒng),與傳統(tǒng)的故障診斷系統(tǒng)相比,既有離線系統(tǒng)的靈活方便和便攜的優(yōu)點,又具有在線系統(tǒng)的強大分析功能和進行較長時間故障監(jiān)測的能力,主要用于大型設備的啟停機監(jiān)測,以及設備的故障診斷分析等方面。由于準在線故障診斷系統(tǒng)的這些特點,其在數(shù)據(jù)的采集、存儲和分析方面都具有較高的要求,本文主要討論一種嵌入式數(shù)據(jù)庫SQLite在準在線故障診斷系統(tǒng)中的應用。
數(shù)據(jù)庫通常用來實現(xiàn)對大量數(shù)據(jù)的存儲、檢索等功能。早期的數(shù)據(jù)一般通過某種格式存儲在文件中,而后來逐漸發(fā)展成為復雜的大型關系數(shù)據(jù)庫,如Oracle、MySQL 等。
在嵌入式領域,早期的數(shù)據(jù)存儲也常常采用系統(tǒng)自定義的數(shù)據(jù)結構和文件格式來進行存取和查詢。但近年來隨著各種嵌入式應用的飛速發(fā)展,嵌入式軟件中對數(shù)據(jù)存取和查詢功能的要求也越來越高,數(shù)據(jù)庫技術也開始越來越多的應用于各種嵌入式系統(tǒng)中。而嵌入式系統(tǒng)中很多的應用,可能僅僅需要用到數(shù)據(jù)庫的一些特性。比如有時我們需要的可能只是一個簡單的基于磁盤文件的數(shù)據(jù)庫系統(tǒng),這樣就不必安裝龐大的數(shù)據(jù)庫服務器,利用簡單的嵌入式數(shù)據(jù)庫就可以了。另外嵌入式系統(tǒng)資源上的限制也決定了我們不可能采用大型的關系數(shù)據(jù)庫。
SQLite是D.Richard Hipp在2000年開發(fā)的一個小型嵌入式數(shù)據(jù)庫。它是完全獨立的,不具有外部依賴性,其源代碼完全開源,可以免費用于任何用途。除此之外SQLite還具有零配置、輕量級自包含、簡單、靈活、可靠等特點,非常適合應用于嵌入式系統(tǒng)當中。
系統(tǒng)采用OMAP5912作為處理器,其ARM端運行Linux操作系統(tǒng),對系統(tǒng)的外圍模塊進行管理控制;在DSP端運行DSP/BIOS實時內核,對采集的數(shù)據(jù)進行復雜的處理。系統(tǒng)的軟件主要有6個功能模塊:數(shù)據(jù)采集模塊、存儲模塊、數(shù)據(jù)分析模塊、用戶管理操作模塊、顯示模塊和通訊模塊,如圖1所示。
(1)數(shù)據(jù)采集模塊 主要是開辟不同的線程來分別控制多個傳感器進行振動數(shù)據(jù)采集,并將采集到的數(shù)據(jù)送入指定的內存中等待系統(tǒng)進行處理。
(2)存儲模塊 用來將用戶需要的數(shù)據(jù)存入指定的存儲介質(FLASH、SD卡、硬盤等)中,主要包括用戶的系統(tǒng)配置信息、采集的源數(shù)據(jù)、處理過的數(shù)據(jù)以及各種分析診斷結果等。
(3)數(shù)據(jù)分析模塊 對采集到的數(shù)據(jù)進行實時分析,主要由系統(tǒng)控制DSP處理器來進行。
(4)用戶管理操作模塊 用來與用戶進行交互,使用戶可以根據(jù)不同設備的需求來進行各種參數(shù)的設定,同時可以使用戶自行選擇合適的診斷方法進行診斷。
(5)顯示模塊 主要是將設備的診斷信息通過LCD實時顯示出來。
(6)通訊模塊 主要是通過USB或網(wǎng)絡來訪問系統(tǒng),從而獲得系統(tǒng)的各種數(shù)據(jù),方便與企業(yè)的設備管理系統(tǒng)進行對接。
SQLite一共有80多個C/C++的API,另外還有很多數(shù)據(jù)結構和預定義的宏等。1個簡單的數(shù)據(jù)庫應用程序只需要使用3個函數(shù)就可以:sqlite3_open()、sqlite3_exec()、sqlite3_close。
sqlite3_open()表示在當前目錄打開數(shù)據(jù)庫,如果數(shù)據(jù)庫不存在則自動創(chuàng)建1個數(shù)據(jù)庫。其函數(shù)原型為:
sqlite3_close()與sqlite3_open()對應,用來關閉打開的數(shù)據(jù)庫,在應用程序中與sqlite3_open()一般都要成對出現(xiàn)。
sqlite3_exec()函數(shù)則是用來執(zhí)行SQL語句。它的函數(shù)原型為
其中第3和第4個參數(shù)用來指定回調函數(shù)和回調函數(shù)第一個參數(shù)。對于回調函數(shù)callback,是在執(zhí)行SQL語句的時候被回調。當執(zhí)行查詢類型的SQL語句時,每返回一行查詢記錄,就會調用一次定義的回調函數(shù)。
由第二節(jié)所述系統(tǒng)的基本軟件架構可以看出,系統(tǒng)的各個模塊都與數(shù)據(jù)有著密切的關系,整個系統(tǒng)實質上就是對振動數(shù)據(jù)的采集、處理和管理的過程。對此本系統(tǒng)采用SQLite以文件數(shù)據(jù)庫的形式來進行對數(shù)據(jù)的管理和操作。SQLite在系統(tǒng)的不同模塊中有著不同的應用,并且將各個不同的功能模塊有機地結合在一起。下面對這些具體的應用進行分別闡述:
(1)在數(shù)據(jù)采集模塊中的應用
數(shù)據(jù)采集模塊有6個測振通道,用戶通過系統(tǒng)設定其各個通道工作與否,同時設定進行數(shù)據(jù)采集或是監(jiān)測。在SQLite中建有6個表(source_data1——source_data6)來分別存儲對應6個通道采集來的振動數(shù)據(jù)。這6個表具有同樣的結構,其中源數(shù)據(jù)的結構如圖2所示。
在C語言中建立這種表的具體函數(shù)實現(xiàn)如下:
在這6個振動源數(shù)據(jù)表中,共有 ID、data、time、samsrc_info、freq、num、sensor_type 七個字段。振動源數(shù)據(jù)是根據(jù)設定的采集點數(shù)以組為單位來進行存儲,設定的采集點數(shù)一般有512、1024、2048等選擇,因此對應的一組振動數(shù)據(jù)就分別由512、1024、2048個浮點數(shù)組成,在存儲時先將這些浮點數(shù)通過編碼轉換,然后以二進制的形式存儲在表的data字段,而對應的采集點數(shù)則存在num字段。另外因為在故障診斷中有時需要用到各種信息融合的技術,如全息譜技術、全矢譜技術,而信息融合技術需要采集的信號是同源信號,在數(shù)據(jù)表中samsrc_info字段則反映了這些信號的同源信息。根據(jù)samsrc_info字段的內容系統(tǒng)即可判斷某一通道采集的信號與剩余哪個通道的哪組信號是同源的,從而能夠進行信息融合。
當系統(tǒng)執(zhí)行較長時間故障監(jiān)控功能時,由于數(shù)據(jù)的采集頻率較高,因此表的膨脹速度很快,當表過大時會影響系統(tǒng)的存取性能。對此系統(tǒng)啟動時會自動判斷表的大小,當表的大小超過設定的大小后會提示用戶將數(shù)據(jù)轉存到另一個表中或另建一個關聯(lián)數(shù)據(jù)庫存放以往的數(shù)據(jù),從而保證系統(tǒng)的性能不受影響。
(2)在操作管理模塊中的應用
系統(tǒng)的操作管理包括用戶管理、系統(tǒng)參數(shù)設定、采集參數(shù)設定、數(shù)據(jù)處理方式選擇、顯示模式選擇、存儲控制和通訊傳輸控制等。這些管理數(shù)據(jù)和配置信息存儲在數(shù)據(jù)庫中的一系列配置表中:user表、syscfg表和vibcfg表等。當進行參數(shù)設定時,使用sqlite3_exec()函數(shù)執(zhí)行SQL語句中的INSERT命令,可以將各參數(shù)保存到對應配置表中,如圖3所示。同樣,當需要讀取參數(shù)時,則執(zhí)行SQL語句中的SELECT命令來實現(xiàn)。在系統(tǒng)對SQLite進行操作的過程中要注意:由于在系統(tǒng)運行時要頻繁地對數(shù)據(jù)庫進行操作,而數(shù)據(jù)庫打開函數(shù)sqlite3_open("sysdata.db",&db),比較占用資源,因此只在系統(tǒng)啟動時打開一次數(shù)據(jù)庫,系統(tǒng)運行時只進行操作而不關閉數(shù)據(jù)庫,所有操作只是對數(shù)據(jù)庫中的表進行。但是SQLite不支持多線程同時對表進行寫操作,因此系統(tǒng)必須對數(shù)據(jù)庫的寫操作進行調度,防止發(fā)生阻塞。
(3)在通訊模塊中的應用
當系統(tǒng)采集的數(shù)據(jù)需要轉存或需要與企業(yè)的設備管理系統(tǒng)對接時,系統(tǒng)可通過USB數(shù)據(jù)線或網(wǎng)線與PC機互聯(lián)。由于SQLite是文件型數(shù)據(jù)庫,所有數(shù)據(jù)都存在一個sysdata.db文件中,并且SQLite的數(shù)據(jù)庫文件在Window系統(tǒng)下可以同樣簡單地進行解析,因此在傳輸時就可以直接將該sysdata.db文件進行傳輸。另外也可以只傳輸系統(tǒng)產(chǎn)生的各種報表文件。
(4)在顯示模塊中的應用
顯示模塊主要用來實時顯示波形頻譜圖、相位圖和各種故障分析方法產(chǎn)生的圖表,使用戶對振動信息有更直觀的了解。顯示的波形數(shù)據(jù)主要來自數(shù)據(jù)庫中的六個源數(shù)據(jù)表,其他圖表則由分析模塊調用DSP內核對源數(shù)據(jù)進行處理獲得。
系統(tǒng)采用MiniGUI來進行圖形用戶界面的設計,MiniGUI本身就是用 C語言開發(fā)的,因此可以與SQLite很好地進行結合,可以在MiniGUI中直接調用SQLite的各種 API函數(shù),只需要在頭文件中包含“sqlite3.h”文件即可。
準在線故障診斷系統(tǒng)是便攜式故障診斷系統(tǒng)中相對高端的產(chǎn)品,由于其在采集的同時還要能夠有較強的數(shù)據(jù)處理和分析能力,因此對系統(tǒng)的設計有較高的要求。本系統(tǒng)采用嵌入式數(shù)據(jù)庫SQLite來進行數(shù)據(jù)的存儲和管理,避免了采用一般文件存儲時實時性和安全性差的問題,也增強了系統(tǒng)的穩(wěn)定性和擴展性。同時由于SQLite對多種編程語言的支持和較強的移植性,大大減少了系統(tǒng)開發(fā)和維護中的工作量。
[1]韓捷,張瑞林.旋轉機械故障機理及診斷技術[M].北京:機械工業(yè)出版社,1997.
[2]歐文盛.ARM嵌入式Linux應用實例開發(fā)[M].北京:中國電力出版社,2008.
[3]解輝,徐玉斌,李建偉,等.基于sqlite的嵌入式數(shù)據(jù)采集系統(tǒng)的設計與研究[J].計算機與數(shù)字工程,2008(6):91-94.
[4]孫俊杰,李海龍.基于OMAP的準在線故障診斷系統(tǒng)的硬件平臺研究[J].儀表技術與傳感器,2010(5):71-73.
[5]倪天龍,張賢高,王培.數(shù)據(jù)庫SQLite在嵌入式系統(tǒng)中的應用[J].微計算機信息,2005(10):35-37.
[6]Chris Newman.SQLite[M].Indianapolis.Sams Publishing,2004.