Поиск допустимых источников триггеров на устройстве DAQmx

Используя DAQmx National Instruments через C++, я хотел бы представить пользователю список возможных физических триггерных входов, доступных в системе.

Я могу установить задачу для запуска на внешнем триггере, вызвав что-то вроде

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

Есть ли способ получить список допустимых значений для trigger_source? Я нашелDAQmxGetSystemInfoAttribute(DAQmx_Sys_DevNames, , ), чтобы получить список устройств, доступных в системе, и я знаю, что DAQmxGetDevDILines()и подобные функции могут дать мне списки некоторых типов портов на устройстве. Тем не менее, я не нашел ничего, что возвращает PFIs.

Если список не может быть получен, есть ли разумный способ проверить, является ли данная строка угадывания "/Dev%d/PFI%d"допустимым источником триггера?

1 ответ

  1. Есть два способа:

    1. Динамически по требованию
    2. Guess-check-cache-query

    Активный

    Вы можете построить этот список, но не с одним вызовом в драйвер. Используйте сочетание этих свойств:

    • DAQmxGetDevTerminals(const char device[], char *data, uInt32 bufferSize)
      который возвращает линии PFI, а также внутренние терминалы. Он не возвращает ни один из терминалов ввода-вывода (like 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_Verifyдля actionпараметра проверит, что все параметры задачи допустимы для оборудования.