ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

排他的 (OR) ステート間の遷移

ステート間の遷移に対するラベル形式

以下の例は、ステートに入力する遷移に対する一般的なラベル形式を示しています。

チャートは、この遷移を以下のように実行します。

  1. イベントが発生すると、ステート S1 は一致するイベントが指定された出力遷移をチェックします。

  2. 一致するイベントを含む遷移が検出された場合は、その遷移の条件 ([condition]) が評価されます。

  3. condition が真の場合は、condition_action が実行されます。

  4. 遷移先ステートへの有効な遷移が存在する場合は、遷移が実行されます。

  5. ステート S1 からの出力が発生します。

  6. 遷移が実行されると、遷移アクション transition_action が実行されます。

  7. ステート S2 への入力が発生します。

イベントによるステート間の遷移

以下の例は、ステートがアクティブになるか非アクティブになるかどうかの結果に注目して、簡単な遷移の動作を示しています。

最初のイベントの処理

最初は、チャートはスリープ状態です。ステート On とステート Off は、OR ステートです。ステート On がアクティブです。イベント E_one が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。

  1. チャートのルートは、E_one の結果、有効な遷移が存在するかどうかをチェックします。ステート On からステート Off で、有効な遷移が検出されます。

  2. ステート On の exit アクション (exitOn()) が実行されて完了します。

  3. ステート On が非アクティブとしてマークされます。

  4. イベント E_one が遷移アクションとしてブロードキャストされます。

    この 2 番目のイベント E_one が処理されますが、どちらのステートもアクティブにならないため、影響はありません。E_one の 2 番目のブロードキャストが原因で有効な遷移が発生した場合は、E_one の最初のブロードキャストの処理よりも優先されます。イベント ブロードキャストの早期リターン ロジック を参照してください。

  5. ステート Off がアクティブとしてマークされます。

  6. ステート Off の entry アクション (entOff()) が実行されて完了します。

  7. チャートはスリープ状態に戻ります。

このシーケンスは、ステート On が最初にアクティブな場合に、イベント E_one に関連する Stateflow® チャートの実行を完了します。

2 番目のイベントの処理

同じ例を使用して、ステート Off がアクティブなときに、次のイベント E_one が発生した場合の影響を考えます。

最初は、チャートはスリープ状態です。ステート Off がアクティブです。イベント E_one が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。

  1. チャートのルートは、E_one の結果、有効な遷移が存在するかどうかをチェックします。

    ステート Off からステート On で、有効な遷移が検出されます。

  2. ステート Off の exit アクション (exitOff()) が実行されて完了します。

  3. ステート Off が非アクティブとしてマークされます。

  4. ステート On がアクティブとしてマークされます。

  5. ステート On の entry アクション (entOn()) が実行されて完了します。

  6. チャートはスリープ状態に戻ります。

このシーケンスは、ステート Off が最初にアクティブな場合に、2 番目のイベント E_one に関連する Stateflow チャートの実行を完了します。

3 番目のイベントの処理

同じ例を使用して、3 番目のイベント E_two が発生した場合の影響を考えます。

上記の例では、イベント E_two は明示的に使用されていないことに注意してください。ただし、このイベントが発生 (または何らかのイベントが発生) すると、動作に影響します。最初は Stateflow チャートはスリープ状態であり、ステート On がアクティブです。

  1. イベント E_two が発生して、チャートを起動します。

    イベント E_two は、チャートのルートからチャートの階層の下方向に処理されます。

  2. チャートのルートは、E_two の結果、有効な遷移が存在するかどうかをチェックします。該当するものは存在しません。

  3. ステート On の during アクション (durOn()) が実行されて完了します。

  4. チャートはスリープ状態に戻ります。

このシーケンスは、ステート On が最初にアクティブな場合に、イベント E_two に関連する Stateflow チャートの実行を完了します。

    ヒント:   指示のないローカル イベント ブロードキャストは、チャート内で不要な再帰的動作が発生する場合があるので使用しないでください。直接ローカル イベント ブロードキャストには send 演算子を使用します。詳細は、イベントのブロードキャストによるステートの同期を参照してください。

    指示のないローカル イベント ブロードキャストを検出する診断レベルを設定できます。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、[診断][Stateflow] ペインに移動し、[指示のないイベント ブロードキャスト] 診断を [なし][警告] または [エラー] に設定します。既定の設定は [警告] です。

イベントによるサブステート間の遷移

以下の例は、OR サブステート間の遷移の動作を示しています。

最初は、チャートはスリープ状態です。ステート A.A1 がアクティブです。条件 C_one は真です。イベント E_one が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。

  1. チャートのルートは、E_one の結果、有効な遷移が存在するかどうかをチェックします。ステート A.A1 からステート B.B1 への有効な遷移が存在します (条件 C_one は真です)。

  2. ステート A の during アクション (durA()) が実行されて完了します。

  3. ステート A.A1 の exit アクション (exitA1()) が実行されて完了します。

  4. ステート A.A1 が非アクティブとしてマークされます。

  5. ステート A の exit アクション (exitA()) が実行されて完了します。

  6. ステート A が非アクティブとしてマークされます。

  7. 遷移アクション A が実行されて完了します。

  8. ステート B がアクティブとしてマークされます。

  9. ステート B の entry アクション (entB()) が実行されて完了します。

  10. ステート B.B1 がアクティブとしてマークされます。

  11. ステート B.B1 の entry アクション (entB1()) が実行されて完了します。

  12. チャートはスリープ状態に戻ります。

このシーケンスは、イベント E_one に関連する Stateflow チャートの実行を完了します。

この情報は役に立ちましたか?