タイマーを使用したアプリでのデータの定期的プロット
このアプリでは、定期的な時間間隔でタスクを実行するように App Designer でタイマーを構成する方法を示します。この例では、アプリはタイマーを使用して Web サイトから風速データを 5 秒ごとにクエリし、返された値をプロットします。
データのクエリとプロット
タイマーのコールバック関数に、定期的に実行するタスクのコードを記述します。WindSpeedTimerFcn
という名前のプライベート関数を作成し、関数ヘッダーに 2 つの追加の入力引数を含めます。最初の引数は、多くの場合、src
という名前で、コールバックをトリガーするオブジェクトを指定します。2 番目の引数は、多くの場合、event
という名前で、コールバック関数にイベント データを提供します。これらの 2 つの追加の入力引数を渡すと、関数がタイマー コールバックとして指定されます。タイマー コールバックの構文の詳細については、タイマー コールバック関数を参照してください。
このコールバック内に、Web サイトからデータを抽出して処理するコードを追加します。次に、関数 plot
の最初の引数として座標軸を使用してデータをプロットします。アプリ内でのプロットの詳細については、App Designer でのグラフィックスの表示を参照してください。
function WindSpeedTimerFcn(app,src,event) % Get current time tnow = datetime("now","TimeZone","America/New_York"); % Get wind speed data from MathWorks weather station weatherdata = webread("https://api.thingspeak.com/channels/12397/feeds/last.json"); y = str2double(weatherdata.field2); % Plot data plot(app.UIAxes,tnow,y,"ob"); % Adjust x and y limits based on plotted data % ... end
タイマーの作成
関数 WindSpeedTimerFcn
を 5 秒ごとに実行するタイマーを作成します。まず、タイマーを格納する WindSpeedTimer
という名前のプライベート プロパティを作成し、アプリ コードのさまざまな部分でタイマーを変更および削除できるようにします。App Designer のツールストリップの [エディター] タブから [プロパティ] を選択し、[プライベート プロパティ] オプションを選択します。次に、startupFcn
コールバックでタイマーを作成し、WindSpeedTimer
に格納します。
app.WindSpeedTimer = timer("ExecutionMode","fixedRate","Period",5, ... "BusyMode","queue","TimerFcn",@app.WindSpeedTimerFcn)
この関数呼び出しは、5 秒ごとに繰り返し実行されるようにタイマーを構成します。また、タイマーがビジー状態のときにタイマー コールバックをキューに入れ、タイマーの実行中に定期的な時間間隔で実行するコールバック関数として関数 WindSpeedTimerFcn
を指定します。関数ハンドル @app.WindSpeedTimerFcn
を使用して、この関数を timer
オブジェクトの TimerFcn
コールバックに関連付けます。MATLAB® は、関数の実行時に 2 つの入力引数を自動的にコールバック関数に渡すため、関数ハンドルは入力引数を明示的に参照しません。
タイマーの開始と停止
対応するボタンが押されたときにタイマーを開始および停止するコールバック関数を作成します。app.WindSpeedTimer
プロパティを参照して、これらのコールバック関数で timer
オブジェクトにアクセスします。
タイマーがまだ実行されていない場合に、[Start] ボタンが押されたとき用のコールバック関数でタイマーを開始する。
if strcmp(app.WindSpeedTimer.Running,"off") start(app.WindSpeedTimer); end
[Stop] ボタンが押されたとき用のコールバック関数でタイマーを停止する。
stop(app.WindSpeedTimer);
コールバックの詳細については、App Designer のコールバックを参照してください。
アプリが閉じられたときのタイマーの削除
アプリのパフォーマンスを最適化するには、閉じるリクエスト用のコールバック関数を作成して、アプリを閉じるときにタイマーを削除します。まず、[コンポーネント ブラウザー] で UI Figure を右クリックし、コンテキスト メニューで [コールバック]、[CloseRequestFcn コールバックの追加] を選択することで、アプリの CloseRequestFcn
コールバックを追加します。次に、この CloseRequestFcn
コールバックでタイマーを停止します。
stop(app.WindSpeedTimer);
最後に、タイマーと Figure を削除します。
delete(app.WindSpeedTimer); delete(app);
完全にコード化されたアプリを表示および実行するには、App Designer でこの例を起動します。