【AppDesign​er】timerで1​mm/secで繰り返​し処理を実行する

27 views (last 30 days)
mayu
mayu on 24 Oct 2024 at 3:36
Commented: mayu on 24 Oct 2024 at 5:25
AppDesignerの画面上で、ボタンを押したら1mm/secごとに処理を実行しつづけるということをしたいと思っています。
こちらのページを見ながら👇
t = timer('TimerFcn',@(x,y)disp('Hello World!'),'StartDelay',5);
上記サンプルコードに倣って、画面に設置したボタンのコールバック内に、
押下2秒後、1mm/sec間隔で、5回処理繰り返しということで、
t = timer('TimerFcn',@(x,y)disp('Hello World!'),'StartDelay',2,'Period',0.001,'ExecutionMode','fixedRate','TasksToExecute',5);
start(t);
を記載して実施したら、コマンドウィンドウ上で5回「Hello World!」が出たのを確認できました。
動きはこれでいいのですが処理内容を色々変えたいので、直接ではなくプロパティ上に関数の内容を書こうと思って、以下のように書き直してみたのですが、
👇プロパティ・メソッド内
properties (Access = private)
ETimer % Timer object
end
methods (Access = private)
function ESpdFnc(app)
disp('Hello World!')
end
end
👇ボタン内
app.ETimer = timer('TimerFcn',"@ESpdFnc",'StartDelay',2,'Period',0.001,'ExecutionMode','fixedRate','TasksToExecute',5);
start(app.ETimer);
コマンドウィンドウでは「Hello World!」ではなく、
ans =
値をもつ function_handle:
@ESpdFnc
が5回出てきてうまくいかず、関数の定義の仕方がおかしいのかなとヘルプなど読みなおしたり、色々書き換えてみたのですがエラーが出るだけで理由がわかりませんでした。
直接ではなく、外部に関数処理内容を書く場合はどう書いたらよかったのでしょうか。
また直接指定している部分の、「@(x,y)disp('Hello World!')」の「@(x,y)」とはどういう意味なのかわからないので、関数ハンドルのところとかみたのですが分かりませんでした。どこかに説明ありますでしょうか。
もし分かる方がいらっしゃいましたらご教示いただけますと幸いです。
どうぞよろしくお願いいたします。

Accepted Answer

Kojiro Saito
Kojiro Saito on 24 Oct 2024 at 4:44
App Designerのコールバックでタイマー関数を使う方法はこちらの例にあります。
openExample('matlab/AppdMemoryMonitorExample')
でmlappを開けますので、コールバックの書き方が参考になると思います。
まずプライベート関数の定義で、app以外の引数を2つ追加して3つの入力にします。
function ESpdFnc(app, ~, ~)
disp('Hello World!')
end
App Designerのコールバックではアプリのオブジェクト「app」が引数に必要ですが、タイマー関数にするにはタイマーオブジェクトとイベントデータの2つが必要になります。
コールバック関数を作成する場合、最初の 2 つの引数は、timer オブジェクトに対するハンドルとイベント構造体になります。
ただ、ESpdFncの処理にはタイマーオブジェクトもイベントデータも使わないので、上記のように「app, ~, ~」にして大丈夫です。
そしてボタンプッシュ時のコールバックでタイマー関数を呼び出すとき、ダブルクオーテーションの文字列で渡すのではなく、「@」が付く関数ハンドルを渡します。App Designerのコールバックでは関数がapp.関数名になるので、「@app.ESpdFnc」とします。
app.ETimer = timer('TimerFcn', @app.ESpdFnc, 'StartDelay', 2, 'Period', 0.001, 'ExecutionMode', 'fixedRate', 'TasksToExecute', 5);
start(app.ETimer);
  1 Comment
mayu
mayu on 24 Oct 2024 at 5:25
早速ありがとうございます!
そのページも見ていたものの、参考箇所の文面が難しくてわかりませんでした💦
関数名のダブルクォーテーションを外すとエラーになったのでつけてみたりしていたのですが、関数名にapp.関数名にできていなかった所も直したらちゃんと動きました!
ありがとうございました🤗

Sign in to comment.

More Answers (0)

Categories

Find more on ビッグ データの処理 in Help Center and File Exchange

Products


Release

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!