主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

ステートを出る

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

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

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

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

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

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

退出アクション

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

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

ステートを出る例

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

関連するトピック