ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

条件アクションを使用したチャートの実行の制御

条件アクションの動作

以下の例は、複数セグメントをもつ遷移パスでの簡単な条件アクションの動作を示しています。チャートでは、出力遷移の暗黙的な順序付けが使用されます (暗黙的な順序付けを参照)。

最初は、チャートはスリープ状態です。ステート A がアクティブです。条件 C_oneC_two は偽です。イベント E_one が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。

  1. チャートのルートは、E_one の結果、有効な遷移が存在するかどうかをチェックします。ステート A からコネクティブ ジャンクションへの有効な遷移セグメントが検出されます。有効な遷移セグメントで条件アクション A_one が検出され、即時に実行されて完了します。ステート A はこの時点でもアクティブです。

  2. 選択可能な遷移先への遷移セグメントの条件は偽であるため、有効な遷移は存在しません。

  3. ステート A の during アクション (durA()) が実行されて完了します。

    ステート A はアクティブなままです。

  4. チャートはスリープ状態に戻ります。

このシーケンスは、ステート A が最初にアクティブな場合に、イベント E_one に関連する Stateflow® チャートの実行を完了します。

条件アクションと遷移アクションの動作

以下の例は、排他的 (OR) ステート間の遷移で指定された簡単な条件アクションと遷移アクションの動作を示しています。

最初は、チャートはスリープ状態です。ステート A がアクティブです。条件 C_one は真です。イベント E_one が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。

  1. チャートのルートは、E_one の結果、有効な遷移が存在するかどうかをチェックします。ステート A からステート B で、有効な遷移が検出されます。条件 C_one は真です。有効な遷移で条件アクション A_one が検出され、即時に実行されて完了します。ステート A はこの時点でもアクティブです。

  2. ステート A の exit アクション (ExitA()) が実行されて完了します。

  3. ステート A が非アクティブとしてマークされます。

  4. 遷移アクション A_two が実行されて完了します。

  5. ステート B がアクティブとしてマークされます。

  6. ステート B の entry アクション (entB()) が実行されて完了します。

  7. チャートはスリープ状態に戻ります。

このシーケンスは、ステート A が最初にアクティブな場合に、イベント E_one に関連する Stateflow チャートの実行を完了します。

for ループを使用した条件アクションの作成

条件アクションとコネクティブ ジャンクションは、for ループの構成を設計する目的で使用されます。以下の例は、条件アクションとコネクティブ ジャンクションを使用して for ループの構成を作成する方法を示しています。チャートでは、出力遷移の暗黙的な順序付けが使用されます (暗黙的な順序付けを参照)。

上記の例の動作を確認するには、for ループの構成 を参照してください。

条件アクションを使用したパラレル (AND) ステートへのイベントのブロードキャスト

以下の例は、条件アクションを使用してイベントをパラレル (AND) ステートに即時にブロードキャストする方法を示しています。チャートは、パラレル ステートの暗黙的な順序付けを使用します (パラレル ステートの暗黙的な順序付けを参照)。

上記の例の動作を確認するには、条件アクションでのイベントのブロードキャスト を参照してください。

ヒント

指示のないローカル イベント ブロードキャストは、チャート内で不要な再帰的動作が発生する場合があるので使用しないでください。直接ローカル イベント ブロードキャストには send 演算子を使用します。詳細については、ローカル イベントをブロードキャストしてパラレル ステートを同期を参照してください。

指示のないローカル イベント ブロードキャストを検出する診断レベルを設定できます。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、[診断][Stateflow] ペインに移動し、[指示のないイベント ブロードキャスト] 診断を [なし][警告] または [エラー] に設定します。既定の設定は [警告] です。

循環動作の回避

以下の例では、イベント ブロードキャストを条件アクションとして使用する場合、セマンティクスにより発生する循環動作を回避する表記法を示します。

最初は、チャートはスリープ状態です。ステート On がアクティブです。イベント E_one が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。

  1. チャートのルートは、E_one の結果、有効な遷移が存在するかどうかをチェックします。

    ステート On からステート Off で、有効な遷移が検出されます。

  2. 遷移の条件アクションによってイベント E_one がブロードキャストされます。

  3. 有効な遷移でイベント E_one が検出され、即時に実行されます。ステート On はこの時点でもアクティブです。

  4. イベント E_one のブロードキャストによって、チャートの 2 度目の起動が発生します。

  5. 手順 1 に戻ります。

手順 1 から 5 が引き続き循環的に実行されます。条件アクションのブロードキャスト イベントと同じイベントのトリガーを示す遷移ラベルが原因で、回復不能な循環動作が発生します。このシーケンスは、イベント E_one がブロードキャストされ、ステート On がアクティブな場合は完了しません。

ヒント

指示のないローカル イベント ブロードキャストは、チャート内で不要な再帰的動作が発生する場合があるので使用しないでください。直接ローカル イベント ブロードキャストには send 演算子を使用します。詳細については、ローカル イベントをブロードキャストしてパラレル ステートを同期を参照してください。

指示のないローカル イベント ブロードキャストを検出する診断レベルを設定できます。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、[診断][Stateflow] ペインに移動し、[指示のないイベント ブロードキャスト] 診断を [なし][警告] または [エラー] に設定します。既定の設定は [警告] です。

関連するトピック