Main Content

チャートまたはステートに入る

チャートとステートの entry は次の場合に発生します。

  • チャートがはじめてアクティブになる場合。これは、チャートの初期化と呼ばれます。

  • ステートへの有効な遷移が存在する場合。遷移の評価を参照してください。

チャートまたはステートに入るためのワークフロー

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

Flow chart that shows the steps for entering a chart or state.

チャート Entry

Stateflow チャートがはじめてアクティブになることを初期化と呼びます。チャートの初期化が発生すると、チャートに入り、Stateflow が排他的 (OR) ステートのデフォルト遷移をすべて実行します。チャートの最上位のステートがパラレル (AND) である場合、それらは順序番号に基づいてアクティブになります。

チャートで時間 t = 0 の前にいずれかのデフォルト遷移を実行するには、[チャート プロパティ] ダイアログ ボックスで [初期化時に指定されたチャートを実行 (入力)] チェック ボックスをオンにします。このオプションを使用すると、Simulink® の初期化と同時に Stateflow チャートが初期化されます。その後、モデルの初期化フェーズでチャートのデフォルト遷移のパスが実行されます。

ステート Entry

ステートが entry 対象としてマークされている場合は、ステートの entry アクションが実行されます。チャートがアクティブになり初期化が済むと、最上位ステートがアクティブになります。ステートは、以下のいずれかの方法で entry 対象としてマークされます。

  • 入力遷移がステートの境界線に交差する。

  • 入力遷移がステートの境界線で終了する。

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

entry アクション

entry アクションの前には接頭辞 entry または en (省略形) が追加され、その後に必須のコロン (:)、さらに 1 つ以上のアクションが続きます。複数のアクションを区切るには、キャリッジ リターン、セミコロン (;)、またはコンマ (,) を使用します。ステートメントに対しステート アクション タイプを明示的に指定しない場合、チャートではそのステートメントを entry,during アクションとして扱います。

Stateflow チャートに入る

この例では、チャートがはじめてアクティブになるときにチャートの初期化が発生します。

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

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

  1. デフォルト遷移のアクションが実行され、x = 0y = 0z = 0 になります。

  2. StateA が entry 対象としてマークされます。

  3. StateA は非アクティブな親のサブステートではありません。StateA に対して entry アクションを実行します。ここで x = 1 になります。

  4. StateA は、最初に entry 対象としてマークされたステートです。

  5. StateA にはヒストリ ジャンクションが含まれません。

  6. サブステート StateA1 へのデフォルト遷移があります。遷移の評価のフロー チャートに移動します。

  7. 遷移の評価のフロー チャートに従い、StateA1entry 対象としてマークします。exit アクションのフロー チャートに移動します。

  8. 現在のステート StateA は、遷移先ステート StateA1 のスーパーステートです。entry アクションのフロー チャートに戻ります。

  9. StateA1 は非アクティブな親のサブステートではありません。StateA1 に対して entry アクションを実行します。ここで x = 3 になります。

  10. StateA1 は、最初に entry 対象としてマークされたステートです。

  11. StateA1 にはヒストリ ジャンクションが含まれません。

  12. StateA1 にはデフォルト遷移が含まれません。

  13. StateA1 にはサブステートがひとつも含まれません。

  14. チャートはスリープします。

ステップ 1 ~ 14 は初期のタイム ステップで発生します。これでチャートの初期化プロセスが完了します。

ヒストリ ジャンクションを使用してステートに入る

Stateflow チャートで、デフォルト遷移に関係なく、以前にアクティブだったサブステートを記憶してそこに戻るには、ヒストリ ジャンクションを使用します。ヒストリ ジャンクションをステート内に配置すると、排他的 (OR) サブステートに通じるデフォルト遷移がオーバーライドされます。ヒストリ ジャンクションをステート内に配置した後は、entry に際して Stateflow チャートは以前にアクティブだったサブステートを記憶しており、そこに入ることになります。ヒストリ ジャンクションは、配置された階層のレベルに対してのみ適用されます。

この例では、ライトはオンかオフのどちらかとなります。これらのオプションは、ステート Power_on および Power_off によって示されます。オプションは入力イベント switch_on および switch_off によって制御されます。ライトがオンの場合、これはほの暗いか明るいかのいずれかになります。これらのオプションは、ステート Low および High によって示され、入力イベント switch_low および switch_high によって制御されます。

最初は、チャートはスリープ状態です。ステート Power_off がアクティブです。ステート Power_on が前回アクティブであったとき、その際アクティブだったサブステートは High でした。イベント switch_on が発生して、ステート Power_on が entry 対象としてマークされます。この時点で p = 0 です。

Stateflow chart with top-level states called Power_off and Power_on. Power_on has a history junction and substates Low and High.

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

  1. Power_on は非アクティブな親の子ではありません。

  2. Power_on に対する entry アクションはありません。

  3. Power_on は、最初に entry 対象としてマークされたステートです。

  4. Power_on にはヒストリ ジャンクションがあります。

  5. High は、前にアクティブだったサブステートです。ここで p = 2 になります。

  6. High にはヒストリ ジャンクションが含まれません。

  7. High にはデフォルト遷移が含まれません。

  8. High にはサブステートがひとつも含まれません。

  9. チャートはスリープします。

これで Power_on および High に対する entry アクションが完了します。

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

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

スーパートランジションを通じてステートに入る場合、最終的な遷移先への entry アクションを実行する前に、そのスーパーステートをアクティブとしてマークし、そこへの entry アクションを実行しなければなりません。この例では、StateB1StateA2 からの entry 対象としてマークされています。この時点で、x = 5y = 5z = 1 です。

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

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

  1. StateB1 は非アクティブな親 (StateB) のサブステートです。

  2. StateB がアクティブとしてマークされます。

  3. StateB は非アクティブな親のサブステートではありません。

  4. StateB に対して entry アクションを実行します。ここで x = 4 になります。

  5. StateB は、最初に entry 対象としてマークされたステートではありません。

  6. StateB1 に対して entry アクションを実行します。ここで x = 3 になります。

  7. StateB1 は、最初に entry 対象としてマークされたステートです。

  8. StateB1 にはヒストリ ジャンクションがありません。

  9. StateB1 にはデフォルト遷移が含まれません。

  10. StateB1 にはサブステートがひとつも含まれません。

  11. チャートはスリープします。

これで StateB および StateB1 に対する entry アクションが完了します。

関連するトピック