在LabVIEW中利用ActiveX技術訪問數(shù)據(jù)庫
虛擬儀器(VI—Virtual Instrumentation)是指通過應用程序將通用計算機與功能化硬件結合起來,用戶可通過友好的圖形界面來操作這臺計算機,就像在操作自己定義、自己設計的一臺單個儀器一樣,從而完成對被測試量的采集、分析、判斷、顯示、數(shù)據(jù)存儲等。
LabVIEW是當前虛擬儀器的主要開發(fā)工具之一,它是NI(National Instruments)公司開發(fā)的一種高效的圖形化編程工具,是一個標準的數(shù)據(jù)采集和儀器控制軟件,它集開發(fā)、調試和運行于一體,目前通用的最新版本為LabVIEW7.0。LabVIEW集成了與滿足GPIB、VXI、RS-232和RS-485協(xié)議的硬件及數(shù)據(jù)采集卡通訊的全部功能。它還內置了便于應用TCP/IP、ActiveX等軟件標準的庫函數(shù)。這是一個功能強大且靈活的軟件。利用它可以方便地建立自己的虛擬測量和控制儀器,其圖形化的界面使得編程及使用過程都生動有趣。隨著LabVIEW越來越多地用于數(shù)據(jù)采集及分析、儀器和控制、測試測量及過程監(jiān)控和控制等領域,對測量數(shù)據(jù)進行存儲、分析是一個關鍵環(huán)節(jié),這其中要涉及到對測量數(shù)據(jù)的讀寫操作?,F(xiàn)有的Lab- VIEW版本中還沒有提供與通用數(shù)據(jù)庫直接接口的方法[1],這一問題可以采用以下幾種辦法解決:
1)采用其他編程語言編寫動態(tài)鏈接庫DLL訪問數(shù)據(jù)庫,并在LabVIEW中調用此DLL與數(shù)據(jù)庫進行連接;
2)利用中間文件存取數(shù)據(jù),先將數(shù)據(jù)存入文件中,在一定的時刻或者需要時再將數(shù)據(jù)導入到數(shù)據(jù)庫中。這種方法實現(xiàn)比較簡單,但是需要單獨的軟件對數(shù)據(jù)文件導入導出;
3)LabVIEW中包含了大量的ActiveX對象,其中包含了ADO(ActiveX Data Obiects)接口的各種對象,可以利用ADO的接口進行數(shù)據(jù)庫的訪問;
4)使用NI公司的SQL ToolKit for LabVIEW附加工具包與數(shù)據(jù)庫連接;[2]
第一種方法的工作量較大;第二種方法不能對數(shù)據(jù)進行實時的存?。坏谌N方法通用性和靈活性欠佳;而第四種方法該工具包需單獨購買且價格昂貴。為了解決上述這些問題,我們采用Premise Development公司的Chris Roth和Jeffrey Travis開發(fā)的免費的LabVIEW數(shù)據(jù)庫支持VI—LabSQL來完善整個系統(tǒng)的數(shù)據(jù)庫功能。它將復雜的底層 ADO及SQL操作封裝成一系列的LabsQL VIs, LabSQL的優(yōu)點是易于理解,不熟悉SQL語言的用戶也可以很容易地使用,只需進行簡單的編程,就可以在LabVIEW中實現(xiàn)數(shù)據(jù)庫訪問。利用 LabSQL幾乎可以訪問任何類型的數(shù)據(jù)庫,簡單易用。另外,Microsoft ADO控件具有遠程數(shù)據(jù)庫訪問的功能,但是LabSQL并沒有開發(fā)這一部分,要在LabVIEW中實現(xiàn)遠程數(shù)據(jù)庫的訪問,還需再結合LabVIEW中包含的ADO接口對象進行再開發(fā)。
2 訪問遠程數(shù)據(jù)庫的步驟
一般而言,對遠程數(shù)據(jù)庫的操作有以下幾步。
1)在服務器上建立網絡數(shù)據(jù)庫:
選擇一種客戶/月艮務器體系結構的數(shù)據(jù)庫軟件,分別安裝在客戶端和服務器端。
2)連接數(shù)據(jù)庫:
應用程序是通過“連接”訪問數(shù)據(jù)源,連接是交換數(shù)據(jù)所必需的環(huán)境。所以,創(chuàng)建“Connection”對象是所有數(shù)據(jù)庫操作的必需的第一步驟。
3)執(zhí)行SQL指令:
通過已經建立的連接發(fā)出的SQL指令可以用某種方式來操作數(shù)據(jù)源。Microsoft ADO的Com mand對象,Connection對象以及Recordset對象都提供有執(zhí)行SQL指令的方法,依據(jù)具體情況具體選擇對象。
4)處理結果:
檢索到的數(shù)據(jù)有需要加以處理的則通過各種需要的算法加以處理。
5)關閉連接:
執(zhí)行完任務后,必需切斷與數(shù)據(jù)庫資源的連接,釋放任何屬于連接的資源,關閉任何從屬對象,因為它使用了服務器的資源,如果不釋放的話將導致服務器資源浪費并影響服務器性能[3]。
Oracle是以高級結構化查詢語言(SQL)為基礎的大型關系數(shù)據(jù)庫,通俗地講它是用方便邏輯管理的語言操縱大量有規(guī)律數(shù)據(jù)的集合,是目前最流行的客戶/服務器(CLIENT/SERVER)體系結構的數(shù)據(jù)庫之一,也是目前技術比較領先、應用非常廣泛的一個商業(yè)數(shù)據(jù)庫產品。所以我們選擇Oracle來搭建所需的網絡數(shù)據(jù)庫。數(shù)據(jù)庫管理大部分是對數(shù)據(jù)的查詢、插入、修改和刪除等操作的綜合應用。
在運行LabVIEW程序的應用程序服務器上,假設已經安裝了Oracle客戶端,并連接數(shù)據(jù)庫服務器上的遠程數(shù)據(jù)庫成功,通過Windows控制面板中管理工具里面的“數(shù)據(jù)源(ODBC)”來創(chuàng)建 ODBC數(shù)據(jù)源,設置系統(tǒng)DSN(數(shù)據(jù)源名稱)為loginoracle,驅動程序選擇Microsoft ODBC for Oracle。設置成功后我們就可以像訪問本地數(shù)據(jù)庫一樣訪問遠程數(shù)據(jù)庫了。
3 應用實例
以下,我們就結合一個具體的應用實例說明如何在LabVIEW環(huán)境中實現(xiàn)對遠程Oracle數(shù)據(jù)庫的訪問。
我們建立了一個校園網虛擬實驗室,將我??刂葡档倪^程控制實驗室的液位過程控制實驗搬到了網站上,學生和老師在宿舍就可以遠程監(jiān)視并控制其運行狀態(tài),但是實驗裝置并不是隨時打開的,我們需要將它的歷史狀態(tài)保存在數(shù)據(jù)庫中,以便在未打開裝置的情況下通過歷史數(shù)據(jù)顯示數(shù)據(jù)采集曲線,因此我們在數(shù)據(jù)庫服務器上建了一個Wave-form表,將液位高度數(shù)據(jù)和控制器輸出電壓數(shù)據(jù)保存在其中,我們就對這個表進行相關的操作。
先簡要介紹一下本實驗裝置的工作原理。
過程控制實驗室引進英國FeedBack公司開發(fā)的PROCON(PROcess CONtroller)38系列綜合實驗裝置,它是處理過程控制問題一個完整的組合程序。它包括相關的硬件過程控制裝置,監(jiān)視器和接口設備,一個工業(yè)標準控制器,并且附帶指導手冊和軟件。在本課題中我們用LabVIEW7.0軟件取代PROCON 38系列系統(tǒng)的工業(yè)標準控制器,搭建自己的控制平臺。我們選用了一塊I/V轉換芯片RCV420,一塊V/I轉換芯片XTRll0,一塊NI公司出產的PCI-6014E系列數(shù)據(jù)采集卡和一臺微機。
PROCON38系列系統(tǒng)水箱的浮子式液位計采集到的0 - 5V電壓液位信號被過程接口(PI)轉換為一個4 - 20毫安的電流信號,我們通過一個I/V轉換電路將其還原成0—5V的電壓信號,用NI公司的PCI - 6014數(shù)據(jù)采集卡采集進來,進行控制算法的處理后再通過該數(shù)據(jù)采集卡輸出0 - 5V的電壓控制信號,接著通過一個V/I轉換電路轉換成4- 20毫安的電流信號,控制伺服閥的開閉,4毫安時閥門全閉,20毫安時閥門全開,通過控制進水量來控制水箱中的液位??刂扑惴ㄎ覀儾捎玫氖?PID控制,直接調用仿真工具箱里的PID工具包。具體程序設計如下面程序框圖2所示。
訪問數(shù)據(jù)庫信息的第一步應該是與數(shù)據(jù)庫建立連接,LabSQL中的Connection VIs就能夠實現(xiàn)這個目的,首先利用ADO Connection Create.vi創(chuàng)建一個Connection對象,然后利用ADO Connection Open.vi建立與數(shù)據(jù)庫的連接。但是ADO Connec tion Open.vi只能設置DSN,而網絡數(shù)據(jù)庫為了安全起見都設置有用戶名和密碼,所以要打開遠程數(shù)據(jù)庫不能使用LabsQL中的ADO Connection Open.vi,而要用ADO接口對象再開發(fā)。具體操作如下:
從控制模板的Application Control子模板中調用Invoke Node結點,在點右鍵彈出的菜單中選擇 Select Class,再在順次閃出的菜單里選擇ActiveX,最后選定其中的ADODB.-Connection,然后選擇其方法(Method)為Open,最終在程序框圖中顯示的圖標如圖1所示。
這樣,通過在ConnectionString中設置DSN,在UserID中設置用戶名,在Password中設置密碼,就可對一個遠程數(shù)據(jù)庫進行象本地數(shù)據(jù)庫一樣的數(shù)據(jù)操作了。
接下來是執(zhí)行SQL指令:LabSQL中的Con nection VIs里有一個ADO Connection Execute.vi,它可以執(zhí)行SQL命令,檢索數(shù)據(jù)庫以及對數(shù)據(jù)庫進行添加、更新、刪除操作,它的CommandText端子傳送的就是命令文本,通常是SQL語句,它返回的是一個記錄集(Recorderset)對象。
如果需要處理相關數(shù)據(jù),可利用sQL Fetch Data(GetString).vi獲得查詢結果,加以處理并送到前面板中的示波器或者其它儀器或表格加以顯示。本例中只介紹數(shù)據(jù)的存儲過程,所以沒有涉及此步驟。
最后,用ADO Connection Close.vi關閉與數(shù)據(jù)庫之間的連接。
整個實現(xiàn)數(shù)據(jù)采集和數(shù)據(jù)庫操作的框圖程序如圖2所示。
這只是完整程序的一部分,其它部分還包括前面板上其它主要按鈕的事件處理程序。這里就不一一列舉了。
在前面板中的ConnectionString中輸入“DSN=loginoracle”,在UserlD中輸入遠程數(shù)據(jù)庫的登錄用戶名,在Password中輸入密碼,并設為默認值,然后將它們在前面板上隱藏。
設置了各個參數(shù)后點擊“啟動”按鈕,程序的運行結果如圖3所示。
在程序運行的時候,參數(shù)設置和其它無關的按鈕都在前面板隱藏起來,停止采樣后則將示波器隱藏,然后再將參數(shù)設置及復位等其它按鈕顯示出來。前面板顯示如圖3之結果的同時,在后臺的程序中當前的兩組波形數(shù)據(jù)已經由當前本地的應用程序服務器傳遞給了數(shù)據(jù)庫服務器。
在裝置未打開時,我們可通過訪問Waveform數(shù)據(jù)表,將波形的數(shù)據(jù)取出,顯示其歷史工作狀態(tài),這樣無論實驗裝置是否打開,學生都能看到如圖3所示的裝置運行時的波形圖。
pid控制相關文章:pid控制原理
液位計相關文章:磁翻板液位計原理
評論