Эта тема помогает вам перейти свой код от интерфейса сеанса до интерфейса DataAcquisition.
Эта таблица приводит команды интерфейса сеанса для общих рабочих процессов и их соответствующие команды интерфейса DataAcquisition.
Для этого | Команда сеанса | Команда DataAcquisition |
---|---|---|
Найдите поддерживаемое оборудование доступным для вашей системы |
daq.getDevices | |
Сбросьте тулбокс к начальному состоянию |
daqreset | |
Создайте интерфейсный объект |
s = daq.createSession('ni') |
d = |
Добавьте канал аналогового входа |
addAnalogInputChannel(s,'Dev1',1,'Voltage') |
|
Добавьте канал аналогового выхода |
addAnalogOutputChannel(s,'Dev1',0,'Current') |
|
Добавьте цифровую входную линию |
addDigitalChannel... (s,'Dev1','Port0/Line0:1','InputOnly') |
addinput(d,"Dev1","port0/line1","Digital"); |
Добавьте встречный входной канал |
addCounterInputChannel... (s,'Dev1','ctr0','EdgeCount') |
addinput(d,"Dev1","ctr0","EdgeCount"); |
Данные очереди для выхода |
queueOutputData(s,outputSignal); |
(Необходимый только для фоновой работы.) |
Операция Start |
startForeground(s); startBackground(s); | Для приоритетных операций, которые блокируют MATLAB® при выполнении:
Для фоновых работ, которые запускаются, не блокируя MATLAB: |
Установите частоту развертки данных |
s.rate = 48000 |
d.Rate = 48000; |
Задайте внешний триггер |
addTriggerConnection... (s,'External','Dev3/PFI0','StartTrigger'); |
|
Укажите диапазон входного сигнала |
ch = addAnalogInputChannel... (s,'Dev1',1,'Voltage'); ch.Range = [-5 5]; |
ch = addinput(d,"Dev1","ai4","Voltage"); ch.Range = [-5 5]; |
Используя интерфейс сеанса, вы создаете сеанс поставщика и добавляете каналы в сеанс. Вы можете использовать любое устройство или шасси от того же поставщика, доступного для вашей системы, и можете добавить комбинацию аналога, цифрового, и противостоять каналам ввода и вывода. Все каналы действуют вместе, когда вы запускаете сеанс.
Найдите оборудование доступным для вашей системы.
d = daq.getDevices
Создайте сеанс для устройств National Instruments®.
s = daq.createSession('ni');
Установите частоту развертки сеанса на 8 000.
s.Rate = 8000
Добавьте канал аналогового входа для устройства с ID Dev1 для измерения напряжения, и затем запустите приобретение.
addAnalogInputChannel(s,'Dev1',1,'Voltage'); startForeground(s);
Найдите оборудование доступным для вашей системы.
devs = daqlist
Создайте DataAcquisition для устройств National Instruments ™.
d = daq("ni");
Установите частоту развертки DataAcquisition на 8 000.
d.Rate = 8000
Добавьте канал аналогового входа для устройства с ID Dev1
для измерения напряжения, и затем запускают приобретение.
addinput(d,"Dev1","ai1","Voltage"); data = read(d,4000);
Результаты скана возвращены к расписанию data
.
Получите аналоговые данные с помощью аппаратных триггеров.
Можно задать внешнее событие, чтобы инициировать сбор данных с помощью интерфейса сеанса.
Создайте сеанс и добавьте два канала аналогового входа.
s = daq.createSession('ni'); ch = addAnalogInputChannel(s,'Dev1',0:1,'Voltage');
Сконфигурируйте терминал и область значений каналов на сеансе.
ch(1).TerminalConfig = 'SingleEnded'; ch(1).Range = [-10.0 10.0]; ch(2).TerminalConfig = 'SingleEnded'; ch(2).Range = [-10.0 10.0];
Создайте внешнюю триггерную связь и установите триггер запускать одно время.
addTriggerConnection(s,'External','Dev1/PFI0','StartTrigger'); s.Connections(1).TriggerCondition = 'RisingEdge'; s.TriggersPerRun = 1;
Установите уровень и длительность приобретения.
s.Rate = 50000; s.DurationInSeconds = 0.01;
Получите данные на переднем плане и отобразите данные на графике.
[data,timestamps] = startForeground(s); plot(timestamps,data)
Создайте DataAcquisition и добавьте два канала аналогового входа.
d = daq("ni"); ch = addinput(d,"Dev1",0:1,"Voltage");
Сконфигурируйте терминальную настройку и область значений каналов в DataAcquisition.
ch(1).TerminalConfig = "SingleEnded"; ch(1).Range = [-10.0 10.0]; ch(2).TerminalConfig = "SingleEnded"; ch(2).Range = [-10.0 10.0];
Создайте внешнюю триггерную связь и установите триггер запускать одно время.
addtrigger(d,"Digital","StartTrigger","Dev1/PFI0","External"); d.DigitalTriggers(1).Condition = "RisingEdge"; d.NumDigitalTriggersPerRun = 1;
Установите частоту развертки приобретения.
d.Rate = 50000;
Получите данные на переднем плане в течение 0,01 секунд и отобразите данные на графике из всех каналов.
data = read(d,seconds(0.01)); plot(data.Time, data.Variables)
Можно задать приобретение, чтобы смотреть за конкретным количеством сканов, чтобы произойти и затем инициировать некоторую операцию.
Интерфейс сеанса использует прослушиватели и события, чтобы инициировать определенные действия. NotifyWhenDataAvailableExceeds
свойство может запустить a DataAvailable
событие. Прослушиватель задает операцию, чтобы выполниться в то время.
Создайте сеанс приобретения, добавьте канал аналогового входа.
s = daq.createSession('ni'); addAnalogInputChannel(s,'Dev1','ai0','Voltage');
Установите частоту развертки на 800 000 сканов в секунду, которая автоматически устанавливает DataAvailable
уведомление, чтобы автоматически стрелять 10 раз в секунду.
s.Rate = 800000; s.NotifyWhenDataAvailableExceeds
ans = 80000
Увеличьте NotifyWhenDataAvailableExceeds
к 160 000.
s.NotifyWhenDataAvailableExceeds = 160000;
Добавьте прослушиватель, чтобы определить функцию, чтобы вызвать, когда событие будет иметь место.
L = addlistener(s,'DataAvailable', ... @(src,event)readAndLogData(src));
Интерфейс DataAcquisition использует функции обратного вызова, которые выполняются при случаях, определенных определенными свойствами. ScansAvailableFcnCount
свойство определяет, когда инициировать функцию обратного вызова, заданную ScansAvailableFcn
.
Создайте интерфейс DataAcquisition и добавьте канал аналогового входа.
d = daq("ni"); ch = addinput(d,"Dev1",1,"Voltage");
Установите частоту развертки на 800 000 сканов в секунду, которая автоматически настраивает ScansAvailableFcnCount
свойство.
d.Rate = 800000; d.ScansAvailableFcnCount
80000
Увеличьте ScansAvailableFcnCount
к 160 000.
d.ScansAvailableFcnCount = 160000;
Идентифицируйте функцию обратного вызова для того, когда количество произойдет.
d.ScansAvailableFcn = @readAndLogData;
Чтобы сравнить сеанс соединяют интерфейсом с кодом и кодом интерфейса DataAcquisition, можно использовать код, сгенерированный Analog Output Generator в релизах R2019b и R2020a MATLAB. В обоих этих примерах генератор создал синусоиду тестового сигнала на 10 Гц в течение 1 секунды на одном канале National Instruments USB-6211.
%% Auto-generated by Data Acquisition Toolbox Analog Output Generator in MATLAB R2020a. %% Create DataAcquisition Object % Create a DataAcquisition object for the specified vendor. d = daq("ni"); %% Add Channels % Add channels and set channel properties, if any. addoutput(d,"Dev1","ao0","Voltage"); %% Set DataAcquisition Rate % Set scan rate. d.Rate = 250000; %% Define Test Signal % Create a test sine wave signal of specified peak-to-peak amplitude for each % channel. amplitudePeakToPeak_ch1 = 20; sineFrequency = 10; % 10 Hz totalDuration = 1; % 1 seconds outputSignal = []; outputSignal(:,1) = createSine(amplitudePeakToPeak_ch1/2, ... sineFrequency, d.Rate, "bipolar", totalDuration); outputSignal(end+1,:) = 0; %% Generate Signal % Write the signal data. write(d,outputSignal); %% Clean Up % Clear all DataAcquisition and channel objects. clear d outputSignal %% Create Test Signal % Helper function for creating test sine wave signal. function sine = createSine(A, f, sampleRate, type, duration) numSamplesPerCycle = floor(sampleRate/f); T = 1/f; timestep = T/numSamplesPerCycle; t = (0 : timestep : T-timestep)'; if type == "bipolar" y = A*sin(2*pi*f*t); elseif type == "unipolar" y = A*sin(2*pi*f*t) + A; end numCycles = round(f*duration); sine = repmat(y,numCycles,1); end
%% Auto-generated by Data Acquisition Toolbox Analog Output Generator in MATLAB R2019b %% Create Data Acquisition Session % Create a session for the specified vendor. s = daq.createSession('ni'); %% Set Session Properties % Set properties that are not using default values. s.Rate = 250000; %% Add Channels to Session % Add channels and set channel properties. addAnalogOutputChannel(s,'Dev1','ao0','Voltage'); %% Define Test Signal % Create a test sine wave signal of specified peak-to-peak amplitude for each % channel. amplitudePeakToPeak_ch1 = 20; sineFrequency = 10; % 10 Hz totalDuration = 1; % 1 seconds outputSignal(:,1) = createSine(amplitudePeakToPeak_ch1/2, ... sineFrequency, s.Rate, 'bipolar', totalDuration); outputSignal(end+1,:) = 0; %% Queue Signal Data % Make signal data available to session for generation. queueOutputData(s,outputSignal); %% Generate Signal % Start foreground generation startForeground(s); %% Clean Up % Clear the session and channels. clear s outputSignal %% Create Test Signal % Helper function for creating test sine wave signal. function sine = createSine(amplitude, frequency, sampleRate, type, duration) sampleRatePerCycle = floor(sampleRate/frequency); period = 1/frequency; s = period/sampleRatePerCycle; t = (0 : s : period-s)'; if strcmpi(type, 'bipolar') y = amplitude*sin(2*pi*frequency*t); elseif strcmpi(type, 'unipolar') y = amplitude*sin(2*pi*frequency*t) + amplitude; end numCycles = round(frequency*duration); sine = repmat(y, numCycles, 1); end
Интерфейс DataAcquisition поддерживается в R2020a и позже. Если вы используете более ранний релиз, используйте интерфейс сеанса вместо этого. Для получения дополнительной информации и примеры интерфейса сеанса, см. Документацию Data Acquisition Toolbox (R2019b).