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

时间:2016-05-03 09:08:42

标签: c++ hardware-interface nidaqmx

通过C ++使用NI的DAQmx,我想向用户提供系统上可用的物理触发输入列表。

我可以通过调用类似

之类的东西来设置任务以启动外部触发器
NSLayoutManager.h

有没有办法获取char* trigger_source = "/Dev1/PFI0"; DAQmxCfgDigEdgeStartTrig(taskAO, trigger_source, DAQmx_Val_Rising); 的有效值列表?我找到trigger_source来获取系统中可用设备的列表,我知道DAQmxGetSystemInfoAttribute(DAQmx_Sys_DevNames, , )和类似的功能可以为我提供设备上某些类型端口的列表。但是,我没有找到任何可以返回PFI的东西。

如果无法获得列表,是否有一种理智的方法来测试像DAQmxGetDevDILines()这样的给定猜测字符串是否是有效的触发源?

1 个答案:

答案 0 :(得分:0)

有两种方法:

  1. 动态点播
  2. 猜测检查高速缓冲存储器的查询
  3. 动态

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

    • 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 state model中的任务。对DAQmx_Val_Task_Verify参数使用action将验证所有任务参数是否对硬件有效。