ステートを出る
ステートから出る有効な遷移がある場合、そのステートは exit 対象としてマークされます。ステートは、以下のいずれかの方法で exit 対象としてマークされます。
出力遷移がステートの境界線で開始されている。
出力遷移がステートの境界線と交差している。
遷移先ステートがアクティブなステートのパラレル ステートの子である。
ステートを出るためのワークフロー
次のフロー チャートは、ステートを出るための Stateflow® 内のイベントの進行を示しています。このフロー チャートでは、現在のステートが、決定またはプロセスの実行されているステートを参照します。
exit アクション
ステートに対する Exit
アクションは、ステートがアクティブで、ステートからの有効な遷移が存在する場合に実行されます。ステートが非アクティブになる前に exit
アクションが実行されます。
exit アクションの前には接頭辞 exit
または ex
が追加され、その後に必須のコロン (:
)、さらに 1 つ以上のアクションが続きます。複数のアクションは、キャリッジ リターン、セミコロン (;
) またはコンマ (,
) で区切ります。
ステートを出る例
この例では、Stateflow チャートが初期化され、StateA
と StateA1
に対し entry
アクションが実行されます。このチャートでは、チャートに対する during
アクションが 2 回発生しています。新しいタイム ステップが発生し、その後チャートが起動します。
Stateflow チャート実行のワークフローおよび遷移を評価するためのワークフローに従い、StateB
が entry 対象としてマークされています。StateA
は遷移元です。このタイム ステップでは、x = 5
、y = 2
、z = 0
です。
チャートがスリープするまでステートの exit アクションのフロー チャートに従うと、このチャートの実行ステップは次のような順序になります。
StateA
はStateB
のスーパーステートではありません。StateA
の exit アクションを実行し、StateA
を非アクティブとしてマークします。ここでz = 1
になります。StateA
には親ステートがありません。entry アクションに移動します。
上記のステップで StateA
に対する exit
のワークフローが完了します。ただし、チャートはまだスリープ状態になっていません。
StateB
に対しチャートまたはステートに入るためのワークフローを実行してタイム ステップを完了します。
スーパートランジションを使用してステートを出る
スーパートランジションは、チャート内の異なるレベル間での遷移です。スーパートランジションが行われるのは、最上位のチャート内のステートと、そのいずれかのサブステート内のステートの間か、異なるサブステート内にあるステートの間です。チャート内の任意数のレベルにまたがるスーパートランジションを作成できます。
スーパートランジションを介してステートから出る際は、遷移元に対する exit アクションが実行された後で、そのスーパーステートが非アクティブとしてマークされ、スーパーステートの exit アクションが実行されます。この例では、StateA2
が exit
対象としてマークされ、StateB1
が entry
対象としてマークされます。この時点で、x = 5
、y = 5
、z = 0
です。
チャートがスリープするまでチャートまたはステートに入るためのワークフローに従うと、ステート StateA2
を出るための実行ステップは次のような順序になります。
StateA2
は、遷移先ステート (StateB1
) のスーパーステートではありません。StateA2
に対してexit
アクションを実行し、StateA2
を非アクティブとしてマークします。StateA2
には親ステートStateA
があります。StateA
は、遷移先ステート (StateB1
) のスーパーステートではありません。StateA
に対してexit
アクションを実行し、StateA
を非アクティブとしてマークします。StateA
には親ステートがありません。
これらのアクションで StateA2
および StateA
に対する exit
のワークフローが完了します。ただし、チャートはまだスリープ状態になっていません。
StateB
および StateB1
に対しチャートまたはステートに入るためのワークフローを実行してタイム ステップを完了します。