武 劍,李巴津
摘 要:針對功能強大,應用廣泛的虛擬儀器開發軟件LabVIEW只能直接支持NI公司的數據采集卡,而不能直接使用普通數據采集卡的問題。重點研究在LabVIEW平臺下驅動普通數據采集卡的重要方法即調用動態鏈接庫,并結合具體實例介紹了在LabVIEW中調用動態鏈接庫的關鍵技術及步驟,實現了LabVIEW與普通數據采集卡的結合。實際證明,采用這種方法省去了復雜的語言編程,縮短了軟件的開發時間,節約了系統開發成本,同時也增加了應用的靈活性。
關鍵詞:LabVIEW;動態鏈接庫;虛擬儀器;數據采集
中圖分類號:TP399文獻標識碼:A
文章編號:1004-373X(2009)12-149-03
Research on Driver of General Data Acquisition Card Based on LabVIEW
WU Jian,LI Bajin
(College of Information Engineering,Inner Mongolia University of Technology,Hohhot,010051,China)
Abstract:Facing the problem that virtual instrumentation development software such as LabVIEW can only support its company′s card and can not support other company′s DAQ card,an important method of using an ordinary DAQ card in virtual instrumentation development software which is calling dynamic link library functions is studied.And from the examples,the key process and procedure of calling dynamic link library functions in LabVIEW is presented.It realizes the combination of LabVIEW and ordinary DAQ card.It proves that this method can avoid the complicated computer program,shorten software-developing time,save cost and increase the application agility.
Keywords:LabVIEW;dynamic link library;virtual instrument;data acquisition
0 引 言
虛擬儀器技術是20世紀90年代發展起來的一種新技術,融計算機和總線技術、微電子技術、測量技術于一身,它是對傳統儀器的重大突破,是計算機技術與儀器技術相結合的產物。它利用計算機系統的強大功能,結合相應的硬件,大大突破傳統儀器在數據處理、顯示和存儲以及系統維護和擴展等方面的限制。虛擬儀器的眾多優點使其得到了廣泛的應用,然而當今著名的虛擬儀器開發軟件(如LabVIEW等)只能支持NI公司生產的數據采集卡,而不能直接驅動普通的數據采集卡。本文重點研究了在虛擬儀器開發軟件平臺LabVIEW下使用普通數據采集卡的方法。
1 虛擬儀器開發平臺 LabVIEW與數據采集卡的連接
LabVIEW是美國NI公司推出的一種基于G語言(Graphics Language),即圖形化編程語言的虛擬儀器軟件開發工具,具有強大的數據采集功能,通常只支持NI公司的數據采集卡,而這些卡的價格比較昂貴。因此,為了能在LabVIEW平臺上驅動普通的數據采集卡,用戶必須通過LabVIEW所提供的調用庫函數節點(Call Library Function Node,CLFN)及代碼接口節點(Code Interface Node,CIN)等功能,將功能強大、編程靈活、而且已有很多現成程序模塊的C語言同LabVIEW中編程直觀方便的圖形化G語言結合起來,從而實現用普通的數據采集卡來采集數據的功能,使LabVIEW在對硬件的支持上有了一個質的飛躍。
在LabVIEW中利用CLFN節點可以較容易地實現訪問動態鏈接庫(DLL),而且在購買數據采集卡的時,廠商一般會給用戶提供動態鏈接庫。所以研究在LabVIEW平臺下調用動態鏈接庫驅動普通的數據采集卡來實現數據采集更具有普遍性。
2 基于動態鏈接庫的普通數據采集卡的驅動
2.1 動態鏈接庫概述
動態鏈接是一種應用程序在運行時與庫文件連接起來的技術。動態鏈接庫(DLL)是一個可以多方共享的程序模塊,提供函數供Windows應用程序或其他的動態鏈接函數庫直接或間接調用,只有在別的模塊中調用了它的某個函數以后才發生作用。它是在應用程序運行時被裝入和鏈接的,而不是把庫代碼復制到應用程序中,只是在程序中記錄了函數的入口點和接口。動態鏈接庫獨立于編程語言,因此LabVIEW可以調用用大多數語言(如Visual C++,C++ Builder等)編寫生成的動態鏈接庫。在調用DLL的函數時,必須知道以下4個信息:函數返回的數據類型,函數調用的方式,函數的參數及類型,DLL庫文件的位置等。
2.2 LabVIEW對DLL的調用
通過對Call Library Function Node的配置可以實現DLL的調用,關鍵要了解被調用的函數名稱、功能及其輸入/輸出參數。配置節點的目的在于指定DLL模塊中與LabVIEW數據交換的相應驅動函數。調用Call Library Function模塊,雙擊此模塊,在彈出CLF對話框中進行節點配置,CLF函數配置對話框見圖1。第一個參數“庫名或路徑”,填入需要調用的動態鏈接庫文件的名字和路徑。第二個參數“函數名”,是鏈接庫中要調用的函數名稱。當在庫名或路徑欄中設定了DLL的路徑后,在函數名下拉框中就可以看到該動態鏈接庫所包含的所有函數名。第三個參數“調用規范”,此欄中可以設置該動態鏈接庫是標準WINAPI調用還是普通的C調用。一般來說,都采用C調用,但是對于API調用則必須選擇stdcall(WINAPI),最后一個需要注意的參數選項是線程安全選擇,此欄中可以選擇DLL是否可以被重入調用,默認情況是在UI線程中運行,即該動態鏈接庫只能在User Interface Thread下運行。如果動態鏈接庫中被調用的函數返回時間很長,那么就會導致LabVIEW不能執行UI線程中的其他任務,因此界面反應可能會很慢,甚至停止。這時候最好把它設為重入,若設置為重入,則該動態鏈接庫可以由多個線程同時調用,但前提是必須保證該DLL能被多個線程同時安全調用。
圖1 Call Library Function配置對話框
在參數配置菜單下設置函數的返回值類型和輸入參數。對話框右側對應每一個參數的參數名稱、類型、數據類型、參數傳遞方式。其中,需要注意的是數據類型選項,在不同的編譯平臺下,數據類型的定義名稱是不一樣的。為了將數據類型一一對應,在LabVIEW中必須對數據類型名稱定義進行轉換。
3 普通數據采集卡在LabVIEW平臺下的應用實例
以北京優采公司的UA301A型A/D數據采集卡為例,該采集卡在LabVIEW平臺下不能直接被驅動。該采集卡提供了一個動態鏈接庫ua300a.dll,此動態鏈接庫中提供了許多簡潔高效的采集和控制函數,支持UA301A采集器的各種功能。
UA301A為12位的A/D卡,系統中采用的是雙極性輸入信號和雙極性原碼的編碼方法,轉換的結果為二進制數,轉換后得到0~4 095的數字量。為了直觀表示被測物理量,需將轉換后的數字量變換為具有實際工程意義的數值。當單極性信號輸入時,模擬電壓值V與數字量D的對應關系可描述為:V=D/4 095×10;當輸入信號為雙極性時,兩者的對應關系為:V=(D-2 048)/4 095×10。這個轉換過程在驅動設計中可采用Case結構來完成,把選擇輸入信號為單極性還是雙極性作為這個Case結構的布爾值輸入。數據采集驅動程序框圖如圖2所示。
圖2 調用DLL的數據采集驅動程序框圖
圖2中4個CLF節點分別用來調用OpenUA300,minitz,readdataz,CloseUA300這四個函數。
對于LabVIEW與DLL函數之間傳遞數組類型數據,無論采用何種數組格式進行傳遞,都需要在LabVIEW中為數組預先分配空間,也就是給該數組開辟緩存,不然會導致程序崩潰。該程序在采集數據前預先為其初始化一個二維數組空間,為了使采集到的數據在數組中的位置始終對應于采樣的每一通道,初始化數組空間時設置每通道采樣點數為行,采集通道數為列,這樣數據從采集卡FIFO存入緩存時,每一列對應每一通道的數據,省去了后續通過循環索引出各通道數據的繁瑣。
為了實現數據的連續采集,系統應保持在循環狀態,設計中采用While循環來實現這一功能,但是LabVIEW在執行While循環時,如果用戶沒有給它設定循環時間間隔,則它將以CPU的極限速度運行。這樣可能會導致整個LabVIEW程序看上去像死機一樣,所以需要給While循環加上一個指定的時間間隔。
在采集前首先設置采樣通道、采樣頻率、采樣點數、增益和數據傳輸方式等參數,該接口驅動的前面板見圖3。
圖3 數據采集驅動程序前面板
4 結 語
由此可以看出,在LabVIEW中調用動態鏈接庫函數,來驅動普通數據采集卡的技術,顯示出了LabVIEW強大的外部程序接口能力。應用此方法設計數據采集系統一方面可充分利用LabVIEW的界面友好、圖形顯示和虛擬儀器強大的開發功能等優點;另一方面又能大大降低系統的開發成本,可以使LabVIEW在對硬件的支持上有一個質的飛躍。
通過LabVIEW的外部程序接口CLF節點訪問動態鏈接庫來調用Windows標準庫函數,使得LabVIEW支持的數據采集板卡范圍突破了限制,同時也為LabVIEW訪問底層函數提供了一種新的思路。
參考文獻
[1]魏海燕,楊建新,都鼎新,等.基于LabVIEW的虛擬儀器開發[J].機械工程師,2004(4):50-51.
[2]Using External Code in LabVIEW[Z].National Instruments LabVIEW User Manual,2000.
[3]張凱,周陬,郭棟.虛擬儀器工程設計與開發[M].北京:國防工業出版社,2004.
[4]林康紅,唐海峰.動態鏈接庫DLL在虛擬儀器中的應用[J].計算機應用,2002(5):56-60.
[5]熊煥庭.在LabVIEW中數據采集卡的三種驅動方法[J].電測與儀表,2001,38(8):35-37.
[6]楊樂平,李海濤.LabVIEW高級程序設計[M].北京:清華大學出版社,2003.
[7]龍志強,呂治國.LabVIEW與通用數據采集卡的接口方法研究[J].微計算機信息,2001(9):11-13.
[8]北京優采測控有限公司.UA301A型A/D采集器使用說明[Z].2003.
[9]李廣軍,王厚軍.實用接口技術[M].成都:電子科技大學出版社,1998.
[10]陳錫輝,張銀鴻.LabVIEW8.20程序設計從入門到精通[M].北京:清華大學出版社,2007.