このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
フィットネス トラッカーのモデル化
この例では、Stateflow® チャートと、App Designer で作成された MATLAB® アプリの間にインターフェイスを作成する方法を説明します。Stateflow チャートを MATLAB アプリに接続する方法のその他の例については、パワー ウィンドウ コントローラーのモデル化およびSimulate a Media Playerを参照してください。この例のバージョンのうち、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 チャートの間で双方向接続を作成する方法については、パワー ウィンドウ コントローラーのモデル化およびSimulate a Media Playerを参照してください。
アプリの操作に使用する関数はコード生成ではサポートされないため、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)