李 暉
(中國(guó)航天科技集團(tuán)公司第四研究院第四十一研究所,燃燒、流動(dòng)和熱結(jié)構(gòu)國(guó)家級(jí)重點(diǎn)實(shí)驗(yàn)室,西安710025)
LabWindows/CVI是美國(guó)NI公司(National Instruments Corporation)推出的一款功能強(qiáng)大的交互式C語(yǔ)言軟件開(kāi)發(fā)平臺(tái),主要用于儀器控制、自動(dòng)測(cè)試、數(shù)據(jù)處理等應(yīng)用軟件開(kāi)發(fā)。LabWindows/CVI的優(yōu)勢(shì)在于完全建立在ANSI C基礎(chǔ)之上,實(shí)現(xiàn)了功能強(qiáng)大、使用靈活的C語(yǔ)言平臺(tái)與用于數(shù)據(jù)采集、分析與顯示的測(cè)控專業(yè)工具的有機(jī)結(jié)合,其特有的交互式編程方法及豐富的功能面板和函數(shù)庫(kù)可以很方便地設(shè)計(jì)出非常友好的測(cè)控操作界面[1-2]。尤其是大型、復(fù)雜的測(cè)試軟件,使用LabWindows/CVI開(kāi)發(fā)可以獲得優(yōu)良的測(cè)試性能[3]。
CVI作為側(cè)重于測(cè)控軟件開(kāi)發(fā)平臺(tái),不可避免地要和數(shù)據(jù)庫(kù)打交道,然而它自身卻始終沒(méi)有通過(guò)標(biāo)準(zhǔn)函數(shù)庫(kù)提供數(shù)據(jù)庫(kù)的操作函數(shù),也沒(méi)有在工具包中提供能夠訪問(wèn)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)器,也就是說(shuō)CVI本身不具備訪問(wèn)數(shù)據(jù)庫(kù)的功能。這也是CVI相對(duì)Visual C++、VB、Delphi等開(kāi)發(fā)環(huán)境的一個(gè)弱項(xiàng)。雖然NI公司提供了獨(dú)立于CVI 開(kāi)發(fā)平臺(tái)以外的專門用于和數(shù)據(jù)庫(kù)打交道的軟件工具包SQL Toolkit,但是價(jià)格較為昂貴。
針對(duì)CVI較為薄弱的數(shù)據(jù)庫(kù)訪問(wèn)功能,給出了到目前為止能夠?qū)崿F(xiàn)在CVI中訪問(wèn)外部數(shù)據(jù)庫(kù)的方法,詳細(xì)闡述了 ADO、SQL Toolkit以及 DatabaseAssistant這三種方法在CVI環(huán)境下訪問(wèn)數(shù)據(jù)庫(kù)的具體途徑,并通過(guò)實(shí)驗(yàn)對(duì)三種方法的數(shù)據(jù)庫(kù)訪問(wèn)性能進(jìn)行了比較。
Microsoft開(kāi)發(fā)了一系列基于Windows平臺(tái)的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)。OLE DB是其早期開(kāi)發(fā)的一套開(kāi)放標(biāo)準(zhǔn),它基于COM(Component Object Model,組件對(duì)象模型)結(jié)構(gòu),對(duì)所有的數(shù)據(jù)文件提供了一個(gè)統(tǒng)一的接口,包括關(guān)系數(shù)據(jù)庫(kù)、非關(guān)系數(shù)據(jù)庫(kù)和其他文件系統(tǒng),是Microsoft針對(duì)所有數(shù)據(jù)庫(kù)提供的底層接口。
后來(lái)Microsoft又在OLE DB基礎(chǔ)上開(kāi)發(fā)了面向?qū)ο蟮臄?shù)據(jù)庫(kù)訪問(wèn)技術(shù)ADO(ActiveX Data Objects,ActiveX數(shù)據(jù)對(duì)象)。ADO是完全建立在OLE DB模型之上的高層數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),它簡(jiǎn)化了OLE DB的操作,定義了ADO對(duì)象,使得數(shù)據(jù)庫(kù)應(yīng)用程序的開(kāi)發(fā)得到簡(jiǎn)化[4]。ADO技術(shù)最大的特點(diǎn)是可以以Microsoft ActiveX控件的形式出現(xiàn),使得它可以應(yīng)用在多種軟件開(kāi)發(fā)環(huán)境中,LabWindows/CVI 6.0之后的版本提供了對(duì)ActiveX自動(dòng)化和網(wǎng)絡(luò)的支持,使得在CVI環(huán)境下應(yīng)用ADO技術(shù)開(kāi)發(fā)數(shù)據(jù)庫(kù)成為可能。
在CVI中利用ADO技術(shù)訪問(wèn)數(shù)據(jù)庫(kù),首先要生成ActiveX自動(dòng)化儀器驅(qū)動(dòng)器,具體方法是:在主窗口的菜單欄中選擇“Tools”→“Create ActiveX Controller…”,LabWindows/CVI會(huì)自動(dòng)搜索注冊(cè)在操作系統(tǒng)中的所有自動(dòng)化服務(wù)器,搜索完成后彈出列表框會(huì)顯示所有 ActiveX自動(dòng)化服務(wù)器,選擇“Microsoft ActiveX Data Objects 2.8 Libra”后,點(diǎn)擊“Next”,按照開(kāi)發(fā)向?qū)崾具M(jìn)行操作完成即可。完成后會(huì)在當(dāng)前項(xiàng)目目錄下生成五個(gè)文件:“ADODB.c”、“ADODB.h”、“ADODB.fp”、“ADODB.obj”、“ADODB.sub”,這五個(gè)文件就組成了CVI下ADO驅(qū)動(dòng)程序。
以最一般的訪問(wèn)一次數(shù)據(jù)庫(kù)為例,比如在Microsoft Acess數(shù)據(jù)庫(kù)中插入一條記錄,則利用ADO訪問(wèn)數(shù)據(jù)庫(kù)程序流程如圖1所示。
NI SQL Toolkit(簡(jiǎn)稱Toolkit)是NI公司提供的獨(dú)立于CVI開(kāi)發(fā)平臺(tái)以外的專門用來(lái)和數(shù)據(jù)庫(kù)打交道的軟件工具包,它遵從ODBC規(guī)范的數(shù)據(jù)庫(kù)技術(shù),其實(shí)也是提供了一族訪問(wèn)數(shù)據(jù)庫(kù)的API供用戶調(diào)用。Toolkit有如下特點(diǎn):第一,其安裝完成后以CVI中的儀器驅(qū)動(dòng)器的形式出現(xiàn),提供了.fp、.lib、.dll、.h等文件,每個(gè)函數(shù)都有完善的函數(shù)面板并提供了詳細(xì)的函數(shù)說(shuō)明,用戶調(diào)用很方便;第二,函數(shù)封裝比較好,減少了很多比較晦澀難懂的函數(shù),并給出了數(shù)據(jù)庫(kù)訪問(wèn)時(shí)函數(shù)調(diào)用層次圖,一目了然;第三,Toolkit不但可以訪問(wèn)ODBC數(shù)據(jù)源,也可以訪問(wèn)任何遵從ADO標(biāo)準(zhǔn)的數(shù)據(jù)源,不過(guò)如果沒(méi)有特殊說(shuō)明,SQL Toolkit默認(rèn)為ODBC數(shù)據(jù)源。
圖1 ADO訪問(wèn)數(shù)據(jù)庫(kù)程序流程圖
在CVI中利用Toolkit訪問(wèn)數(shù)據(jù)庫(kù)較為簡(jiǎn)單,只要將相應(yīng)的.fp、.lib、.dll、.h等文件拷貝到工程目錄下,再將.fp、.lib、.h文件加載到工程中,就可以調(diào)用Toolkit提供的函數(shù)了。
以在Microsoft Acess數(shù)據(jù)庫(kù)中插入一條記錄為例,利用Toolkit訪問(wèn)數(shù)據(jù)庫(kù)的程序流程圖如圖2所示。
DatabaseAssistant(簡(jiǎn)稱DAssistant)是一個(gè)數(shù)據(jù)庫(kù)訪問(wèn)工具包,它是丁晨等研究人員開(kāi)發(fā)的免費(fèi)軟件,其主要就是為L(zhǎng)abWindows/CVI開(kāi)發(fā)環(huán)境提供數(shù)據(jù)庫(kù)訪問(wèn)功能,它也可應(yīng)用于支持C語(yǔ)言環(huán)境的其他軟件開(kāi)發(fā)環(huán)境。其官方發(fā)布網(wǎng)站為www.vihome.com.cn。
該工具包于2008年9月發(fā)布最初版本1.0 Beta1,目前的最新版本為2.06正式版,期間經(jīng)過(guò)十幾次版本升級(jí)。該工具包的開(kāi)發(fā)和升級(jí)充分借鑒了SQL Toolkit,可以說(shuō)幾乎繼承了SQL Toolkit的所有優(yōu)點(diǎn),而且數(shù)據(jù)庫(kù)訪問(wèn)速度也比SQL Toolkit快,這個(gè)在后面的實(shí)驗(yàn)部分會(huì)給出說(shuō)明。如今DAssistant的功能已經(jīng)非常完善,其本身可以支持多種數(shù)據(jù)庫(kù)。
圖2 Toolkit訪問(wèn)數(shù)據(jù)庫(kù)程序流程圖
該工具包的使用需要系統(tǒng)安裝ODBC3.0及其以后的ODBC管理器,Windows98后的系統(tǒng)都自帶ODBC3.5,可在“控制面板-管理工具-ODBC數(shù)據(jù)源管理器”中查看版本。Windows系統(tǒng)提供以下數(shù)據(jù)庫(kù)的 ODBC驅(qū)動(dòng):Access(.mdb)、dBase(.dbf)、excel(.xls)、Paradox(.db),其他數(shù)據(jù)庫(kù)需要安裝相應(yīng)的ODBC驅(qū)動(dòng)才能使用。
在CVI中利用DAssistant訪問(wèn)數(shù)據(jù)庫(kù)的方法和Toolkit基本相同,只要將DatabaseAssistant.fp、DatabaseAssistant.lib、DatabaseAssistant.dll、DatabaseAssistant.h等文件拷貝到工程目錄下,將DatabaseAssistant.fp、DatabaseAssistant.lib、DatabaseAssistant.h文件加載到工程中,就可以調(diào)用DAssistant提供的函數(shù)了。
還以在Microsoft Acess數(shù)據(jù)庫(kù)中插入一條記錄為例,利用DAssistant訪問(wèn)數(shù)據(jù)庫(kù)的程序流程圖如圖3所示。
為了能更好地說(shuō)明如何利用上述提到的三種方法在LabWindows/CVI中實(shí)現(xiàn)對(duì)外部數(shù)據(jù)庫(kù)的訪問(wèn)以及它們之間訪問(wèn)數(shù)據(jù)庫(kù)性能的差異,本節(jié)給出一個(gè)實(shí)例,實(shí)現(xiàn)如下功能:能夠分別使用ADO、Toolkit和DAssistant三種方法向一個(gè)Microsoft Access2003數(shù)據(jù)庫(kù)文件中的Demo數(shù)據(jù)表中連續(xù)寫入10000條相同的記錄,隨后更新這10000條相同的記錄,最后讀取并顯示更新后的10000條記錄,分別統(tǒng)計(jì)三種方法完成這些操作所花費(fèi)的時(shí)間。Demo數(shù)據(jù)表結(jié)構(gòu)及寫入和更新的記錄如表1所示。
圖3 DAssistant訪問(wèn)數(shù)據(jù)庫(kù)程序流程
實(shí)驗(yàn)所使用的硬件平臺(tái)為DELL T3500臺(tái)式機(jī),CPU為Intel Xeon 2.40GHz,內(nèi)存3GB。操作系統(tǒng)為Windows XP SP3,開(kāi)發(fā)環(huán)境為L(zhǎng)abWindows/CVI 8.0。
表1 Demo數(shù)據(jù)表結(jié)構(gòu)及寫入和更新的記錄
程序界面設(shè)計(jì)及運(yùn)行結(jié)果如圖4所示。
由圖4可以得到 DAssistant、Toolkit、ADO三種方法寫入、更新和讀取10000條記錄所花費(fèi)的時(shí)間如表2所示。需要說(shuō)明的是,在不同計(jì)算機(jī)上三種方法訪問(wèn)數(shù)據(jù)庫(kù)的速度會(huì)略有不同,但是三者之間的相對(duì)訪問(wèn)速度不會(huì)改變,能夠反映它們?cè)L問(wèn)數(shù)據(jù)庫(kù)的性能差異。可以看出,不管是寫入、更新還是讀取記錄,DAssistant方法的速度都是最快的,Toolkit次之,而ADO則最慢。至此,三種方法總體特征比較如下表3所示。
表2 三種方法訪問(wèn)數(shù)據(jù)庫(kù)耗時(shí)統(tǒng)計(jì)
總的來(lái)講,三種方法中DAssistant的數(shù)據(jù)庫(kù)訪問(wèn)性能最好,不但訪問(wèn)速度最快,而且具有較為詳盡的軟件接口說(shuō)明,代碼編寫也比較簡(jiǎn)單。
表3 三種方法總體特征比較表
圖4 程序界面及運(yùn)行結(jié)果
LabWindows/CVI作為優(yōu)秀的測(cè)控軟件開(kāi)發(fā)環(huán)境,卻始終沒(méi)有對(duì)數(shù)據(jù)庫(kù)提供很好的支持??偨Y(jié)并實(shí)現(xiàn)了到目前為止能夠在CVI環(huán)境下訪問(wèn)外部數(shù)據(jù)庫(kù)的三種方法:Microsoft ADO、NI SQL Toolkit和DatabaseAssistant,詳細(xì)闡述了這三種方法在CVI環(huán)境下訪問(wèn)數(shù)據(jù)庫(kù)的具體途徑,通過(guò)實(shí)驗(yàn)對(duì)三種方法的數(shù)據(jù)庫(kù)訪問(wèn)性能進(jìn)行了比較,結(jié)果表明在CVI中DatabaseAssistant方法具有最好的數(shù)據(jù)庫(kù)訪問(wèn)性能。
[1] 王建新,楊世鳳,隋美麗.Lab Windows/CVI測(cè)試技術(shù)及工程應(yīng)用[M].北京:化學(xué)工業(yè)出版社,2006.
[2] 李騰飛,張輝.基于Labwindows/CVI和Matlab的濾波器設(shè)計(jì)[J].電子技術(shù),2007(3):29-35.
[3] 張鳳均.Lab Windows/CVI開(kāi)發(fā)入門與進(jìn)階[M].北京:北京航空航天大學(xué)出版社,2001.
[4] 黃吉濤,周倫彬.ADO數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)在LabWindows/CVI中的應(yīng)用[J].中國(guó)測(cè)控技術(shù),2007(3):102-104.