Как синхронизировать чтение ctr и ai-каналов с помощью NIDAQmx API?

#python #python-3.x #nidaqmx

#python #python-3.x #nidaqmx

Вопрос:

У меня есть шасси cDAQ-9174 и два DAQ (NI 9421 и NI9208), которые я использую для мониторинга некоторых датчиков на основе напряжения и считывания некоторых датчиков на основе частоты.

Для этого в MATLAB я создал сеанс, в котором я добавил ai_channels для датчиков на основе напряжения и ci_channels для датчиков частоты. Мне даже удалось создать буферизованное получение, чтобы я мог получать синхронизированные показания с частотой 1 Гц:

«Код Matlab»

 s = daq.createSession('ni'); 
addAnalogInputChannel(s,'cDAQ3Mod3','ai2','Voltage');
addCounterInputChannel(s,'cDAQ3Mod2', 'ctr0', 'Frequency');
addCounterInputChannel(s,'cDAQ3Mod2', 'ctr1', 'Frequency');
% addCounterInputChannel(s,'cDAQ3Mod2', 'ctr2', 'Frequency');
% addCounterInputChannel(s,'cDAQ3Mod2', 'ctr3', 'Frequency'); 

s.DurationInSeconds=5; %Tempo de aquisição
s.Rate=1; %Number of samples per second
% inputSingleScan(s)

[data,time]=s.startForeground();
  

Поскольку лицензии Matlab немного дороги, а python — нет, я преобразовал этот код в python (v3.7), используя библиотеку NIDAQmx.

Я был очень разочарован, узнав, что, по-видимому, вы не можете добавлять разные типы каналов к одной и той же задаче:

 import nidaqmx as daq

fTask = daq.Task()
fTask.ai_channels.add_ai_voltage_chan("/cDAQ3Mod1/ai8")
fTask.ai_channels.add_ai_voltage_chan("/cDAQ3Mod1/ai0")
ftask.ci_channels.add_ci_freq_chan("cDAQ3Mod2/ctr0")

nidaqmx.errors.DaqError: Task cannot contain a channel with the specified channel type, because the task already contains channels with a different channel type.

Status Code: -200559
  

Изучив документацию по этой ошибке, вы найдете:

Ошибка -200559 Задача не может содержать канал с указанным типом канала, поскольку задача уже содержит каналы с другим типом канала. Создайте одну задачу для каждого типа канала.

Итак, прямо сейчас я озадачен тем, что код MATLAB работает (и он работает), и как я могу реализовать две задачи, которые синхронизировали полученные данные.