このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
この例では、スタンドアロンの Stateflow® チャートでグラフィカル ユーザー インターフェイスのロジックをモデル化する方法を説明します。スタンドアロンのチャートは、MATLAB® をアクション言語として Classic チャートのセマンティクスを実装します。Simulink® でのコード生成が制限されている関数を含めて、MATLAB のすべての機能を使用してチャートをプログラミングできます。詳細については、MATLAB オブジェクトとして実行する Stateflow チャートの作成を参照してください。
スタンドアロンの Stateflow チャートは、その入力イベントを呼び出して、時相演算子を使用することによって実行できます。イベントドリブンおよびタイマードリブンの実行ワークフローは、ヒューマンマシン インターフェイス (HMI) およびグラフィカル ユーザー インターフェイス (UI) の基となるロジックの設計に適しています。
MATLAB App Designer を使用する場合は、インターフェイス ウィジェットからのコールバック関数がチャート内のイベントを呼び出します。
Stateflow チャートでは、時相演算子とローカル データがユーザー インターフェイスのプロパティを制御します。
MATLAB を使用してグラフィカル ユーザー インターフェイスを作成する方法の詳細については、App Designer を使用したアプリ開発を参照してください。
このユーザー インターフェイスには、ランプを制御するオンとオフのスイッチが含まれています。スイッチが [On] の位置にある場合は、[Mode] オプション ボタンの位置によって、点灯 (Solid) または点滅 (Blinking) のいずれかのモードでランプが光ります。点滅の速さは、[Blink Rate] スライダーを動かして制御します。
ファイルsf_lamp_logic.sfx
は、ユーザー インターフェイスのロジックを実装するスタンドアロンの Stateflow チャートを定義します。チャートには、入力イベント (ON
、OFF
、BLINKING
およびSOLID
) とローカル データ (delay
およびapp
) が含まれています。チャート内のアクションは、各ステートからどのウィジェットにアクセス可能かを制御します。たとえば、Off
ステートのアクションでは、ユーザー インターフェイスのランプ ウィジェット、[Mode] オプション ボタン、[Blink Rate] スライダーがグレー表示になります。
在
ステートでは、サブステートSolid
とBlinking
が 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
ユーザー インターフェイスを実行すると、チャート キャンバス上およびランプ ウィジェット上での制御ウィジェットの調整の効果を観察できます。