【AppDesigner】timerで1mm/secで繰り返し処理を実行する
25 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Kojiro Saito
le 24 Oct 2024
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);
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Downloads dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!