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
데이터의 지속적 업데이트 로그 등을 유지하는 방법에 대한 어떤 생각 동시에 수집 된 모든 데이터 포인트의 로그 파일을 업데이트하면서 동시에 수집됩니까?
내가이 매스 웍스 링크에서 코드를 추가하려고 :
이 매스 웍스의 도움이 생성 및 로그 파일에 기록 링크를 참조하십시오. 내가 그렇게 할 때, 계속되는 음모가 작동을 멈추고 내 지식으로는 어떤 데이터도 기록하지 않습니다. – amkas90
다른 이름의 두 번째 수신기를 추가해보십시오. 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 –
감사합니다. 제안한대로 위 코드를 업데이트했습니다. "경고 : 지금이 오류가 DataAvailable이 클래스 daq.ni.Session에 대해 정의 된 이벤트 의 청취자 콜백을 실행하는 동안 오류가 발생했습니다.에 fwrite 잘못된 파일 식별자를 사용하여 오류 유효한 파일 ID를 생성하기 위해 fopen을 사용 오류. logData (행 3) fwrite (fid, data, 'double'); " 이견있는 사람? – amkas90