ステートマシン

ステートマシンとは

ステートマシン (または有限ステートマシン) とは、イベント駆動型のリアクティブシステムを表現したもので、変化を制御する条件が満たされたときに、ある状態から別の状態へと遷移します。多くの場合、ステートマシンは図で表現されますが、テキストで表すことも可能です。

ステートマシンを構築するには、次の 3 つの基本構成要素が必要です。

  • ステート (状態): プロセスの状態を特徴づける異なるステップ、タスク、動作モード
  • トランジション (遷移): ある状態から別の状態に移り変わること
  • アクション (動作): ステートマシンの実行中に発生するイベントや変化

Stateflow を用いてモデル化されたオートマチック ギア トランスミッション システムを通じて、ステートマシンの基本構成要素を確認することができます。(例を参照)

初期のステートマシンは、数学者やコンピューター科学者により、計算機システムの記述に利用されていました。それを簡略化して、複雑なロジックをグラフィックス表現にすることで扱いやすくしました。テキストによる記述と比べて、視覚化されたステートマシンは、システム内における状態間の関連性や、遷移やアクションを引き起こす条件を明確に表すことができます。時が経つにつれて、ステートマシンの用途は広がり、現在では航空機、自動車、ロボット、携帯電話などの動的システムにおける複雑な論理モデリングにも活用されています。

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

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

ステートマシンを使用すると、自動車のオートマチック ギア トランスミッションを簡略化して表現することができます。下記の例には、4 つの動作状態があり、それぞれ first、second、third、fourth のラベルが付いています。これらの状態は、実際のギアと同様に排他的な特性があり、一度に 1 つの状態のみがアクティブになります。このステートマシンは、自動車の速度を監視し、使用されているギアが速度しきい値に達した時にギアを切り替えます。

Stateflow のオートマチック ギア トランスミッション システムのステートマシンは、速度がしきい値に達するとギアを切り替えます。(例を参照)

Mealy 型と Moore 型のステートマシン

ステートマシンを設計する際に検討する代表的な手法には、次の 2 つがあります。

  • Mealy 型: 出力は状態と入力によって決まるため、出力を状態の遷移上で定義することで表現します。
  • Moore 型: 出力は状態のみに依存するため、出力を状態ごとに定義することで表現します。
5 セント硬貨、10 セント硬貨、または投入なしを受け取る入力状態と対応する出力を示したステートマシン図。

Mealy 型でモデル化された自動販売機のステートマシンでは、状態の遷移上でソーダを出すかどうかを定義します。(Stateflow の例を参照)

2 方向に面する信号の 5 つの状態を示す信号機のステートマシン図。

Moore 型でモデル化された信号機のステートマシンでは、信号の色に関する出力を状態ごとに定義します。(Stateflow の例を参照)

これらの型と使い分けの詳細については、Mealy マシンと Moore マシンの概要をご覧ください。

ステートマシンにおける Harel の概念

ソフトウェア コンポーネントの複雑さが増すにつれ、ステートマシンの基本構成ブロックにも改良が求められるようになりました。1980 年代、David Harel 博士は、システムの込み入った細部を正確に再現するために求められる、さらなる機能を特定しました。詳細は以下のとおりです。

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

ステートマシンにこうした機能を組み込んだ表現を、Harel ステートチャートと呼んでいます。

さらに複雑化したセキュリティシステムを定義するには、Harel ステートチャートの要素が必要になります。(例を参照)

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

Stateflow® は、有限ステートマシンに基づくグラフィカルなプログラミング環境です。シンプルな状態図からステートマシンを構築することで、動的システムの複雑なロジックをモデル化することができます。ステートマシンに加えて、状態遷移図、フローチャート、状態遷移表、真理値表の設計も可能です。この手法は、監視制御、タスク スケジューリング、障害管理、通信プロトコル、ユーザー インターフェイス、ハイブリッドシステムなどのアプリケーション開発に役立てることができます。

Stateflow のステートマシンは、シミュレーションを通じて、異なる条件下での動作を検証できます。たとえば、エレベーターをモデル化したステートマシンのシミュレーションの場合、違うボタンを押したときや不具合が発生したときの反応を確認できます。ステートマシンをシミュレーションすることで、ロジックが想定どおりに動作することを確認したり、条件漏れの有無を評価したり、さまざまなシナリオをテストすることもできます。

ステートマシンのモデル化に関する詳細については、Stateflow と Simulink を参照してください。Stateflow でステートマシンを作成するには、有限ステート マシンのモデル化をご覧ください。


ソフトウェア リファレンス


상태 기계 FAQ

상태 기계(또는 유한 상태 기계)는 이벤트 기반의 반응 시스템을 표현한 것으로, 변화 조건이 충족되면 한 상태에서 다른 상태로 전이하는 모델이다.

세 가지 구성 요소는 상태(서로 다른 단계, 작업 또는 동작 모드), 전이(상태 간 이동 방법), 그리고 동작(실행 중 발생하는 이벤트나 변화)이다.

상태 기계는 복잡한 논리가 필요한 작업에 유용하다. 예를 들어 작업 순서를 스케줄링하거나 서로 다른 동작 간의 모드 전환을 감독할 때 적합하다.

상태 기계는 항공기, 자동차, 로봇, 휴대전화, 자동 기어 변속기, 신호등과 같은 동적 시스템에서 복잡한 논리를 모델링하는 데 사용된다.

Mealy 상태 머신은 출력이 상태와 입력의 함수로서 전이에서 정의된다. Moore 상태 머신은 출력이 상태 자체에서 정의되며 오직 상태에만 의존한다.

Harel state charts는 계층 구조(구조를 위한 상위 상태), 병렬성(동시 다중 상태), 이벤트 브로드캐스팅(독립된 상태들 간의 정보 교환)을 추가한 상태 머신이다.

상태 머신은 가장 흔히 다이어그램을 사용해 표현되지만 텍스트로 표현될 수도 있다.

Stateflow는 유한 상태 기계를 기반으로 한 그래픽 프로그래밍 환경으로, 동적 시스템에서 복잡한 논리를 모델링하고 동작을 시뮬레이션하며 다양한 시나리오를 테스트할 수 있게 해준다.


参考: イベントベースモデリング, 制御システム, 制御ロジック, 状態図, 制御システム, 組み込みシステム, FDIR, モデルベースデザイン, モデルベースのテスト, PackML, モデリングとシミュレーション, シミュレーション ソフトウェア, モデルベース システムズ エンジニアリング (MBSE)