メインコンテンツ

状態遷移表を使用した有限ステート マシンのモデル化

State Transition Table ブロックを使用して、順序モーダル ロジック用の有限ステート マシンをモデル化できます。Stateflow® チャートと比較すると、状態遷移表では、最上位レベルの Simulink モデルを追加または変更する際にグラフィカル オブジェクトのメンテナンスが必要最小限で済みます。

状態遷移表のプログラミング

状態遷移表では、行はシステム内のステートを表します。遷移列は、ステートからの各出力遷移の条件、条件アクション、および遷移先ステートを指定します。[IF] 列はモデルの主要な遷移を表し、[ELSE-IF] 列には主要な遷移が無効な場合にモデルが実行するアクションが含まれます。[遷移列の追加] オプションと [遷移列の挿入] オプションを使用して、列をさらに追加することもできます。

列のセルは、それぞれ 3 行に分割されています。1 行目は条件セル、2 行目は条件アクション セル、3 行目は遷移先ステート セルです。条件と条件アクションの詳細については、遷移のアクションの定義を参照してください。

Diagram of state transition table highlighting state column, transition column, condition cell, condition action cell, and destination state cell.

たとえば、次の状態遷移表には、ボイラーの温度を 2 つの指定値 reference_lowreference_high の間に維持するモーダル ロジックが含まれています。ノーマルの動作中には、ボイラーはステート OffWarmupOn のサイクルを繰り返します。

State transition table with two top-level states called Normal and Alarm. Normal has three substates called Off, Warmup, and On.

この状態遷移表は、次の Stateflow チャートと同じモーダル ロジックを表現しています。

Stateflow chart with two top-level states called Normal and Alarm. Normal has three substates called Off, Warmup, and On.

この例の詳細については、状態遷移表を使用したバンバン制御器のモデル化を参照してください。

状態遷移表の作成

状態遷移表を作成するには、次を行います。

  1. 引数 -STT を指定して関数 sfnew を呼び出して、State Transition Table ブロックを含む Simulink® モデルを作成します。

    sfnew -STT

  2. State Transition Table ブロックをダブルクリックします。

    Block icon for state transition table.

  3. システムの各動作モードについて、ステート行を追加します。既存のステートを選択し、[モデル化] タブで以下のオプションのいずれかを選択します。

    • ステート行の挿入 — 階層の同じレベルにステートを追加します。

    • 子ステート行の挿入 — 選択したステートの子としてステートを追加します。

      メモ

      ステート行を移動するには、ステートの上端をクリックして、ステートを新しい場所にドラッグします。ステートをドラッグすると、ステートの新しい位置を示すグラフィカル キューがエディターに表示されます。

      同時にアクティブになる動作モードをモデル化するには、親ステートでパラレル (AND) 構造を有効にします。詳細については、状態遷移表を使用したパラレル ステートのシミュレーションを参照してください。

  4. ステートのアクションの定義の説明に従って、各ステートのステート ラベルを追加します。

  5. ステート間のフロー ロジックの方向を表現するには、各ステートからの出力遷移の条件、条件アクション、および遷移先を指定します。

    • 遷移列を追加するには、既存の列のヘッダーを右クリックし、以下のオプションのいずれかを選択します。

      • 遷移列の追加 — 表の右側に遷移列を追加します。

      • 遷移列の挿入 — 選択した列の左側に遷移列を追加します。

    • 遷移の条件、アクション、および遷移先セルを移動するには、条件セルの上端をクリックして、遷移を左または右にドラッグします。条件、アクション、および遷移先セルは同時に移動します。

    • 遷移先を指定するには、遷移先ステート セルで、ステートの名前または以下のオプションのいずれかを選択します。

      • $NEXT — 次の兄弟ステートへの遷移を作成します。このオプションは、ステート階層の各レベルにおける最後のサブステートには使用できません。

      • $PREV — 前の兄弟ステートへの遷移を作成します。このオプションは、ステート階層の各レベルにおける最初のサブステートには使用できません。

      • $SELF — 自己ループ遷移を作成します。

    • 遷移をコメントアウトするには、遷移先ステート セルで、[% IGNORE %] を選択します。

