Этот пример показывает, как использовать каналы аналогового входа и каналы аналогового выхода вместе с одним выполнением объекта Session, почти одновременным.
Используйте daq.createSession
, чтобы создать сеанс.
s = daq.createSession('ni')
s = Data acquisition session using National Instruments hardware: Will run for 1 second (1000 scans) at 1000 scans/second. No channels have been added.
В целях этого примера используют compactDAQ шасси NI c9172 с NI 9205 (cDAQ1Mod1 - 4 канала аналогового входа) модуль и NI 9263 (CDAQ1Mod2 - 4 канала аналогового выхода) модуль. Используйте функцию daq.getDevices
, чтобы получить больше информации о подключенном оборудовании. Для получения дополнительной информации смотрите, что Обнаружить Устройства NI Используют Основанный на сеансе Интерфейсный пример.
В этом примере каналы аналогового выхода соединяются назад с каналами аналогового входа так, чтобы полученные данные были тем же самым как данные, сгенерированные от канала аналогового выхода.
Используйте команду addAnalogInputChannel
, чтобы добавить канал напряжения аналогового входа в объект сеанса для приобретения.
addAnalogInputChannel(s,'cDAQ1Mod1',0,'Voltage')
ans = 1×365 char array Data acquisition session using National Instruments hardware: Will run for 1 second (1000 scans) at 1000 scans/second. Number of channels: 1 index Type Device Channel MeasurementType Range Name ----- ---- --------- ------- --------------- ---------------- ---- 1 ai cDAQ1Mod1 ai0 Voltage (Diff) -10 to +10 Volts
Использование команда addAnalogOutputChannel
используется, чтобы добавить канал напряжения аналогового выхода в сеанс для отправки данных.
Объекты Сеанса могут содержать каналы различных типов в том же объекте и могут использоваться, чтобы запустить приобретение и сгенерировать сигналы одновременно.
addAnalogOutputChannel(s,'cDAQ1Mod2',0,'Voltage')
ans = 1×424 char array Data acquisition session using National Instruments hardware: No data queued. Will run at 1000 scans/second. Number of channels: 2 index Type Device Channel MeasurementType Range Name ----- ---- --------- ------- --------------- ---------------- ---- 1 ai cDAQ1Mod1 ai0 Voltage (Diff) -10 to +10 Volts 2 ao cDAQ1Mod2 ao0 Voltage (Diff) -10 to +10 Volts
Канал аналогового выхода, который вы только добавили, показывает, что никакие данные не ставятся в очередь для объекта. Это вызвано тем, что каналы аналогового выхода требуют, чтобы данные были поставлены в очередь, прежде чем операция будет запущена.
Синусоидальный сигнал сгенерирован и поставлен в очередь. Обратите внимание на то, что для каждого канала аналогового выхода данные находятся в отдельном столбце.
output_data = sin(linspace(0,2*pi,1000)');
Используйте команду queueOutputData
, чтобы поставить данные в очередь.
queueOutputData(s,output_data)
Постройте выходные данные.
plot(output_data);
title('Output Data Queued');
Если данные ставятся в очередь, можно запустить операции на переднем плане или фоне. Приоритетные операции блокируют MATLAB®, пока операции не завершены, и данные возвращены. Фоновые работы не блокируют и возвращают управление в командную строку MATLAB, обрабатывающую сразу, позволяя другому коду MATLAB запуститься параллельно.
Используйте команду startForeground
, чтобы запустить операции на переднем плане. И генерация сигнала (аналоговый выход) и получение сигнала (аналоговый вход) синхронизируются и запускаются вместе. Вы видите это от полученных данных, совпадающих со сгенерированными данными, когда каналы аналогового выхода соединяются назад с каналами аналогового входа.
[captured_data,time] = s.startForeground();
Отобразите на графике полученные полученные данные и смотрите, что это - точно то же самое как сгенерированные данные.
plot(time,captured_data); ylabel('Voltage'); xlabel('Time'); title('Acquired Signal');
Длительность приобретения зависит от объема данных, поставленного в очередь для канала аналогового выхода. Начиная с обоих каналы, запущенные на том же уровне 1 000 сканирований в секунду, длительность операции, после постановки в очередь 1 000 точек данных выше составляет 1 секунду как показано DurationInSeconds
.
output_data = 2*sin(linspace(0,2*pi,1000)'); % Amplitude of 2V
queueOutputData(s,output_data);
duration = s.DurationInSeconds
duration = 1
Если вы поставите больше данных в очередь, длительность операции изменится автоматически.
output_data = 2*sin(linspace(2*pi,3*pi,500)'); queueOutputData(s,output_data); duration = s.DurationInSeconds
duration = 1.5000
Используйте команду startForeground
, чтобы запустить приобретение и генерацию одновременно.
[captured_data,time] = s.startForeground();
Отобразите на графике полученные полученные данные. Это - точно то же самое как сгенерированные данные.
plot(time,captured_data); ylabel('Voltage'); xlabel('Time'); title('Acquired Signal');