이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
NI 장치를 사용하여 아날로그 입력 데이터를 파일에 기록하기
R2026a이 예제는 백그라운드에서 수집한 데이터를 파일에 저장하는 방법을 보여줍니다.
아날로그 입력 채널을 가진 DataAcquisition 생성
DataAcquisition을 생성하고 Voltage 측정 유형을 가진 두 개의 아날로그 입력 채널을 추가합니다. 이 예제에서는 National Instruments™ X 시리즈 데이터 수집 장치인 ID가 Dev1인 NI PCIe-6363 카드를 사용합니다.
d = daqlist("ni")
d =
12×4 table
DeviceID Description Model DeviceInfo
___________ __________________________________ _____________ ____________________
"cDAQ1Mod1" "National Instruments NI 9205" "NI 9205" [1×1 daq.DeviceInfo]
"cDAQ1Mod2" "National Instruments NI 9263" "NI 9263" [1×1 daq.DeviceInfo]
"cDAQ1Mod3" "National Instruments NI 9234" "NI 9234" [1×1 daq.DeviceInfo]
"cDAQ1Mod4" "National Instruments NI 9201" "NI 9201" [1×1 daq.DeviceInfo]
"cDAQ1Mod5" "National Instruments NI 9402" "NI 9402" [1×1 daq.DeviceInfo]
"cDAQ1Mod6" "National Instruments NI 9213" "NI 9213" [1×1 daq.DeviceInfo]
"cDAQ1Mod7" "National Instruments NI 9219" "NI 9219" [1×1 daq.DeviceInfo]
"cDAQ1Mod8" "National Instruments NI 9265" "NI 9265" [1×1 daq.DeviceInfo]
"Dev1" "National Instruments PCIe-6363" "PCIe-6363" [1×1 daq.DeviceInfo]
"Dev2" "National Instruments NI ELVIS II" "NI ELVIS II" [1×1 daq.DeviceInfo]
"Dev3" "National Instruments PCIe-6363" "PCIe-6363" [1×1 daq.DeviceInfo]
"Dev4" "National Instruments PCIe-6363" "PCIe-6363" [1×1 daq.DeviceInfo]
deviceInfo = d{9, "DeviceInfo"}
deviceInfo =
ni: National Instruments PCIe-6363 (Device ID: 'Dev1')
Analog input supports:
7 ranges supported
Rates from 0.0 to 2000000.0 scans/sec
32 channels ('ai0' - 'ai31')
'Voltage' measurement type
Analog output supports:
-5.0 to +5.0 Volts,-10 to +10 Volts ranges
Rates from 0.0 to 2000000.0 scans/sec
4 channels ('ao0','ao1','ao2','ao3')
'Voltage' measurement type
Digital IO supports:
39 channels ('port0/line0' - 'port2/line6')
'InputOnly','OutputOnly','Bidirectional' measurement types
Counter input supports:
Rates from 0.1 to 100000000.0 scans/sec
4 channels ('ctr0','ctr1','ctr2','ctr3')
'EdgeCount','PulseWidth','Frequency','Position' measurement types
Counter output supports:
Rates from 0.1 to 100000000.0 scans/sec
4 channels ('ctr0','ctr1','ctr2','ctr3')
'PulseGeneration' measurement type
dq = daq("ni"); addinput(dq, "Dev1", 0:1, "Voltage"); dq.Channels
ans =
Index Type Device Channel Measurement Type Range Name
_____ ____ ______ _______ ________________ __________________ __________
1 "ai" "Dev1" "ai0" "Voltage (Diff)" "-10 to +10 Volts" "Dev1_ai0"
2 "ai" "Dev1" "ai1" "Voltage (Diff)" "-10 to +10 Volts" "Dev1_ai1"
로그 파일 생성
log.bin 파일을 생성하고 엽니다. 파일 식별자는 파일에 쓰기 위해 사용됩니다.
fid1 = fopen("log.bin","w");
ScansAvailableFcn 설정
백그라운드 수집 중에는 DataAcquisition이 ScansAvailableFcn 속성을 사용하여 수집된 데이터를 지정된 방식으로 처리하도록 지시할 수 있습니다.
dq.ScansAvailableFcn = @(src, evt) logData(src, evt, fid1);
백그라운드에서 데이터 수집
start를 사용하여 5초 동안 데이터를 수집합니다.
start(dq, "Duration", seconds(5))
정상 작동 중에는 이 수집이 진행되는 동안 다른 MATLAB® 명령을 실행할 수 있습니다. 이 예제에서는 수집 기간 동안 수집된 스캔 수를 모니터링하기 위해 pause를 루프에서 사용합니다.
while dq.Running pause(0.5) fprintf("While loop: Scans acquired = %d\n", dq.NumScansAcquired) end fprintf("Acquisition has terminated with %d scans acquired\n", dq.NumScansAcquired);
로그 파일 닫기
fclose(fid1);
로그 파일에서 데이터 불러오기
파일 내용을 3열 행렬로 data에 불러옵니다.
fid2 = fopen('log.bin','r'); [data,count] = fread(fid2,[3,inf],'double'); fclose(fid2);
데이터 할당 및 플로팅
t = data(1,:); ch = data(2:3,:); plot(t, ch);

function logData(src, ~, fid) [data, timestamps, ~] = read(src, src.ScansAvailableFcnCount, "OutputFormat", "Matrix"); data = [timestamps, data]' ; fwrite(fid,data,'double'); end
While loop: Scans acquired = 500 While loop: Scans acquired = 1000 While loop: Scans acquired = 1500 While loop: Scans acquired = 2000 While loop: Scans acquired = 2500 While loop: Scans acquired = 3000 While loop: Scans acquired = 3500 While loop: Scans acquired = 4000 While loop: Scans acquired = 4500 While loop: Scans acquired = 5000 Acquisition has terminated with 5000 scans acquired