Main Content

内部遷移を使用したチャートの実行の制御

"内部遷移" は、遷移元のステートを終了しない遷移です。内部遷移は、排他的 (OR) 構造を含むスーパーステートに対して定義した場合に効果的です。以下に示すように、内部遷移を使用することで、Stateflow® チャートは大幅に簡素化されます。

内部遷移の使用前

以下のチャートは、内部遷移を使用することでロジックを簡素化できる例です。

Chart with complex transitions between three substates.

何らかのイベントが発生すると、Stateflow チャートが起動されます。コネクティブ ジャンクションへのデフォルト遷移が有効になります。遷移先は、[c1 > 0][c2 > 0] によって判定されます。[c1 > 0] が真である場合は、A1 への遷移が有効になります。[c2 > 0] が真である場合は、A2 への遷移が有効になります。[c1 > 0] または [c2 > 0] のどちらも真でない場合は、A3 への遷移が有効になります。A1A2、および A3 の間の遷移は、E[c1 > 0]、および [c2 > 0] によって判定されます。

コネクティブ ジャンクションへの内部遷移の使用後

以下の例では、コネクティブ ジャンクションへの内部遷移を使用して前述の例を簡素化しています。

Chart with an inner transition path to three substates.

イベントが発生すると、チャートが起動されます。コネクティブ ジャンクションへのデフォルト遷移が有効になります。遷移先は、[c1 > 0][c2 > 0] によって判定されます。

元の例のすべてのステート間で、遷移の代わりに内部遷移を使用することで、チャートを簡素化できます。ステート A が既にアクティブになっている場合は、内部遷移を使用して、ステート A のどのサブステートをアクティブにするかを再評価します。イベント E が発生すると、内部遷移が有効になる可能性があります。[c1 > 0] が真である場合は、A1 への遷移が有効になります。[c2 > 0] が真である場合は、A2 への遷移が有効になります。[c1 > 0] または [c2 > 0] のどちらも真でない場合は、A3 への遷移が有効になります。このチャートは、前の例よりも簡素化されています。

メモ

コネクティブ ジャンクションに内部遷移を使用すると、サブステートの遷移条件が有効な場合、アクティブなサブステートを終了し、再入力することができます。たとえば、サブステート A1 がアクティブで [c1 > 0] が真の場合、A1 への遷移は有効になります。この場合、

  1. A1 を実行して終了するアクションが終了します。

  2. A1 が非アクティブになります。

  3. A1 がアクティブになります。

  4. A1 を実行して終了する entry アクションが行われます。

この表記法のセマンティクスに関する詳細は、コネクティブ ジャンクションへの内部遷移による最初のイベント処理を参照してください。

ヒストリ ジャンクションへの内部遷移の使用

以下の例は、ヒストリ ジャンクションへの内部遷移を示しています。

Chart that contains an inner transition to a history junction.

最初は、ステート Power_on.High はアクティブです。イベント Reset が発生すると、ヒストリ ジャンクションへの内部遷移が有効になります。内部遷移が有効であるため、現在のアクティブなステート Power_on.High は終了します。ヒストリ ジャンクションへの内部遷移が処理されると、最後のアクティブなステート Power_on.High がアクティブになります (再入)。同じ状況下で Power_on.Low がアクティブであった場合は、Power_on.Low が終了し、結果として再入が発生します。この例の内部遷移は、Power_on.LowPower_on.High の両方で外部に自己ループ遷移を描画した場合と同等になります。

この表記法のセマンティクスに関する詳細は、ヒストリ ジャンクションへの内部遷移を参照してください。