Main Content

ステートを出る

ステートから出る有効な遷移がある場合、そのステートは exit 対象としてマークされます。ステートは、以下のいずれかの方法で exit 対象としてマークされます。

  • 出力遷移がステートの境界線で開始されている。

  • 出力遷移がステートの境界線と交差している。

  • 遷移先ステートがアクティブなステートのパラレル ステートの子である。

ステートを出るためのワークフロー

次のフロー チャートは、ステートを出るための Stateflow® 内のイベントの進行を示しています。このフロー チャートでは、現在のステートが、決定またはプロセスの実行されているステートを参照します。

Flow chart that shows the steps for exiting a state.

exit アクション

ステートに対する Exit アクションは、ステートがアクティブで、ステートからの有効な遷移が存在する場合に実行されます。ステートが非アクティブになる前に exit アクションが実行されます。

exit アクションの前には接頭辞 exit または ex が追加され、その後に必須のコロン (:)、さらに 1 つ以上のアクションが続きます。複数のアクションは、キャリッジ リターン、セミコロン (;) またはコンマ (,) で区切ります。

ステートを出る例

この例では、Stateflow チャートが初期化され、StateAStateA1 に対し entry アクションが実行されます。このチャートでは、チャートに対する during アクションが 2 回発生しています。新しいタイム ステップが発生し、その後チャートが起動します。

Stateflow チャート実行のワークフローおよび遷移を評価するためのワークフローに従い、StateB が entry 対象としてマークされています。StateA は遷移元です。このタイム ステップでは、x = 5y = 2z = 0 です。

Stateflow chart with top-level states called StateA and StateB. StateA has substates StateA1 and StateA2. StateB has substates StateB1 and StateB2.

チャートがスリープするまでステートの exit アクションのフロー チャートに従うと、このチャートの実行ステップは次のような順序になります。

  1. StateAStateB のスーパーステートではありません。

  2. StateA の exit アクションを実行し、StateA を非アクティブとしてマークします。ここで z = 1 になります。

  3. StateA には親ステートがありません。

  4. entry アクションに移動します。

上記のステップで StateA に対する exit のワークフローが完了します。ただし、チャートはまだスリープ状態になっていません。

StateB に対しチャートまたはステートに入るためのワークフローを実行してタイム ステップを完了します。

スーパートランジションを使用してステートを出る

スーパートランジションは、チャート内の異なるレベル間での遷移です。スーパートランジションが行われるのは、最上位のチャート内のステートと、そのいずれかのサブステート内のステートの間か、異なるサブステート内にあるステートの間です。チャート内の任意数のレベルにまたがるスーパートランジションを作成できます。

スーパートランジションを介してステートから出る際は、遷移元に対する exit アクションが実行された後で、そのスーパーステートが非アクティブとしてマークされ、スーパーステートの exit アクションが実行されます。この例では、StateA2exit 対象としてマークされ、StateB1entry 対象としてマークされます。この時点で、x = 5y = 5z = 0 です。

Stateflow chart with top-level states called StateA and StateB. StateA has substates StateA1 and StateA2. StateB has substates StateB1 and StateB2.

チャートがスリープするまでチャートまたはステートに入るためのワークフローに従うと、ステート StateA2 を出るための実行ステップは次のような順序になります。

  1. StateA2 は、遷移先ステート (StateB1) のスーパーステートではありません。

  2. StateA2 に対して exit アクションを実行し、StateA2 を非アクティブとしてマークします。

  3. StateA2 には親ステート StateA があります。

  4. StateA は、遷移先ステート (StateB1) のスーパーステートではありません。

  5. StateA に対して exit アクションを実行し、StateA を非アクティブとしてマークします。

  6. StateA には親ステートがありません。

これらのアクションで StateA2 および StateA に対する exit のワークフローが完了します。ただし、チャートはまだスリープ状態になっていません。

StateB および StateB1 に対しチャートまたはステートに入るためのワークフローを実行してタイム ステップを完了します。

関連するトピック