0

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

我可以通过调用类似的东西来设置任务以在外部触发器上启动

char* trigger_source = "/Dev1/PFI0";
DAQmxCfgDigEdgeStartTrig(taskAO, trigger_source, DAQmx_Val_Rising);

有没有办法获取有效值的列表trigger_source?我发现DAQmxGetSystemInfoAttribute(DAQmx_Sys_DevNames, , )可以获取系统中可用设备的列表,并且我知道DAQmxGetDevDILines()类似的功能可以为我提供设备上某些类型的端口的列表。但是,我没有发现任何返回 PFI 的东西。

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

4

1 回答 1

0

有两种方法:

  1. 动态按需
  2. 猜测检查缓存查询

动态的

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

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

缓存

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

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

  • DAQmxTaskControl (TaskHandle taskHandle, int32 action)
    它在DAQmx 状态模型中移动任务。使用DAQmx_Val_Task_Verifyforaction参数将验证所有任务参数对硬件是否有效。
于 2016-05-03T18:01:11.533 回答