[摘要]本文介紹了在虛擬儀器編程環(huán)境下利用LabSQL訪問數(shù)據(jù)庫的方法,詳細(xì)介紹了LabSQL的配置、數(shù)據(jù)的存儲、數(shù)據(jù)查詢及其與access數(shù)據(jù)庫的連接,并成功地應(yīng)用于輸油泵遠(yuǎn)程狀態(tài)監(jiān)測系統(tǒng)中,實現(xiàn)了溫度、振動等信號的實時記錄存儲。
[關(guān)鍵詞]虛擬儀器 輸油泵遠(yuǎn)程監(jiān)測數(shù)據(jù)庫 LabSQL
一、引言
LabVIEW采用圖形化的編程語言、直觀的前面板和流程圖相結(jié)合的方式來構(gòu)建虛擬儀器。相對于傳統(tǒng)編程方式而言,LabVIEW簡單易學(xué),節(jié)省了開發(fā)周期。它提供了豐富的圖形界面組件和庫函數(shù),為用戶設(shè)計各種專業(yè)軟件提供方便。此外,LabVIEW還面向應(yīng)用,支持模塊化和層次化結(jié)構(gòu),易于在不同平臺上移植。該文基于LabVIEW的上述優(yōu)勢,選擇其為軟件開發(fā)平臺,設(shè)計輸油泵遠(yuǎn)程監(jiān)測系統(tǒng)軟件。
在計算機(jī)監(jiān)測系統(tǒng)軟件開發(fā)中,很重要的一個環(huán)節(jié)是用戶可以對實時采集到的數(shù)據(jù)進(jìn)行顯示、查詢、分析以及報表、打印等操作。這就要求建立一個安全、高效的數(shù)據(jù)庫對數(shù)據(jù)進(jìn)行管理。LabVIEW雖然擁有很多的專業(yè)設(shè)計功能,但是沒有提供直接訪問數(shù)據(jù)庫的方法,需要其他的輔助方法來進(jìn)行數(shù)據(jù)庫的訪問。文中提出一種通過LabVIEW用戶開發(fā)的免費LabVIEW數(shù)據(jù)庫訪問工具包LabSQL實現(xiàn)對數(shù)據(jù)庫的訪問。
二、LabSQL簡介
LabSQL是一個免費的、多數(shù)據(jù)庫、跨平臺的LabVIEW數(shù)據(jù)庫訪問的工具包。目前版本是LabSQL1.1a,可在http://jeffreytravis.com下載。此工具包提供17個VI,此外國內(nèi)由楊樂平等編著的《LabVIEW高級程序設(shè)計》的隨書光盤中有教程作者開發(fā)的5個VI作為這個工具包的補充。本測試系統(tǒng)添加新記錄到Access數(shù)據(jù)庫用到這5個VI中的ADO Recordset Addnew.vi。
LabSQL支持Windows操作系統(tǒng)中任何基于ODBC(Open Database Connectivity,開放式數(shù)據(jù)庫互接)的數(shù)據(jù)庫,包括Access,SQLServer,Oracle,Sybase等。LabSQL利用Microsoft ADO(Microsoft ActiveX Data Objects)以及SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)語言來完成數(shù)據(jù)庫的訪問,將復(fù)雜的底層ADO及SQL封裝成一系列的LabSQLVis,使得LabVIEW與數(shù)據(jù)庫的通信變得方便。
三、LabSQL配置
在使用LabSQL實現(xiàn)LabVIEW與Access數(shù)據(jù)庫通信之前,首先需要在Windows操作系統(tǒng)中的ODBC數(shù)據(jù)源中創(chuàng)建一個DSN(Data Source Name,數(shù)據(jù)源名)。LabSQL與數(shù)據(jù)庫之間的連接就是建立在DSN基礎(chǔ)之上的。為了今后使用數(shù)據(jù)庫的方便性,本系統(tǒng)有別于其他通過控制面板進(jìn)行DSN設(shè)置的方法,而通過在開始菜單中顯示管理工具的方法進(jìn)入數(shù)據(jù)源(ODBC)設(shè)置。
DSN的創(chuàng)建步驟如下:
第一步:單擊任務(wù)欄“開始”,彈出開始菜單,在空白處單擊右鍵,彈出屬性,單擊屬性并隨后選擇開始菜單上的自定義,彈出自定義“開始”菜單,選擇高級,在系統(tǒng)管理工具欄目下,選擇在“所有程序”菜單和“開始”菜單上顯示選項;
第二步:在開始菜單管理工具下選擇數(shù)據(jù)源(ODBC),彈出ODBC數(shù)據(jù)源管理器;
第三步:在用戶DSN下,單擊“添加(D)...”按鈕;
第四步:在隨后出現(xiàn)的“創(chuàng)建新數(shù)據(jù)源”對話框中的驅(qū)動程序列表中選擇“Microsoft Access Driver(*.mdb)”,并單擊完成按鈕;
第五步:在隨后出現(xiàn)的對話框中的“數(shù)據(jù)源名”一欄中創(chuàng)建DSN名稱DTDB,說明中輸入(Displacement Test Database),再利用“選擇”按鈕選擇需要使用的數(shù)據(jù)庫,單擊“確定”按鈕。
這樣,就完成了DSN的創(chuàng)建,從此以后,LabSQL就可以利用這些DSN訪問與之相關(guān)聯(lián)的數(shù)據(jù)庫了。
四、數(shù)據(jù)存儲模塊
數(shù)據(jù)存儲是輸油泵遠(yuǎn)程狀態(tài)監(jiān)測系統(tǒng)的關(guān)鍵環(huán)節(jié)。數(shù)據(jù)存儲可以作為后續(xù)數(shù)據(jù)分析的數(shù)據(jù)來源和歷史數(shù)據(jù)以備查詢。實現(xiàn)數(shù)據(jù)存儲的方法有很多,本測試系統(tǒng)采用由第三方開發(fā)的LabSQL作為LabVIEW與Access數(shù)據(jù)庫的接口程序?qū)崿F(xiàn)數(shù)據(jù)的存儲。
LabVIEW中以字符的格式存儲數(shù)據(jù),讀出時也是以字符格式讀出,因此在程序設(shè)計的過程中,需要將溫度、振動等數(shù)值型數(shù)據(jù)轉(zhuǎn)換成字符格式。轉(zhuǎn)換的VI是Number to Fractional String,將數(shù)據(jù)轉(zhuǎn)換成3位精度的浮點字符串實現(xiàn)數(shù)據(jù)轉(zhuǎn)換,由Build Array將存儲在移位寄存器中的數(shù)據(jù)建立2D數(shù)組,由Transpose 2D Array將數(shù)組轉(zhuǎn)置,以便按一條記錄的形式存儲數(shù)據(jù)到數(shù)據(jù)庫。數(shù)據(jù)存儲對話框如圖1所示。
LabSQL程序是數(shù)據(jù)存儲的關(guān)鍵,其中ADO Recordset Open.vi的設(shè)置項CursorType設(shè)置很重要,本測試系統(tǒng)設(shè)置為Openstatic,這樣可以實現(xiàn)在數(shù)據(jù)庫已有數(shù)據(jù)的后面存儲新的數(shù)據(jù),而不會對原數(shù)據(jù)造成影響。利用For循環(huán)(For Loop)的自動索引功能,將第0幀的數(shù)組數(shù)據(jù)按行讀出,并利用LabSQL的ADO Recordset Addnew.vi添加新記錄。For循環(huán)運行次數(shù)由采樣點數(shù)設(shè)定。數(shù)據(jù)存儲程序框圖如圖2所示。
五、數(shù)據(jù)查詢模塊設(shè)計
實現(xiàn)數(shù)據(jù)查詢采用LabSQL的VI編程。在程序設(shè)計的過程中,由于受到讀取數(shù)據(jù)庫數(shù)據(jù)是向數(shù)據(jù)庫中添加記錄的逆過程思路的影響,會考慮再次利用循環(huán)結(jié)構(gòu)的自動索引功能,采用嵌套循環(huán)結(jié)構(gòu),首先讀取記錄的單個記錄值,組成1D數(shù)組,然后利用外層的循環(huán)結(jié)構(gòu)自動索引功能將累積的1D數(shù)組累積成2D數(shù)組后,再輸出。這樣做會利用LabSQL的一些Recordset VI,最終可以實現(xiàn)讀取數(shù)據(jù)。由于LabSQL源代碼公開,可以打開這個VI的框圖程序,就可以看到其框圖程序恰是按上述思路設(shè)計的,這時便會體會到LabSQL為LabVIEW對數(shù)據(jù)庫的訪問提供了極大的方便。SQL Fetch Data.vi的框圖程序如圖3所示。
由上圖可以看到,LabSQL的SQL Fetch Data.vi利用了循環(huán)嵌套,內(nèi)部For循環(huán)用Field(字段)數(shù)量(Filed Count.vi)來控制,外部循環(huán)用數(shù)據(jù)是否為最后一條來控制。充分利用循環(huán)的自動索引功能,將讀出數(shù)據(jù)分兩個步驟建成1D數(shù)組和2D數(shù)組,最后輸出查詢結(jié)果和數(shù)據(jù)行數(shù)。
按下查看實驗記錄按鈕就會顯示如圖4查詢數(shù)據(jù)對話框,填寫查詢的日期和檢測人的姓名,數(shù)據(jù)就會顯示在前面板的表格中而且也可以對他們進(jìn)行曲線顯示。圖5所示了部分程序框圖。
六、遠(yuǎn)程控制模塊
Web Server技術(shù)是將VI的前面板窗口以網(wǎng)頁的形式發(fā)布到互聯(lián)網(wǎng)上,將這樣的VI前面板窗口嵌入到一個網(wǎng)頁當(dāng)中,可以實現(xiàn)在網(wǎng)頁中的遠(yuǎn)程虛擬儀器。用戶可以用極為簡單的方式直接在本地的客戶端計算機(jī)上打開并操作位于遠(yuǎn)程服務(wù)器端計算機(jī)上VI面板,并在網(wǎng)頁中直接操作。具體步驟包括在Labview Web Server端的計算機(jī)上開啟Labview Web Server服務(wù)并對其以下四個方面進(jìn)行配置,并需在客戶端計算機(jī)上安裝Run-Time Engine。如圖6所示。
(1)文件路徑和網(wǎng)絡(luò)設(shè)置;(2)客戶機(jī)訪問權(quán)限設(shè)置;(3)VI訪問權(quán)限設(shè)置;(4)使用Web Publishing Tool將網(wǎng)頁發(fā)布出去。
七、結(jié)論
實踐證明,LabVIEW中利用LabSQL數(shù)據(jù)庫訪問工具包實現(xiàn)對數(shù)據(jù)庫的訪問,比其它方式操作更簡潔,更容易理解。不需精通ActiveX技術(shù)和SQL語言,充分利用了現(xiàn)有的資源,就可以對數(shù)據(jù)庫進(jìn)行實時操作。這也使得由LabVIEW組成的新一代監(jiān)測系統(tǒng)軟件在數(shù)據(jù)處理方面具備以下優(yōu)點:(1)成本低;(2)應(yīng)用范圍廣泛;(3)界面直觀;(4)軟件設(shè)計速度效率高。所以利用LabSQL訪問數(shù)據(jù)庫是值得進(jìn)一步推廣的方法。
參考文獻(xiàn):
[1]潘偉,陳貴明.虛擬儀器技術(shù)在液壓測試中的應(yīng)用[J].機(jī)床與液壓,2001,(3):123-125.
[2] National Instruments.Full-Featured E Series Multifunction DAQ.www.ni.com.2005.
[3]徐聰,湯寶平.輸油泵機(jī)組遠(yuǎn)程狀態(tài)監(jiān)測系統(tǒng)的設(shè)計與實現(xiàn)[J].重慶大學(xué)學(xué)報,2007,(7):31-33.
[4] 王洪波,王楓,張彥斌等.LabVIEW與Access數(shù)據(jù)庫訪問接口研究[J].微計算機(jī)信息,2004(6):56-57.
[5]揚樂平,李海濤,趙勇等.Labview高級程序設(shè)計[M].北京:清華大學(xué)出版社,2003.
[6]雷振山.Labview7 Express實用技術(shù)教程[M].北京:中國鐵道出版社,2004.
(作者單位:浙江理工大學(xué)經(jīng)濟(jì)管理學(xué)院)