登录
首页 电脑编程
回帖 发帖
正文

主题:应用NI的DAQmx提供的Api对他的PXI6123卡进行采集丢数问题

点击:2048 回复:0

应用NI的DAQmx提供的Api对他的PXI6123卡进行采集出现丢数问题,不知道哪块设置有问题,下边是采集程序:
//采集
void CTestSampleDlgDlg::OnBtnTest()
{
if (DAQmxCreateTask("",&taskHandle)<0)//创建任务
{
 DispDAQmxErrorInfo();
 return;
}

if(DAQmxCreateAIVoltageChan(taskHandle,"Dev2/ai0","",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL)<0)
{
 DispDAQmxErrorInfo();
 return;
}

if(DAQmxCfgSampClkTiming(taskHandle,"",100000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,10000*10)<0)
{
 DispDAQmxErrorInfo();
 return;
}

if(DAQmxSetReadOverWrite(taskHandle,DAQmx_Val_OverwriteUnreadSamps)<0)
{
 DispDAQmxErrorInfo();
  return;
}
if(DAQmxSetReadRelativeTo(taskHandle,DAQmx_Val_MostRecentSamp)<0)
{
 DispDAQmxErrorInfo();
  return;
}
if(DAQmxSetReadOffset(taskHandle,-10000))
{
 DispDAQmxErrorInfo();
  return;
}

m_hMainWnd =(HWND)this;
if(DAQmxRegisterEveryNSamplesEvent(taskHandle,DAQmx_Val_Acquired_Into_Buffer,10000,0 ,EveryNCallbackCard0,NULL)<0)
{
 DispDAQmxErrorInfo();
 return;    
}
if(DAQmxRegisterDoneEvent(taskHandle,0,DoneCallback,NULL))
{
 DispDAQmxErrorInfo();
 return;    
}
if (DAQmxStartTask(taskHandle)<0)
{
 DispDAQmxErrorInfo();
 return;
}
}
//注册的回调函数
int32 CVICALLBACK EveryNCallbackCard0(TaskHandle taskHandle, int32 everyNsamplesEventType, uInt32 nSamples, void *callbackData)
{
int32       error=0;
 
char        errBuff[2048]={'\0'};
 
static int  totalRead=0;
 
int32       read=0;
 
CTestSampleDlgDlg *pDlg=(CTestSampleDlgDlg *)m_hMainWnd;
 
if(!pDlg->m_bStop)
 return 0;
   
float64    *pData=new float64[10000];
   
   
if(DAQmxReadAnalogF64(taskHandle,10000,10.0,DAQmx_Val_GroupByScanNumber,pData,10000,&read,NULL)<0)
{
 pDlg->DispDAQmxErrorInfo();
   
 return -1;
   
}
SCANDATA  *pScanData =new SCANDATA;  
pScanData->counts =read;
   
pScanData->pData   =pData;
pScanData->m_Hwnd=pDlg->m_hWnd;
 
pDlg->SendMessage(WM_FINASH,0,(LPARAM)pScanData);//发送消息给显示的函数Show
delete pScanData;
   
delete []pData;
   
return 0;
   
   
}
//显示
void CTestSampleDlgDlg::show(WPARAM wParam,LPARAM lParam)//*********显示曲线图
{
CNiReal64Vector vol[8];//存放8个通道的数据
 SCANDATA *pScan=(SCANDATA *)lParam;
m_Graph.SetDefaultXFirst(0);
m_Graph.SetDefaultXInc(1);
if((pScan->counts>0)&&m_bStop)
{
 for(int i = 0;i < pScan->counts;i++)
 {
  vol[0].Append(pScan->pData[i]);
 }
   m_Graph.SetChartLength(m_Graph.GetChartLength()+pScan->counts);
   m_Graph.GetPlots().Item(1).ChartY(vol[0],1.0/100000);
}
}
08-04-12 16:19

工控新闻

更多新闻资讯