Эта тема помогает вам перенести код из интерфейса сеанса в интерфейс 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); |
(Необходимо только для фоновой операции.) |
Начало операции |
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');
Установите скорость скана сеанса равной 8000.
s.Rate = 8000
Добавьте аналоговый входной канал для устройства с идентификационными Dev1 для измерения напряжения, а затем запустите сбор.
addAnalogInputChannel(s,'Dev1',1,'Voltage'); startForeground(s);
Поиск оборудования, доступного для вашей системы.
devs = daqlist
Создайте устройство DataAcquisition для National Instruments ™.
d = daq("ni");
Установите скорость скана DataAcquisition равной 8000.
d.Rate = 8000
Добавьте аналоговый входной канал для устройства с идентификатором 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)
Можно задать приобретение, чтобы убедиться, что произойдет указанное количество сканов, и затем инициировать некоторую операцию.
Интерфейс сеанса использует прослушиватели и события, чтобы инициировать определенные действия. The NotifyWhenDataAvailableExceeds
свойство может стрелять 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 использует функции обратного вызова, которые выполняются при вхождениях, определяемых определенными свойствами. The 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 в MATLAB releases R2019b и R2020a. В обоих этих примерах генератор создал тестовый сигнал на 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).