状態遷移表での実行時エラーのデバッグ
状態遷移表は、順序モーダル ロジック用の有限ステート マシンを表形式で表現します。ステートと遷移を Stateflow® チャートで描画する代わりに、状態遷移表を使用して、グラフィカル オブジェクトのメンテナンスが必要最小限で済む簡潔でコンパクトな形式でステート マシンをモデル化できます。詳細については、状態遷移表を使用した順序論理の表形式での表現を参照してください。
モデルと状態遷移表の作成
新しい State Transition Table を使って Simulink® モデルを作成します。
sfnew -STT
以下のステートと遷移を表に追加します。
表には、階層の最上位レベルで 2 つのステート
Power_off
とPower_on
が設定されています。既定では、Power_off
がアクティブです。イベントSWITCH
は、システムをPower_off
ステートとPower_on
ステートの間で切り替えます。Power_on
には、First
、Second
、Third
の 3 つのサブステートがあります。既定の設定では、Power_on
がアクティブになるとFirst
もアクティブになります。Shift
が 1 に等しい場合は、イベントSWITCH
が発生するたびに、システムはFirst
からSecond
、Second
からThird
、Third
からFirst
へと遷移します。その後、このパターンが繰り返されます。Simulink から 2 つの入力を追加します。
スコープ "Simulink から入力" と "立ち上がり" エッジ トリガーが設定された
SWITCH
というイベント。スコープ "Simulink から入力" が設定された
Shift
というデータ。
モデル ビューで、Sine Wave ブロックを
SWITCH
イベントとして、Step ブロックをShift
データとして状態遷移表に接続します。モデルには、イベント入力とデータ入力があります。Sine Wave ブロックは、Stateflow イベント
SWITCH
に対応する反復入力イベントを生成します。Step ブロックは、Stateflow データ オブジェクトShift
に対応する反復パターン 1 と 0 を生成します。SWITCH
イベントは、First
、Second
、Third
を少なくとも 1 サイクル廻る頻度で発生させるのが理想的です。
状態遷移表のデバッグ
モデルと状態遷移表の作成の表をデバッグするには、以下の手順に従います。
Power_off
ステートを右クリックし、[ブレークポイントの設定] 、 [ステート Entry 時] を選択します。シミュレーションを開始します。
Power_off
に対してブレークポイントを指定しているため、実行はそのポイントで停止します。[ステップ イン] ボタン をクリックして次のステップに移動します。
使用されているデータと現在の値を表示するには、各テーブル セルにカーソルを合わせます。
[ステップ イン] ボタンを繰り返しクリックして、ステートのアニメーション化を監視します。ステップごとに、チャートのアニメーションを監視し、実行シーケンスを確認します。ツールヒントを使用してデータ値を確認します。
シングルステッピングによって、ステート Power_on
内で First
から Second
を通り Third
に至るループは発生しないことが示されます。Power_on
から Power_off
への遷移が優先されます。
実行時のエラーの修正
状態遷移表のデバッグで、状態遷移表のシミュレーションをステップ実行し、エラーを見つけます。イベント SWITCH
によってシミュレーションが駆動されていますが、入力データ オブジェクト Shift
が効果を持たないうちにシミュレーション時間が早々に経過しています。
このエラーを修正するには、以下を実行します。
表を編集できるようにシミュレーションを停止します。
Power_on
からPower_off
への遷移に条件after(20.0, sec)
を追加します。これで、
Power_on
からPower_off
への遷移は 20 秒を経過するまで実行されません。シミュレーションを開始します。
[ステップ イン] ボタンを繰り返しクリックして、修正された動作を観察します。