Этот пример показывает, как получить данные от двух разных устройств DAQ, работающих с различными частотами дискретизации. В примере используются два модуля аналогового входа National Instruments ™ CompactDAQ (9201 и 9211), которые имеют различные пределы скорости приема. Модуль 9211 используется для измерения температуры и получает с меньшей скоростью (10 Гц), чем модуль 9201, который используется для измерения напряжения (100 Гц). Поскольку все каналы в объекте сбора данных должны быть получены с одной и той же скоростью, для получения из двух модулей с несколькими скоростями необходимо использовать два объекта сбора данных. Чтобы заставить оба устройства DAQ запускаться одновременно, можно использовать оборудование цифровое триггерное строение.
Корпус CompactDAQ NI cDAQ 9178 ('cDAQ1')
Модуль NI cDAQ 9211 с типом измерения термопар ('cDAQ1Mod1')
Модуль NI cDAQ 9201 с типом измерения напряжения ('cDAQ1Mod2')
Термопарный зонд (тип K)
Аналоговый сигнал напряжения, генерируемый инструментом генератора функций
Создайте два объекта сбора данных, каждый с одним аналоговым входным каналом из модуля 9211 или модуля 9201. Объекты сбора данных получают данные со скоростью 10 Гц и 100 Гц соответственно.
% Specify a common acquisition duration for both devices, in seconds daqDuration = 3; % Create and configure DataAcquisition object and channels for cDAQ 9211 module d1 = daq('ni'); addinput(d1, 'cDAQ1Mod1', 'ai0', 'Thermocouple'); d1.Channels(1).ThermocoupleType = 'K'; d1.Rate = 10;
Warning: The Rate property was reduced to 14.2857 due to changes in the channel configuration.
% Create and configure DataAcquisition object and channels for cDAQ 9201 module d2 = daq('ni'); addinput(d2, 'cDAQ1Mod2', 'ai0', 'Voltage'); d2.Rate = 100;
Для синхронизации начала сбора можно использовать триггеры оборудования и подход master/slave. Один из объектов сбора данных (master) запускается вручную и инициирует запуск сбора других объектов сбора данных (slave).
Примечание. Если у вас есть модель корпуса CompactDAQ (например, NI 9174), которая не имеет триггерных PFI-терминалов, можно использовать дополнительный цифровой модуль ввода-вывода (например, NI 9402), чтобы предоставить PFI-терминалы для триггерных соединений.
% Configure the master data acquisition object to export a triggering % signal on the PFI0 terminal of cDAQ1 chassis addtrigger(d1, 'Digital', 'StartTrigger', 'cDAQ1/PFI0', 'External'); % Configure the slave data acquisition object to start acquisition when an % external triggering signal is received at PFI0 terminal of cDAQ1 chassis addtrigger(d2, 'Digital', 'StartTrigger', 'External', 'cDAQ1/PFI0');
Объект сбора ведомых данных должен начаться первым и быть готов к внешнему триггеру до запуска объекта сбора основных данных.
start(d2, 'Duration', daqDuration) while ~d2.WaitingForDigitalTrigger pause(0.1) end start(d1, 'Duration', daqDuration) % Wait until data acquisition is complete while d1.Running || d2.Running pause(1) end
Background operation has started. Background operation will stop after 3 s. To read acquired scans, use read. Background operation has started. Background operation will stop after 3 s. To read acquired scans, use read.
Для каждого объекта сбора данных полученные данные измерений и временные метки хранились в памяти. Считайте все полученные данные из памяти в формате расписания по умолчанию.
data1 = read(d1, 'all'); data2 = read(d2, 'all');
Поскольку полученные данные с двух устройств имеют различные шкалы и модули, создайте график с двумя осями Y.
figure yyaxis left plot(data1.Time, data1.Variables, '-x') ylabel('Temperature (deg. C)') ylim([0 50]) yyaxis right plot(data2.Time, data2.Variables, '-o') ylabel('Voltage (V)') xlabel('Time (s)')
Очистите объекты сбора данных, чтобы отсоединиться от оборудования.
clear d1 d2