摘 要:详细介绍了PXI模块化仪器系统中NI公司E系列PXI卡,在VC++环境下进行数据采集与处理的方法。
关键词:PXI;VC++ 数据采集与处理
PXI模块化仪器系统是建立在PXI总线体系结构上的虚拟仪器系统, PXI(PCI Extensions for Instrumentation)是CompactPCI总线体系在自动测试领域的扩展。它充分利用了现代计算机技术、PC机主流技术的最新进展。PXI模块仪器系统自1997年10问世以来,由于其高性能、低价格,受到各方面从事测量的工程技术人员的关注。PXI这一自动测试领域里的新星,正愈来愈受到人们的青睐。
NI公司的E系列PXI卡,提供了大量的函数供开发者使用,现把在VC++环境下进行数据采集与处理的方法介绍如下:
1.进行数据采集的几个重要函数
1.1单通道数据采集函数DAQ_Op
* 函数原形:
DAQ_Op (deviceNumber, chan, gain, buffer, count, sampleRate)
* 参数说明:
deviceNumber 模拟输入通道所在的多功能卡号
chan 模拟输入通道号
gain 通道的放大倍数
buffer 数据存放的数组
count 数据采集的数量
sampleRate 数据采集速率
* 功能:
对单个通道进行数据采集。比如DAQ_Op (1,0,1,c,32000,4000),表示多功能卡号为1,采样通道为1号卡的0通道,该通道的放大倍数为1,数据存放在数组c中,共采样32000个点,采样速率为每秒4000个点。
1.2数据换算函数 DAQ_Vscale:
由于样品数据为二进制数,需要换算成十进制数值才能进行数据运算,该函数正好完成了此项功能。
* 函数原形:
DAQ_VScale (deviceNumber, chan, gain, gainAdjust, offset, count, binArray, voltArray)
* 参数说明:
deviceNumber 模拟输入通道所在的多功能卡号
chan 模拟输入通道号
gain 通道的放大倍数
gainAdjust 调整通道的放大倍数
offset 数据处理过程中的误差校准量
count 需要处理的数组长度
binArray 需处理的数组
voltArray 处理结果
* 功能:
把采样数据由二进制数据换算成十进制数据。比如DAQ_VScale(1,0,1,1,0,32000,c,a)完成了对1 号卡的0通道采集数据的变换,放大倍数为1,放大倍数调节为1,误差校准量为0,需要处理的数据量为32000,需要变换的数据存放在c数组中,变换结果存放在a数组中。
1.3多通道数据采集函数SCAN_Op。
函数原形同单通道采集函数,不再重述,仅举例说明用法。
比如SCAN_Op(1,5,chan,gain,c,70000,10000,0)表示对1号卡的5个通道进行数据采集,5个通道号存放在chan数组中,根据需要定,如可定为{1,3,4,5,8};5个通道的放大倍数存放在数组gain中,采样结果存放在数组c中,采样数为70000,采样速率为每秒10000个点。
1.4数据调整函数SCAN_Sequence_Demux:
由于多通道采样是循环采样,为了把每一个通道的数据存放在一起,需要对采样结果进行调整。
* 函数原形:
SCAN_Sequence_Demux (numChans, chanVector,bufferSize, buffer,samplesPerSequence,scanSequenceVector,samplesPerChannelVector)
* 参数说明:
numChans 通道数
chanVector 存放通道号的数组
bufferSize 需调整的数据量
buffer 样品存放的数组、调整后存放的数组
samplesPerSequence 每一个扫描周期内的样品数
scanSequenceVector 每一个扫描周期内样品的存放顺序
samplesPerChannelVector 每个通道的样品数
如SCAN_Sequence_Demux(5,chan,70000,c,5,chan,ffg)表示对5个通道的采样结果进行调整,通道顺序存放在数组chan中,每一个扫描周期内每个通道的样品只有一个,且存放顺序与通道顺序相同,调整后的结果存放于c数组中,每个通道的数据个数存放于数组ffg中。
2.程序的实现:
通过下面的程序可以实现对多个通道的数据采集:
short gain[10]={1,1,1,1,1,1,1,1,1,1};
unsigned long ffg[10];
short chan[10]={15,18,19,20,21,22,23,24,25,26};
SCAN_Op(1,10,chan,gain,c,40000,10000,0);
SCAN_Sequence_Demux(10,chan,40000,c,10,chan,ffg);
DAQ_VScale(1,22,1,1,0,40000,c,a);
上面这段函数实现了对十通道进行数据采集, 数组gain[10]定义了需进行数据采集的通道,该卡有64个单端通道(32个差分通道),需要进行数据的通道可以根据需要任意定义。
数据gain[10]定义每个通道的放大倍数,该卡对每一个通道有多种放大倍数进行选择,对于小信号无需外加放大器,可以直接利用卡上的放大器进行放大,提高测试精度。
函数SCAN_Op实现了对十个通道的数据采集,每个通道的采样频率为每秒1000点,每个通道采集4000个点,采样结果存放在数组c中。这里需要注意的是,该函数中的采样频率是每个通道采样频率的和,因而函数中该值为10000;由于该函数进行的是循环采样,数组c中存放的是二进制数据,数据的存放次序为{15,18,19,20,21,22,23,24,25,26,15,18,19,20,21,22,23,24,25,26……}。
函数SCAN_Sequence_Demux是对采样结果进行顺序调整,调整后的数据依然放在数组c中,数据的存放次序变为{15,15,…,18,18,…,19,19,…,…,26},也就是说前4000个点是通道15的,其次为通道18的,依次类推,最后为通道26的数据。
函数DAQ_Vscale完成对数据的换算,把每个通道的值由二进制换算成十进制,便于进行数据分析,换算后的结果存放在数组a中。
由此可见,使用该卡对数据进行采集和处理相当方便,程序也很简单,我们在多个项目中均采用了该卡,效果很好。
1 应用该卡进行数据采集的注意事项
* 该卡的输入范围为±10V,当被采集的信号大于10V时,需要在采样前对信号进行处理,使其在±10V范围内,以保证测试的准确可靠。
* 该卡可以进行单端信号的采集,也可以进行差分信号的采集,每个通道的采集方式需要根据被测信号的的特性,由软件来设定。否则采集结果就不正确。
* 多通道数据采集是循环采集,值为二进制数据,需要进行次序调整和进制转换,而后才能对数据进行分析和处理。