Qt Creator中具有不同回调的DAQmxRegisterSignalEvent

Qt Creator中具有不同回调的DAQmxRegisterSignalEvent,qt,qt-creator,nidaqmx,Qt,Qt Creator,Nidaqmx,大家好,新年快乐! 我正在将PCI 6259+BNC2110与Qt Creator IDE(基于C++)进行接口。 我正在尝试使用外部触发对信号进行采样。我有一个正在运行的微处理器,可以产生触发信号 DAQmxCfgChangeDetectionTiming似乎是一个很好的方法。我将其配置为在挂接到端口0/line0的信号的下降沿进行采样。因此,DAQmxRegisterSignalEvent启动回调,我在其中执行采样 问题是我希望有两个或多个回调可以在DAQmxRegisterSignalEv

大家好,新年快乐! 我正在将PCI 6259+BNC2110与Qt Creator IDE(基于C++)进行接口。 我正在尝试使用外部触发对信号进行采样。我有一个正在运行的微处理器,可以产生触发信号

DAQmxCfgChangeDetectionTiming似乎是一个很好的方法。我将其配置为在挂接到端口0/line0的信号的下降沿进行采样。因此,DAQmxRegisterSignalEvent启动回调,我在其中执行采样

问题是我希望有两个或多个回调可以在DAQmxRegisterSignalEvent上做出反应。目前,我需要两个virt。通道-端口0/line0和端口0/line1。其中一个的更改应该调用它自己的回调。理论方法如下所示:

void main()
{
...
DAQmxCreateDIChan(task1,"Dev1/port0/line0","",DAQmx_Val_ChanPerLine);
DAQmxCfgChangeDetectionTiming(task1,NULL,"Dev1/port0/line0",DAQmx_Val_HWTimedSinglePoint,1);
DAQmxRegisterSignalEvent(task1,DAQmx_Val_ChangeDetectionEvent,0,signal_from_line0_callback,null);
...
DAQmxCreateDIChan(task2,"Dev1/port0/line1","",DAQmx_Val_ChanPerLine);
DAQmxCfgChangeDetectionTiming(task2,NULL,"Dev1/port0/line1",DAQmx_Val_HWTimedSinglePoint,1);
DAQmxRegisterSignalEvent(task2,DAQmx_Val_ChangeDetectionEvent,0,signal_from_line1_callback,null);
...
}

void signal_from_line0_callback()
{
   ...take a sample;
   return;
}

void signal_from_line1_callback()
{
  ...do other things;
  return;
}
但是,此模式不起作用。似乎当更改发生在第0行或第1行时,DAQmxRegisterSignalEvent不关心更改发生在哪一行,因此尝试调用其中一个回调。 有没有办法让这种方法发挥作用?如何找出发生更改的行?我需要更改第0行或第1行以触发不同的回调函数。 事先非常感谢

纳兹写道

似乎当更改发生在第0行或第1行时,DAQmxRegisterSignalEvent不关心更改发生在哪一行,因此尝试调用其中一个回调。有没有办法让这种方法发挥作用

不,很遗憾。M系列设备
所有行更改[1]用于更改检测,因此您只能注册一个回调

您的回调将需要充当调度程序。当它收到变更检测事件时,它需要读取设备线路的状态,决定要做什么,并将操作转发给变更线路的响应者

工具书类 [1] M系列用户手册::DI变更检测(第104页)