江務(wù)學(xué) 王志明
摘要:為提高虛擬實(shí)驗(yàn)室設(shè)計(jì)中的遠(yuǎn)程數(shù)據(jù)庫訪問的有效性,分析了LabView訪問遠(yuǎn)程數(shù)據(jù)庫方法的特點(diǎn)和不足,提出了Lab SQL工具包和ADO技術(shù)的集成應(yīng)用策略。結(jié)合一個(gè)網(wǎng)絡(luò)虛擬實(shí)驗(yàn)室的應(yīng)用開發(fā),給出了基于LabSQL的數(shù)據(jù)庫訪問步驟和虛擬實(shí)驗(yàn)室的設(shè)計(jì)過程。該策略及設(shè)計(jì)具有較高的實(shí)用價(jià)值。
關(guān)鍵詞: 虛擬儀器; LabVIEW; 遠(yuǎn)程數(shù)據(jù)庫; LabSQL; ADO
中圖分類號(hào):TP391文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2012)05-32-03
Research on strategy and application of access to remote database based on LabVIEW
Jiang Wuxue, Wang Zhiming
(Dongguan Polytechnic, Dongguan, Guangdong 523808, China)
Abstract: To improve the effective of access to remote database in the design of virtual laboratory, this paper analyzes the characteristics and insufficiency of access to remote database method based on LabView, presents the integrated application strategy of the LabSQL toolkits and ADO. Combined with a virtual laboratory application development, based on LabSQL database access steps and virtual laboratory design process is given, and has great practical value.
Key words: virtual instruments; LabVIEW; remotedatabase; LabSQL; ADO
0 引言
虛擬儀器(VI-Virtual Instrument)是指通過應(yīng)用程序?qū)⑼ㄓ糜?jì)算機(jī)與功能化硬件結(jié)合起來的計(jì)算機(jī)系統(tǒng),用戶可通過友好的圖形界面來操作這臺(tái)計(jì)算機(jī),就像在操作自己定義、自己設(shè)計(jì)的一臺(tái)單個(gè)儀器一樣。
LabVIEW是當(dāng)前虛擬儀器的主要開發(fā)工具之一,是由NI(National Instruments)公司開發(fā)的一種高效的圖形化編程工具, 是一個(gè)集開發(fā)、調(diào)試和運(yùn)行于一體的數(shù)據(jù)采集和儀器控制軟件,目前通用的最新版本為LabVIEW2011。LabVIEW集成了與滿足GPIB、VXI、RS-232和RS-485協(xié)議的硬件及數(shù)據(jù)采集卡通訊的全部功能,還內(nèi)置了便于應(yīng)用TCP/IP、ActiveX等軟件標(biāo)準(zhǔn)的庫函數(shù),是一個(gè)功能強(qiáng)大且靈活的軟件。通過LabVIEW可以方便地建立適應(yīng)個(gè)性化需求的虛擬測(cè)量和控制儀器,其圖形化的界面使得編程及使用過程形象而生動(dòng)。目前,LabVIEW在數(shù)據(jù)采集及分析、儀器和控制、測(cè)試測(cè)量及過程監(jiān)控和控制等領(lǐng)域中的應(yīng)用越來越廣泛。其中,數(shù)據(jù)的存儲(chǔ)、分析所涉及到的數(shù)據(jù)庫讀寫操作是一個(gè)重要環(huán)節(jié),現(xiàn)有的LabVIEW版本中還沒有提供與通用數(shù)據(jù)庫直接接口的方法[1]。這一問題一般會(huì)考慮采用以下幾種方法解決。
⑴ 采用其他編程語言編寫動(dòng)態(tài)鏈接庫DLL訪問數(shù)據(jù)庫,并在LabVIEW中調(diào)用此DLL與數(shù)據(jù)庫連接。
⑵ 利用中間文件存取數(shù)據(jù),先將數(shù)據(jù)存入文件中,在一定的時(shí)刻或者需要時(shí)再將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中。這種方法實(shí)現(xiàn)比較簡單,但是需要單獨(dú)的軟件對(duì)數(shù)據(jù)文件導(dǎo)入導(dǎo)出。
⑶ LabVIEW中包含了大量的ActiveX對(duì)象,包括ADO(ActiveX Data Objects)接口的各種對(duì)象,可以利用ADO的接口進(jìn)行數(shù)據(jù)庫的訪問。
⑷ 使用NI公司的SQL ToolKit for LabVIEW附加工具包與數(shù)據(jù)庫連接[2]。
這些方法中,第一種方法的工作量較大,第二種方法不能對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)的存取,第三種方法通用性和靈活性欠佳,而第四種方法需單獨(dú)購買該工具包,價(jià)格昂貴,成本過高。針對(duì)上述四種方法的不足,本文采用Premise Development公司的Chris Roth和Jeffrey Travis開發(fā)的免費(fèi)LabVIEW數(shù)據(jù)庫支持工具VI—LabSQL來完善整個(gè)系統(tǒng)的數(shù)據(jù)庫功能,將復(fù)雜的底層ADO及SQL操作封裝成一系列的LabSQL VIs。LabSQL的優(yōu)點(diǎn)是易于理解,使用簡單,只需進(jìn)行簡單的編程,就可以在LabVIEW中實(shí)現(xiàn)數(shù)據(jù)庫訪問。利用LabSQL幾乎可以訪問任何類型的數(shù)據(jù)庫且易于實(shí)現(xiàn)。
1 基于LabSQL的遠(yuǎn)程數(shù)據(jù)庫訪問的步驟
一般而言,對(duì)遠(yuǎn)程數(shù)據(jù)庫的操作有以下幾步。
⑴ 在服務(wù)器上建立網(wǎng)絡(luò)數(shù)據(jù)庫
選擇一種客戶/服務(wù)器體系結(jié)構(gòu)的數(shù)據(jù)庫軟件,分別安裝在客戶端和服務(wù)器端。
⑵ 連接數(shù)據(jù)庫
應(yīng)用程序是通過“連接”訪問數(shù)據(jù)源的,連接是交換數(shù)據(jù)所必需的環(huán)境。所以,創(chuàng)建“Connection”對(duì)象是所有數(shù)據(jù)庫操作的必需的一個(gè)步驟。
⑶ 執(zhí)行SQL指令
通過已經(jīng)建立的連接發(fā)出的SQL指令可以用某種方式來操作數(shù)據(jù)源。Microsoft ADO的Command對(duì)象,Connection對(duì)象以及Recordset對(duì)象都提供有執(zhí)行SQL指令的方法,可依據(jù)具體情況具體選擇對(duì)象。
⑷ 處理結(jié)果
檢索到的數(shù)據(jù)通過各種需要的算法加以處理。
⑸ 關(guān)閉連接
執(zhí)行完任務(wù)后,必須切斷與數(shù)據(jù)庫資源的連接,釋放任何屬于連接的資源,關(guān)閉任何從屬對(duì)象。否則將導(dǎo)致服務(wù)器資源浪費(fèi)并影響服務(wù)器性能[3]。
Oracle?是以高級(jí)結(jié)構(gòu)化查詢語言(SQL)為基礎(chǔ)的大型關(guān)系數(shù)據(jù)庫,是目前最流行的客戶/服務(wù)器(CLIENT/SERVER)體系結(jié)構(gòu)的數(shù)據(jù)庫之一,也是目前技術(shù)比較領(lǐng)先、應(yīng)用非常廣泛的一個(gè)商業(yè)數(shù)據(jù)庫產(chǎn)品。?所以我們選擇Oracle來搭建所需的網(wǎng)絡(luò)數(shù)據(jù)庫。
在運(yùn)行LabVIEW程序的應(yīng)用程序服務(wù)器上,設(shè)已經(jīng)安裝了Oracle客戶端,已連接到數(shù)據(jù)庫服務(wù)器上的遠(yuǎn)程數(shù)據(jù)庫,通過Windows控制面板中管理工具里面的“數(shù)據(jù)源 (ODBC)”來創(chuàng)建ODBC數(shù)據(jù)源,設(shè)置系統(tǒng)DSN(數(shù)據(jù)源名稱)為loginoracle,驅(qū)動(dòng)程序選擇Microsoft ODBC for Oracle,設(shè)置成功后客戶端就可以像訪問本地?cái)?shù)據(jù)庫一樣訪問遠(yuǎn)程數(shù)據(jù)庫了[4]。
2 基于LabSQL虛擬實(shí)驗(yàn)室的應(yīng)用開發(fā)
我們建立了一個(gè)校園網(wǎng)虛擬實(shí)驗(yàn)室,將過程控制實(shí)驗(yàn)室的液位過程控制實(shí)驗(yàn)搬到了網(wǎng)站上,學(xué)習(xí)者可以遠(yuǎn)程監(jiān)視并控制其運(yùn)行狀態(tài),進(jìn)行不受時(shí)空限制的個(gè)性化學(xué)習(xí)。但是實(shí)驗(yàn)裝置并不是隨時(shí)打開的,我們需要將它的歷史狀態(tài)保存在數(shù)據(jù)庫中,以便在未打開裝置的情況下通過歷史數(shù)據(jù)顯示數(shù)據(jù)采集曲線,因此在數(shù)據(jù)庫服務(wù)器上建了一個(gè)Waveform表,將液位高度數(shù)據(jù)和控制器輸出電壓數(shù)據(jù)保存在其中,就可對(duì)這個(gè)表進(jìn)行相關(guān)的操作。
2.1 本實(shí)驗(yàn)裝置的工作原理
過程控制實(shí)驗(yàn)室引進(jìn)英國FeedBack公司開發(fā)的PROCON(PROcess CONtroller)38系列綜合實(shí)驗(yàn)裝置,它是處理過程控制問題一個(gè)完整的組合裝置,包括相關(guān)的硬件過程控制裝置,監(jiān)視器和接口設(shè)備,一個(gè)工業(yè)標(biāo)準(zhǔn)控制器,并且附帶指導(dǎo)手冊(cè)和軟件。我們用LabVIEW2011軟件取代PROCON 38系列系統(tǒng)的工業(yè)標(biāo)準(zhǔn)控制器,搭建自己的控制平臺(tái)。選用的芯片和設(shè)備分別是:一塊I/V轉(zhuǎn)換芯片RCV420,一塊V/I轉(zhuǎn)換芯片XTR110,一塊NI公司出產(chǎn)的PCI-6014E系列數(shù)據(jù)采集卡和一臺(tái)微機(jī)。
PROCON38系列系統(tǒng)水箱的浮子式液位計(jì)采集到的0-5V電壓液位信號(hào)被過程接口(PI)轉(zhuǎn)換為一個(gè)4-20毫安的電流信號(hào),通過一個(gè)I/V轉(zhuǎn)換電路將其還原成0-5V的電壓信號(hào),用NI公司的PCI-6014數(shù)據(jù)采集卡采集電壓信號(hào),經(jīng)控制算法的處理后再通過該數(shù)據(jù)采集卡輸出0-5V的電壓控制信號(hào),接著通過一個(gè)V/I轉(zhuǎn)換電路轉(zhuǎn)換成4-20毫安的電流信號(hào),控制伺服閥的開閉、4毫安時(shí)閥門全閉、20毫安時(shí)閥門全開,通過控制進(jìn)水量來控制水箱中的液位。文中采用PID控制實(shí)現(xiàn)控制算法,直接調(diào)用仿真工具箱里的PID工具包[5]。程序框圖如圖1所示。
圖1液位過程控制實(shí)驗(yàn)程序框圖
2.2 虛擬實(shí)驗(yàn)室的的開發(fā)過程
訪問數(shù)據(jù)庫信息的第一步是與數(shù)據(jù)庫建立連接,LabSQL中的Connection VIs就能夠?qū)崿F(xiàn)這個(gè)目的.首先利用ADO Connection Create.vi創(chuàng)建一個(gè)Connection對(duì)象,然后利用ADO Connection Open.vi建立與數(shù)據(jù)庫的連接。但是ADO Connection Open.vi只能設(shè)置DSN,而網(wǎng)絡(luò)數(shù)據(jù)庫為了安全起見都設(shè)置有用戶名和密碼,所以要打開遠(yuǎn)程數(shù)據(jù)庫不能使用LabSQL中的ADO Connection Open.vi,而要用ADO接口對(duì)象進(jìn)行再開發(fā)。具體過程如下:
從控制模板的Application Control子模板中調(diào)用Invoke Node結(jié)點(diǎn),在點(diǎn)右鍵彈出的菜單中選擇Select Class,再在順次閃出的菜單里選擇ActiveX,最后選定其中的ADODB._Connection,然后選擇其方法(Method)為Open,最終在程序框圖中顯示的圖標(biāo)如圖2所示。
圖2打開數(shù)據(jù)庫連接的Invoke Node結(jié)點(diǎn)
這樣,通過在ConnectionString中設(shè)置DSN,在UserID中設(shè)置用戶名,在Password中設(shè)置密碼,就可對(duì)一個(gè)遠(yuǎn)程數(shù)據(jù)庫進(jìn)行象本地?cái)?shù)據(jù)庫一樣的數(shù)據(jù)操作了。
接下來是執(zhí)行SQL指令LabSQL中的Connection VIs里有一個(gè)ADO Connection Execute.vi,它可以執(zhí)行SQL命令,檢索數(shù)據(jù)庫以及對(duì)數(shù)據(jù)庫進(jìn)行添加、更新、刪除操作,它的CommandText端子傳送的就是命令文本,通常是SQL語句,它返回的是一個(gè)記錄集(Recorderset)對(duì)象。
如果需要處理相關(guān)數(shù)據(jù),可利用SQL Fetch Data(GetString).vi獲得查詢結(jié)果,處理后送到前面板中的示波器或者其它儀器或表格加以顯示。本文只介紹數(shù)據(jù)的存儲(chǔ)過程,所以沒有涉及此步驟[6]。
最后,用ADO Connection Close.vi關(guān)閉與數(shù)據(jù)庫之間的連接。
在前面板中的ConnectionString中輸入“DSN=loginoracle”,在UserID中輸入遠(yuǎn)程數(shù)據(jù)庫的登錄用戶名,在Password中輸入密碼,并設(shè)為默認(rèn)值,然后將它們?cè)谇懊姘迳想[藏。設(shè)置了各個(gè)參數(shù)后就可點(diǎn)擊程序“啟動(dòng)”按鈕。液位過程控制實(shí)驗(yàn)程序的運(yùn)行結(jié)果如圖3所示。
圖3液位過程控制實(shí)驗(yàn)程序運(yùn)行結(jié)果
在程序運(yùn)行的時(shí)候,參數(shù)設(shè)置和其他無關(guān)的按鈕都在前面板隱藏起來,停止采樣后則將示波器隱藏,然后再將參數(shù)設(shè)置及復(fù)位等其他按鈕顯示出來。前面板顯示如圖3.3之結(jié)果的同時(shí),在后臺(tái)的程序中當(dāng)前的兩組波形數(shù)據(jù)已經(jīng)由當(dāng)前本地的應(yīng)用程序服務(wù)器傳遞給了數(shù)據(jù)庫服務(wù)器。
在裝置未打開時(shí),我們可通過訪問Waveform數(shù)據(jù)表,將波形的數(shù)據(jù)取出,顯示其歷史工作狀態(tài),這樣無論實(shí)驗(yàn)裝置是否打開,學(xué)習(xí)者都能看到如圖3所示的裝置運(yùn)行時(shí)的波形圖。
3 結(jié)束語
在LabVIEW環(huán)境下,利用LabSQL工具包實(shí)現(xiàn)數(shù)據(jù)庫的管理,在很大程度上減輕了編程的工作量,這是一種很有效的遠(yuǎn)程數(shù)據(jù)庫訪問的方法。再結(jié)合LabVIEW中的ADO接口對(duì)象,就能夠?qū)崿F(xiàn)對(duì)Oracle網(wǎng)絡(luò)數(shù)據(jù)庫的各種操作。實(shí)踐證明,該實(shí)驗(yàn)室不僅實(shí)現(xiàn)了所需功能,而且在速度、穩(wěn)定和效率上均具有良好的性能。
參考文獻(xiàn):
[1] 楊樂平,李海濤,趙勇等.LabVIEW高級(jí)程序設(shè)計(jì)[M].北京清華大學(xué)出
版社,2003.
[2] 李建文,劉篤喜,朱名銓.基于ADO技術(shù)的LabVIEW訪問數(shù)據(jù)庫的方
法[J].自動(dòng)化儀表,2003.24(9):15~17
[3] Chen X Z,Chen C,Qi H. Design of a kind of single neuron PID
adaptive controller based on expert[C]/ / Proceedings of the 7th International Conference on Electronic Measurement & Instruments. Beijing: International Academic Publishers,2005:216~220
[4] 齊虹,周文濱,陳沖等.利用LabVIEW實(shí)現(xiàn)的虛擬網(wǎng)絡(luò)實(shí)驗(yàn)室及其虛
擬實(shí)驗(yàn)[J].福州大學(xué)學(xué)報(bào)(自然科學(xué)版),2010.38(2):237~250
[5] 楊靜. 基于LabVIEW的電工電子網(wǎng)絡(luò)虛擬實(shí)驗(yàn)室研究與開發(fā)[J].實(shí)
驗(yàn)室研究與探索,2011.30(2):74~77
[6] 江務(wù)學(xué).基于LabVIEW 的校園網(wǎng)虛擬實(shí)驗(yàn)室的開發(fā)[J].浙江萬里學(xué)
院學(xué)報(bào),2005.18(4):51~54