Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

Stateflow チャートを使用したヒューマンマシン インターフェイスのロジックの設計

この例では、スタンドアロンの Stateflow® チャートでグラフィカル ユーザー インターフェイスのロジックをモデル化する方法を説明します。スタンドアロンのチャートは、MATLAB® をアクション言語として Classic チャートのセマンティクスを実装します。Simulink® でのコード生成が制限されている関数を含めて、MATLAB のすべての機能を使用してチャートをプログラミングできます。詳細については、MATLAB オブジェクトとして実行する Stateflow チャートの作成を参照してください。

スタンドアロンの Stateflow チャートは、その入力イベントを呼び出して、時相演算子を使用することによって実行できます。イベントドリブンおよびタイマードリブンの実行ワークフローは、ヒューマンマシン インターフェイス (HMI) およびグラフィカル ユーザー インターフェイス (UI) の基となるロジックの設計に適しています。

  • MATLAB App Designer を使用する場合は、インターフェイス ウィジェットからのコールバック関数がチャート内のイベントを呼び出します。

  • Stateflow チャートでは、時相演算子とローカル データがユーザー インターフェイスのプロパティを制御します。

MATLAB を使用してグラフィカル ユーザー インターフェイスを作成する方法の詳細については、App Designer を使用したアプリ開発を参照してください。

App Designer ユーザー インターフェイスの制御

このユーザー インターフェイスには、ランプを制御するオンとオフのスイッチが含まれています。スイッチが [On] の位置にある場合は、[Mode] オプション ボタンの位置によって、点灯 (Solid) または点滅 (Blinking) のいずれかのモードでランプが光ります。点滅の速さは、[Blink Rate] スライダーを動かして制御します。

ファイルsf_lamp_logic.sfxは、ユーザー インターフェイスのロジックを実装するスタンドアロンの Stateflow チャートを定義します。チャートには、入力イベント (ONOFFBLINKINGおよびSOLID) とローカル データ (delayおよびapp) が含まれています。チャート内のアクションは、各ステートからどのウィジェットにアクセス可能かを制御します。たとえば、Offステートのアクションでは、ユーザー インターフェイスのランプ ウィジェット、[Mode] オプション ボタン、[Blink Rate] スライダーがグレー表示になります。

ステートでは、サブステートSolidBlinkingが 2 つの動作モードを示します。点滅するランプを実装するために、チャートは時相論理演算子afterに依存します。チャートがステート眨眼睛。Offに入ると、出力遷移上の式after(delay,sec)は、数秒後にチャートを実行する MATLAB タイマー オブジェクトを作成します。その後チャートはステート眨眼睛。在に遷移し、眨眼睛。Offに戻る遷移をトリガーする別のタイマー オブジェクトを作成します。チャートが 2 つのステートの間で遷移を続ける間、ローカル データ遅延の値を変更して点滅の速さを調整したり、入力イベントSOLIDまたはOFFを呼び出して点滅モードから出る遷移を実行したりできます。

ステートのヒストリ ジャンクションは、直近でアクティブだったサブステートに関する情報を保持して、ランプをオンにしたときにユーザー インターフェイスが前の動作モードに戻るようにします。

イベントを使用したスタンドアロンのチャートの実行

MATLAB コマンド ウィンドウで入力イベント関数を呼び出すことにより、スタンドアロンのチャートを実行できます。Stateflow エディターには、チャート アニメーションを使用してアクティブ ステートと遷移を強調表示することにより、これらの各コマンドの効果が表示されます。

1. Stateflow エディターでスタンドアロンのチャートを開きます。

editsf_lamp_logic.sfx

2.チャート オブジェクトLを作成してdelayの値を 0.5 に初期化します。この値は 1 秒あたり 1 回の点滅速度に対応します。

L = sf_lamp_logic('delay',0.5);

3. ランプをオンにします。

ON(L)

4. 点滅モードに切り替えます。

BLINKING(L)

5.delayの値を 0.25 に設定します。この値は 1 秒あたり 2 回の点滅速度に対応します。

L.delay = 0.25;

6. 点灯モードに切り替えます。

SOLID(L)

7. ランプをオフにします。

OFF(L)

8. チャート オブジェクトLを MATLAB ワークスペースから削除します。

delete(L)

スタンドアロンのチャートとユーザー インターフェイスの接続

ユーザー インターフェイスとスタンドアロンの Stateflow チャートの間に双方向接続を確立するには、App Designer ウィンドウを開いて[コード ビュー]を選択します。

1. App Designer ウィンドウで、Stateflow チャート オブジェクトへのハンドルを保存するためのプライベート プロパティlampLogicを作成します。

properties (Access = private) lampLogicend

2.チャート オブジェクトを作成してそのローカル データappをユーザー インターフェイス ハンドルに設定するコールバック関数StartupFcnを作成します。チャート オブジェクト ハンドルをlampLogicプライベート プロパティに割り当てます。

% Code that executes after component creationfunctionStartupFcn(app) app.lampLogic = sf_lamp_logic('delay',0.5,'app',app);end

3. ユーザー インターフェイスを閉じたときにチャート オブジェクトを削除するコールバック関数CloseRequestFcnを作成します。

% Close request function: UIFigurefunctionUIFigureCloseRequest(app, event) delete(app.lampLogic); delete(app);end

4. ユーザー インターフェイスのウィジェットごとに、スタンドアロンのチャートで適切なイベントを呼び出すコールバック関数を追加します。

  • Switch ウィジェットのコールバック関数ValueChangedFcn:

function= app.Switch SwitchValueChanged(应用程序、事件)值.Value;switchlower(value)case'off'OFF(app.lampLogic);case'on'ON(app.lampLogic);endend
  • Mode Button ウィジェットのコールバック関数SelectionChangedFcn:

functionModeButtonGroupSelectionChanged(app,event) selectedButton = app.ModeButtonGroup.SelectedObject;ifapp.SolidButton == selectedButton SOLID(app.lampLogic);elseBLINKING(app.lampLogic);endend
  • Blink Rate Slider ウィジェットのコールバック関数ValueChangedFcn:

functionBlinkRateSliderValueChanged(app,event) app.lampLogic.delay = round(0.5/app.BlinkRateSlider.Value,2);end

ユーザー インターフェイスを実行すると、チャート キャンバス上およびランプ ウィジェット上での制御ウィジェットの調整の効果を観察できます。

参考

関連するトピック