ドキュメンテーション

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

ローカル イベントをブロードキャストしてパラレル ステートを同期

直接イベント ブロードキャスト

イベントを、あるステートから別のステートに直接ブロードキャストして、同じチャート内のパラレル (AND) ステートを同期化することができます。ローカル イベントは、Simulink® モデルの Stateflow® チャートでのみサポートされます。以下のルールが適用されます。

  • 受信側のステートは、イベント ブロードキャスト時にアクティブである必要があります。

  • チャート内のアクションは、別のチャート内のステートにイベントをブロードキャストできません。

直接ローカル イベント ブロードキャストを使用すると、指示のないブロードキャストを使用する場合に比べて次のような利点があります。

  • シミュレーション時の望ましくない再帰を回避できます。

  • 生成されるコードの効率を改善できます。

望ましくない再帰を回避する方法の詳細については、チャートでの望ましくない再帰を避けるためのガイドライン を参照してください。

send による直接ローカル イベント ブロードキャスト

send による直接ローカル イベント ブロードキャストの形式は、以下のとおりです。

send(event_name,state_name)

event_name は、state_name と階層内のそのステートの子に対するブロードキャストです。送信されるイベントは、送信側のステートと受信側のステート (state_name) の両方で認識されていることが前提です。

引数 state_name には、ステートへの絶対階層パスを指定できます。たとえば、ステート A がステート A1 を含んでいる場合は、以下のブロードキャストでイベント e をステート A1 に送信します。

send(e, A.A1)

ヒント

ステートへの絶対階層パスには、チャート名を含めないでください。

以下の直接ローカル イベント ブロードキャストの例では、send(event_name,state_name) 構文を使用しています。

この例では、イベント E_one がチャートに属し、AB の両方で認識されます。この表記法のセマンティクスに関する詳細は、send による直接イベント ブロードキャストを参照してください。

修飾イベント名を使用した直接ローカル イベント ブロードキャスト

修飾イベント名を使用した直接ローカル イベント ブロードキャストの形式は、以下のとおりです。

send(state_name.event_name)

event_name は、含んでいるステート (state_name) と階層内のそのステートの子に対するブロードキャストです。送信されるイベントは、受信側のステート (state_name) でのみ認識されます。

引数 state_name には、受信側のステートへの絶対階層パスも指定できます。ステートの絶対パスには、チャート名を使用しないでください。

以下の例では、直接ローカル イベント ブロードキャストに修飾イベント名を使用しています。

この例では、イベント E_one はステート B に属し、そのステートでのみ認識されます。この表記法のセマンティクスに関する詳細は、修飾イベント名による直接イベント ブロードキャストを参照してください。

指示のないローカル イベント ブロードキャストの検出のための診断

チャートのステート アクションまたは条件アクションに "指示のない" ローカル イベント ブロードキャストがある場合、既定の設定ではシミュレーション中に警告が表示されます。指示のないローカル イベント ブロードキャストをもつステート アクションの例としては、次のものがあげられます。

  • entry: send(E1)。ここで E1 はチャート内のローカル イベントです。

  • exit: E2。ここで E2 はチャート内のローカル イベントです。

指示のないローカル イベント ブロードキャストに対する診断アクションのレベルは、[モデル コンフィギュレーション パラメーター] ダイアログ ボックスの [診断][Stateflow] ペインで制御できます。[指示のないイベント ブロードキャスト] 診断を [なし][警告] または [エラー] に設定します。詳細は、指示のないイベント ブロードキャスト (Simulink) 診断のドキュメンテーションを参照してください。

参考

関連するトピック