状態遷移表内の兄弟ステートと子ステートの管理

状態遷移表に複数の兄弟ステートが含まれている場合は、その親がアクティブになったときに最初にアクティブになる兄弟ステートをマークします。ステートを選択し、[モデル化] タブで [既定のステートとして設定] を選択します。

あるいは、複数の分岐点をもつデフォルト遷移パスを指定するには、[モデル化] タブで [デフォルト遷移行の挿入] を選択します。たとえば、次のデフォルト遷移行では、condition の値に応じて 2 つの遷移先 A1A2 のいずれかが選択されます。

Default transition row with transitions to states A1 and A2.

このステートのアイコンは、複数の分岐点をもつデフォルト遷移を示しています。

親ステートから 1 つ以上の子ステートへの内部遷移を指定するには、[モデル化] タブで [内部遷移行の挿入] を選択します。たとえば、次の内部遷移行では、入力イベント E により、condition1condition2 の値に応じて 2 つの遷移先 B1B2 のいずれかを選択する内部遷移がトリガーされます。

Inner transition row with transitions to child states B1 and B2.

このステートのアイコンは、複数の分岐点をもつ内部遷移を示しています。

内部遷移行では遷移先ステートを、表内で対応する子ステートが出現するのと同じ順序で指定しなければなりません。たとえば、前の例では、ステート B1 はステート B2 の上になければなりません。

入力端子と出力端子を使用して、State Transition Table ブロックを Simulink モデル内の他のブロックに接続します。

状態遷移表を使用したパラレル ステートのシミュレーション

Stateflow では、パラレル構造を使用して 2 つのステートを同時にアクティブにできます。たとえば、ステート A でパラレル構造が使用されていて 2 つのサブステート A1A2 がある場合、A1A2 の両方が同時にアクティブになります。パラレル ステートの詳細については、ステート構造を使用した排他的モードとパラレル モードの定義を参照してください。

State Transition Table ブロックでパラレル ステートを使用するには、状態遷移表に入ります。チャート レベルで構造を変更するには、ステートを選択せずに、[モデル化] タブで [構造][パラレル (AND)] を選択します。ステートをパラレル構造にするには、ステートを選択し、[モデル化] タブで [構造][パラレル (AND)] を選択します。

メモ

チャートまたはステートの構造を [パラレル (AND)] に更新する前に、ステートの遷移列内のセルをすべてクリアする必要があります。

パラレル ステートは、破線の外枠で囲まれます。次の状態遷移表では、stateA がパラレル構造であるため、その子ステート stateA1 および stateA2 は破線で表示され、同時にアクティブになります。

State transition table that shows parallel state decomposition.

状態遷移表のエラー検出

状態遷移表の構文エラーを検出するには、モデルをコンパイルします。[デバッグ] タブで [モデルの更新] を選択します。モデルをコンパイルすると、表が静的に解析されて次のようなエラーが検出されます。

  • 未解決のシンボル

  • 到達不能なステート

  • 無条件遷移のないデフォルト遷移行

  • 条件またはアクションはあるが、遷移先のない遷移セル

  • 条件セル内のアクション テキスト

  • 遷移先ステートを表内で対応するステートが出現するのと同じ順序で指定していない内部遷移行

これらのエラー チェックはシミュレーション中にも行われます。状態遷移表のデバッグの詳細については、状態遷移表での実行時エラーのデバッグを参照してください。

状態遷移表を使用する場合のガイドライン

  • 状態遷移表では、MATLAB® または C をアクション言語として使用できます。詳細については、アクション言語構文としての MATLAB と C の相違点を参照してください。

  • 状態遷移表は、少なくとも 1 つのステート行と、1 つの遷移列をもたなければなりません。

  • 状態遷移表では、Stateflow チャート内の以下の要素はサポートされません。

    • スーパートランジション

    • ローカル イベント

    • チャートレベルのグラフィカル関数、真理値表関数、MATLAB 関数、および Simulink 関数

参考

ブロック

関数

オブジェクト

トピック