我用的是CVI编程实现你所说的功能,必须要配置trigger,把我的代码贴出来希望能有所启发
/*********************************************/
DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
DAQmxErrChk (DAQmxCreateCICountEdgesChan(taskHandle,chan,"",edge,initialCount,countDirection));
////////////////////
DAQmxErrChk (DAQmxSetTrigAttribute (taskHandle, DAQmx_PauseTrig_Type,DAQmx_Val_DigLvl));
DAQmxErrChk (DAQmxSetTrigAttribute (taskHandle, DAQmx_DigLvl_PauseTrig_Src, "/Dev1/PFI9"));
DAQmxErrChk (DAQmxSetTrigAttribute (taskHandle, DAQmx_DigLvl_PauseTrig_When,DAQmx_Val_Low));
////////////////////
/*********************************************/
/*/ DAQmx Start Code
/*********************************************/
DAQmxErrChk (DAQmxStartTask(taskHandle));
SetCtrlAttribute(panel,PANEL_START,ATTR_DIMMED,1);
gRunning = 1;
while( gRunning ) {
/*********************************************/
/*/ DAQmx Read Code
/*********************************************/
DAQmxErrChk (DAQmxReadCounterScalarU32(taskHandle,10.0,&data,NULL));
SetCtrlVal(panel,PANEL_DATA,data);
ProcessSystemEvents();
}
你可以考虑这样完成它:
1. NI USB-6216的打开(Open)、初始化(Initial)、配置(Config);
2. 查询第2路信号发送的命令(可以考虑While循环或Event事件结构)。如果接到计数命令,跳转到3;否则重复步骤2;
3. NI USB-6216开始工作计数;
4. 计数工作完成,关闭仪器,释放所有系统资源。
编程过程中,最好采用状态机(State Machine),反复用到的功能编成子VI。