Используя 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"
является допустимым источником триггера?
Есть два способа:
Вы можете создать этот список, но не одним вызовом в драйвер. Используйте комбинацию этих свойств:
DAQmxGetDevTerminals(const char device[], char *data, uInt32 bufferSize)
ai0
).DAQmxGetDevAIPhysicalChans(const char device[], char *data, uInt32 bufferSize)
DAQmxGetDevAnlgTrigSupported(const char device[], bool32 *data)
DAQmxGetDevDigTrigSupported(const char device[], bool32 *data)
DAQmxGetDevAITrigUsage(const char device[], int32 *data)
Вы также можете создать фиктивную задачу и просмотреть каждую комбинацию терминала и типа триггера.
Вам не нужно будет запускать задачу, просто «подтвердите» ее, что предложит драйверу запустить свою систему правил для этих настроек и вернет ошибку, если эта конфигурация не поддерживается. Если вы кешируете их в памяти или в файле (или в БД, или в любом другом месте), вам может быть проще запросить это вместо драйвера.
DAQmxTaskControl (TaskHandle taskHandle, int32 action)
DAQmx_Val_Task_Verify
для action
Параметр проверит, что все параметры задачи действительны для оборудования.Других решений пока нет …