MATLABのタイマーコールバックに引数を渡して拡張性のあるプログラムを書く方法について
MATLAB のタイマーを使って、プログラムを実行した最後に一度だけ
excelファイルにデータを書き込もうとしています。
TimerCallback.mとtimer_sample.mを同じフォルダに入れて、timer_sample.mを実行します。
MATLABは「mac-64bitのバージョンR2017a」です。
考え方としては、MATLABで複数の addAnalogInputChannel を同時に定義する時のエラーとMATLAB のタイマーを使用して excel ファイルを作成するプログラムのエラーで書いたプログラムを組み合わせたプログラムを作成しようとしています。
問題
①TimerCallback.mで以下のように1つ1つ定義しているものをfor文でtimer_sample.mで定義した変数numの値だけxlswriteを個別に実行する方法がわからず困っています。
xlswrite(this.filename, this.x_value, 'sender');
xlswrite(this.filename, this.y_value, 'receiver');
xlswrite(this.filename, this.z_value, 'receiver');
②timer_sample.mにおいて、変数numの値だけタイマーコールバックをfor文で個別に呼び出す方法がわかりません。
プログラム
timer_sample.m
mycallback = TimerCallback('data.xlsx');
mytimer = timer('TimerFcn', @mycallback.callback, 'StartDelay', 30);
start(mytimer);
num = 3
for i = 1:1:num
mycallback.x_value = [mycallback.x_value, [1 2 3]];
mycallback.y_value = [mycallback.y_value, [4 5 6]];
mycallback.z_value = [mycallback.y_value, [7 8 9]];
end
TimerCallback.m
classdef TimerCallback < handle
properties %public properties
state;
x_value;
y_value;
filename;
end
methods
%constructor
function this = TimerCallback(filename)
if nargin > 0
this.filename = filename;
end
this.state = true;
end
%callback function
function callback(this, ~, ~)
xlswrite(this.filename, this.x_value, 'sender');
xlswrite(this.filename, this.y_value, 'receiver');
xlswrite(this.filename, this.z_value, 'receiver');
this.state = false;
disp('Callback executed');
end
end
end
ご回答を受けて補足
timer_sample.mに関して
for i = 1:1:num
mycallback.x_values{i} = [mycallback.x_values{i} event.Data(i)];
end
event.Dataはnum列からなる多次元行列で、その1列目をmycallback.r1_values、2列目をmycallback.r2_valuesにappendさせていきたいです。
TimerCallback.mに関して
this.x_values = cell(1,num); % cell配列の初期化(1x3の空cell配列)
とありましたが、event.Data(1)から取得されるのは行数が未定で1列の配列です。
またここでも、その1列目をmycallback.r1_values、2列目をmycallback.r2_valuesのように変数を入力numに応じで生成したいと考えています。