이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
NI 장치를 사용하여 아날로그 입력 데이터를 파일에 기록하기
이 예제는 백그라운드에서 수집한 데이터를 파일에 저장하는 방법을 보여줍니다.
아날로그 입력 채널을 가진 DataAcquisition 생성
DataAcquisition을 생성하고 Voltage 측정 유형을 가진 두 개의 아날로그 입력 채널을 추가합니다. 이 예제에서는 National Instruments® X 시리즈 데이터 수집 장치인 NI PCIe-6363 카드(ID: Dev1)를 사용하십시오.
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