李 暉
(中國航天科技集團公司第四研究院第四十一研究所,燃燒、流動和熱結構國家級重點實驗室,西安710025)
LabWindows/CVI是美國NI公司(National Instruments Corporation)推出的一款功能強大的交互式C語言軟件開發平臺,主要用于儀器控制、自動測試、數據處理等應用軟件開發。LabWindows/CVI的優勢在于完全建立在ANSI C基礎之上,實現了功能強大、使用靈活的C語言平臺與用于數據采集、分析與顯示的測控專業工具的有機結合,其特有的交互式編程方法及豐富的功能面板和函數庫可以很方便地設計出非常友好的測控操作界面[1-2]。尤其是大型、復雜的測試軟件,使用LabWindows/CVI開發可以獲得優良的測試性能[3]。
CVI作為側重于測控軟件開發平臺,不可避免地要和數據庫打交道,然而它自身卻始終沒有通過標準函數庫提供數據庫的操作函數,也沒有在工具包中提供能夠訪問數據庫的驅動器,也就是說CVI本身不具備訪問數據庫的功能。這也是CVI相對Visual C++、VB、Delphi等開發環境的一個弱項。雖然NI公司提供了獨立于CVI 開發平臺以外的專門用于和數據庫打交道的軟件工具包SQL Toolkit,但是價格較為昂貴。
針對CVI較為薄弱的數據庫訪問功能,給出了到目前為止能夠實現在CVI中訪問外部數據庫的方法,詳細闡述了 ADO、SQL Toolkit以及 DatabaseAssistant這三種方法在CVI環境下訪問數據庫的具體途徑,并通過實驗對三種方法的數據庫訪問性能進行了比較。
Microsoft開發了一系列基于Windows平臺的數據庫訪問技術。OLE DB是其早期開發的一套開放標準,它基于COM(Component Object Model,組件對象模型)結構,對所有的數據文件提供了一個統一的接口,包括關系數據庫、非關系數據庫和其他文件系統,是Microsoft針對所有數據庫提供的底層接口。
后來Microsoft又在OLE DB基礎上開發了面向對象的數據庫訪問技術ADO(ActiveX Data Objects,ActiveX數據對象)。ADO是完全建立在OLE DB模型之上的高層數據庫訪問技術,它簡化了OLE DB的操作,定義了ADO對象,使得數據庫應用程序的開發得到簡化[4]。ADO技術最大的特點是可以以Microsoft ActiveX控件的形式出現,使得它可以應用在多種軟件開發環境中,LabWindows/CVI 6.0之后的版本提供了對ActiveX自動化和網絡的支持,使得在CVI環境下應用ADO技術開發數據庫成為可能。
在CVI中利用ADO技術訪問數據庫,首先要生成ActiveX自動化儀器驅動器,具體方法是:在主窗口的菜單欄中選擇“Tools”→“Create ActiveX Controller…”,LabWindows/CVI會自動搜索注冊在操作系統中的所有自動化服務器,搜索完成后彈出列表框會顯示所有 ActiveX自動化服務器,選擇“Microsoft ActiveX Data Objects 2.8 Libra”后,點擊“Next”,按照開發向導提示進行操作完成即可。完成后會在當前項目目錄下生成五個文件:“ADODB.c”、“ADODB.h”、“ADODB.fp”、“ADODB.obj”、“ADODB.sub”,這五個文件就組成了CVI下ADO驅動程序。
以最一般的訪問一次數據庫為例,比如在Microsoft Acess數據庫中插入一條記錄,則利用ADO訪問數據庫程序流程如圖1所示。
NI SQL Toolkit(簡稱Toolkit)是NI公司提供的獨立于CVI開發平臺以外的專門用來和數據庫打交道的軟件工具包,它遵從ODBC規范的數據庫技術,其實也是提供了一族訪問數據庫的API供用戶調用。Toolkit有如下特點:第一,其安裝完成后以CVI中的儀器驅動器的形式出現,提供了.fp、.lib、.dll、.h等文件,每個函數都有完善的函數面板并提供了詳細的函數說明,用戶調用很方便;第二,函數封裝比較好,減少了很多比較晦澀難懂的函數,并給出了數據庫訪問時函數調用層次圖,一目了然;第三,Toolkit不但可以訪問ODBC數據源,也可以訪問任何遵從ADO標準的數據源,不過如果沒有特殊說明,SQL Toolkit默認為ODBC數據源。

