摘要: 紹一種基于PCI總線結(jié)構(gòu)、16路模擬輸入、DMA中斷方式數(shù)據(jù)采集系統(tǒng)的硬件組成,及其在Visual C++ 6.0環(huán)境下的軟件開(kāi)發(fā)。整個(gè)系統(tǒng)具有同步誤差小,操作簡(jiǎn)單、易于調(diào)試、采樣速度快等特點(diǎn),且系統(tǒng)功能模塊化增加了其擴(kuò)展與兼容性。重點(diǎn)介紹了PCI-1711驅(qū)動(dòng)方式與采用的數(shù)據(jù)處理技術(shù)。經(jīng)現(xiàn)場(chǎng)檢測(cè)試驗(yàn)表明,本系統(tǒng)采集數(shù)據(jù)速率快、誤差小(小于1%),兼容可擴(kuò)展性強(qiáng)。
關(guān)鍵詞: PCI-1711;數(shù)據(jù)采集;句柄;Visual C++6.0;驅(qū)動(dòng)設(shè)計(jì);DMA
隨著社會(huì)的發(fā)展,減少事故帶來(lái)的經(jīng)濟(jì)損失和人身安全提上日程,各種設(shè)備的狀態(tài)監(jiān)測(cè)與故障診斷已越來(lái)越重要了,它不僅涉及到常見(jiàn)的加工機(jī)床、鉆機(jī)井架等,在高科技如航空航天等更為如此。近年來(lái),振動(dòng)與噪聲理論、測(cè)試技術(shù)、信號(hào)分析與數(shù)據(jù)處理技術(shù)、計(jì)算機(jī)技術(shù)及其他相關(guān)基礎(chǔ)科學(xué)的發(fā)展,為設(shè)備狀態(tài)監(jiān)測(cè)與故障診斷技術(shù)提供良好的理論基礎(chǔ)。各種設(shè)備狀態(tài)監(jiān)測(cè)與故障診斷無(wú)不以設(shè)備狀態(tài)的數(shù)據(jù)采集為前提。而專門(mén)的數(shù)據(jù)采集卡往往又比較昂貴。下面介紹基于一種經(jīng)濟(jì)實(shí)用采集卡PCI-1711的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)。該系統(tǒng)基于16位PCI總線結(jié)構(gòu),16路單端模擬量輸入,12位A/D轉(zhuǎn)換器采樣速率可達(dá)100KHz,1K緩存的連續(xù)采樣和實(shí)時(shí)存儲(chǔ)功能等。
一、系統(tǒng)硬件介紹
組成硬件:計(jì)算機(jī)一臺(tái)(內(nèi)存256M以上)、傳感器、PCI-1711采集卡。
本數(shù)據(jù)采集系統(tǒng)所采用的PCI-1711是華研公司出品的一款經(jīng)濟(jì)實(shí)用的數(shù)據(jù)采集卡, 其主要特點(diǎn)[1][2]有: 16 位PCI 總線接口, 完全符合PCI規(guī)格Rev2.1標(biāo)準(zhǔn),支持即插即用。在安裝插卡時(shí),用戶不需要設(shè)置任何跳線和DIP撥碼開(kāi)關(guān)。靈活的輸入類型和范圍設(shè)定PCI-1711/1711L有一個(gè)自動(dòng)通道/增益掃描電路。在采樣時(shí),這個(gè)電路可以自動(dòng)完成對(duì)多路選通開(kāi)關(guān)的控制。用戶可以根據(jù)每個(gè)通道不同的輸入電壓類型來(lái)進(jìn)行相應(yīng)的輸入范圍。所選擇的增益值將儲(chǔ)存在SRAM中。這種設(shè)計(jì)保證了為達(dá)到高性能數(shù)據(jù)采集所需的多通道和高速采樣??ㄉ咸峁┝薋IFO(先進(jìn)先出)存儲(chǔ)器,可儲(chǔ)存1KA/D采樣值??ㄉ峡删幊逃?jì)數(shù)器,可用于A/D轉(zhuǎn)換時(shí)的定時(shí)觸發(fā)。16路數(shù)字輸入和16路數(shù)字輸出,使用戶可最大靈活的根據(jù)自己的需要來(lái)應(yīng)用。
二、驅(qū)動(dòng)方式
PCI-1711的軟件開(kāi)發(fā)包包含用于多種語(yǔ)言的函數(shù)接口[1] [3][4],包括:Driver.h和Adsapi32.lib 兩個(gè)文件。在Visual C++6.0開(kāi)發(fā)環(huán)境下,使用這些函數(shù)的關(guān)鍵是在FilevView視圖下的增加Driver.h,和中增Adsapi32.lib,并在StdAfx.h全局頭文件中包含如下語(yǔ)句:#include “…\\Driver.h”,采集實(shí)現(xiàn)過(guò)程如圖所示。
由于驅(qū)動(dòng)程序采用面向?qū)ο缶幊?,所以要使用設(shè)備的一切功能,則必須先用函數(shù)DRV_DeviceOpen()創(chuàng)建一個(gè)設(shè)備對(duì)象句柄DriverHandle 。程序如下:
ErrCde=DRV_DeviceOpen(0,(LONG far*)DriverHandle);
if(ErrCde!=SUCCESS)
{ strcpy(szErrMsg,\"Device open error!\");
MessageBox((LPCSTR)szErrMsg,\"Device Open\",MB_OK);
return;
}
有了這個(gè)句柄就有了對(duì)該設(shè)備的控制權(quán)。然后將些句柄作為參數(shù)傳遞給其他函數(shù),如DRV_DeviceGetFeatures到得設(shè)備設(shè)置,DRV_AIConfig可配置設(shè)備增益,RV_DioWritePortByte可用于數(shù)據(jù)輸出,DRV_DeviceClose釋放句柄。
三、軟件設(shè)計(jì)
為增加系統(tǒng)容錯(cuò)性,可移植性,可維護(hù)性,本軟件統(tǒng)一由Visual C++6.0語(yǔ)言MFC方式編寫(xiě)數(shù)據(jù)處理程序,為提高數(shù)據(jù)實(shí)時(shí)采集速度和減少CPU占有率,采用基于DMA方式采集數(shù)據(jù),為了便于實(shí)現(xiàn)其各功能,基于面向?qū)ο蟮某绦蛟O(shè)計(jì)思想把系統(tǒng)各個(gè)功能模塊化處理[5]。
(一)基本思想
把采集的數(shù)據(jù)實(shí)時(shí)處理.一方面圖形顯示(默認(rèn)界面),或數(shù)據(jù)顯示;一方面實(shí)時(shí)存儲(chǔ),以備查閱或后續(xù)處理.這里重點(diǎn)介紹本軟件采用的數(shù)據(jù)處理技術(shù)。
數(shù)據(jù)預(yù)處理
在數(shù)據(jù)采集過(guò)程中,由于各種偶然因素的干擾,所采集電壓信號(hào)明顯偏離正常值,。如果不將這些偶然異常電壓剔除,就會(huì)歪曲采集結(jié)果。結(jié)合硬件的性能指標(biāo),采用限幅方式剔掉偏離電壓。
|X2X1|<△X (1)
式中:X2 與 X1是 相鄰的兩個(gè)采集值,△X 是限幅尺度。
如果X2與X1差值的絕對(duì)值小于△X,系統(tǒng)認(rèn)為采集的是正常值,反之系統(tǒng)認(rèn)為是異常值。
2.滑動(dòng)平均
每采進(jìn)一個(gè)新數(shù)據(jù)就將臨時(shí)緩沖區(qū)最早存儲(chǔ)的那個(gè)數(shù)據(jù)丟掉,認(rèn)為包含新值在內(nèi)的臨時(shí)緩沖區(qū)內(nèi)的所有數(shù)據(jù)的算術(shù)平均值或加權(quán)平均值是最新采集的一個(gè)值,該方法是數(shù)字濾波常用的一種有效方法。
Y1= (X1+X2+…X256)/256;
Y1= (X2+X3+…X257)/256
…
(二)DMA方式數(shù)據(jù)采集的編程實(shí)現(xiàn)
在計(jì)算機(jī)對(duì)采集的數(shù)據(jù)進(jìn)行處理時(shí)存在一個(gè)瓶頸, 就是采集與傳輸數(shù)據(jù)的速度。采用DMA傳送方式可以將采集的數(shù)據(jù)直接存入存儲(chǔ)器, 避免使用CPU 的寄存器, 從而實(shí)現(xiàn)數(shù)據(jù)的高速采集。首先要獲得設(shè)備句柄DriverHandle 以便使用PCI 設(shè)備。然后配置各項(xiàng)硬件參數(shù), 包括://取得設(shè)備設(shè)置
ptDevFeatures.buffer=(LPDEVFEATURES)DevFeatures;
ptDevFeatures.size=sizeof(DEVFEATURES);
// 配置設(shè)備增益ptAIConfig.DasGain=
DevFeatures.glGainList[gwGain].usGainCde;
ptAIConfig.DasChan=gwChannel; //采集通道電壓
ptAIVoltageIn.chan=gwChannel;
ptAIVoltageIn.gain=ptAIConfig.DasGain;
ptAIVoltageIn.TrigMode=0;
ptAIVoltageIn.voltage=(FLOAT far*)fVoltage;
啟動(dòng)設(shè)備工作和計(jì)時(shí)器計(jì)時(shí), 循環(huán)采集AD數(shù)據(jù)。
四、結(jié)束語(yǔ)
本數(shù)據(jù)采集系統(tǒng)應(yīng)用PCI 總線作為傳輸介質(zhì),以采集卡PCI-1711為核心硬件,開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序并用Visual C++6.0編寫(xiě)數(shù)據(jù)處理程序同時(shí)把采集處理過(guò)的數(shù)據(jù)用圖形和列表顯示;使用DMA方式采集數(shù)據(jù),使系統(tǒng)不僅具有良好的采集速度和很好的程序移植性;而所采集數(shù)據(jù)誤差很小,完全滿足實(shí)際工程要求。
參考文獻(xiàn):
[1]李永忠.實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)中定時(shí)程序的設(shè)計(jì)[J].南陽(yáng)師范學(xué)院學(xué)報(bào),2006,6: 88-90.
[2] http://product.pcpop.com/000111332/Detail.html.
[3] PCL-1711L數(shù)據(jù)采集卡用戶手冊(cè)[M].2003.兵工自動(dòng)化,2007,26(2):60
[4] 高龍,閔琴.基于LabVIEW和PCI-1711的高速數(shù)據(jù)采集系統(tǒng).
[5] 何瑾,張燁君,于彤彥.基于PCI 總線的數(shù)據(jù)采集卡的設(shè)計(jì)[J] .現(xiàn)代電子技術(shù), 2006