Получите данные и сгенерируйте сигналы одновременно

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

Оборудование Setup

В целях этого примера используют 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');

Для просмотра документации необходимо авторизоваться на сайте