圖1 ADO訪問數據庫程序流程圖
在CVI中利用Toolkit訪問數據庫較為簡單,只要將相應的.fp、.lib、.dll、.h等文件拷貝到工程目錄下,再將.fp、.lib、.h文件加載到工程中,就可以調用Toolkit提供的函數了。
以在Microsoft Acess數據庫中插入一條記錄為例,利用Toolkit訪問數據庫的程序流程圖如圖2所示。
DatabaseAssistant(簡稱DAssistant)是一個數據庫訪問工具包,它是丁晨等研究人員開發的免費軟件,其主要就是為LabWindows/CVI開發環境提供數據庫訪問功能,它也可應用于支持C語言環境的其他軟件開發環境。其官方發布網站為www.vihome.com.cn。
該工具包于2008年9月發布最初版本1.0 Beta1,目前的最新版本為2.06正式版,期間經過十幾次版本升級。該工具包的開發和升級充分借鑒了SQL Toolkit,可以說幾乎繼承了SQL Toolkit的所有優點,而且數據庫訪問速度也比SQL Toolkit快,這個在后面的實驗部分會給出說明。如今DAssistant的功能已經非常完善,其本身可以支持多種數據庫。

圖2 Toolkit訪問數據庫程序流程圖
該工具包的使用需要系統安裝ODBC3.0及其以后的ODBC管理器,Windows98后的系統都自帶ODBC3.5,可在“控制面板-管理工具-ODBC數據源管理器”中查看版本。Windows系統提供以下數據庫的 ODBC驅動:Access(.mdb)、dBase(.dbf)、excel(.xls)、Paradox(.db),其他數據庫需要安裝相應的ODBC驅動才能使用。
在CVI中利用DAssistant訪問數據庫的方法和Toolkit基本相同,只要將DatabaseAssistant.fp、DatabaseAssistant.lib、DatabaseAssistant.dll、DatabaseAssistant.h等文件拷貝到工程目錄下,將DatabaseAssistant.fp、DatabaseAssistant.lib、DatabaseAssistant.h文件加載到工程中,就可以調用DAssistant提供的函數了。
還以在Microsoft Acess數據庫中插入一條記錄為例,利用DAssistant訪問數據庫的程序流程圖如圖3所示。
為了能更好地說明如何利用上述提到的三種方法在LabWindows/CVI中實現對外部數據庫的訪問以及它們之間訪問數據庫性能的差異,本節給出一個實例,實現如下功能:能夠分別使用ADO、Toolkit和DAssistant三種方法向一個Microsoft Access2003數據庫文件中的Demo數據表中連續寫入10000條相同的記錄,隨后更新這10000條相同的記錄,最后讀取并顯示更新后的10000條記錄,分別統計三種方法完成這些操作所花費的時間。Demo數據表結構及寫入和更新的記錄如表1所示。

圖3 DAssistant訪問數據庫程序流程
實驗所使用的硬件平臺為DELL T3500臺式機,CPU為Intel Xeon 2.40GHz,內存3GB。操作系統為Windows XP SP3,開發環境為LabWindows/CVI 8.0。

表1 Demo數據表結構及寫入和更新的記錄
程序界面設計及運行結果如圖4所示。
由圖4可以得到 DAssistant、Toolkit、ADO三種方法寫入、更新和讀取10000條記錄所花費的時間如表2所示。需要說明的是,在不同計算機上三種方法訪問數據庫的速度會略有不同,但是三者之間的相對訪問速度不會改變,能夠反映它們訪問數據庫的性能差異??梢钥闯?,不管是寫入、更新還是讀取記錄,DAssistant方法的速度都是最快的,Toolkit次之,而ADO則最慢。至此,三種方法總體特征比較如下表3所示。

表2 三種方法訪問數據庫耗時統計
總的來講,三種方法中DAssistant的數據庫訪問性能最好,不但訪問速度最快,而且具有較為詳盡的軟件接口說明,代碼編寫也比較簡單。

表3 三種方法總體特征比較表

圖4 程序界面及運行結果
LabWindows/CVI作為優秀的測控軟件開發環境,卻始終沒有對數據庫提供很好的支持??偨Y并實現了到目前為止能夠在CVI環境下訪問外部數據庫的三種方法:Microsoft ADO、NI SQL Toolkit和DatabaseAssistant,詳細闡述了這三種方法在CVI環境下訪問數據庫的具體途徑,通過實驗對三種方法的數據庫訪問性能進行了比較,結果表明在CVI中DatabaseAssistant方法具有最好的數據庫訪問性能。
[1] 王建新,楊世鳳,隋美麗.Lab Windows/CVI測試技術及工程應用[M].北京:化學工業出版社,2006.
[2] 李騰飛,張輝.基于Labwindows/CVI和Matlab的濾波器設計[J].電子技術,2007(3):29-35.
[3] 張鳳均.Lab Windows/CVI開發入門與進階[M].北京:北京航空航天大學出版社,2001.
[4] 黃吉濤,周倫彬.ADO數據庫訪問技術在LabWindows/CVI中的應用[J].中國測控技術,2007(3):102-104.