主要内容

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

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

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

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

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

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

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

チャート条目

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

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

ステート条目

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

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

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

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

条目アクション

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

Stateflowチャートに入る

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

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

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

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

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

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

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

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

  7. 遷移の評価のフローチャートに従い,StateA1条目対象としてマークします。退出アクションのフローチャートに移動します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

関連するトピック