Получите непрерывный и фоновые данные Используя устройства NI

В этом примере показано, как получить команды неблокирования использования данных об аналоговом входе. Это позволяет вам продолжать работать в окне команды MATLAB во время приобретения. Это называется фоновым приобретением. Используйте приоритетное приобретение, чтобы заставить MATLAB ожидать целого приобретения, чтобы завершиться, прежде чем можно будет выполнить следующую команду. Узнайте больше о приоритетном приобретении в, Получают Данные Используя Устройства NI.

Создайте и сконфигурируйте объект сеанса

  • Используйте daq.createSession команда, чтобы создать сеанс.

  • Добавьте канал 0 из нашего NI 9205 с ID cDAQ1Mod1.

  • Получите 2 000 сканирований в секунду в течение 5 секунд ценность данных.

s = daq.createSession('ni');
addAnalogInputChannel(s,'cDAQ1Mod1', 0, 'Voltage');
s.Rate = 2000;
s.DurationInSeconds = 5;
s
s = 

Data acquisition session using National Instruments hardware:
   Will run for 5 seconds (10000 scans) at 2000 scans/second.
   Number of channels: 1
      index Type  Device   Channel MeasurementType      Range       Name
      ----- ---- --------- ------- --------------- ---------------- ----
      1     ai   cDAQ1Mod1 ai0     Voltage (Diff)  -10 to +10 Volts
   

Отобразите Живые Данные на графике, в то время как они Получены

Когда вы получаете данные в фоновом режиме, можно обеспечить направления сеанса приобретения, чтобы обработать входящие данные, с помощью прослушивателей и событий. Событие DataAvailable имеет место, когда определенный объем данных доступен для сеанса. Прослушиватель может ответить на то событие и инициировать заданную функцию.

Используйте addlistener добавить анонимную функцию в сеанс. Эта функция вызвана каждый раз, когда событие DataAvailable имеет место и отображает полученные данные на графике против времени. По умолчанию этот прослушиватель называется 10 раз в секунду.

Когда вы добавляете прослушиватель, указатель на прослушиватель возвращен. Сохраните указатель в переменной lh и удалите его позже.

lh = addlistener(s,'DataAvailable', @(src,event) plot(event.TimeStamps, event.Data));

Уровень по умолчанию, которым называется прослушиватель, 10 раз в секунду. Однако можно изменить это мое изменение NotifyWhenDataAvailableExceeds свойство. Прослушиватель будет назван, когда накопленное число точек превысит это значение. В этом случае мы устанавливаем его на 2 000, который приводит к частоте однажды в секунду.

s.NotifyWhenDataAvailableExceeds = 2000;

После того, как вы добавите прослушиватель, запустите фоновое приобретение. Когда вы запускаете этот пример в MATLAB, график обновляется 10 раз в секунду. В опубликованной версии примера вы видите два снимка состояния графика: один, после pause завершается и другой в конце приобретения.

s.startBackground();

Нет никаких других вычислений, чтобы выполнить, и приобретение собирается запуститься в течение целых 5 секунд. Ожидайте приобретения, чтобы завершиться. Вызовите wait без аргумента, который значения по умолчанию к бесконечному времени ожидания. wait команда возвращается, как только фоновое приобретение завершается.

s.wait()

Удалите прослушиватель так, чтобы он не запускался со следующим приобретением.

delete(lh)

Получите уникальное событие во входящих данных

В некоторых случаях нет никакого установленного времени или количества сканирований, чтобы получить. Можно хотеть получить постоянно, пока особое условие не соблюдают. В этом примере получите, пока сигнал не превышает 1 В.

Сбросьте уровень, на котором прослушиватель называется к значению по умолчанию десяти раз в секунду путем установки IsNotifyWhenDataAvailableExceedsAuto свойство к true.

s.IsNotifyWhenDataAvailableExceedsAuto = true;

Сконфигурируйте новый прослушиватель, чтобы обработать входящие данные.

lh = addlistener(s,'DataAvailable', @stopWhenExceedOneV);

stopWhenExceedOneV является многострочной функцией, сохраненной в отдельном файле MATLAB.

type('stopWhenExceedOneV.m')
function stopWhenExceedOneV(src, event)
    if any(event.Data > 1.0)
        disp('Event listener: Detected voltage exceeds 1, stopping acquisition')
        % Continuous acquisitions need to be stopped explicitly.
        src.stop()
        plot(event.TimeStamps, event.Data)
    else
        disp('Event listener: Continuing to acquire')
    end
end

Сконфигурируйте сеанс, чтобы получать постоянно. Прослушиватель обнаруживает 1-вольтовое событие и вызывает stop.

s.IsContinuous = true;
s.startBackground()

Используйте pause в цикле, чтобы контролировать количество сканирований, полученных за длительность приобретения. Обратите внимание на то, что выход смешан в с выходом от прослушивателя события.

while s.IsRunning
    pause(0.5)
    fprintf('While loop: Scans acquired = %d\n', s.ScansAcquired)
end

fprintf('Acquisition has terminated with %d scans acquired\n', s.ScansAcquired);
Event listener: Continuing to acquire
Event listener: Continuing to acquire
Event listener: Continuing to acquire
Event listener: Continuing to acquire
Event listener: Continuing to acquire
While loop: Scans acquired = 1007
Event listener: Detected voltage exceeds 1, stopping acquisition
While loop: Scans acquired = 1207
Acquisition has terminated with 1207 scans acquired

Удалите прослушиватель.

delete(lh)