主要内容

最新のリリースでは,このページがまだ翻訳されていません。このページの最新版は英語でご覧になれます。

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

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

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

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

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

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

程序设计师ユーザーインターフェイスの制御

このユーザーインターフェイスには,ランプを制御するオンとオフのスイッチが含まれています。スイッチが[在]の位置にある場合は,【模式】オプションボタンの位置によって,点灯(固体)または点滅(闪烁)のいずれかのモードでランプが光ります。点滅の速さは,闪烁速度]スライダーを動かして制御します。

ファイルsf_lamp_logic.sfxは,ユーザーインターフェイスのロジックを実装するスタンドアロンのStateflowチャートを定義します。チャートには,入力イベント(闪烁的および固体)とローカルデータ(延迟および应用程序)が含まれています。チャート内のアクションは,各ステートからどのウィジェットにアクセス可能かを制御します。たとえば,ステートのアクションでは,ユーザーインターフェイスのランプウィジェット,【模式】オプションボタン,[闪烁速度]スライダーがグレー表示になります。

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

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

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

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

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

编辑sf_lamp_logic.sfx

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

L = sf_lamp_logic (“延迟”, 0.5);

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

(左)

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

眨眼(左)

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

L.delay = 0.25;

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

固体(左)

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

(左)

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

删除(左)

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

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

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

lampLogic . properties (Access = private结束

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

%创建组件后执行的代码函数app. lamplogic = sf_lamp_logic(“延迟”, 0.5,“应用程序”、应用程序);结束

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

%关闭请求功能:ui函数UIFigureCloseRequest(应用程序、事件)删除(app.lampLogic);删除(应用);结束

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

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

函数SwitchValueChanged(app,event) value = app. switch . value;开关低(值)情况下“关闭”(app.lampLogic);情况下“上”(app.lampLogic);结束结束
  • 模式按钮ウィジェットのコールバック関数SelectionChangedFcn

函数ModeButtonGroupSelectionChanged(app,event) selectedButton = app. modebuttongroup . selectetobject;如果app.SolidButton == selectedButton SOLID(app.lampLogic);其他的眨眼(app.lampLogic);结束结束
  • 闪烁速度滑块ウィジェットのコールバック関数ValueChangedFcn

函数app. lamplogic .delay = round(0.5/app. blinkrateslider . value,2);结束

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

参考

関連するトピック