이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
사용자 코드를 세션 인터페이스에서 DataAcquisition 인터페이스로 전환
이 항목은 사용자의 코드를 세션 인터페이스에서 DataAcquisition 인터페이스로 전환하는 데 도움을 줍니다. DataAcquisition 인터페이스는 R2020a 이상 버전에서 지원됩니다. 이전 버전을 사용 중인 경우 세션 인터페이스를 대신 사용하십시오.
일반적인 워크플로 명령어 전환하기
이 표는 일반적인 워크플로우에 대한 세션 인터페이스 명령어와 해당 DataAcquisition 인터페이스 명령어를 나열합니다.
| 수행할 작업 | 세션 명령어 | DataAcquisition 명령어 |
|---|---|---|
| 시스템에서 사용할 수 있는 지원되는 하드웨어 찾기 | ||
| 시스템에서 사용 가능한 지원 공급업체 찾기 | ||
| 툴박스를 초기 상태로 재설정 | daq.reset | |
| 인터페이스 객체 생성 | s = | d = |
| 아날로그 입력 채널 추가 | | |
| 아날로그 출력 채널 추가 | | |
| 디지털 입력 라인 추가 | | addinput(d,"Dev1","port0/line1","Digital"); |
| 카운터 입력 채널 추가 | | addinput(d,"Dev1","ctr0","EdgeCount"); |
| 카운터 출력 채널 추가 | | addoutput(d,"Dev1","ctr0","PulseGeneration"); |
| 데이터 스캔 레이트 설정 | s.Rate = 48000 | d.Rate = 48000; |
| 출력할 데이터를 대기열에 넣기 | | 백그라운드 작업에만 필요합니다. |
| MATLAB®을 차단하는 동기식 포그라운드 작업을 시작 | 입력 신호를 수집합니다. s.DurationInSeconds = 5;
inData = | Duration은 read 함수의 입력 인수입니다.inData = |
출력 신호를 생성합니다. queueOutputData(s,outputSignal); startForeground(s); | 출력 데이터는 write 함수에 직접 제공됩니다. | |
신호를 생성하고 수집하는 작업을 동시에 수행합니다. queueOutputData(s,outputSignal); inData = startForeground(s); | 동시 입출력에는 inData = | |
| MATLAB을 차단하지 않고 실행되는 비동기 백그라운드 읽기 작업 시작 | s.DurationInSeconds = 5;
| start(d,"Duration",seconds(5)) ⋮ inData = read(d,"all") |
| MATLAB을 차단하지 않고 실행되는 비동기 백그라운드 쓰기 작업 시작 | queueOutputData(s,outputSignal); startBackground(s); | |
| 연속적인 백그라운드 작업 시작 | s.IsContinuous = true; inData = startBackground(s); | start 함수는 연속 작동을 지정합니다. |
| 연속적인 백그라운드 쓰기 작업 시작 | lh = | 데이터가 미리 로드된 경우, 생성은 데이터가 미리 로드되지 않은 경우, 생성 과정은 |
| 콜백 구성 | listenDA = | d.ScansAvailableFcn = @logData; d.ScansRequiredFcn = @writeMoreData; d.ErrorOccurredFcn = @handleError; |
| 외부 트리거 지정 | | |
| 입력 신호 범위를 지정 | ch = | ch = addinput(d,"Dev1","ai4","Voltage"); ch.Range = [-5 5]; |
아날로그 데이터 수집
세션 인터페이스
세션 인터페이스를 사용하여 공급업체 세션을 생성하고 해당 세션에 채널을 추가합니다. 시스템에서 사용할 수 있는 동일 공급업체의 모든 장치 또는 섀시를 사용할 수 있으며, 아날로그, 디지털 및 카운터 입력/출력 채널을 조합하여 추가할 수 있습니다. 세션을 시작하면 모든 채널이 함께 작동합니다.
시스템에서 사용할 수 있는 하드웨어를 찾습니다.
d = daq.getDevices
National Instruments™ 장치용 세션을 생성합니다.
s = daq.createSession('ni');세션 스캔 레이트를 8000으로 설정합니다.
s.Rate = 8000
ID가 Dev1인 장치에 전압 측정을 위한 아날로그 입력 채널을 추가한 후, 데이터 수집을 시작합니다.
addAnalogInputChannel(s,'Dev1',1,'Voltage'); startForeground(s);
DataAcquisition 인터페이스
시스템에서 사용할 수 있는 하드웨어를 찾습니다.
devs = daqlist
National Instruments 장치용 DataAcquisition을 생성합니다.
d = daq("ni");DataAcquisition 스캔 레이트를 8000으로 설정합니다.
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 인터페이스
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 속성은 DataAvailable 이벤트를 발생시킬 수 있습니다. 리스너는 해당 시점에 실행할 작업을 정의합니다.
수집 세션을 생성하고 아날로그 입력 채널을 추가합니다.
s = daq.createSession('ni'); addAnalogInputChannel(s,'Dev1','ai0','Voltage');
스캔 레이트를 초당 800,000개 스캔으로 설정합니다. 이렇게 하면
DataAvailable알림이 자동으로 초당 10회 발동되도록 설정됩니다.s.Rate = 800000; s.NotifyWhenDataAvailableExceeds
ans = 80000NotifyWhenDataAvailableExceeds를 160,000으로 증가시킵니다.s.NotifyWhenDataAvailableExceeds = 160000;
이벤트 발생 시 호출할 함수를 결정하기 위해 리스너를 추가합니다.
L = addlistener(s,'DataAvailable', ... @(src,event)readAndLogData(src));
DataAcquisition 인터페이스
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 인터페이스 코드를 비교하려면 MATLAB 릴리스 R2019b 및 R2020a에서 아날로그 출력 생성기로 생성된 코드를 사용할 수 있습니다. 이 두 예시 모두에서, 신호 생성기는 National Instruments USB-6211의 단일 채널에 1초 동안 10Hz 테스트 신호 사인파를 생성했습니다.
%% 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