林立杰 胡志英
摘 要: 對(duì)于NI公司的低成本多用途數(shù)據(jù)采集板卡PCI?6220,給出了一些VC++應(yīng)用程序設(shè)計(jì)。首先介紹了該板卡的功能特性,其次對(duì)該板卡的測(cè)試和應(yīng)用方法進(jìn)行了研究,結(jié)合該板卡的功能特性,調(diào)用API庫(kù)函數(shù)進(jìn)行編程設(shè)計(jì),使其適合于該板卡的應(yīng)用場(chǎng)合。
關(guān)鍵字: 板卡功能; 數(shù)據(jù)采集; 采樣率; 軟件編程
中圖分類號(hào): TN911?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)01?0147?03
Abstract: Design of some VC++ application programs is given for the low?cost and multi?purpose data acquisition card PCI?6220. The card′s function features are introduced. The card′s test and application methods are researched. In combination with the card′s function features, the functions called from the API Library are used for programming design, make them suitable for application occasions of the card.
Keywords: card function; data acquisition; sample rate; soft programming
0 引 言
NI?DAQmx是NI公司數(shù)據(jù)采集驅(qū)動(dòng)軟件的簡(jiǎn)稱,是用于NI數(shù)據(jù)采集(DAQ)設(shè)備通信、能夠?yàn)樵O(shè)備配置虛擬通道和測(cè)量任務(wù)的圖形化工具,可基于虛擬通道和任務(wù)生成NI?DAQmx代碼,提供速度快的單點(diǎn)模擬I/O和多線程設(shè)計(jì); 無需連接實(shí)際的硬件,方便應(yīng)用程序的測(cè)試和修改等。
NI PCI?6220屬于M系列板卡,該系列的板卡都使用NI公司數(shù)據(jù)采集驅(qū)動(dòng)軟件NI?DAQmx。每個(gè)驅(qū)動(dòng)都有自己的API函數(shù),包括相應(yīng)的硬件配置和軟件配置。M系列板卡有多達(dá)16種編程功能接口信號(hào)。M系列設(shè)備板卡使用板上振蕩器生成一個(gè)40 MHz的頻率時(shí)鐘,為板卡提供時(shí)鐘源。
1 功能特性
1.1 模擬數(shù)據(jù)采集功能
板卡具有16路分辨率為16位的模擬輸入端口,模擬輸入接線方式可以按照8路差分方式(AI0~AI7:AI8~AI15),也可以按照16路單端接地方式,設(shè)計(jì)者可以根據(jù)信號(hào)抗干擾性要求進(jìn)行選擇。
板卡最大采樣率為250 KS/s單通道采樣或者按照所有通道總和采樣率為250 KS/s進(jìn)行。實(shí)際采樣率可以由設(shè)計(jì)者在相應(yīng)API函數(shù)中按照實(shí)際需要進(jìn)行設(shè)置,并不需要設(shè)置為最大值。模擬電壓輸入最大電壓能夠承受±10 V。
1.2 數(shù)字I/O功能
板卡具有24條數(shù)字I/O線,8路高速可達(dá)1 MHz時(shí)鐘線,可以通過編程實(shí)現(xiàn)數(shù)字信號(hào)讀和數(shù)字信號(hào)輸出功能。
1.3 觸發(fā)計(jì)時(shí)功能
板卡具有2個(gè)32位80 MHz計(jì)時(shí)器,可以通過計(jì)時(shí)觸發(fā)控制輸出0.5 ms級(jí)脈沖波形。
2 板卡測(cè)試及應(yīng)用研究
在板卡應(yīng)用前需要明確以下概念:
(1) 物理通道和虛擬通道
物理通道表示直接在上面測(cè)量、產(chǎn)生電壓或數(shù)字信號(hào)的物理管腳或終端。例如物理通道標(biāo)示為Dev0/ai1,表示設(shè)備標(biāo)識(shí)符為Dev0,通道標(biāo)識(shí)符為ai1,為模擬輸入通道1。而虛擬通道則與每次測(cè)量任務(wù)相結(jié)合,對(duì)應(yīng)于各物理通道及其設(shè)置,包括在端口連接、測(cè)量或生成的信號(hào)類型、縮放信息。在NI?DAQmx 中,各項(xiàng)測(cè)量都不能缺少虛擬通道。通過配置虛擬通道作為任務(wù)的一部分或獨(dú)立于一個(gè)任務(wù)。
(2) 任務(wù)
任務(wù)是具有定時(shí)、觸發(fā)或其他特性的一個(gè)或多個(gè)虛擬通道。理論上,任務(wù)就是要執(zhí)行的測(cè)量任務(wù)或生成信號(hào)任務(wù)??梢栽谌蝿?wù)中設(shè)置或者保存所有的配置信息,并且可以將任務(wù)用于應(yīng)用程序。
(3) 采樣率
數(shù)據(jù)采集需要考慮采樣類型,PCI?6220板卡采樣類型有DAQmx_Val_ContSamps連續(xù)采樣和DAQmx_Val_FiniteSamps 有限采樣兩種。連續(xù)采樣表示在一段時(shí)間內(nèi)不間斷對(duì)端口讀數(shù)據(jù),而有限采樣表示點(diǎn)擊一次即采集一次數(shù)據(jù)。采樣率通常又被稱為掃描率(the Scan Rate),采樣率越高,采集的信號(hào)精度就越高。
2.1 板卡應(yīng)用前測(cè)試
在機(jī)器PCI插槽插入NI PCI?6220板卡后,安裝驅(qū)動(dòng)程序,需檢測(cè)板卡功能是否正常。 運(yùn)行NI公司提供的Measurement &Automation Explorer軟件,點(diǎn)擊“設(shè)備和接口”項(xiàng)目下出現(xiàn)的“NI PCI?6220(68?pin):“Dev1”選項(xiàng),如圖1所示。點(diǎn)擊右邊欄“自檢”,檢驗(yàn)設(shè)備是否安裝自檢正常。
2.2 模擬輸入采集
模擬輸入通常采用單端輸入和差分輸入方式。單端輸入表示信號(hào)一端接輸入端口,另一端接公共參考地,單端輸入連接如圖2所示。差分輸入表示信號(hào)兩端分別輸入給兩個(gè)模擬輸入端,信號(hào)大小為兩個(gè)模擬輸入端電壓差,差分輸入連接如圖3所示。通常建議采用差分輸入方式,這種方法抗干擾能力強(qiáng),能較好抑制共模電壓輸入影響。
2.3 測(cè)量流程圖
圖4舉例描述創(chuàng)建測(cè)量電壓的模擬輸入測(cè)量流程,與數(shù)字I/O的測(cè)量流程類似,只需替換其中的測(cè)量函數(shù)。
3 應(yīng)用編程設(shè)計(jì)[1?2]
為使用NI DAQmx API函數(shù),需要在VC++ 6.0的“project?>Settings?>Link”下鏈接庫(kù)文件NIDAQmx.lib,同時(shí)在程序中引用頭文件NIDAQmx.h。
3.1 模擬輸入編程[3?4]
如果需要讀取通道第0~5和第15通道的單端連續(xù)電壓,其測(cè)量范圍為0~10 V。如2.3節(jié)所示,測(cè)量前需要?jiǎng)?chuàng)建通道,生成測(cè)量任務(wù)DAQmxCreateTask("",&*phTaskHandle);申明DAQmxCreateAIVoltageChan(*phTaskHandle,"Dev1/ai0:5,Dev1/ai15","",DAQmx_Val_RSE,0,10.0,DAQmx_Val_Volts,NULL);然后開啟任務(wù)DAQmxStartTask(*phTaskHandle);最后調(diào)用函數(shù)DAQmxReadAnalogF64(hTaskHandle,?1,1,DAQmx_Val_GroupByChannel ,fReadData,7,&nReadVal,NULL);將7個(gè)數(shù)據(jù)不間斷地讀取到fReadData中。在WindowsXP操作系統(tǒng)下,為了提高實(shí)時(shí)性,可以調(diào)用硬件定時(shí)精度函數(shù)QueryPerformanceCounter進(jìn)行計(jì)時(shí),可精確到1 ms。
3.2 數(shù)字I/O輸入編程[5]
如果需要讀取PORT1的數(shù)字I/O通道數(shù)據(jù),測(cè)量前也需要?jiǎng)?chuàng)建通道,生成測(cè)量任務(wù)DAQmxCreateTask("",&*phTaskHandle);然后調(diào)用申明虛擬通道的函數(shù)DAQmxCreateDIChan(*phTaskHandle,"Dev1/port1/line0:7","",DAQmx_Val_ChanForAllLines));開啟任務(wù)DAQmxStartTask(*phTaskHandle);再調(diào)用讀所有通道數(shù)據(jù)的函數(shù)DAQmxReadDigitalLines(hTaskHandle,1,10.0,DAQmx_Val_GroupByChannel,nReadData,8,&nReadNum,&nBytesPerSamp,NULL),讀取8個(gè)數(shù)據(jù)。
3.3 數(shù)字I/O輸出波形編程[6]
通過數(shù)字I/O通道輸出數(shù)字波形相對(duì)于前面兩種編程模式要復(fù)雜,需要用到計(jì)時(shí)觸發(fā)功能。特別是如果要輸出兩路有關(guān)聯(lián)性的脈沖波形,需要算出兩路脈沖波形之間的最小計(jì)時(shí)波形精度。這里給出通過計(jì)時(shí)器CTRO計(jì)時(shí)、PORT0的0和1端口輸出關(guān)聯(lián)脈沖精度的編程方法。首先創(chuàng)建計(jì)時(shí)任務(wù)DAQmxCreateTask("",&*phTaskHandle),其中phTaskHandle為計(jì)時(shí)任務(wù)句柄指針;調(diào)用DAQmxCreateCOPulseChanFreq(*phTaskHandle,"Dev1/ctr0","",DAQmx_Val_Hz,DAQmx_Val_Low,0.0,UpdateRate,0.50)函數(shù)生成0.5 ms精度的計(jì)時(shí)脈沖頻率,其中UpdateRate約束為1/0.5 ms;調(diào)用函數(shù)DAQmxCreateTask("",wdTaskHandle)創(chuàng)建輸出脈沖波形任務(wù),其中wdTaskHandle表示脈沖輸出任務(wù)指針;接著調(diào)用DAQmxCreateDOChan(*wdTaskHandle,"Dev1/port0/line0:1","",DAQmx_Val_ChanPerLine )函數(shù)申明虛擬任務(wù)通道;再調(diào)用DAQmxCfgSampClkTiming(*wdTaskHandle,"/Dev1/Ctr0InternalOutput",UpdateRate,DAQmx_Val_Falling,DAQmx_Val_FiniteSamps,nBufLength)函數(shù)表示CTR0內(nèi)部輸出計(jì)時(shí)屬性為下降沿、有限采樣;接著調(diào)用函數(shù)DAQmxWriteDigitalLines (*wdTaskHandle, nBufLength, 0, 10.0, DAQmx_Val_GroupByChannel, uDataBuf, NULL, NULL)申明寫數(shù)據(jù)線方式輸出uDataBuf內(nèi)包含的數(shù)據(jù),連續(xù)啟動(dòng)計(jì)時(shí)任務(wù)和波形輸出任務(wù)后開始執(zhí)行波形輸出任務(wù)。
4 結(jié) 論
在PCI?6220板卡模擬輸入試驗(yàn)中,要充分注意到差分方式和單端方式采集電壓的不同,信號(hào)接地方式將會(huì)影響到電壓采集的真實(shí)性,如果通道數(shù)目足夠,盡量采樣差分方式采集模擬信號(hào)。
波形輸出編程需要精確考慮計(jì)時(shí)觸發(fā)的時(shí)間精度,尤其對(duì)于輸出關(guān)聯(lián)脈沖波形來說,需要計(jì)算在計(jì)時(shí)精度條件下波形編碼方式,即0、1信號(hào)的數(shù)量,以此確定輸出數(shù)據(jù)緩沖區(qū)的大小和長(zhǎng)度。
上述編程方式經(jīng)過一定實(shí)驗(yàn)驗(yàn)證,表明該采集板卡對(duì)慢變信號(hào)、高速信號(hào)等模擬輸入信號(hào)以及數(shù)字I/O信號(hào)都能夠很好地完成數(shù)據(jù)采集任務(wù)。脈沖波形輸出的編程流程更復(fù)雜化,需要考慮的方面更多,本文在這里提供參考。
參考文獻(xiàn)
[1] LRINRVKRT R C. Visual C++ Bible[M].北京:電子工業(yè)出版,1999.
[2] 徐曉剛,高兆法,王秀娟.Visual c 6.0入門與提高[M].北京:清華大學(xué)出版社,1999.
[3] 崔常府.基于NI的計(jì)算機(jī)控制程序開發(fā)[D].青島:中國(guó)石油大學(xué)(華東),2009.
[4] 李凈,楊俊武,錢旭.用多媒體定時(shí)器精確控制采樣頻率[J].計(jì)算機(jī)應(yīng)用,2000(12):67?68.
[5] 陳銀輝,張銀鴻.LabView 8.20程序設(shè)計(jì)從入門到精通[M].北京:清華大學(xué)出版社,2007.
[6] 黃松嶺.虛擬儀器設(shè)計(jì)基礎(chǔ)教程[M].北京:清華大學(xué)出版社,2008.