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