주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.

NI 장치를 사용하여 연속으로 또는 백그라운드로 신호 생성

이 예제는 비차단(non-blocking) 명령어를 사용하여 아날로그 출력 데이터를 생성하는 방법을 보여줍니다. 이 방식을 사용하면 데이터 생성 중에도 MATLAB® 명령 창에서 작업을 계속할 수 있습니다. 이를 백그라운드 생성이라고 합니다. 포그라운드 생성을 사용하면, MATLAB이 전체 데이터 생성이 완료될 때까지 기다렸다가 다음 명령을 실행하도록 합니다.

DataAcquisition 객체 생성 및 아날로그 출력 채널 추가

daq 함수를 사용하여 DataAcquisition 객체를 생성하고, addoutput 함수를 사용하여 출력 채널을 추가합니다. 데이터 스캔 레이트를 초당 10000개 샘플로 설정합니다. 이 예제에서는 National Instruments™ CompactDAQ 섀시 NI cDAQ-9178에 장착된 NI 9263 모듈을 사용합니다. 이것은 섀시의 모듈 2입니다.

dq = daq("ni");
dq.Rate = 10000;
addoutput(dq,"cDAQ1Mod2",0:2,"Voltage");

동기화된 신호 생성

출력 장치에 반복적으로 기록되는 데이터 패턴을 만들어서 출력 신호를 생성합니다. 각 채널의 데이터는 열 기반이며 출력 신호는 공통 클록에 맞춰 동기화됩니다.

다음과 같은 3개의 파형을 생성합니다.

  • data0: 사인파의 1주기

  • data1: 45도의 위상 지연을 갖는 사인파의 1주기

  • data2: 사인파의 10주기

data0 = sin(linspace(0,2*pi,1001))';
data1 = sin(linspace(0,2*pi,1001) + pi/4)';
data2 = sin(linspace(0,2*pi*10,1001))';

위의 파형은 sin(0)과 sin(2*pi)를 포함합니다. 파형을 일관되게 반복되게 하기 위해 마지막 점을 생략합니다.

data0(end) = [];
data1(end) = [];
data2(end) = [];

초당 10000개 스캔의 생성 속도에서 data0data1은 10Hz 사인파로, data2는 100Hz 사인파로 관측될 것으로 예상됩니다.

subplot(3,1,1)
plot(data0)
title('data0')
grid on
subplot(3,1,2)
plot(data1)
title('data1')
grid on;
subplot(3,1,3)
plot(data2)
title('data2')
grid on;

출력 데이터를 대기열에 넣고 백그라운드 생성 시작

연속적인 백그라운드 생성을 즉시 시작하기 위해, 0.5초 분량의 데이터에 대해 preload를 수행합니다. 장치의 스캔 레이트가 초당 10000개 스캔으로 정의되어 있기 때문에, 이 예제에서는 5000개 스캔에 해당하는 데이터를 미리 로드합니다. start를 사용하여 생성을 시작하고 즉시 명령줄로 제어권을 반환합니다. 이렇게 하면 생성이 백그라운드에서 실행되는 동안 사용자는 MATLAB에서 다른 작업을 수행할 수 있습니다.

preload(dq,repmat([data0,data1,data2],5,1));
start(dq,"repeatoutput")

MATLAB 함수를 사용하여 동적으로 출력 데이터 생성

MATLAB 함수를 사용하여 출력 데이터를 동적으로 생성하기 위해, 해당 함수를 DataAcquisition 객체의 ScansRequiredFcn에 할당합니다. 아래 코드는 "repeatoutput"와 기능적으로 동일합니다.

dq.ScansRequiredFcn = @(src,evt)write(src,repmat([data0,data1,data2],5,1));

preload(dq,zeros(dq.Rate/2,3));

start(dq,"continuous")

데이터 생성 모니터링

pause를 루프에서 사용해 생성 기간 동안 하드웨어가 출력하는 스캔 횟수를 모니터링합니다.

t = tic;
while toc(t) < 1.0
    pause(0.1)
    fprintf("Scans output by hardware = %d\n", dq.NumScansOutputByHardware)
end

fprintf("Generation has terminated with %d scans output by hardware\n", dq.NumScansOutputByHardware);
Scans output by hardware = 1109
Scans output by hardware = 2089
Scans output by hardware = 3100
Scans output by hardware = 4095
Scans output by hardware = 5093
Scans output by hardware = 6094
Scans output by hardware = 7082
Scans output by hardware = 8082
Scans output by hardware = 9088
Scans output by hardware = 10099
Generation has terminated with 10099 scans output by hardware

연속적인 백그라운드 생성 중지

백그라운드 생성은 MATLAB 내의 다른 작업들과 동시에 실행됩니다. 백그라운드 생성을 종료하려면 명시적으로 stop를 호출하십시오.

stop(dq)

참고 항목

함수

도움말 항목