2016-06-22 5 views
0

Data Acquisition Toolbox를 사용하여 데이터를 수집 중입니다. 데이터는 백그라운드에서 수집됩니다. 8 개의 열전대에서 데이터를 수집하고 내 청취자에게 계속해서 내 음모를 업데이트 할 수 있습니다. 그러나 파일, 배열 또는 수집 된 데이터의 일종의 로그를 유지해야합니다.MATLAB의 Data Aquisition Toolbox를 사용하여 데이터 및 플롯 데이터를 지속적으로 기록하는 방법

daq.getDevices; 
s = daq.createSession('ni'); 
s.Rate = 1.8; 
s.DurationInSeconds = 60; 

ch1 = addAnalogInputChannel(s,'cDAQ1Mod1','ai0','Thermocouple'); 
ch2 = addAnalogInputChannel(s,'cDAQ1Mod1','ai1','Thermocouple'); 
ch3 = addAnalogInputChannel(s,'cDAQ1Mod1','ai2','Thermocouple'); 
ch4 = addAnalogInputChannel(s,'cDAQ1Mod1','ai3','Thermocouple'); 
ch5 = addAnalogInputChannel(s,'cDAQ1Mod1','ai4','Thermocouple'); 
ch6 = addAnalogInputChannel(s,'cDAQ1Mod1','ai5','Thermocouple'); 
ch7 = addAnalogInputChannel(s,'cDAQ1Mod1','ai6','Thermocouple'); 
ch8 = addAnalogInputChannel(s,'cDAQ1Mod1','ai7','Thermocouple'); 
ch1.ThermocoupleType = 'T'; 
ch2.ThermocoupleType = 'T'; 
ch3.ThermocoupleType = 'T'; 
ch4.ThermocoupleType = 'T'; 
ch5.ThermocoupleType = 'T'; 
ch6.ThermocoupleType = 'T'; 
ch7.ThermocoupleType = 'T'; 
ch8.ThermocoupleType = 'T'; 

fid1 = fopen('log.bin','w'); 
lh = addlistener(s,'DataAvailable', @plotData); 
lh1 = addlistener(s,'DataAvailable',@(src, event)logData(src, event, fid1)); 

s.NotifyWhenDataAvailableExceeds = 20; 
s.startBackground(); 

fclose(fid1); 
fid2 = fopen('log.bin','r'); 
[data,count] = fread(fid2,[8,inf],'double'); 
fclose(fid2); 

함수 plotData은 다음과 같습니다 :

function plotData(src,event) 
    plot(event.TimeStamps, event.Data) 
    legend('Outside Sensor 1','Middle Sensor 1','Middle Sensor 2','Middle Sensor 4', ... 
      'External Sensor 2','Outside Sensor 2','Middle Sensor 3','External Sensor 1') 
end 

함수 logData입니다 : 여기 내 코드입니다

function logData(src, evt, fid) 
    data = [evt.TimeStamps, evt.Data]' ; 
    fwrite(fid,data,'double'); 
end 

데이터의 지속적 업데이트 로그 등을 유지하는 방법에 대한 어떤 생각 동시에 수집 된 모든 데이터 포인트의 로그 파일을 업데이트하면서 동시에 수집됩니까?

답변

1

MATLAB은 사용자가 지정하지 않으면 데이터를 저장하지 않습니다. 이 경우 데이터를 쓸 변수, 구조 또는 파일을 미리 할당해야합니다. - 위의 업데이트 된 코드를 참조 Acquire Continuous and Background Data Using NI Devices

+0

내가이 매스 웍스 링크에서 코드를 추가하려고 :

이 매스 웍스의 도움이 생성 및 로그 파일에 기록 링크를 참조하십시오. 내가 그렇게 할 때, 계속되는 음모가 작동을 멈추고 내 지식으로는 어떤 데이터도 기록하지 않습니다. – amkas90

+0

다른 이름의 두 번째 수신기를 추가해보십시오. Listener1은 동일하게 유지 될 수 있습니다. lh = addlistener (s, 'DataAvailable', @plotData); fid1 = fid1 = fopen ('log.bin', 'w'); Listener2는 데이터를 로깅해야합니다. lh2 = addlistener (s, 'DataAvailable', @ (src, event) logData (src, event, fid1)); logData는 다음과 같습니다. function logData (src, evt, fid) data = [evt.TimeStamps, evt.Data] '; fwrite (fid1, data, 'double'); end –

+0

감사합니다. 제안한대로 위 코드를 업데이트했습니다. "경고 : 지금이 오류가 DataAvailable이 클래스 daq.ni.Session에 대해 정의 된 이벤트 의 청취자 콜백을 실행하는 동안 오류가 발생했습니다.에 fwrite 잘못된 파일 식별자를 사용하여 오류 유효한 파일 ID를 생성하기 위해 fopen을 사용 오류. logData (행 3) fwrite (fid, data, 'double'); " 이견있는 사람? – amkas90