状態遷移図

複雑なソフトウェア設計を簡略化されたグラフィックス形式で明確に伝達する

状態図または状態遷移図は、ステートマシンの有限個の状態、状態遷移、および遷移を制御する規則を図式化したものです。状態遷移図は、そのシンプルさによってさまざまな操作モードを明確に伝達することが可能であるため、複雑なソフトウェア設計を開始するための高レベルの開始点として使用されます。

状態遷移図には、次のような特徴があります。

  • ボックスは操作の状態やさまざまな操作モードを表す
  • 矢印はある状態から別の状態への遷移を示す
  • 各矢印に関連付けられたテキストは、遷移を制御する規則を表す
図 1: Stateflow を使用してモデル化された、3 つの操作モード (オフ、加熱、アイドリング) を備えた電子レンジの状態図。

図 1. Stateflow を使用してモデル化された、3 つの操作モード (オフ、加熱、アイドリング) を備えた電子レンジの状態遷移図。

ステートマシンの出力またはアクションは、各システム状態の動作を説明したものです。ステートマシンは、マシンの出力が定義される場所に応じて、Moore と Mealy の 2 つのタイプに分類されます。

状態遷移図の Moore 実装

このタイプのステートマシンでは、出力はシステムの状態にのみ依存し、ステートアクションとして定義されます。状態の移行方法にかかわらず、ステートアクションは同じです。たとえば、図 2 の状態遷移図では、Heating からの出力は、Idling または OFF のどちらの状態からの遷移かにかかわらず同じままです。

図 2: Stateflow を使用した Moore 実装を用いてモデル化された状態図。

図 2. Stateflow を使用した Moore 実装を用いてモデル化された状態遷移図。

状態遷移図の Mealy 実装

このタイプのステートマシンでは、出力はシステムの状態だけではなく、システムへの入力にも依存します。図 3 の状態遷移図に示すように、Mealy 実装における出力は、遷移で定義されます。

図 3: Stateflow を使用した Mealy 実装を用いてモデル化された状態図。

図 3. Stateflow を使用した Mealy 実装を用いてモデル化された状態遷移図。

Mealy 実装を使用すると、マシン出力を更新するためのループを追加することで、状態遷移図を再編成し簡略化することができます。この実装は、設計の複雑度が増すほどメリットが大きくなります。

図 4: Stateflow を使用した Mealy 実装を用いてモデル化された再編成済みの状態図。

図 4. Stateflow を使用した Mealy 実装を用いてモデル化された再編成済みの状態遷移図。

Mealy マシンと Moore マシンのいずれも、そのシンプルさと明確さから広く利用されており、同じ状態遷移図の中に 2 つのスタイルが混在していることもよくあります。

ステートチャート: 拡張された状態遷移図

状態遷移図の基本ブロックは、複雑な論理システムを単一のブロック線図で表現するのに十分なものではありません。複雑な設計を効率よくキャプチャするためには、追加機能が必要です。Harel チャートとも呼ばれるステートチャートには、階層、並列処理、直交化、イベント ブロードキャストなどの機能が追加されています。

階層機能を使用することで、設計をさらに細分化することができ、状態間の遷移線の数を削減することができます。親ステートを導入することで、ステートマシン内に階層を作成することができます。たとえば、図 5 のステートチャートでは、親ステートである Baking に、サブステートである HeatingIdle、および関連する状態遷移図が含まれます。

図 5: Stateflow を使用してモデル化された、階層を示すステートチャート。

図 5. Stateflow を使用してモデル化された、階層を示すステートチャート。

並列処理および直交化機能を使用すると、単一のステートチャートに複数の状態を同時に含めることができます。たとえば、図 6 のステートチャートでは、OvenOven_Light は、2 つの独立したステートマシンが同時に動作していると考えることができます。このチャートは、2 つのパラレル ステートマシンを含む単一のグラフィックスでシステム全体を表現しています。

図 6: Stateflow を使用してモデル化された、階層および並列処理を示すステートチャート。

図 6. Stateflow を使用してモデル化された、階層および並列処理を示すステートチャート。

イベント ブロードキャスト機能は、2 つの独立した状態またはステートマシン間で情報を交換できるようにすることで、システムの機能を拡張します。前述のケースでは、オーブンライトの操作がオーブンの加熱システムに依存していなかったため、2 つのステートマシンは独立していました。イベント ブロードキャストを使用すると、図 7 のステートチャートで強調表示されているように、Oven 状態のロジック内の簡単なコマンドを使用して、ベーキング完了時にオーブンライトを消す機能を追加することができます。

図 7: Stateflow を使用してモデル化された、階層、並列処理、およびブロードキャストを示すステートチャート。

図 7. Stateflow を使用してモデル化された、階層、並列処理、およびブロードキャストを示すステートチャート。

階層、並列処理、およびブロードキャスト機能を備えたステートチャートは、状態遷移図を複雑にすることなく複雑なシステムの機能性を表現するのに役立ちます。

Stateflow を使用した状態遷移図およびステートチャート

Stateflow® は、有限ステートマシンに基づくグラフィカルなプログラミング環境です。Stateflow を使用すると、シンプルな状態遷移図から開始し、オートマチック トランスミッション、ロボットシステム、携帯電話などの動的システムの複雑なロジックをモデル化するためのステートチャートを構築することができます。この複雑なロジックの用途には、以下のようなものがあります。

作成されたロジックでソフトウェア コンポーネントを制御する必要がある場合は、Simulink  の自動コード生成機能を使用して、ステートチャートを C、HDL、または PLC コードに変換して配布することができます。

これらの高度なテクニックを含む、状態遷移図のモデル化に関する詳細については、StateflowSimulink を参照してください。 セキュリティシステムのモデル化の例では、Stateflow における階層、並列処理、イベント ブロードキャストについて説明しています。

参考: control logic, state machine, control systems, embedded systems