Data Acquisition Toolbox を使用してデータを収集しています。データはバックグラウンドで収集されます。8 つの熱電対からデータを収集しており、リスナーを呼び出してプロットを継続的に更新できます。ただし、収集したデータのファイル、配列、または何らかのログを保持する必要もあります。これが私のコードです:
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
収集されたすべてのデータ ポイントのログ ファイルを更新すると同時に、収集されたデータのログを継続的に更新する方法について何か考えはありますか?