条件アクションを使用したチャートの実行の制御
条件アクションの動作
以下の例は、複数セグメントをもつ遷移パスでの簡単な条件アクションの動作を示しています。
最初は、チャートはスリープ状態です。ステート A
がアクティブです。条件 C_one
と C_two
は偽です。イベント E_one
が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。
チャートのルートは、
E_one
の結果、有効な遷移が存在するかどうかをチェックします。ステートA
からコネクティブ ジャンクションへの有効な遷移セグメントが検出されます。有効な遷移セグメントで条件アクションA_one
が検出され、即時に実行されて完了します。ステートA
はこの時点でもアクティブです。選択可能な遷移先への遷移セグメントの条件は偽であるため、有効な遷移は存在しません。
ステート
A
の during アクション (durA()
) が実行されて完了します。ステート
A
はアクティブなままです。チャートはスリープ状態に戻ります。
このシーケンスは、ステート A
が最初にアクティブな場合に、イベント E_one
に関連する Stateflow® チャートの実行を完了します。
条件アクションと遷移アクションの動作
以下の例は、排他的 (OR) ステート間の遷移で指定された簡単な条件アクションと遷移アクションの動作を示しています。
最初は、チャートはスリープ状態です。ステート A
がアクティブです。条件 C_one
は真です。イベント E_one
が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。
チャートのルートは、
E_one
の結果、有効な遷移が存在するかどうかをチェックします。ステートA
からステートB
で、有効な遷移が検出されます。条件C_one
は真です。有効な遷移で条件アクションA_one
が検出され、即時に実行されて完了します。ステートA
はこの時点でもアクティブです。ステート
A
の exit アクション (ExitA()
) が実行されて完了します。ステート
A
が非アクティブとしてマークされます。遷移アクション
A_two
が実行されて完了します。ステート
B
がアクティブとしてマークされます。ステート
B
の entry アクション (entB()
) が実行されて完了します。チャートはスリープ状態に戻ります。
このシーケンスは、ステート A
が最初にアクティブな場合に、イベント E_one
に関連する Stateflow チャートの実行を完了します。
for ループを使用した条件アクションの作成
条件アクションとコネクティブ ジャンクションは、for
ループの構成を設計する目的で使用されます。以下の例は、条件アクションとコネクティブ ジャンクションを使用して for
ループの構成を作成する方法を示しています。
上記の例の動作を確認するには、for ループの構成 を参照してください。
条件アクションを使用したパラレル (AND) ステートへのイベントのブロードキャスト
以下の例は、条件アクションを使用してイベントをパラレル (AND) ステートに即時にブロードキャストする方法を示しています。
上記の例の動作を確認するには、条件アクションでのイベントのブロードキャスト を参照してください。
ヒント
指示のないローカル イベント ブロードキャストは使用しないでください。指示のないローカル イベント ブロードキャストを使用すると、チャート内で不要な再帰的動作が発生する場合があります。代わりに、指示のあるブロードキャストを使用してローカル イベントを送信してください。詳細については、ローカル イベントをブロードキャストしてパラレル ステートを同期を参照してください。
シミュレーション時に Stateflow チャートは指示のないローカル イベント ブロードキャストを検出できます。診断アクションのレベルを制御するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[診断] 、 [Stateflow] ペインで、[指示のないイベント ブロードキャスト] パラメーターを [なし]
、[警告]
、または [エラー]
に設定します。既定の設定は [警告]
です。詳細については、Undirected event broadcasts (Simulink)を参照してください。
循環動作の回避
以下の例では、イベント ブロードキャストを条件アクションとして使用する場合、セマンティクスにより発生する循環動作を回避する表記法を示します。
最初は、チャートはスリープ状態です。ステート On
がアクティブです。イベント E_one
が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。
チャートのルートは、
E_one
の結果、有効な遷移が存在するかどうかをチェックします。ステート
On
からステートOff
で、有効な遷移が検出されます。遷移の条件アクションによってイベント
E_one
がブロードキャストされます。有効な遷移でイベント
E_one
が検出され、即時に実行されます。ステートOn
はこの時点でもアクティブです。イベント
E_one
のブロードキャストによって、チャートの 2 度目の起動が発生します。手順 1 に戻ります。
手順 1 から 5 が引き続き循環的に実行されます。条件アクションのブロードキャスト イベントと同じイベントのトリガーを示す遷移ラベルが原因で、回復不能な循環動作が発生します。このシーケンスは、イベント E_one
がブロードキャストされ、ステート On
がアクティブな場合は完了しません。
ヒント
指示のないローカル イベント ブロードキャストは使用しないでください。指示のないローカル イベント ブロードキャストを使用すると、チャート内で不要な再帰的動作が発生する場合があります。代わりに、指示のあるブロードキャストを使用してローカル イベントを送信してください。詳細については、ローカル イベントをブロードキャストしてパラレル ステートを同期を参照してください。
シミュレーション時に Stateflow チャートは指示のないローカル イベント ブロードキャストを検出できます。診断アクションのレベルを制御するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[診断] 、 [Stateflow] ペインで、[指示のないイベント ブロードキャスト] パラメーターを [なし]
、[警告]
、または [エラー]
に設定します。既定の設定は [警告]
です。詳細については、Undirected event broadcasts (Simulink)を参照してください。