大家好!我使用研华的PCI-1712数据采集卡做个程序,通过研华提供的例子现在实现了数据的采集,我的问题主要有以下几个: 
1.使用了研华ActiveDAQ Pro这个插件,它里面有一个函数long AcquireBulkDataToMemory( 
  long dataCount, 
  VARIANT* dataBuffer, 
  long timeOut = 0, 
  boolean cyclic = false, 
  boolean synchronous = true 
);也就是把数据读到内存里。它的第一个参数是采集样点数,程序运行前必须设定,最大可设为4M,当采集样点数达到这个值时,程序就停止。现在想实现不间断的采集,也就是当达到采集样点数时,继续运行这个函数。要怎么实现? 
2.输出数据时调用long TransferBulkDataFromMemory( 
  long dataCount, 
  VARIANT dataBuffer, 
  long timeOut = 0, 
  BOOL cyclic = false, 
  BOOL synchronous = true 
);问题是输出的数据频率和输入的数据频率不一致(对数据并没有做任何处理,等输入输出调通后再考虑对数据进行算法处理),这是什么原因? 
3.当改变输入信号,比如从正弦信号改为方波信号时,输出的还是正弦信号而不是方波,输出不能跟着输入的改变而改变,这是什么原因?希望大家帮助。有做过类似程序的高手能否发一个相关的代码,让小弟参考一下。邮箱:[email protected]下面是采集的代码(用的是C#). 
private void cmdStart_Click(object sender, System.EventArgs e) 

  int count; 
  int i; 
  bool b; try 

count = int.Parse(txtCount.Text); 
// Set the FAI parameters. 
//axAICtrl就是控制数据输入的,下面都是对数据采集考参数的设定。如触发模式,采样频率 
axAICtrl.TraceTriggerMode = (AdvAILib.TraceTriggerMode)(cmbTriggerMode.SelectedIndex); 
axAICtrl.TraceTriggerEdge = (AdvAILib.TraceTriggerEdge)( cmbTriggerEdge.SelectedIndex); 
axAICtrl.TraceTriggerSource =(AdvAILib.TraceTriggerSource)( cmbTriggerSource.SelectedIndex); 
axAICtrl.DataPacerSource = (AdvAILib.PacerSource)(cmbPacerSource.SelectedIndex); 
axAICtrl.TraceTriggerDelayTime = double.Parse(txtTriggerDelayTime.Text); 
axAICtrl.TraceTriggerValue = double.Parse(txtTriggerVoltage.Text); 
axAICtrl.DataSampleRate = double.Parse(txtSampleRate.Text); 
axAICtrl.ChannelScanStart = int.Parse(txtStartChan.Text); 
axAICtrl.ChannelScanCount = int.Parse(txtChanNumber.Text); 
axAICtrl.DataReturnType =(AdvAILib.DataReturnType)1; 
//Ocx allocate the buffer of DataDigital ,equal to new object! object DataDigital; 
DataDigital = null; 
// Engage the FAI with synchronous and noncyclic mode 
 //主要就是这两句 
count = axAICtrl.AcquireBulkDataToMemory(count,outDataDigital,0,false ,true); 
 b = axAdvAO1.TransferBulkDataFromMemory(count, DataDigital, -1, false, true); 
Int16[] binary = new Int16[count]; 
binary = ( Int16[] )DataDigital; 
// Stop the FAI with default waitting time 
axAICtrl.StopAcquireBulkData(0); 
object DataAnalog ; 
// Convert the digital data to analog 
axAICtrl.ConvertDigitalValueToAnalog(DataDigital,out DataAnalog ,count); 
float[] voltage = new float[count]; 
voltage = (float[])DataAnalog; frmDisp.AICtrlInit(ref axAICtrl,ref cmdStart,ref cmdStop); 
// Display the data 
frmDisp.Show(); 
frmDisp.lstRawData.Items.Clear(); 
frmDisp.lstVoltage.Items.Clear(); 
txtCount.Text = count.ToString(); 
                
for(i=0;i <axAICtrl.ChannelScanCount ;i++) 

frmDisp.lstRawData.Items.Add(binary[i]); 
frmDisp.lstVoltage.Items.Add(voltage[i]); 
} cmdStart.Enabled = false; 
cmdStop.Enabled = true; 

catch (Exception err) 

axAICtrl.StopAcquireBulkData(0); 
MessageBox.Show( err.Message ); 

} 谢谢大家了!

解决方案 »

  1.   

    AcquireBulkDataToMemory的返回值是返回什么的?
      

  2.   

    AcquireBulkDataToMemory():Retrieves bulk data from specified AI channels to the user or control allocated memory using FAI (Fast Analog Input).Return Value:
    dataBuffer: if successful.
    0: if failed.TransferBulkDataFromMemory():Transfers the data in the user buffer to the specified channels using FAO (fast analog output). Return Value:The actual output data count: if successful;
    0: if failed.