馮志君,張建剛
(廣西科技大學 機械學院,廣西 柳州 545006)
隨著LabVIEW 軟件越來越廣泛地應用于測控領域,在LabVIEW 程序中采用數據庫技術,安全、高效地管理和組織數據的需求日益突出。但是現有LabVIEW 版本并不具備數據庫訪問功能,采用LabVIEW 軟件編制的虛擬測試系統,通常采用手工方法在LabVIEW 與數據庫之間創建連接。此方法不僅耗時費力,且所建數據庫在位置發生改變后,程序往往不能正常運行,即該連接不具備可移植性[1-3]。針對此問題,本文對LabVIEW 與數據庫的連接方法進行了相關研究,并給出了重構UDL(Universal Data Link)中的路徑信息,采用動態編輯DSN(Data Source Names),及使用ActiveX 技術等一系列方法,來實現其與數據庫的動態鏈接,并以Access 數據庫為例,進行了相關說明。
由于LabVIEW 軟件不具備創建數據庫的功能,因此在連接前應先借助第三方數據庫軟件,如:Access、SQL Server 等,創建一個數據庫作為數據源,然后再通過對LabVIEW 軟件的正確設置,即可實現兩者間的交互[1]。通常有以下兩種方法可以實現LabVIEW 與數據庫的連接:
1)通過UDL方式連接數據庫。通過UDL方式使Labview軟件與數據庫連接,其實現方式如下:在Labview 程序界面,首先選擇“工具→Create Data Link...”,在彈出的“數據連接屬性”對話框中選擇“Microsoft Jet 4.0 OLEDB Provider”選項,并單擊“下一步”按鈕,在打開的“連接”選項卡界面,“選擇或輸入數據庫名稱”一欄中選擇數據庫文件,單擊“確定”按鈕,通過彈出的“Save Data Link as...”命名并保存文件,生成連接文件,完成與數據庫的連接功能。如:命名為“test”的數據庫連接信息文件為“test.udl”。
2)通過DSN 方式連接數據庫。首先,在Windows 控制面板下打開“性能與維護→管理工具→數據源(ODBC)”頁面,在彈出的“ODBC 數據源管理工具”對話框中選擇“系統DSN”或“用戶DSN”選項卡(系統DSN 選項卡中的數據源對該操作系統下的所有用戶開放;用戶DSN 選項卡中的數據源只有本用戶才可訪問,且只能用于本機器上),點擊“添加”按鈕,在彈出的對話框中選擇Access 數據庫驅動源“Microsoft Access Driver(*.mdb)”或“Drive to Microsoft Access(*.mdb)”選項,點擊“完成”,在彈出的“ODBC Microsoft Access 安裝”對話框中填入數據庫名稱,如:“test”,并點擊“選擇”按鈕,瀏覽選擇數據庫所在路徑,如:“D: est.mdb”,點擊“確定”完成連接。如需進行創建密碼等高級操作,可在完成前單擊“高級”選項卡,設置各參數。DSN 表明了數據源或數據庫名稱,完成上述設置后,在LabVIEW 中可以通過DSN 調用ODBC API 函數連接到相應的數據庫。
通過上述方法創建的連接,在使用時無需編程,只需人工選擇數據源路徑以及相應的數據庫驅動即可對所連接的數據庫進行簡單操作[3]。但如果數據庫路徑或名稱發生改變,連接就會失效,無法實現Labview 與數據庫的動態鏈接。但在實際生產應用當中,數據庫的位置或名稱有時會由于需要而產生變化,筆者根據使用中的經驗,給出了幾種實現動態鏈接的方法,以供讀者參考。
LabVIEW 采用上述UDL 方式與數據庫連接,所生成的Microsoft 數據鏈接信息保存在“*.udl”文檔中,其內容如下:
[oledb];Everything after this line is an OLEDB initstring;
Provider=Microsoft.Jet.OLEDB.4.0;
DataSource=…*.mdb;PersistSecurityInfo=False
其中“Provider”與“DataSource”的值,分別指明了數據庫驅動程序與數據庫在硬盤中的存放位置。由于數據庫發生變化時,連接文檔中的“DataSource”項的值并未隨之改變為新數據庫的路徑,從而導致LabVIEW 與新數據庫的連接失敗。故可通過LabVIEW 軟件中的“拆分路徑”與“創建路徑”控件對連接信息中的DataSource 值拆分重構,并在“新數據庫名稱”控件中輸入新數據庫全稱,來達到動態連接數據庫的功能。
圖1 給出了利用重構數據庫路徑信息實現數據庫動態鏈接的程序,及封裝后命名為“GET DB PATH”的子VI。在程序開發過程中,考慮到采用LabVIEW 軟件編制的程序在開發環境與應用環境中存在的差異,為了使本程序在兩種環境中均可運行,程序中通過引入了一個“App.kind”屬性節點控制的“條件結構”,實現了對“本應用程序”自動判斷運行環境的功能。

