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