基于USB總線的虛擬儀器技術(shù)
摘 要:本文介紹了基于USB總線的虛擬儀器技術(shù)在水下航行器動(dòng)力裝置測(cè)試中的應(yīng)用情況。以PC機(jī)為主控單元、USB總線為接口、Labview為軟件開(kāi)發(fā)平臺(tái)的虛擬儀器測(cè)試系統(tǒng)充分利用了USB的新特性,提高了測(cè)試系統(tǒng)的整體性能。
關(guān)鍵詞:虛擬儀器;USB; Labview;測(cè)試系統(tǒng);DLL
序言
在水下航行器的動(dòng)力測(cè)試系統(tǒng)中,測(cè)試參數(shù)種類繁多,測(cè)試環(huán)境復(fù)雜,存在強(qiáng)的噪聲干擾,并且,由于測(cè)試的目的不同,要出現(xiàn)不同的組合測(cè)試,所以要求測(cè)試系統(tǒng)具有較好的組態(tài)性能和易維護(hù)性。然而,傳統(tǒng)的測(cè)試系統(tǒng)設(shè)備復(fù)雜、功能單一、靈活性差。如果將虛擬儀器技術(shù)引入到水下航行器的動(dòng)力測(cè)試系統(tǒng)中,特別是引入基于USB總線的虛擬儀器技術(shù), 不但可以滿足動(dòng)力測(cè)試系統(tǒng)的要求,而且可以實(shí)現(xiàn)所建立的測(cè)控系統(tǒng)具有開(kāi)放式工業(yè)標(biāo)準(zhǔn)性、互換性和互操作性以及現(xiàn)場(chǎng)設(shè)備的智能化等優(yōu)勢(shì)。另外,還具有節(jié)省硬件數(shù)量及成本、節(jié)省維護(hù)開(kāi)銷(xiāo)與提高可靠性等特點(diǎn)。
硬件設(shè)計(jì)
系統(tǒng)總體結(jié)構(gòu)
水下航行器動(dòng)力裝置研究中要進(jìn)行很多參數(shù)的測(cè)試,其中包括電壓、電流、有功功率、無(wú)功功率、扭矩等,未來(lái)的研究還會(huì)涉及到噪聲、振動(dòng)等參數(shù)的測(cè)試。不同的參數(shù)其測(cè)量方法不盡相同,本文所詳述的測(cè)試系統(tǒng)總體框圖如圖1所示。下面將重點(diǎn)介紹基于USB總線的數(shù)據(jù)采集卡的硬件和軟件設(shè)計(jì)。
USB數(shù)據(jù)采集卡硬件設(shè)計(jì)
鑒于USB協(xié)議的復(fù)雜性(需要編寫(xiě)大量的固件代碼),基于USB總線的數(shù)據(jù)采集卡的控制芯片采用AT89C55WD(自帶20K的程序存儲(chǔ)器,足以滿足需要)。采集卡的ADC采用8位的ADC08909。USB接口芯片采用Philips公司的PDIUSBD12,該芯片采用GoodLink技術(shù)的連接指示器,在通訊時(shí)使LED閃爍,這種技術(shù)對(duì)于USB接口調(diào)試十分有用。PDIUSBD12與AT89C55WD、ADC0809的接口電路如圖2所示。PDIUSBD12和AT89C55WD采用總線方式連接,通過(guò)中斷方式進(jìn)行數(shù)據(jù)交換。
軟件設(shè)計(jì)
這里只介紹與USB數(shù)據(jù)采集卡相關(guān)的軟件設(shè)計(jì),包括單片機(jī)固件程序、采集卡驅(qū)動(dòng)程序、動(dòng)態(tài)鏈接庫(kù)(DLL)、用戶應(yīng)用程序。
單片機(jī)固件程序設(shè)計(jì)
固件程序主要完成兩個(gè)方面的工作:ADC采樣服務(wù)和PDIUSBD12同主機(jī)的通訊。程序采用積木式結(jié)構(gòu),各模塊程序分工如下:
*硬件提取層:對(duì)單片機(jī)的I/O口、數(shù)據(jù)總線等硬件接口進(jìn)行操作;
* PDIUSBD12命令接口:指對(duì)PDIUSBD12器件進(jìn)行操作的模塊子程序集;
*中斷服務(wù)程序:當(dāng)PDIUSBD12向AT89C55WD發(fā)出中斷請(qǐng)求時(shí),讀取PDIUSBD12的中斷傳輸來(lái)的數(shù)據(jù),設(shè)定事件標(biāo)志位和Setup包數(shù)據(jù)緩存區(qū)并傳輸給主程序;
*標(biāo)準(zhǔn)請(qǐng)求處理程序:對(duì)USB的標(biāo)準(zhǔn)請(qǐng)求進(jìn)行處理;
* 廠商請(qǐng)求處理程序:對(duì)USB的廠商請(qǐng)求進(jìn)行處理;
*主循環(huán)程序:發(fā)送USB請(qǐng)求、處理USB總線事件和對(duì)用戶功能進(jìn)行處理。
固件程序的主循環(huán)框圖如圖3所示。
數(shù)據(jù)采集卡驅(qū)動(dòng)程序設(shè)計(jì)
數(shù)據(jù)采集卡驅(qū)動(dòng)程序的設(shè)計(jì)目標(biāo)是編寫(xiě)在Windows2000下使用的驅(qū)動(dòng)程序。USB設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)是基于WDM的,傳統(tǒng)開(kāi)發(fā)工具是Microsoft公司的Windows 2000DDK,這種方法的優(yōu)點(diǎn)是能使開(kāi)發(fā)者對(duì)整個(gè)驅(qū)動(dòng)模型有較為深入的理解,使得開(kāi)發(fā)過(guò)程更為靈活。但是對(duì)于初學(xué)者來(lái)說(shuō)工作量、難度都較大,因此一些公司紛紛推出了諸如DriverWorks、Driver Winzard等驅(qū)動(dòng)開(kāi)發(fā)工具,這些工具的特點(diǎn)是只需添入少量的代碼,就可自動(dòng)生成相對(duì)完善的驅(qū)動(dòng)程序,但是缺乏靈活性。本設(shè)計(jì)中開(kāi)發(fā)驅(qū)動(dòng)程序采用的是前一種傳統(tǒng)方法,在Visual C++工程環(huán)境下編寫(xiě)源代碼,然后在Windows 2000DDK環(huán)境下編譯成sys驅(qū)動(dòng)文件,最后編寫(xiě)安裝信息文件,具體過(guò)程較為復(fù)雜,在此不再詳述。
DLL程序設(shè)計(jì)
所謂DLL就是一個(gè)包含了若干函數(shù)的可執(zhí)行模塊。其作用是通過(guò)DMA的方式讀取存儲(chǔ)在PDIUSBD12 FIFO中的采樣數(shù)據(jù),并把它們存儲(chǔ)在開(kāi)辟的數(shù)據(jù)緩存區(qū)中,以供用戶應(yīng)用程序調(diào)用。使用這種方法的優(yōu)點(diǎn)是允許若干個(gè)應(yīng)用程序共享某個(gè)函數(shù)的單個(gè)副本,實(shí)現(xiàn)了代碼數(shù)據(jù)、硬件資源等的共享。
由于在Win32系統(tǒng)中,每個(gè)設(shè)備都抽象成文件,DLL只需通過(guò)幾條簡(jiǎn)單的文件操作API(應(yīng)用程序接口)函數(shù)就可實(shí)現(xiàn)與驅(qū)動(dòng)程序中某個(gè)設(shè)備通訊,因此編寫(xiě)DLL時(shí)應(yīng)充分應(yīng)用API函數(shù)。本設(shè)計(jì)中用到的API函數(shù)主要有:open_file( )、open_dev( )、DeviceIoControl ( )和ReadFile( )。DLL在Visual C++中的Win32 Dynamic-Link Library開(kāi)發(fā)模板下編寫(xiě),由于用戶應(yīng)用程序采用Labview編寫(xiě),因此還需將Labview.lib庫(kù)文件添加到開(kāi)發(fā)模板中,這樣才能編譯生成正確的DLL文件。
用戶應(yīng)用程序設(shè)計(jì)
用戶應(yīng)用程序?qū)⒉捎肗I公司的Labview7.0編寫(xiě)。Labview中DLL的調(diào)用是通過(guò)CLF(Call Library Function)節(jié)點(diǎn)實(shí)現(xiàn)的,在使用之前需要對(duì)它進(jìn)行配置,配置完成后,CLF節(jié)點(diǎn)的函數(shù)原型為:char UsbRead (char dbfsize, unsigned char *code, char *databuf),dbfsize為所讀取數(shù)據(jù)長(zhǎng)度;*code為返回的錯(cuò)誤代碼指針(為了調(diào)試方便);*databuf為所讀取的數(shù)據(jù)指針。需要注意的是在調(diào)用DLL之前,Labview程序中需要對(duì)*databuf賦初值,否則Labview程序運(yùn)行會(huì)發(fā)生意想不到的錯(cuò)誤。因?yàn)樵贚abview中是不會(huì)自動(dòng)給*databuf開(kāi)辟內(nèi)存的。
使用NI公司的DataSocket技術(shù),通過(guò)簡(jiǎn)單的編程,用戶應(yīng)用程序就可以實(shí)現(xiàn)在局域網(wǎng)或廣域網(wǎng)內(nèi)向多個(gè)遠(yuǎn)程終端同時(shí)廣播現(xiàn)場(chǎng)測(cè)量數(shù)據(jù)。同樣,使用WebPublish技術(shù)通過(guò)簡(jiǎn)單的編程,用戶可以在本地或遠(yuǎn)程計(jì)算機(jī)上瀏覽和控制用戶應(yīng)用程序的控制面板。這樣網(wǎng)絡(luò)化虛擬測(cè)控平臺(tái)的雛形就基本建立起來(lái)了,這也是本設(shè)計(jì)在編制用戶應(yīng)用程序時(shí),為何選用Labview7.0的重要原因。
結(jié)語(yǔ)
通過(guò)本設(shè)計(jì),可以看出USB總線同Labview開(kāi)發(fā)軟件平臺(tái)的結(jié)合具有廣闊的發(fā)展前景,但是這次設(shè)計(jì)由于所選擇USB接口芯片的限制,傳輸速度難以提高(通過(guò)測(cè)試,速度從未大于1M/s),使得它在高頻、實(shí)時(shí)性要求較高的場(chǎng)合難有用武之地。通過(guò)選用支持USB2.0協(xié)議的接口芯片(速度可達(dá)480M/s)來(lái)提高速度,是本設(shè)計(jì)值得改進(jìn)的一個(gè)方面?!?/p>
參考文獻(xiàn)
1 Intel, Microsoft, IBM, etc. USB Specification 1.1. 2002
2 Chris Cant Windows WDM 設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)指南. 北京: 機(jī)械工業(yè)出版社,2000.10
3 楊樂(lè)平,李海濤,勇楊等. labview高級(jí)程序設(shè)計(jì). 北京:清華大學(xué)出版社,2002.10
評(píng)論