0

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

収集されたすべてのデータ ポイントのログ ファイルを更新すると同時に、収集されたデータのログを継続的に更新する方法について何か考えはありますか?

4

1 に答える 1

1

ユーザーが指示しない限り、MATLAB はデータを保存しません。この場合、変数、構造体、またはファイルを事前に割り当てて、データを書き込む必要があります。

ログファイルの作成と書き込みのヘルプについては、MathWorks のリンクを参照してください: NI デバイスを使用して連続データとバックグラウンドデータを取得する

于 2016-06-22T22:35:06.123 に答える