Main Content

状態遷移表での実行時エラーのデバッグ

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

モデルと状態遷移表の作成

  1. 新しい State Transition Table を使って Simulink® モデルを作成します。

    sfnew -STT

  2. 以下のステートと遷移を表に追加します。

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

    表には、階層の最上位レベルで 2 つのステート Power_offPower_on が設定されています。既定では、Power_off がアクティブです。イベント SWITCH は、システムを Power_off ステートと Power_on ステートの間で切り替えます。Power_on には、FirstSecondThird の 3 つのサブステートがあります。既定の設定では、Power_on がアクティブになると First もアクティブになります。Shift が 1 に等しい場合は、イベント SWITCH が発生するたびに、システムは First から SecondSecond から ThirdThird から First へと遷移します。その後、このパターンが繰り返されます。

  3. Simulink から 2 つの入力を追加します。

    • スコープ "Simulink から入力""立ち上がり" エッジ トリガーが設定された SWITCH というイベント。

    • スコープ "Simulink から入力" が設定された Shift というデータ。

  4. モデル ビューで、Sine Wave ブロックを SWITCH イベントとして、Step ブロックを Shift データとして状態遷移表に接続します。

    Simulink model that contains a state transition table, a step block, and a sine wave block.

    モデルには、イベント入力とデータ入力があります。Sine Wave ブロックは、Stateflow イベント SWITCH に対応する反復入力イベントを生成します。Step ブロックは、Stateflow データ オブジェクト Shift に対応する反復パターン 1 と 0 を生成します。SWITCH イベントは、FirstSecondThird を少なくとも 1 サイクル廻る頻度で発生させるのが理想的です。

状態遷移表のデバッグ

モデルと状態遷移表の作成の表をデバッグするには、以下の手順に従います。

  1. Power_off ステートを右クリックし、[ブレークポイントの設定][ステート Entry 時] を選択します。

  2. シミュレーションを開始します。

    Power_off に対してブレークポイントを指定しているため、実行はそのポイントで停止します。

  3. [ステップ イン] ボタン をクリックして次のステップに移動します。

  4. 使用されているデータと現在の値を表示するには、各テーブル セルにカーソルを合わせます。

    [ステップ イン] ボタンを繰り返しクリックして、ステートのアニメーション化を監視します。ステップごとに、チャートのアニメーションを監視し、実行シーケンスを確認します。ツールヒントを使用してデータ値を確認します。

シングルステッピングによって、ステート Power_on 内で First から Second を通り Third に至るループは発生しないことが示されます。Power_on から Power_off への遷移が優先されます。

実行時のエラーの修正

状態遷移表のデバッグで、状態遷移表のシミュレーションをステップ実行し、エラーを見つけます。イベント SWITCH によってシミュレーションが駆動されていますが、入力データ オブジェクト Shift が効果を持たないうちにシミュレーション時間が早々に経過しています。

このエラーを修正するには、以下を実行します。

  1. 表を編集できるようにシミュレーションを停止します。

  2. Power_on から Power_off への遷移に条件 after(20.0, sec) を追加します。

    Modified state transition table.

    これで、Power_on から Power_off への遷移は 20 秒を経過するまで実行されません。

  3. シミュレーションを開始します。

  4. [ステップ イン] ボタンを繰り返しクリックして、修正された動作を観察します。

関連するトピック