繁体   English   中英

回调:DAQmxRegisterDoneEvent()和DAQmxEveryNSamplesEvent之间的区别

[英]Callbacks: Difference between DAQmxRegisterDoneEvent() and DAQmxEveryNSamplesEvent

试图弄清楚如何专门调用回调包装器。 我们的代码处理了slowTaskonTask slowTask期间,我处理以下两行(特定于此问题):

DAQmxCfgSampClkTiming(slowTask, "OnboardClock", GUI_RATE,
      DAQmx_Val_Rising, DAQmx_Val_ContSamps, 1);
DAQmxRegisterEveryNSamplesEvent(slowTask, DAQmx_Val_Acquired_Into_Buffer, 1,
      0, EveryNCallbackWrapper, this);

我知道在这里,每当缓冲区填充一个样本时,就会调用EveryNCallbackWrapper

对于onTask ,我onTask理解回调如何被调用。 我查阅了NI文档,但听不懂。

DAQmxCfgSampClkTiming(onTask, "OnboardClock", ON_RATE, DAQmx_Val_Rising,
     DAQmx_Val_FiniteSamps, 100);
DAQmxRegisterDoneEvent(onTask, 0, DoneCallbackWrapper, this);

这个让我更加困惑。 我相信只要触发onTask(使用硬件触发器),DAQ就会以ON_RATE采样/秒的速率开始对模拟测量值进行数字化处理,一旦将100个采样采样/读入DAQs缓冲区,就会调用DoneCallbackWrapper() 取决于此硬件触发信号保持高电平的时间,每次DAQ读取100个样本(触发器为高电平)时,将调用此包装器?或者在读取100个样本之后,仅调用一次回调?

读取100个样本后,仅调用一次回调

由于slowTask使用DAQmx_Val_ContSamps ,因此该程序要求进行无限 (也称为连续)采集,并将数据流式传输到主机。 使用EveryNSamples回调使程序可以访问和处理设备发送的最新数据。

因为onTask使用DAQmx_Val_FiniteSamps ,所以该程序要求单次采集100样本。 使用“ Done事件,程序可以访问和处理完整的采集和完整的采集。

在您的评论更新中,程序使用

DAQmxCfgDigEdgeStartTrig(onTask, "/PXI2Slot4/PXI_Trig0", DAQmx_Val_Rising));

onTask配置数字边沿启动触发器 当该触发线具有上升沿时, onTask采集开始,捕获100个样本,停止并调用回调。

如果程序需要在/PXI2Slot4/PXI_Trig0 每个上升沿为onTask采集100个样本, onTask可以使用NI 63xx系列设备上的可重触发属性 ,该属性允许针对每个触发事件重新运行同一任务。

更多详细信息在X系列用户手册中

AI启动触发器也可配置为可重新触发。 定时引擎响应于AI Start Trigger信号上的每个脉冲,生成样本并转换时钟以进行配置的采集。

在时钟生成过程中,定时引擎会忽略AI Start Trigger信号。 时钟生成完成后,计数器等待另一个启动触发器开始另一个时钟生成。 图4-22显示了一个可重触发的模拟输入,每个输入具有三个AI通道和四个采样

可触发的模拟输入信号的图示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM