ステートマシン

ステートマシンとは?

ステートマシン (または有限ステートマシン) とは、変化を制御する条件が満たされると、ある状態から別の状態に遷移する、イベント駆動型のリアクティブシステムを表現したものです。ステートマシンは従来、計算機システムの記述に用いられていましたが、航空機、自動車、ロボット、携帯電話などの動的システムにおける複雑なロジックをモデル化するために拡張されました。

複雑なロジックを含む処理の例には、以下のようなものがあります。

  • システムの一連のタスクやステップのスケジューリング
  • 故障検出、分離、回復ロジックの定義
  • 動作モードの切り替え方法の監視

ステートマシンはさまざまな方法で表現できますが、グラフィカルな表現が最も一般的です。状態遷移図は、状態図とも呼ばれ、有限個の状態 (ステート) を、あるステートから別のステートへの遷移を制御する規則とともに示した図です。

たとえば、自動車のオートマチック トランスミッションを簡略化して表現したものが状態遷移図です。下図に示すステートマシンには、4 つの動作ステートがあり、それぞれ firstsecondthirdfourth のラベルが付いています。表現しているギアと同様に、これらのステートは排他的であり、一度に 1 つのステートのみがアクティブになります。このステートマシンは、車の速度を監視しています。車の速度が動作中のギアの一定のしきい値を超えると、別のギアに切り替わります。

図 1. Stateflow を使用してモデル化したオートマチック トランスミッション システムの状態図。

状態遷移図には大きく分けて 2 つの種類があります。

  • Mealy - ステートマシンの出力は、状態だけでなくシステムへの入力にも依存し、図 2 のように遷移中にマシンの出力を定義することで表現されます
  • Moore - ステートマシンの出力はシステムの状態のみに依存し、図 3 に示すように、マシンの出力をステートに定義することで表現されます

2 つのセマンティクスの詳細については、「Mealy マシンと Moore マシンの概要」を参照してください。

複雑なソフトウェア コンポーネントをエミュレートするステートマシンを作成するには、状態遷移図の基盤となる基本構成だけでは不十分です。システムの複雑な内容を効率的に把握するには、以下のような機能も必要です。

  • 階層 - 親ステートを導入し、設計をさらに構造化します
  • 並列処理または直交化 - 1 つのブロック線図で複数のステートを同時に動作させることを可能にします
  • イベントのブロードキャスト - 2 つの独立した状態またはステートマシン間の情報交換を可能にする

これらの機能を状態遷移図と組み合わせて表現したものを、Harel ステートチャート、あるいは単にステートチャートと言います。

図 4. Stateflow を使用してモデル化したセキュリティシステムのステートチャート。

これらの機能に関する詳細については、「状態遷移図とステートチャート」をご参照ください。

Stateflow を使用したステートマシン

Stateflow® は、有限ステートマシンに基づくグラフィカルなプログラミング環境です。Stateflow を使用すると、シンプルな状態図から開始し、動的システムの複雑なロジックをモデル化するためのステートチャートを構築できます。

MATLAB® を使用して MATLAB オブジェクトとしてスタンドアロンのステートチャートを実行するか、Simulink® を使用して Simulink ブロックとしてステートチャートをシミュレーションできます。

MATLAB または Simulink での Stateflow チャートのモデル化と実行に関する詳細については、「有限ステートマシンのモデル化」を参照してください。

ステートマシンのモデル化に関する詳細については、StateflowSimulink を参照してください。


参考: control logic, state diagram, control systems, embedded systems, fdir