【AppDesigner】timerで1mm/secで繰り返し処理を実行する
26 次查看(过去 30 天)
显示 更早的评论
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)」とはどういう意味なのかわからないので、関数ハンドルのところとかみたのですが分かりませんでした。どこかに説明ありますでしょうか。
もし分かる方がいらっしゃいましたらご教示いただけますと幸いです。
どうぞよろしくお願いいたします。
0 个评论
采纳的回答
Kojiro Saito
2024-10-24,4:44
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);
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 ビッグ データの処理 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!