Main Content

タイマーを使用したアプリでのデータの定期的プロット

このアプリでは、定期的な時間間隔でタスクを実行するように 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 でこの例を起動します。

参考

関数

プロパティ

関連するトピック