圖1 重構路徑信息實現可移植性的程序及子VI
值得注意的是,采用此種方法程序設計時,必須將實現編制后的程序封裝成一個子VI,并將其與所需連接的數據庫存放在同一文件夾內,才能實現動態鏈接功能。
通過ODBC 管理器所創建的DSN 數據庫的連接信息都保存在注冊表中,其中“系統DSN”信息保存在主鍵HKEY_LOCAL_MACHINESOFTWAREODBCODBC.INI下;“用戶DSN”信息保存在主鍵HKEY_CURRENT_USERSoftwareODBCODBC.INI 下。LabVIEW 與數據庫的鏈接信息就保存在主鍵下以數據庫名命名的項中。因此,在LabVIEW 中通過動態修改、編輯注冊表中的DSN 有效信息,可實現LabVIEW 程序與數據庫間的動態鏈接。其實現程序如圖2 所示。

圖2 利用注冊表動態編輯DSN 程序
其中“DBQ”的值指明了連接的數據庫路徑;“Driver”的值記錄了數據庫的驅動程序。在動態編輯DSN 信息時,“Driver”項一般使用默認值而不需改動,所需修改的只有“DBQ”項的值,將其賦值為新數據庫的路徑即可。
在LabVIEW 中使用ActiveX 控件動態創建DSN 的程序流程如圖3 所示。

圖3 LabVIEW 中使用ActiveX 控件的程序流程
其具體實現步驟如下:
1)打開自動化參數號。在LabVIEW 函數面板上的“互鏈接口→Active X”選項下,選擇“打開自動化”函數控件,在控件左上側的“自動化引用句柄”接線端處創建“ODBC Tool._Dsn”類型常量(右鍵單擊“打開自動化”控件,單擊“選擇Active X 類”,瀏覽添加“ODBC Driver &Data Source Name Functions Version 2.0”類型庫,并選擇“Dsn(ODBC Tool.Dsn)”類。
2)設置/獲取屬性和調用方法。將“打開自動化”函數控件右上側的“自動化引用句柄”與“調用節點”函數控件的“引用”端口相連,并點擊“調用節點”控件,創建“ODBC Tool._DSN”類的“Creat DSN”方法節點,通過“Creat DSN”節點,動態創建DSN。其中,“Creat DSN”方法節點參數設置如圖4 所示。

圖4 使用ActiveX 動態創建DSN
采用UDL 方式連接數據庫是基于Microsoft 提供的ADO 技術進行的,故可通過LabVIEW 中的ActiveX 動態創建ADO 連接數據庫,其操作過程與上述動態創建DSN相似,其不同之處在于:
1)打開自動化參數號時對類型庫的選擇。采用ActiveX 自動化技術動態創建ADO 時,選擇的ActiveX類是“Microsoft ActiveX Data Objects 2.7 Library Version 2.7”類型庫中的“Connection(ADOB.Connection.2.8)”類,在控件左上側的“自動化引用句柄”接線端處創建的為“ADODB._Connection”類型常量。
2)設置/獲取屬性和調用方法。動態創建ADO 是在程序框圖功能模板中選擇的“互鏈接口>>Active X 子模板>>調用屬性節點”控件,并將其“引用”接口與“打開自動化”圖標輸出端“自動化引用句柄”接口相連,選擇其中的“Open”選項,以打開Connection 對象,如圖5。其中“Connection String”是連接到數據源的字符串,包含驅動程序和數據庫路徑兩部分,驅動程序為“Microsoft.Jet.OLEDB.4.0”,數據庫路徑則是通過前面板上的“路徑”選擇控件選擇所要連接的數據庫設置完成;“User ID”和“Pass Word”是連接到數據源的用戶名和密碼,正確設置這些參數后便可實現與數據庫的動態鏈接。

圖5 使用ActiveX 動態創建ADO
通過UDL 或DSN 方式均可實現LabVIEW 軟件與數據庫的連接,但數據庫路徑或名稱發生改變時,這種連接就會失效。通過重構UDL 中的文件存放路徑信息,或利用注冊表動態編輯DSN,或使用ActiveX 自動化技術動態創建DSN 或動態創建ADO,切實解決LabVIEW 程序與數據庫的動態鏈接問題,以充分利用數據庫的優勢,方便高效地管理測試數據,提高測試系統的智能化程度。
[1]吉順祥,劉旺鎖,宋曉婷.基于LabVIEW 的數據庫訪問技術[J].航海工程,2007,36(3):125-128.
[2]姚桂艷,常英麗.LabVIEW 與數據庫的鏈接方法[J].現代電子技術,2007,30(16):16-17.
[3]林靜,林振宇,鄭福仁.LabVIEW 虛擬程序設計從入門到精通[M].北京:中國郵電出版社,2010.
[4]雷振山,魏麗,趙晨光,等.LabVIEW 高級編程與虛擬儀器工程應用[M].北京中國鐵道出版社,2009.
[5]聶波波,萎樂華.LabVlEW 中動態配置ODBC 數據源的實現[J].科技資訊,2007,25(3):6-7.
[6]高國華,張永忠.在LabVIEW 中利用ActiveX 技術訪問數據庫[J].國外電子測量技術,2004,2(23):15-16,22.