LabVIEW與USB的直接數據通信
引 言
本文引用地址:http://dyxdggzs.com/article/156262.htmLabVIEW是一種基于圖形程序的虛擬儀器編程語(yǔ)言,在測試與測量、數據采集、儀器控制、數字信號分析、工廠(chǎng)自動(dòng)化等領(lǐng)域獲得了廣泛的應用。LabVIEW程序采用方框圖編程,具有友好的人機界面,在前面板中有用于模擬真實(shí)儀器面板的控件可供調用,可用于設置輸入數值、觀(guān)察輸出值以及實(shí)現圖表、文本等顯示。實(shí)現LabVIEW對數據的采集和處理,傳統的是采用數據采集卡,但是這些數據采集設備存在安裝不便、價(jià)格昂貴、受計算機插槽數量、地址、中斷資源的限制,可擴展性差,同時(shí)在一些電磁干擾性強的測試現場(chǎng),可能無(wú)法專(zhuān)門(mén)對其做電磁屏蔽,從而導致采集的數據失真。在LabVIEW下使用USB總線(xiàn),可以同樣實(shí)現數據采集,并且彌補了采集卡的不足。
傳統的用LabVIEW讀寫(xiě)USB設備的方法是:先用VC++或Delphi編寫(xiě)動(dòng)態(tài)鏈接庫DLL文件,在DLL中通過(guò)調用WIN API函數讀寫(xiě)USB設備的數據,并存在緩沖區中,在LabVIEW中通過(guò)對DLL文件的調用提取緩沖區中的數據。介紹了在LabVIEW下,通過(guò)調用NI-VISA子程序控件,實(shí)現與USB設備的直接通信,避免了二次編程的麻煩和數據的中轉。
2 USB底層驅動(dòng)程序設計
USB底層驅動(dòng)開(kāi)發(fā)工具有Windows DDK和第三方開(kāi)發(fā)工具,如Driver studio和 Win driver等,但是使用這些工具開(kāi)發(fā)驅動(dòng)難度大、效率底。在這里,介紹如何借用LabVIEW的NI-VISA子程序控件作為USB的底層驅動(dòng)。
VISA(Virtual Instrument Software Architecture,ni.corn/visa)是一個(gè)用來(lái)與各種儀器總線(xiàn)進(jìn)行通訊的高級應用編程接口(API)。他不受平臺、總線(xiàn)和環(huán)境的限制。通用串行總線(xiàn)(USB)是一個(gè)基于信息的通訊總線(xiàn)。這表示PC機與USB設備通過(guò)發(fā)送指令和數據進(jìn)行通訊,而這些指令和數據是通過(guò)總線(xiàn)以文本或二進(jìn)制數據的形式發(fā)送的。每個(gè)USB設備都有各自的指令集??梢允褂肗I-VISA的讀寫(xiě)功能向儀器發(fā)送這些指令,并讀取儀器的反饋。
NI-VISA從3.0版開(kāi)始支持USB通訊,他有2種VISA類(lèi)函數(Resource Class),可以控制2類(lèi)USB設備:USB INSTR設備與USB RAW設備。符合USB測試和測量類(lèi)(USBTMC)協(xié)議的USB設備可以通過(guò)使用USB INSTR類(lèi)函數控制,他們使用488.2標準通訊。對于這些設備,只需以與GPIB儀器通訊同樣的方式,使用VISA Open,VISA Close,VISA Read和VISAWrite功能。USBTMC設備符合VISA USB INSTR類(lèi)函數能夠理解的協(xié)議。USBTMC設備相對來(lái)說(shuō)控制較為復雜,因為每個(gè)設備可以使用各自的通信協(xié)議,而這些通信協(xié)議一般都是由設備的生產(chǎn)廠(chǎng)家自定的。
為了使用NI-VISA,必須先讓W(xué)indows將NI-VI-SA作為設備的缺省驅動(dòng)程序使用。在Windows環(huán)境中,可以通過(guò)INF文檔做到這一點(diǎn)。INF文件是系統硬件設備配置文件,USB驅動(dòng)程序通過(guò)INF文件中的PID(產(chǎn)品識別號)和VID(廠(chǎng)商識別號)識別USB設備。NI-VISA 3.0中包含的VISA Driver Development Wizard(DDW)可以為USB設備創(chuàng )建一個(gè)INF文檔。下面簡(jiǎn)單介紹創(chuàng )建INF文檔的過(guò)程:
(1)在安裝了NI-VISA后,啟動(dòng)VISA Driver Devel-opment Wizard程序,出現了為PXI/PCI或USB設備創(chuàng )建一個(gè)INF文檔的向導,選擇USB設備,點(diǎn)NEXT,出現VI-SA DDW基本設備信息窗口。
(2)進(jìn)行這一步時(shí),需要清楚USB的PID和VID。這些數字可以在安裝USB設備的時(shí)候對其進(jìn)行確認,并在想要與設備通訊的時(shí)候,尋找他的地址。依據USB的規格,兩個(gè)數字都是16位16進(jìn)制數字,并應該由設備制造商提供。例如在后面介紹基于USB的虛擬示波器用到USB接口芯片PDIUSBD12的PID和VID分別是0x0471和0x0666;這一步設置完成后,點(diǎn)擊NEXT,進(jìn)行最后一步的設置。
(3)USB Instrument Prefix(USB儀器前綴)只是一個(gè)描述符,可以用他來(lái)識別本設備所用的相關(guān)文檔。在USB Instrument Prefix中輸入相應信息,并在output file directory中選擇存放這些文檔的目錄,然后點(diǎn)擊Finish。INF文檔就被建好并保存至指定的位置。
這時(shí)候,只要復制生成的INF文件夾到系統盤(pán)Win-dows文件夾下INF文件夾,點(diǎn)擊右鍵,安裝即可。這時(shí),插上USB設備,Windows系統就能探測到,并根據INF硬件配置文件選擇NI-VISA作為底層驅動(dòng)程序。在Lab-VIEW中,只需調用NI-VISA的相關(guān)控件,即可實(shí)現對USB設備的讀寫(xiě)操作。
3 LabVIEW驅動(dòng)程序編寫(xiě)
強大、靈活的儀器控制功能是LabVIEW區別于其他編程語(yǔ)言的主要特點(diǎn)。LabVIEW不僅提供數百種不同接口測試儀器的驅動(dòng)程序,而且還支持VISA,SCPI和IVI等最新的程控軟件標準,為用戶(hù)設計開(kāi)發(fā)先進(jìn)的測試系統提供了軟件支持。VISA是用于儀器編程的標準I/O函數庫及相關(guān)規范的總稱(chēng),一般稱(chēng)之為VISA庫。VISA庫駐留于計算機系統中,是計算機與儀器之間的軟件層連接,用以實(shí)現對儀器的程控。對軟件開(kāi)發(fā)者來(lái)說(shuō),他是一個(gè)可調用的操作函數集,他本身不提供儀器編程能力,只是一個(gè)高層API(應用程序接口),通過(guò)調用底層的驅動(dòng)程序來(lái)控制儀器設備。
NI-VISA支持3種類(lèi)型的USB管道:控制、批量和中斷。NI-VISA探測到USB儀器時(shí),他會(huì )對儀器進(jìn)行自動(dòng)掃描,尋找各種類(lèi)型的最低可用端點(diǎn)。如使用NI-VI-SA中的VISA USB Control In和VISA USB Control Out來(lái)通過(guò)控制型管道傳輸數據,使用VISA Read和VISAWrite來(lái)通過(guò)批量型管道傳輸數據。
作為儀器I/O函數庫,VISA編程與傳統的I/O軟件編程基本相同,主要通過(guò)設備I/O端口的讀寫(xiě)操作和屬性控制,實(shí)現與儀器的命令與數據交換。LabVIEW中所有的VISA節點(diǎn)均在Function模板→All Functions子模板→Instrument I/O子模板→VISA子模板中。在這里,只用到了VISA Open,VISA Close,VISA Write和VISARead四個(gè)節點(diǎn)即可實(shí)現和USB設備的雙向通信。當完成對USB設備的INF硬件配置后,就可以用VISA Open節點(diǎn)打開(kāi)該資源,建立計算機與這些VISA資源的通信管道;與VISA Open節點(diǎn)相反,VISA Close節點(diǎn)用于將打開(kāi)的VISA資源關(guān)閉;VISA Write節點(diǎn)的功能是將writebuffer端口輸入字符串數據發(fā)送到儀器中;VISA Read節點(diǎn)的功能是從儀器中讀出數據;
數字通信相關(guān)文章:數字通信原理
通信相關(guān)文章:通信原理
評論