このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
チャートとステートの条目は次の場合に発生します。
チャートがはじめてアクティブになる場合。これは,チャートの初期化と呼ばれます。
ステートへの有効な遷移が存在する場合。遷移の評価を参照してください。
次のフローチャートは,Stateflow®がチャートまたはステートに入るために行われるイベントの進行を示しています。このフローチャートでは,現在のステートが,決定またはプロセスの実行されているステートを参照します。
Stateflowチャートがはじめてアクティブになることを初期化と呼びます。チャートの初期化が発生すると,チャートに入り,Stateflowが排他的(或)ステートのデフォルト遷移をすべて実行します。チャートの最上位のステートがパラレル(和)である場合,それらは順序番号に基づいてアクティブになります。
チャートで時間t = 0
の前にいずれかのデフォルト遷移を実行するには,[チャートプロパティ]ダイアログボックスで(初期化時に指定されたチャートを実行(入力))チェック ボックスをオンにします。このオプションを使用すると、金宝app模拟®の初期化と同時にStateflowチャートが初期化されます。その後,モデルの初期化フェーズでチャートのデフォルト遷移のパスが実行されます。
ステートが条目対象としてマークされている場合は,ステートの条目アクションが実行されます。チャートがアクティブになり初期化が済むと,最上位ステートがアクティブになります。ステートは,以下のいずれかの方法で条目対象としてマークされます。
入力遷移がステートの境界線に交差する。
入力遷移がステートの境界線で終了する。
ステートがアクティブステートのパラレルステートの子である。
条目アクションの前には接頭辞条目
または在
(省略形)が追加され,その後に必須のコロン(:
1)、さらにつ以上のアクションが続きます。複数のアクションを区切るには,キャリッジリターン,セミコロン(;
),またはコンマ(,
)を使用します。ステートメントに対しステート アクション タイプを明示的に指定しない場合、チャートではそのステートメントを条目
,在
アクションとして扱います。
この例では,チャートがはじめてアクティブになるときにチャートの初期化が発生します。
チャートがスリープするまでチャートまたはステートに入るためのワークフローに従うと,チャート初期化のステップは次のような順序になります。
デフォルト遷移のアクションが実行され,x = 0
、y = 0
、z = 0
になります。
StateA
が条目対象としてマークされます。
StateA
は非アクティブな親のサブステートではありません。StateA
に対して条目
アクションを実行します。ここでx = 1
になります。
StateA
は,最初に条目対象としてマークされたステートです。
StateA
にはヒストリジャンクションが含まれません。
サブステートStateA1
へのデフォルト遷移があります。遷移の評価のフロー チャートに移動します。
遷移の評価のフローチャートに従い,StateA1
を条目
対象としてマークします。退出アクションのフローチャートに移動します。
現在のステートStateA
は,遷移先ステートStateA1
のスーパーステートです。条目アクションのフロー チャートに戻ります。
StateA1
は非アクティブな親のサブステートではありません。StateA1
に対して条目
アクションを実行します。ここでx = 3
になります。
StateA1
は,最初に条目対象としてマークされたステートです。
StateA1
にはヒストリジャンクションが含まれません。
StateA1
にはデフォルト遷移が含まれません。
StateA1
にはサブステートがひとつも含まれません。
チャートはスリープします。
ステップ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
に入るための実行ステップは次のような順序になります。
Power_on
は非アクティブな親の子ではありません。
Power_on
に対する条目アクションはありません。
Power_on
は,最初に条目対象としてマークされたステートです。
Power_on
にはヒストリジャンクションがあります。
高
は,前にアクティブだったサブステートです。ここでp = 2
になります。
高
にはヒストリジャンクションが含まれません。
高
にはデフォルト遷移が含まれません。
高
にはサブステートがひとつも含まれません。
チャートはスリープします。
これでPower_on
および高
に対する条目
アクションが完了します。
スーパートランジションは、チャート内の異なるレベル間での遷移です。スーパートランジションが行われるのは、最上位のチャート内のステートといずれかのサブチャート内のステートの間か、チャート内の同一のレベルまたは異なるレベルで、別のサブチャートに属するステートの間です。チャート内の任意数のレベルにまたがるスーパートランジションを作成できます。
スーパートランジションを通じてステートに入る場合,最終的な遷移先への条目アクションを実行する前に,そのスーパーステートをアクティブとしてマークし,そこへの条目アクションを実行しなければなりません。この例では,StateB1
がStateA2
からの条目対象としてマークされています。この時点で,x = 5
、y = 5
、z = 1
です。
チャートがスリープするまでチャートまたはステートに入るためのワークフローに従うと,ステートStateB1
に入るための実行ステップは次のような順序になります。
StateB1
は非アクティブな親 (StateB
)のサブステートです。
StateB
がアクティブとしてマークされます。
StateB
は非アクティブな親のサブステートではありません。
StateB
に対して条目アクションを実行します。ここでx = 4
になります。
StateB
は,最初に条目対象としてマークされたステートではありません。
StateB1
に対して条目アクションを実行します。ここでx = 3
になります。
StateB1
は,最初に条目対象としてマークされたステートです。
StateB1
にはヒストリジャンクションがありません。
StateB1
にはデフォルト遷移が含まれません。
StateB1
にはサブステートがひとつも含まれません。
チャートはスリープします。
これでStateB
およびStateB1
に対する条目
アクションが完了します。