Получите данные из двух устройств на различных уровнях

В этом примере показано, как получить данные из двух различных устройств 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
Для просмотра документации необходимо авторизоваться на сайте