В этом примере показано, как получить данные из двух различных устройств DAQ, запускающихся на различных частотах дискретизации. Пример использует два модуля National Instruments CompactDAQ аналогового входа (9201 и 9211), которые имеют различные ограничения скорости захвата. 9 211 модулей используются для измерений температуры и получают на более медленном уровне (10 Гц), чем 9 201 модуль, который используется, чтобы измерить напряжение (100 Гц). Поскольку все каналы в объекте сбора данных должны получить на том же уровне, чтобы получить от двух модулей на нескольких уровнях, необходимо использовать два объекта сбора данных. Чтобы заставить оба устройства DAQ запуститься одновременно, можно использовать оборудование цифровая настройка инициирования.
Шасси NI cDAQ 9178 CompactDAQ ('cDAQ1')
Модуль NI cDAQ 9211 с типом измерения термопары ('cDAQ1Mod1')
Модуль NI cDAQ 9201 с типом измерения напряжения ('cDAQ1Mod2')
Зонд термопары (тип K)
Аналоговый сигнал напряжения сгенерирован инструментом функционального преобразователя
Создайте два объекта сбора данных, каждого с одним каналом аналогового входа от 9 211 модулей или 9 201 модуля. Объекты сбора данных получают данные на уровнях 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;
Чтобы синхронизировать захват запускаются, можно использовать аппаратное инициирование и подход источника/места назначения. Один из объектов сбора данных (источник) запускается вручную и инициировал захват, запускаются другого объекта сбора данных (место назначения).
Примечание: Если у вас есть модель шасси CompactDAQ (такая как NI 9174), который не имеет терминалов инициирования PFI, можно использовать дополнительный цифровой модуль ввода-вывода (такой как NI 9402), чтобы обеспечить терминалы PFI для триггерных связей.
% Configure the source data acquisition object to export a triggering % signal on the PFI0 terminal of cDAQ1 chassis addtrigger(d1, 'Digital', 'StartTrigger', 'cDAQ1/PFI0', 'External'); % Configure the destination 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