주요 콘텐츠

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

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

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

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

daq 함수를 사용하여 DataAcquisition 객체를 생성하고, addoutput 함수를 사용하여 출력 채널을 추가합니다. 데이터 스캔 레이트를 초당 10000개 샘플로 설정합니다. 이 예제에서는 National Instruments® CompactDAQ Chassis 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)