基于LABVIEW平臺(tái)的數(shù)據(jù)采集卡軟件設(shè)計(jì)
作為專業(yè)測(cè)控領(lǐng)域的軟件開發(fā)平臺(tái),LABVIEW內(nèi)含豐富的數(shù)據(jù)采集、數(shù)據(jù)信號(hào)分析以及功能強(qiáng)大的DAQ助手,搭建數(shù)據(jù)采集系統(tǒng)更為輕松,便于硬件設(shè)計(jì)人員直接對(duì)硬件的操控展開設(shè)計(jì)。此外,它可通過(guò)DLL、CIN節(jié)點(diǎn)、ActiveX、.NET或MATLAB腳本節(jié)點(diǎn)等技術(shù),實(shí)現(xiàn)與其它編程語(yǔ)言混合編程,通過(guò)調(diào)用外部驅(qū)動(dòng)代碼使它與設(shè)備的連接變得非常容易。由于采用數(shù)據(jù)流模型,LABVIEW可以自動(dòng)規(guī)劃多線程任務(wù),可充分利用PC系統(tǒng)處理器的處理能力,從而提高模塊的采集效率。本文基于LABVIEW開發(fā)環(huán)境,以庫(kù)函數(shù)節(jié)點(diǎn)的調(diào)用方式及結(jié)構(gòu),實(shí)現(xiàn)了一種中頻數(shù)據(jù)采集與處理卡軟件的設(shè)計(jì)。
數(shù)據(jù)采集卡軟件結(jié)構(gòu)
采集卡軟件是基于PC的數(shù)據(jù)采集系統(tǒng)重要組成部分,它與硬件形成一個(gè)完整的數(shù)據(jù)采集、分析和顯示系統(tǒng),軟件分為上層應(yīng)用程序和驅(qū)動(dòng)程序。上層應(yīng)用程序用以完成數(shù)據(jù)的分析、存儲(chǔ)和顯示等。驅(qū)動(dòng)程序則可直接對(duì)數(shù)據(jù)采集硬件的寄存器編程,管理數(shù)據(jù)采集硬件的操作并把它和處理器中斷、DMA和內(nèi)存這些計(jì)算機(jī)資源結(jié)合在一起。
驅(qū)動(dòng)程序隱藏了復(fù)雜的硬件底層編程細(xì)節(jié),為用戶提供容易理解的接口。NI公司為基于NI數(shù)據(jù)采集設(shè)備的數(shù)據(jù)采集系統(tǒng)提供了相應(yīng)的接口驅(qū)動(dòng)及VI函數(shù) (VI,Virtual Instrument)。對(duì)于一些不常見的硬件設(shè)備或用戶研發(fā)的硬件設(shè)備,NI沒有提供合適的驅(qū)動(dòng)。但是,如前所述,LABVIEW還提供了很多其它的通信接口,包括調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)(Call Library Function Node, CLF)、代碼接口節(jié)點(diǎn)(Code Interface Node, CIN)、TCP/IP、Data Socket、OPC、共享變量、DDE和.NET等。通過(guò)這些通信接口,LABVIEW能夠?qū)崿F(xiàn)與任何設(shè)備的通信。值得留意的是LABVIEW具有調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)和代碼接口節(jié)點(diǎn)兩種方法,可以結(jié)合C語(yǔ)言的編程靈活性和LABVIEW G語(yǔ)言的直觀便捷特點(diǎn),大幅提高LABVIEW對(duì)用戶數(shù)據(jù)采集卡的軟件設(shè)計(jì)支持??蛇M(jìn)一步利用LABVIEW豐富的數(shù)據(jù)分析資源,節(jié)約系統(tǒng)開發(fā)成本。
LABVIEW提供的數(shù)據(jù)采集卡的常用驅(qū)動(dòng)方式有兩種,調(diào)用C語(yǔ)言源代碼方式(CIN方式),以及調(diào)用動(dòng)態(tài)鏈接庫(kù)方式(CLF方式)。
CIN方式是實(shí)現(xiàn)LABVIEW與C語(yǔ)言混合編程的一種媒介,CIN通過(guò)輸入、輸出端口實(shí)現(xiàn)兩種語(yǔ)言之間的數(shù)據(jù)傳遞。輸入、輸出端口的個(gè)數(shù)可由設(shè)計(jì)者根據(jù)實(shí)際需要確定,當(dāng)LABVIEW的程序運(yùn)行到CIN節(jié)點(diǎn)時(shí),數(shù)據(jù)由CIN的輸入端口傳遞給C源代碼圖標(biāo),程序轉(zhuǎn)去執(zhí)行C源代碼,代碼執(zhí)行完后,執(zhí)行的數(shù)據(jù)結(jié)果由CIN輸出端口返回至LABVIEW。
CLF是一種動(dòng)態(tài)鏈接庫(kù)(DLL)的調(diào)用方式。DLL是一種應(yīng)用程序在運(yùn)行時(shí)與庫(kù)文件連接起來(lái)的技術(shù),在WINDOWS的管理下,應(yīng)用程序與對(duì)應(yīng)DLL之間建立鏈接關(guān)系,根據(jù)鏈接產(chǎn)生的重定位信息,轉(zhuǎn)去執(zhí)行DLL中相應(yīng)的代碼。LABVIEW中,可通過(guò)CLF(調(diào)用路徑為Function>>Advanced>>Call Library Function)功能模塊實(shí)現(xiàn)調(diào)用。
調(diào)用CIN節(jié)點(diǎn)需要有C語(yǔ)言編程的支持,它能夠?qū)⒋a集成在VI中作為單獨(dú)的一個(gè)VI發(fā)布,CIN 支持的參數(shù)類型比DLL 函數(shù)多,可使用LABVIEW 定義的任何參數(shù)類型,但制作CIN的過(guò)程復(fù)雜得多。使用這種方法的缺點(diǎn)是在數(shù)據(jù)采集過(guò)程中不能實(shí)時(shí)地進(jìn)行數(shù)據(jù)的顯示,只能在數(shù)據(jù)全部采集結(jié)束后再一起顯示所采集的全部數(shù)據(jù),這樣在需要較高執(zhí)行效率的場(chǎng)合就不適用。其次由于CIN節(jié)點(diǎn)在制作數(shù)據(jù)采集卡的驅(qū)動(dòng)時(shí),需要提供采集卡的硬件參數(shù),需編制對(duì)硬件設(shè)備進(jìn)行底層操作的庫(kù)函數(shù),對(duì)于不清楚函數(shù)內(nèi)核的程序員不適用。相比CIN方式,CLF方式更加簡(jiǎn)單易學(xué),開發(fā)者只需要熟悉DLL中的各個(gè)函數(shù)功能以及函數(shù)的參數(shù)及類型,在本文設(shè)計(jì)中,擬采用CLF方式實(shí)現(xiàn)驅(qū)動(dòng)程序的調(diào)用。
基于CLF方式的采集卡軟件設(shè)計(jì)
本文所涉及的軟件控制對(duì)象是一款中頻數(shù)據(jù)采集與處理卡,具有14位A/D精度,最高采樣頻率為105MHz,4路模擬量輸入,提供高精度中頻信號(hào)數(shù)字化、多通道、多模式數(shù)字下變頻(DDC)等數(shù)字處理,軟件結(jié)構(gòu)詳見圖1。
圖1 采集卡的軟件結(jié)構(gòu)
圖2 VI的層級(jí)結(jié)構(gòu)
LABVIEW應(yīng)用程序分為用戶界面和圖標(biāo)代碼,通過(guò)搭建和調(diào)用子VI編寫主體程序,各VI利用LABVIEW的CLF技術(shù)調(diào)用動(dòng)態(tài)鏈接庫(kù)中的驅(qū)動(dòng)函數(shù),實(shí)現(xiàn)與硬件設(shè)備的數(shù)據(jù)交換。子VI將基本的驅(qū)動(dòng)函數(shù)進(jìn)行功能封裝。一個(gè)完整的LABVIEW應(yīng)用程序通常由若干個(gè)子VI及其外部編程連線構(gòu)成,VI的層級(jí)結(jié)構(gòu)設(shè)計(jì)是設(shè)計(jì)虛擬儀器驅(qū)動(dòng)程序的核心,各VI分別為組成驅(qū)動(dòng)程序的模塊化子程序。設(shè)計(jì)中,動(dòng)態(tài)鏈接庫(kù)由VC編寫,調(diào)用底層的驅(qū)動(dòng)函數(shù)與設(shè)備通信。軟件包括兩類子VI函數(shù)集合,一類是低層組件VI集合,分為若干個(gè)獨(dú)立的軟件功能模塊,每個(gè)模塊負(fù)責(zé)控制儀器的某項(xiàng)特殊功能,這類VI是儀器驅(qū)動(dòng)程序的基礎(chǔ);另一類為高層應(yīng)用VI集合,應(yīng)用VI通過(guò)調(diào)用合適的組件VI以實(shí)現(xiàn)最通常的儀器設(shè)置和測(cè)量任務(wù)。顯然,就驅(qū)動(dòng)程序開發(fā)而言,能否根據(jù)硬件特性成功構(gòu)建組件VI集合是關(guān)鍵所在。VI層次結(jié)構(gòu)如圖2所示。
如圖所示,按功能有兩個(gè)高層應(yīng)用子VI集合:Config.vi,Config DDC.vi,這兩個(gè)子VI又分別調(diào)用低層組件子VI來(lái)完成特定的設(shè)置、配置任務(wù)。Config.vi完成采集卡的常規(guī)配置,例如對(duì)采集卡單次采集數(shù)量、FIFO滿深度、寄存器(硬件通道、時(shí)鐘、觸發(fā)、采集方式、采集模式等的控制)設(shè)置、采集卡的狀態(tài)查詢等;Config DDC.vi完成DDC的所有配置工作,包括對(duì)DDC的模式、抽取率、輸出格式、本振頻率、本振相位、增益、CFIR濾波參數(shù)、PFIR濾波參數(shù)等的設(shè)置,從而實(shí)現(xiàn)DDC的數(shù)字IQ分離、抽取、數(shù)字濾波、重采樣、多級(jí)增益調(diào)節(jié)、多種調(diào)制方式的解調(diào)等功能。其余低層組件VI實(shí)現(xiàn)設(shè)備的打開關(guān)閉、數(shù)據(jù)從數(shù)據(jù)采集卡到主機(jī)內(nèi)存的傳送、數(shù)據(jù)保存等。無(wú)論應(yīng)用子VI或組件子VI均為獨(dú)立可執(zhí)行程序,實(shí)現(xiàn)特定功能,各VI函數(shù)作為提供給用戶進(jìn)行系統(tǒng)應(yīng)用開發(fā)所需的各類操作。采用該結(jié)構(gòu),能夠使用戶在運(yùn)行時(shí)修改虛擬儀器系統(tǒng)的運(yùn)行邏輯與人機(jī)界面,可立即執(zhí)行,因此在用戶需要改變需求的情況下能迅速適配,數(shù)據(jù)采集卡具有可重構(gòu)的特點(diǎn),用戶也不必去關(guān)心硬件的實(shí)現(xiàn)細(xì)節(jié)。
評(píng)論