在 DAQmx 设备上查找有效的触发源

Find valid trigger sources on DAQmx device

通过 C++ 使用 National Instruments 的 DAQmx,我想向用户展示系统上可用的可能物理触发输入的列表。

我可以通过调用

之类的东西来设置任务以在外部触发器上启动
char* trigger_source = "/Dev1/PFI0";
DAQmxCfgDigEdgeStartTrig(taskAO, trigger_source, DAQmx_Val_Rising);

有没有办法获取 trigger_source 的有效值列表?我发现 DAQmxGetSystemInfoAttribute(DAQmx_Sys_DevNames, , ) 可以获取系统中可用设备的列表,而且我知道 DAQmxGetDevDILines() 和类似的函数可以为我提供设备上某些端口类型的列表。但是,我没有发现 returns PFI。

如果无法获得列表,有没有一种合理的方法来测试给定的猜测字符串如"/Dev%d/PFI%d"是否是有效的触发源?

有两种方法:

  1. 动态点播
  2. 猜测检查缓存查询

动态

您可以构建此列表,但不能只调用驱动程序。使用这些属性的组合:

  • DAQmxGetDevTerminals(const char device[], char *data, uInt32 bufferSize)
    其中 return 是 PFI 线以及内部端子。它没有 return 任何 I/O 终端(如 ai0)。
  • DAQmxGetDevAIPhysicalChans(const char device[], char *data, uInt32 bufferSize)
    其中return是AI子系统的通道终端;其他 DAQ 子系统也有类似的调用。
  • DAQmxGetDevAnlgTrigSupported(const char device[], bool32 *data)
    其中return设备是否支持从模拟信号触发。
  • DAQmxGetDevDigTrigSupported(const char device[], bool32 *data)
    其中return设备是否支持数字信号触发。
  • DAQmxGetDevAITrigUsage(const char device[], int32 *data)
    其中 returnAI 子系统可以使用的触发器类型;其他 DAQ 子系统也有类似的调用。

已缓存

您还可以创建一个虚拟任务并预览每个终端和触发器类型的组合。

您不需要 运行 任务,只需 "verify" 它,这将提示驱动程序 运行 其规则系统在这些设置上 return如果不支持该配置,则会出现错误。如果您将它们缓存在内存或文件(或数据库或其他任何内容)中,查询它而不是驱动程序可能更容易。

  • DAQmxTaskControl (TaskHandle taskHandle, int32 action)
    移动 DAQmx state model 中的任务。对 action 参数使用 DAQmx_Val_Task_Verify 将验证所有任务参数对硬件是否有效。