Этот пример показывает, как получить команды неблокирования использования данных об аналоговом входе. Это позволяет вам продолжать работать в окне команды 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)