フィットネス トラッカーのモデル化
この例では、Stateflow® チャートと、App Designer で作成された MATLAB® アプリの間にインターフェイスを作成する方法を説明します。Stateflow チャートを MATLAB アプリに接続する方法のその他の例については、パワー ウィンドウ コントローラーのモデル化およびメディア プレーヤーのシミュレーションを参照してください。この例のバージョンのうち、MATLAB のスタンドアロン チャートを使用するものについては、スタンドアロン チャートを使用したフィットネス アプリのモデル化を参照してください。
この例では、MATLAB アプリがフィットネス トラッカーをモデル化します。シミュレーション中に、トラッカーの設定を調整し、アクティビティ ([Sleep]、[Rest]、[Walk]、[Exercise]) を選択します。[Exercise] を選択した場合、運動の強さも設定できます。
Stateflow チャート App Interface
では、MATLAB アプリと、Simulink® モデルの制御およびプラント システムの間の双方向接続を使用できます。アプリのウィジェットを操作する場合、チャートは選択内容をモデル内の他のチャートに送信します。逆に、チャートはフィットネス トラッカーの出力を使用して、アプリの数値フィールドとテキスト フィールドを更新します。たとえば、アプリの [Rest] ボタンをクリックすると、App Interface
チャートは出力 activity
の値を、列挙値 Activity.Rest
に設定します。Human Simulator
チャートは、休憩中の人をモデル化するバイタル サイン値を生成して応答します。Fitness Tracker
チャートはこれらの値を解析し、出力信号 status
を Activity.Rest
に設定します。App Interface
チャートはこの信号を監視し、アプリの [Status] フィールドの内容を Rest
に更新します。
この例を実行するには、Simulink モデルを開いて [実行] をクリックします。チャート App Interface
はアプリを開き、Human Simulator
および Fitness Tracker
チャートを初期化します。例の実行中、1 秒間のシミュレーションは 1 分の運動時間を表します。シミュレーションを停止するには、[停止] をクリックするか、アプリを閉じます。
チャートと MATLAB アプリとの接続
チャート App Interface
は MATLAB アプリ sf_fitness_app
と通信するよう構成されています。
このアプリは
chart
というプロパティを使用して、チャートApp Interface
とのインターフェイスをとります。アプリ コールバックはこのプロパティを使用して、チャートの入力を読み取り、チャートの出力に書き込みます。たとえば、[Settings] ペインでいずれかのフィールドの値を変更すると、コールバックが出力構造体threshold
の対応するフィールドの値を更新します。同様に、新しいアクティビティを選択するか、[Human Simulator] ペインで運動の強さを変更すると、コールバックがチャート出力activity
およびintensity
の値を設定します。最後に、アプリを閉じると、UIFigureCloseRequest
コールバックがチャート出力stop
の値をtrue
に設定します。チャートでは、
InterfaceWithApp
ステートの entry アクションがアプリsf_fitness_app
を実行し、戻り値をローカル データ オブジェクトapp
として保存します。チャートは、補助関数updateStatus
、updateClock
、updateText
、updateSteps
、およびupdateHeartRate
を呼び出すときに、このローカル データ オブジェクトを使用します。アプリでは、これらの補助関数はアクティビティのステータス、時計、歩数計の各フィールドの内容を変更し、心拍と足跡のディスプレイのアニメーション効果を作成します。たとえば、チャートがnotification
メッセージを受け取るとき、サブステートMainDisplay
は補助関数updateText
を呼び出します。この関数は、時計の表示の内容を、カスタマイズされた通知に置き換えます。5 秒が経過した後、サブステートは補助関数updateClock
を呼び出し、時計の表示を元に戻します。
MATLAB アプリと Stateflow チャートの間で双方向接続を作成する方法については、パワー ウィンドウ コントローラーのモデル化およびメディア プレーヤーのシミュレーションを参照してください。
アプリの操作に使用する関数はコード生成ではサポートされないため、InterfaceWithApp
ステートは最初に関数 coder.extrinsic
を呼び出して、これらの関数を外部 MATLAB コードとして宣言します。詳細については、Stateflow チャートでの外部 MATLAB 関数の呼び出しを参照してください。
アクティビティに基づくバイタル サインのシミュレーション
Human Simulator
チャートは、アプリで選択したアクティビティを実行中の人のバイタル サインをモデル化します。このチャートは出力構造体 vitals
を使用して、これらのバイタル サインをフィットネス トラッカーにリレーします。この構造体のフィールドは、心拍数、速度、歩数を表します。新しいアクティビティを選択したり、運動の強さを調整したりすると、チャートは関数 transition
を呼び出して、これらのバイタル サインが時間の経過に伴い次第に変化するようにします。アクティビティや運動の強さの変化を検出する場合、チャートはhasChanged
演算子を呼び出します。詳細については、データと式の値の変化の検出を参照してください。
フィットネス トラッカーの出力の判定
チャート Fitness Tracker
は、フィットネス トラッカーの中核のロジックをモデル化します。このチャートは、実行される可能性があるアクティビティに対応する 4 つのサブチャートで構成されています。このチャートは、Human Simulator
チャートで生成された心拍数および速度と、これらのサブチャート間での遷移に基づいて、アクティビティのステータスを登録します。信号ノイズを除外するため、このチャートはduration
演算子を使用して単純なデバウンス ロジックを実装しています。たとえば、休息中に、運動ではないが、すばやい動作を突然行うことがあります。チャートは、動作が 2 分 (またはシミュレーション時間で 2 秒) 以上続いた場合にのみ歩行または運動を行っていると判定します。チャートはアクティブな子ステートを監視し、この情報を出力データ status
を介して App Interface
チャートに渡します。詳細については、アクティブ ステート データによるステート アクティビティの監視を参照してください。
チャートは他の時相論理演算子を使用して、各アクティビティに費やした時間を追跡し、アプリにいつ通知を送信するかを決定します。
各サブチャートの exit アクションにより、
elapsed
演算子が呼び出され、サブチャートがアクティブだった時間の長さが判別されます。チャートはこの値と、心拍数や合計歩数などの他の情報を、出力構造体display
を使用してApp Interface
チャートに送信します。チャートは
after
演算子を使用して、5 分を超える睡眠または歩行、アプリで指定したしきい値より長い時間の休憩や運動、または 15 分を超える強い運動 (1 秒間で 4 歩を超えるペース) を判別します。どの場合についても、チャートはNotification
メッセージを送信します。App Interface
チャートはこのメッセージを受け取り、アプリのメイン ディスプレイに通知を表示します。通知の種類によって、通知ボタンの色が変わります。
参考
Stop Simulation (Simulink) | after
| duration
| elapsed
| hasChanged
| coder.extrinsic
(MATLAB Coder)