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

В этом примере показано, как использовать каналы аналогового входа, и аналоговый выход образовывает канал вместе с одним выполнением объекта 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');