馮志君,張建剛
(廣西科技大學(xué) 機(jī)械學(xué)院,廣西 柳州 545006)
隨著LabVIEW 軟件越來越廣泛地應(yīng)用于測控領(lǐng)域,在LabVIEW 程序中采用數(shù)據(jù)庫技術(shù),安全、高效地管理和組織數(shù)據(jù)的需求日益突出。但是現(xiàn)有LabVIEW 版本并不具備數(shù)據(jù)庫訪問功能,采用LabVIEW 軟件編制的虛擬測試系統(tǒng),通常采用手工方法在LabVIEW 與數(shù)據(jù)庫之間創(chuàng)建連接。此方法不僅耗時費(fèi)力,且所建數(shù)據(jù)庫在位置發(fā)生改變后,程序往往不能正常運(yùn)行,即該連接不具備可移植性[1-3]。針對此問題,本文對LabVIEW 與數(shù)據(jù)庫的連接方法進(jìn)行了相關(guān)研究,并給出了重構(gòu)UDL(Universal Data Link)中的路徑信息,采用動態(tài)編輯DSN(Data Source Names),及使用ActiveX 技術(shù)等一系列方法,來實(shí)現(xiàn)其與數(shù)據(jù)庫的動態(tài)鏈接,并以Access 數(shù)據(jù)庫為例,進(jìn)行了相關(guān)說明。
由于LabVIEW 軟件不具備創(chuàng)建數(shù)據(jù)庫的功能,因此在連接前應(yīng)先借助第三方數(shù)據(jù)庫軟件,如:Access、SQL Server 等,創(chuàng)建一個數(shù)據(jù)庫作為數(shù)據(jù)源,然后再通過對LabVIEW 軟件的正確設(shè)置,即可實(shí)現(xiàn)兩者間的交互[1]。通常有以下兩種方法可以實(shí)現(xiàn)LabVIEW 與數(shù)據(jù)庫的連接:
1)通過UDL方式連接數(shù)據(jù)庫。通過UDL方式使Labview軟件與數(shù)據(jù)庫連接,其實(shí)現(xiàn)方式如下:在Labview 程序界面,首先選擇“工具→Create Data Link...”,在彈出的“數(shù)據(jù)連接屬性”對話框中選擇“Microsoft Jet 4.0 OLEDB Provider”選項(xiàng),并單擊“下一步”按鈕,在打開的“連接”選項(xiàng)卡界面,“選擇或輸入數(shù)據(jù)庫名稱”一欄中選擇數(shù)據(jù)庫文件,單擊“確定”按鈕,通過彈出的“Save Data Link as...”命名并保存文件,生成連接文件,完成與數(shù)據(jù)庫的連接功能。如:命名為“test”的數(shù)據(jù)庫連接信息文件為“test.udl”。
2)通過DSN 方式連接數(shù)據(jù)庫。首先,在Windows 控制面板下打開“性能與維護(hù)→管理工具→數(shù)據(jù)源(ODBC)”頁面,在彈出的“ODBC 數(shù)據(jù)源管理工具”對話框中選擇“系統(tǒng)DSN”或“用戶DSN”選項(xiàng)卡(系統(tǒng)DSN 選項(xiàng)卡中的數(shù)據(jù)源對該操作系統(tǒng)下的所有用戶開放;用戶DSN 選項(xiàng)卡中的數(shù)據(jù)源只有本用戶才可訪問,且只能用于本機(jī)器上),點(diǎn)擊“添加”按鈕,在彈出的對話框中選擇Access 數(shù)據(jù)庫驅(qū)動源“Microsoft Access Driver(*.mdb)”或“Drive to Microsoft Access(*.mdb)”選項(xiàng),點(diǎn)擊“完成”,在彈出的“ODBC Microsoft Access 安裝”對話框中填入數(shù)據(jù)庫名稱,如:“test”,并點(diǎn)擊“選擇”按鈕,瀏覽選擇數(shù)據(jù)庫所在路徑,如:“D: est.mdb”,點(diǎn)擊“確定”完成連接。如需進(jìn)行創(chuàng)建密碼等高級操作,可在完成前單擊“高級”選項(xiàng)卡,設(shè)置各參數(shù)。DSN 表明了數(shù)據(jù)源或數(shù)據(jù)庫名稱,完成上述設(shè)置后,在LabVIEW 中可以通過DSN 調(diào)用ODBC API 函數(shù)連接到相應(yīng)的數(shù)據(jù)庫。
通過上述方法創(chuàng)建的連接,在使用時無需編程,只需人工選擇數(shù)據(jù)源路徑以及相應(yīng)的數(shù)據(jù)庫驅(qū)動即可對所連接的數(shù)據(jù)庫進(jìn)行簡單操作[3]。但如果數(shù)據(jù)庫路徑或名稱發(fā)生改變,連接就會失效,無法實(shí)現(xiàn)Labview 與數(shù)據(jù)庫的動態(tài)鏈接。但在實(shí)際生產(chǎn)應(yīng)用當(dāng)中,數(shù)據(jù)庫的位置或名稱有時會由于需要而產(chǎn)生變化,筆者根據(jù)使用中的經(jīng)驗(yàn),給出了幾種實(shí)現(xiàn)動態(tài)鏈接的方法,以供讀者參考。
LabVIEW 采用上述UDL 方式與數(shù)據(jù)庫連接,所生成的Microsoft 數(shù)據(jù)鏈接信息保存在“*.udl”文檔中,其內(nèi)容如下:
[oledb];Everything after this line is an OLEDB initstring;
Provider=Microsoft.Jet.OLEDB.4.0;
DataSource=…*.mdb;PersistSecurityInfo=False
其中“Provider”與“DataSource”的值,分別指明了數(shù)據(jù)庫驅(qū)動程序與數(shù)據(jù)庫在硬盤中的存放位置。由于數(shù)據(jù)庫發(fā)生變化時,連接文檔中的“DataSource”項(xiàng)的值并未隨之改變?yōu)樾聰?shù)據(jù)庫的路徑,從而導(dǎo)致LabVIEW 與新數(shù)據(jù)庫的連接失敗。故可通過LabVIEW 軟件中的“拆分路徑”與“創(chuàng)建路徑”控件對連接信息中的DataSource 值拆分重構(gòu),并在“新數(shù)據(jù)庫名稱”控件中輸入新數(shù)據(jù)庫全稱,來達(dá)到動態(tài)連接數(shù)據(jù)庫的功能。
圖1 給出了利用重構(gòu)數(shù)據(jù)庫路徑信息實(shí)現(xiàn)數(shù)據(jù)庫動態(tài)鏈接的程序,及封裝后命名為“GET DB PATH”的子VI。在程序開發(fā)過程中,考慮到采用LabVIEW 軟件編制的程序在開發(fā)環(huán)境與應(yīng)用環(huán)境中存在的差異,為了使本程序在兩種環(huán)境中均可運(yùn)行,程序中通過引入了一個“App.kind”屬性節(jié)點(diǎn)控制的“條件結(jié)構(gòu)”,實(shí)現(xiàn)了對“本應(yīng)用程序”自動判斷運(yùn)行環(huán)境的功能。
圖1 重構(gòu)路徑信息實(shí)現(xiàn)可移植性的程序及子VI
值得注意的是,采用此種方法程序設(shè)計(jì)時,必須將實(shí)現(xiàn)編制后的程序封裝成一個子VI,并將其與所需連接的數(shù)據(jù)庫存放在同一文件夾內(nèi),才能實(shí)現(xiàn)動態(tài)鏈接功能。
通過ODBC 管理器所創(chuàng)建的DSN 數(shù)據(jù)庫的連接信息都保存在注冊表中,其中“系統(tǒng)DSN”信息保存在主鍵HKEY_LOCAL_MACHINESOFTWAREODBCODBC.INI下;“用戶DSN”信息保存在主鍵HKEY_CURRENT_USERSoftwareODBCODBC.INI 下。LabVIEW 與數(shù)據(jù)庫的鏈接信息就保存在主鍵下以數(shù)據(jù)庫名命名的項(xiàng)中。因此,在LabVIEW 中通過動態(tài)修改、編輯注冊表中的DSN 有效信息,可實(shí)現(xiàn)LabVIEW 程序與數(shù)據(jù)庫間的動態(tài)鏈接。其實(shí)現(xiàn)程序如圖2 所示。
圖2 利用注冊表動態(tài)編輯DSN 程序
其中“DBQ”的值指明了連接的數(shù)據(jù)庫路徑;“Driver”的值記錄了數(shù)據(jù)庫的驅(qū)動程序。在動態(tài)編輯DSN 信息時,“Driver”項(xiàng)一般使用默認(rèn)值而不需改動,所需修改的只有“DBQ”項(xiàng)的值,將其賦值為新數(shù)據(jù)庫的路徑即可。
在LabVIEW 中使用ActiveX 控件動態(tài)創(chuàng)建DSN 的程序流程如圖3 所示。
圖3 LabVIEW 中使用ActiveX 控件的程序流程
其具體實(shí)現(xiàn)步驟如下:
1)打開自動化參數(shù)號。在LabVIEW 函數(shù)面板上的“互鏈接口→Active X”選項(xiàng)下,選擇“打開自動化”函數(shù)控件,在控件左上側(cè)的“自動化引用句柄”接線端處創(chuàng)建“ODBC Tool._Dsn”類型常量(右鍵單擊“打開自動化”控件,單擊“選擇Active X 類”,瀏覽添加“ODBC Driver &Data Source Name Functions Version 2.0”類型庫,并選擇“Dsn(ODBC Tool.Dsn)”類。
2)設(shè)置/獲取屬性和調(diào)用方法。將“打開自動化”函數(shù)控件右上側(cè)的“自動化引用句柄”與“調(diào)用節(jié)點(diǎn)”函數(shù)控件的“引用”端口相連,并點(diǎn)擊“調(diào)用節(jié)點(diǎn)”控件,創(chuàng)建“ODBC Tool._DSN”類的“Creat DSN”方法節(jié)點(diǎn),通過“Creat DSN”節(jié)點(diǎn),動態(tài)創(chuàng)建DSN。其中,“Creat DSN”方法節(jié)點(diǎn)參數(shù)設(shè)置如圖4 所示。
圖4 使用ActiveX 動態(tài)創(chuàng)建DSN
采用UDL 方式連接數(shù)據(jù)庫是基于Microsoft 提供的ADO 技術(shù)進(jìn)行的,故可通過LabVIEW 中的ActiveX 動態(tài)創(chuàng)建ADO 連接數(shù)據(jù)庫,其操作過程與上述動態(tài)創(chuàng)建DSN相似,其不同之處在于:
1)打開自動化參數(shù)號時對類型庫的選擇。采用ActiveX 自動化技術(shù)動態(tài)創(chuàng)建ADO 時,選擇的ActiveX類是“Microsoft ActiveX Data Objects 2.7 Library Version 2.7”類型庫中的“Connection(ADOB.Connection.2.8)”類,在控件左上側(cè)的“自動化引用句柄”接線端處創(chuàng)建的為“ADODB._Connection”類型常量。
2)設(shè)置/獲取屬性和調(diào)用方法。動態(tài)創(chuàng)建ADO 是在程序框圖功能模板中選擇的“互鏈接口>>Active X 子模板>>調(diào)用屬性節(jié)點(diǎn)”控件,并將其“引用”接口與“打開自動化”圖標(biāo)輸出端“自動化引用句柄”接口相連,選擇其中的“Open”選項(xiàng),以打開Connection 對象,如圖5。其中“Connection String”是連接到數(shù)據(jù)源的字符串,包含驅(qū)動程序和數(shù)據(jù)庫路徑兩部分,驅(qū)動程序?yàn)椤癕icrosoft.Jet.OLEDB.4.0”,數(shù)據(jù)庫路徑則是通過前面板上的“路徑”選擇控件選擇所要連接的數(shù)據(jù)庫設(shè)置完成;“User ID”和“Pass Word”是連接到數(shù)據(jù)源的用戶名和密碼,正確設(shè)置這些參數(shù)后便可實(shí)現(xiàn)與數(shù)據(jù)庫的動態(tài)鏈接。
圖5 使用ActiveX 動態(tài)創(chuàng)建ADO
通過UDL 或DSN 方式均可實(shí)現(xiàn)LabVIEW 軟件與數(shù)據(jù)庫的連接,但數(shù)據(jù)庫路徑或名稱發(fā)生改變時,這種連接就會失效。通過重構(gòu)UDL 中的文件存放路徑信息,或利用注冊表動態(tài)編輯DSN,或使用ActiveX 自動化技術(shù)動態(tài)創(chuàng)建DSN 或動態(tài)創(chuàng)建ADO,切實(shí)解決LabVIEW 程序與數(shù)據(jù)庫的動態(tài)鏈接問題,以充分利用數(shù)據(jù)庫的優(yōu)勢,方便高效地管理測試數(shù)據(jù),提高測試系統(tǒng)的智能化程度。
[1]吉順祥,劉旺鎖,宋曉婷.基于LabVIEW 的數(shù)據(jù)庫訪問技術(shù)[J].航海工程,2007,36(3):125-128.
[2]姚桂艷,常英麗.LabVIEW 與數(shù)據(jù)庫的鏈接方法[J].現(xiàn)代電子技術(shù),2007,30(16):16-17.
[3]林靜,林振宇,鄭福仁.LabVIEW 虛擬程序設(shè)計(jì)從入門到精通[M].北京:中國郵電出版社,2010.
[4]雷振山,魏麗,趙晨光,等.LabVIEW 高級編程與虛擬儀器工程應(yīng)用[M].北京中國鐵道出版社,2009.
[5]聶波波,萎樂華.LabVlEW 中動態(tài)配置ODBC 數(shù)據(jù)源的實(shí)現(xiàn)[J].科技資訊,2007,25(3):6-7.
[6]高國華,張永忠.在LabVIEW 中利用ActiveX 技術(shù)訪問數(shù)據(jù)庫[J].國外電子測量技術(shù),2004,2(23):15-16,22.