ステートマシンとは
ステートマシン (または有限ステートマシン) とは、イベント駆動型のリアクティブシステムを表現したもので、変化を制御する条件が満たされたときに、ある状態から別の状態へと遷移します。多くの場合、ステートマシンは図で表現されますが、テキストで表すことも可能です。
ステートマシンを構築するには、次の 3 つの基本構成要素が必要です。
- ステート (状態): プロセスの状態を特徴づける異なるステップ、タスク、動作モード
- トランジション (遷移): ある状態から別の状態に移り変わること
- アクション (動作): ステートマシンの実行中に発生するイベントや変化
Stateflow を用いてモデル化されたオートマチック ギア トランスミッション システムを通じて、ステートマシンの基本構成要素を確認することができます。(例を参照)
初期のステートマシンは、数学者やコンピューター科学者により、計算機システムの記述に利用されていました。それを簡略化して、複雑なロジックをグラフィックス表現にすることで扱いやすくしました。テキストによる記述と比べて、視覚化されたステートマシンは、システム内における状態間の関連性や、遷移やアクションを引き起こす条件を明確に表すことができます。時が経つにつれて、ステートマシンの用途は広がり、現在では航空機、自動車、ロボット、携帯電話などの動的システムにおける複雑な論理モデリングにも活用されています。
複雑なロジックを含む処理の例には、以下のようなものがあります。
- システムの一連のタスクやステップのスケジューリング
- 障害検出、分離、回復ロジックの定義
- 動作モードの切り替え方法の監視
ステートマシンを使用すると、自動車のオートマチック ギア トランスミッションを簡略化して表現することができます。下記の例には、4 つの動作状態があり、それぞれ first、second、third、fourth のラベルが付いています。これらの状態は、実際のギアと同様に排他的な特性があり、一度に 1 つの状態のみがアクティブになります。このステートマシンは、自動車の速度を監視し、使用されているギアが速度しきい値に達した時にギアを切り替えます。
Stateflow のオートマチック ギア トランスミッション システムのステートマシンは、速度がしきい値に達するとギアを切り替えます。(例を参照)
Mealy 型と Moore 型のステートマシン
ステートマシンを設計する際に検討する代表的な手法には、次の 2 つがあります。
- Mealy 型: 出力は状態と入力によって決まるため、出力を状態の遷移上で定義することで表現します。
- Moore 型: 出力は状態のみに依存するため、出力を状態ごとに定義することで表現します。
Mealy 型でモデル化された自動販売機のステートマシンでは、状態の遷移上でソーダを出すかどうかを定義します。(Stateflow の例を参照)
Moore 型でモデル化された信号機のステートマシンでは、信号の色に関する出力を状態ごとに定義します。(Stateflow の例を参照)
これらの型と使い分けの詳細については、Mealy マシンと Moore マシンの概要をご覧ください。
ステートマシンにおける Harel の概念
ソフトウェア コンポーネントの複雑さが増すにつれ、ステートマシンの基本構成ブロックにも改良が求められるようになりました。1980 年代、David Harel 博士は、システムの込み入った細部を正確に再現するために求められる、さらなる機能を特定しました。詳細は以下のとおりです。
- 階層 - 親ステートを 1 つまたは複数取り入れることで、設計をさらに構造化し、区分けします。
- 並列処理または直交化 - 1 つのブロック線図内で複数のステートを同時に動作させます。
- イベントのブロードキャスト - 2 つの独立した状態/ステートマシン間の情報交換を可能にします。
ステートマシンにこうした機能を組み込んだ表現を、Harel ステートチャートと呼んでいます。
さらに複雑化したセキュリティシステムを定義するには、Harel ステートチャートの要素が必要になります。(例を参照)
Stateflow を使用したステートマシン
Stateflow® は、有限ステートマシンに基づくグラフィカルなプログラミング環境です。シンプルな状態図からステートマシンを構築することで、動的システムの複雑なロジックをモデル化することができます。ステートマシンに加えて、状態遷移図、フローチャート、状態遷移表、真理値表の設計も可能です。この手法は、監視制御、タスク スケジューリング、障害管理、通信プロトコル、ユーザー インターフェイス、ハイブリッドシステムなどのアプリケーション開発に役立てることができます。
Stateflow のステートマシンは、シミュレーションを通じて、異なる条件下での動作を検証できます。たとえば、エレベーターをモデル化したステートマシンのシミュレーションの場合、違うボタンを押したときや不具合が発生したときの反応を確認できます。ステートマシンをシミュレーションすることで、ロジックが想定どおりに動作することを確認したり、条件漏れの有無を評価したり、さまざまなシナリオをテストすることもできます。
ステートマシンのモデル化に関する詳細については、Stateflow と Simulink を参照してください。Stateflow でステートマシンを作成するには、有限ステート マシンのモデル化をご覧ください。
製品使用例および使い方
ソフトウェア リファレンス
参考: 制御ロジック, 状態図, 制御システム, 組み込みシステム, FDIR, モデルベースデザイン, モデルベースのテスト, PackML, モデリングとシミュレーション, シミュレーション ソフトウェア, モデルベース システムズ エンジニアリング (MBSE)