Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Stateflow チャートを使用した有限ステート マシンのモデル化

"有限ステート マシン" は、変更の定義条件が真になった場合に動作モードが別の動作モードに遷移するイベントドリブンのリアクティブ システムの表現です。たとえば、ステート マシンを使用して、自動車のオートマチック トランスミッションを表す場合について考えてみます。トランスミッションには、パーキング、リバース、ニュートラル、ドライブ、1 速などの動作モードがあります。ドライバーがギアシフトを動かすと、システムの動作モードが別の動作モードに遷移します。

Stateflow ブロックのタイプ

有限ステート マシンの入力、出力、動作モードの関係を表現するために、Stateflow® ブロックを Simulink® モデルに追加して、状態遷移図、状態遷移表、および真理値表を作成できます。

  • Chart は、有限ステート マシンの状態遷移図に基づくグラフィカル表現です。Stateflow チャートでは、ステートと遷移によって順序論理システムの基本構成ブロックが形成されます。ステートは動作モードに対応し、遷移はステート間の経路を表します。詳細については、ステートを使用した動作モードの表現および動作モード間の遷移を参照してください。

  • State Transition Table は、順序モーダル ロジック用の有限ステート マシンを表形式で表現します。ステートと遷移を Stateflow チャートで描画する代わりに、状態遷移表を使用して、グラフィカル オブジェクトのメンテナンスが必要最小限で済む簡潔でコンパクトな形式でステート マシンをモデル化できます。詳細については、状態遷移表を使用した順序論理の表形式での表現を参照してください。

  • Truth Table は、表形式で組み合わせ論理設計を実装します。Truth Table ブロックを使用して、故障検出と管理、およびモード切り替えの論理判定をモデル化できます。詳細については、真理値表を使用して組み合わせ論理をモデル化を参照してください。

Stateflow チャートと State Transition Table ブロックで制御ロジックを実装するには、MATLAB® または C をアクション言語として使用できます。Truth Table ブロックでは、MATLAB のみをアクション言語として使用します。詳細については、アクション言語構文としての MATLAB と C の相違点を参照してください。

ヒント

ステート マシンのプログラミングの利点を MATLAB のすべての機能と組み合わせるために、スタンドアロンの Stateflow チャートを作成できます。スタンドアロンのチャートは、MATLAB オブジェクトとしてコマンド ウィンドウから直接実行するかスクリプトを使用して実行します。また、グラフィカル ユーザー インターフェイスを使用してチャートのステートを制御する MATLAB アプリをプログラミングすることもできます。詳細については、MATLAB オブジェクトとして実行する Stateflow チャートの作成を参照してください。

Stateflow チャートのプログラミング

有限ステート マシンをモデル化する Stateflow チャートを作成するには、次を行います。

  1. 関数 sfnew を呼び出して、空の Stateflow チャートを含む Simulink モデルを作成します。

    sfnew

  2. Stateflow エディターを開くには、チャート ブロックをダブルクリックします。Stateflow エディターの使用の詳細については、Stateflow エディターの操作を参照してください。

  3. システムの各動作モードについて、ステートを使用した動作モードの表現の説明に従ってステートを描画し、ステート ラベルを追加してステート アクションを実装します。

  4. ステート間のフロー ロジックの方向を表現するには、動作モード間の遷移の説明に従って遷移を描画し、遷移ラベルを追加して遷移条件を実装します。

  5. システムに入力や出力がある場合や、システムが状態変数に依存する場合は、Stateflow データの追加の説明に従って、入力データ、出力データ、ローカル データを追加します。

  6. システムがイベント トリガーに反応する場合や、システムでチャートのアクションやモデル内の他のブロックのアクションをトリガーする必要がある場合は、イベントのブロードキャストによるモデル コンポーネントの同期の説明に従って、入力イベント、出力イベント、ローカル イベントを追加します。

  7. チャートに複雑なステート アクションや遷移条件がある場合は、再利用可能な関数をチャートに追加します。ステート アクションや遷移条件での計算の種類に応じて、次の関数から最も自然な関数形式を選択して使用します。

    あるいは、独自の C または C++ コードを記述してチャートに統合できます。詳細については、Stateflow チャートでのカスタム コードの再利用を参照してください。

  8. 入力端子と出力端子を使用して、チャートを Simulink モデル内の他のブロックに接続します。

  9. モデルをシミュレートするには、[実行] をクリックします。シミュレーション中、Stateflow エディターではチャート アニメーションによってアクティブ ステートと遷移が強調表示されます。

このワークフローに関するチュートリアルについては、Stateflow チャートの作成と実行を参照してください。

参照

[1] Harel, David. "Statecharts: A Visual Formalism for Complex Systems." Science of Computer Programming 8, no.3 (June 1987): 231-74.

[2] Hatley, Derek J. and Imtiaz A. Pirbhai. Strategies for Real-Time System Specification. New York, NY: Dorset House Publishing, 1988.

参考

| | |

関連するトピック