大家好!我使用双缓存进行数据采集,两个缓存相同大小。采集程序一开始运行,首先将采集的数据放入第一个缓存,当这个缓存区满了之后,就会触发OnFirstHalfBulkDataReady()这个事件,然后就会开始向第二个缓存放入数据,当第二个缓存满了之后,就会调用OnSecondHalfBulkDataReady()这个事件。在向第二个缓存放数据的时候,从第一个缓存中取出数据。同样,在向第一个缓存区放入数据的时候,从第二个缓存中取数据。就这样不断循环下去就可以实现不间断的海量数据采集。我现在想把缓存中的数据全部取出来放到内存中做处理,也就是把这些数据都放到一个数组里,想问一下怎么实现?下面的代码是数据采集卡公司提供的相关例子。就想在下面代码的基础上做点修改实现就可以了。我自己改了一下,但发现有问题,所以希望大家指教!
private void axAICtrl_OnFirstHalfBulkDataReady(object sender,AxAdvAILib._IAdvAIEvents_OnFirstHalfBulkDataReadyEvent e) {
long dataCount = e.dataCount;// 取出缓存区中数据个数
object digitalArray = e.digitalArray;//取数字量
object analogArray = e.analogArray;//取模拟量
long i;
frmDisp.Status.Text="LowHalf";
frmDisp.lstRawData.Items.Clear();
frmDisp.lstVoltage.Items.Clear();
try
{
if ( digitalArray!= null )
{
short[] rawData ;
rawData = (short[]) digitalArray;
for( i=0 ; i< axAICtrl.ChannelScanCount ; i++ )
{
frmDisp.lstRawData.Items.Add( rawData[i] );
}
}
if ( analogArray != null)
{
float[] voltage;
voltage = (float[]) analogArray;
for( i=0 ; i<axAICtrl.ChannelScanCount ; i++ )
{
frmDisp.lstVoltage.Items.Add( voltage[i] );
}
}
}
catch ( Exception err )
{
cmdStart.Enabled=true;
cmdStop.Enabled=false;
MessageBox.Show( err.Message );
}
}
private void axAICtrl_OnSecondHalfBulkDataReady(object sender, AxAdvAILib._IAdvAIEvents_OnSecondHalfBulkDataReadyEvent e) {
long dataCount = e.dataCount;
object digitalArray = e.digitalArray;
object analogArray = e.analogArray;
long i;
frmDisp.Status.Text="HighHalf";
frmDisp.lstRawData.Items.Clear();
frmDisp.lstVoltage.Items.Clear();
try
{
if ( digitalArray != null)
{
short[] rawData ;
rawData = (short[]) digitalArray;
for( i=0 ; i< axAICtrl.ChannelScanCount ; i++ )
{
frmDisp.lstRawData.Items.Add( rawData[i] );
}
}
if ( analogArray!= null )
{
float[] voltage;
voltage = (float[]) analogArray;
for( i=0 ; i< axAICtrl.ChannelScanCount ; i++ )
{
frmDisp.lstVoltage.Items.Add( voltage[i] );
}
}
}
catch ( Exception err )
{
cmdStart.Enabled=true;
cmdStop.Enabled=false;
MessageBox.Show( err.Message );
}
}
注:在程序界面上设定取出模拟量,所以digitalArray = null,不用管digitalArray 部分。