Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

状態遷移表を使用した順序論理の表形式での表現

State Transition Table ブロックは、順序モーダル ロジック用の有限ステート マシンを表形式で表現します。ステートと遷移を Stateflow® チャートで描画する代わりに、状態遷移表を使用して、グラフィカル オブジェクトのメンテナンスが必要最小限で済む簡潔でコンパクトな形式でステート マシンをモデル化できます。

状態遷移表では、行はシステム内のステートを表します。遷移列は、ステートからの各出力遷移の条件、条件アクション、および遷移先ステートを指定します。

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.

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

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

State Transition Table を作成するには、次を行います。

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

    sfnew -STT

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

    Block icon for state transition table.

  3. システムの各動作モードについて、ステートのアクションの定義の説明に従ってステート行を追加し、ステート ラベルを入力します。複雑なシステムを整理するには、親ステート行の下に子ステート行を追加してステートの階層を定義します。

    • ステート行を追加するには、既存のステートを選択し、[モデル化] タブで以下のオプションのいずれかを選択します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  5. 階層の各レベルで、親がアクティブになると最初にアクティブになるステートにマークを付けます。ステートを選択し、[モデル化] タブで [既定のステートとして設定] を選択します。

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

    Default transition row with transitions to states A1 and A2.

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

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

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

  7. システムに入力や出力がある場合や、システムが状態変数に依存する場合は、Stateflow データの追加の説明に従って、入力データ、出力データ、ローカル データを追加します。

  8. システムがイベント トリガーに反応する場合や、システムでチャートのアクションやモデル内の他のブロックのアクションをトリガーする必要がある場合は、イベントのブロードキャストによるモデル コンポーネントの同期の説明に従って、入力イベントと出力イベントを追加します。

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

  10. モデルをシミュレートするには、[実行] をクリックします。シミュレーション中、状態遷移表ではアクティブ ステートと遷移が強調表示されます。

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

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

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

メモ

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

パラレル ステートは、同時にアクティブになることを示す破線の外枠で囲まれます。

State transition table that shows parallel state decomposition.

状態遷移表のエラー検出

状態遷移表で診断チェックを実行するには、[デバッグ] タブで [モデルの更新][テーブルの更新] を選択します。診断ツールは表を静的に解析して次のようなエラーを検出します。

  • 未解決のシンボル

  • 到達不能なステート

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

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

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

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

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

状態遷移表のプロパティの指定

状態遷移表のプロパティは、状態遷移表が Simulink モデルとどのように連動するかを指定します。これらのプロパティは、[プロパティ インスペクター]、モデル エクスプローラー、または [状態遷移表] プロパティ ダイアログ ボックスで変更できます。

[プロパティ インスペクター] を使用するには、次を行います。

  1. State Transition Table ブロックを開きます。

  2. [モデル化] タブの [データの設計] で、[プロパティ インスペクター] を選択します。

  3. [プロパティ インスペクター] で、状態遷移表のプロパティを編集します。

モデル エクスプローラーを使用するには、次を行います。

  1. [モデル化] タブの [データの設計] で、[モデル エクスプローラー] を選択します。

  2. [モデルの階層構造] ペインで、状態遷移表を選択します。

  3. [ダイアログ] ペインで、状態遷移表のプロパティを編集します。

[状態遷移表] プロパティ ダイアログ ボックスを使用するには、次を行います。

  1. State Transition Table ブロックを開きます。

  2. [モデル化] タブで [テーブル プロパティ] をクリックします。

  3. プロパティ ダイアログ ボックスで、状態遷移表のプロパティを編集します。

状態遷移表のプロパティは、Stateflow.StateTransitionTableChart オブジェクトを使用してプログラムで変更することもできます。Stateflow プログラム インターフェイスの詳細については、Stateflow API の概要を参照してください。

ヒント

状態遷移表のプロパティは、Stateflow チャートのプロパティのサブセットです。各プロパティの詳細は、「Stateflow チャートのプロパティの指定」を参照してください。

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

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

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

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

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

    • ローカル イベント

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

参考

ブロック

オブジェクト

関連するトピック