Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

出力イベントの送信による Simulink ブロックのアクティブ化

"出力イベント" は、Stateflow® チャート内で発生するイベントです。ただし、チャート外部の Simulink® ブロックでのみ認識されます。このタイプのイベントにより、チャートは、モデル内の他のブロックに対して、チャートで発生したイベントについて通知することが可能になります。出力イベントを定義するには、次を行います。

  1. チャートでのイベントの定義 の説明に従って、イベントを Stateflow チャートに追加します。

  2. イベントの [スコープ] プロパティを [Simulink に出力] に設定します。定義する各出力イベントについて、出力端子が Stateflow ブロックに表示されます。

  3. 出力イベントは、制御信号 (エッジ トリガー) の変更または Simulink ブロックへの関数呼び出しによって、モデル内の他のブロックをアクティブ化できます。

    • エッジ トリガー出力イベントを指定するには、[トリガー] プロパティを [両エッジ] に設定します。

    • 関数呼び出し出力イベントを指定するには、[トリガー] プロパティを [関数呼び出し] に設定します。

詳細については、イベントのブロードキャストによるモデル コンポーネントの同期を参照してください。

出力イベントのブロードキャスト

チャート間で出力イベントをブロードキャストするには、演算子 send を使用します。出力イベントのブロードキャストの形式は以下のとおりです。

send(event_name)
ここで、event_name は出力イベントです。

エッジ トリガーを使用した Simulink ブロックのアクティブ化

エッジ トリガー出力イベントにより、Simulink ブロックが、シミュレーションの現在のタイム ステップ時に実行されます。このタイプの出力イベントでは、制御信号の変更がトリガーの役割を果たします。詳細については、Triggered Subsystem の使用 (Simulink)を参照してください。

エッジ トリガー出力イベントを使用する場合

モデルが定期的または周期的にサブシステムを実行する必要がある場合に Simulink サブシステムをアクティブにするには、エッジ トリガー出力イベントを使用します。たとえば、次のモデルは、エッジ トリガー出力イベントを使用して、2 つの Triggered Subsystem を定期的な間隔でアクティブ化します。

チャートには、シミュレーション中に 0 と 1 を交互に繰り返すエッジ トリガー出力イベント e1 が含まれています。

Stateflow チャートでは、エッジ トリガー出力イベントの [トリガー] プロパティは常に Either Edge です。Simulink の Triggered Subsystem は、RisingFallingEither のいずれかのエッジ トリガーをもつことができます。このモデルは、Either エッジ サブシステムをトリガーする場合と Rising エッジ サブシステムをトリガーする場合の違いを示しています。

  • 出力イベントは、すべてのブロードキャストで Either エッジ サブシステムをトリガーします。トリガーは、イベント信号が 0 から 1 または 1 から 0 に切り替わるときに発生します。

  • 出力イベントは、1 つおきのブロードキャストで Rising エッジ サブシステムをトリガーします。トリガーは、イベント信号が 0 から 1 に切り替わるときにのみ発生します。

複数のエッジ トリガー出力イベントのキュー動作

1 つのチャートが各タイム ステップで送信するエッジ トリガー出力イベントのブロードキャストは 1 つだけです。単一のタイム ステップ内に複数のブロードキャストがある場合、チャートは、1 つのブロードキャストを送信し、残りのブロードキャストを後続のタイム ステップでの送信に備えてキューに入れます。たとえば、次のモデルでは、Caller チャートはエッジ トリガー出力イベント output_cmd を使用して Callee チャートをアクティブ化します。

Caller チャートは、単一のタイム ステップにおいて同じエッジ トリガー出力イベントのブロードキャストを 4 回試みます。

Callee チャートがアクティブ化されるたびに、出力データ y が 1 ずつインクリメントされます。

モデルをシミュレートすると、時間 t = 1 で、Caller チャートは 4 つの出力イベントのうち 1 つを送信します。Callee チャートは、そのタイム ステップ中に 1 回実行されます。Caller チャートは、時間 t = 2、t = 3、t = 4 で今後送信するために、他の 3 つのイベント ブロードキャストをキューに入れます。その結果、y の値は、時間 t = 1、t = 2、t = 3、t = 4 で 1 ずつインクリメントされます。

関数呼び出しを使用した Simulink ブロックのアクティブ化

関数呼び出し出力イベントにより、 Simulink ブロックが、シミュレーションの現在のタイム ステップ時に実行されるようにアクティブ化されます。このタイムの出力イベントは、関数呼び出しを使用してトリガーできるブロックに対してのみ機能します。詳細については、Function-Call Subsystem の使用 (Simulink)を参照してください。

関数呼び出し出力イベントを使用する場合

モデルが関数呼び出しと同じタイム ステップでブロックからの出力データにアクセスする必要がある場合に、関数呼び出し出力イベントを使用して Simulink ブロックをアクティブ化します。たとえば、このモデルには次の 2 つの関数呼び出し出力イベントが含まれています。

  • Edge to Function チャートでは、出力イベント call が Looping Scheduler チャートをアクティブ化します。

  • Looping Scheduler チャートでは、出力イベント A1 が Simulink サブシステムをアクティブ化します。

詳細については、単一のステップでサブシステムを複数回スケジュールを参照してください。

複数の関数呼び出し出力イベントのインターリーブ動作

単一のタイムステップ内に 1 つの関数呼び出し出力イベントのブロードキャストが複数ある場合、チャートはそのタイム ステップですべてのブロードキャストを送信します。Function-Call Subsystem の実行は、チャートの実行と交互に行われる (インターリーブ) ため、Function-Call Subsystem からの出力をチャートですぐに使用できます。たとえば、次のモデルでは、Caller チャートは関数呼び出し出力イベント output_cmd を使用して Callee チャートをアクティブ化します。

Caller チャートは、単一のタイム ステップにおいて同じ関数呼び出し出力イベントのブロードキャストを 4 回試みます。

Callee チャートがアクティブ化されるたびに、出力データ y が 1 ずつインクリメントされます。

モデルをシミュレートすると、Caller チャートは 4 つすべての出力イベントを時間 t = 1 で送信します。Callee チャートは、そのタイム ステップ中に 4 回実行されます。Callee チャートと Caller チャートは交互に実行されるため、Callee チャートからの出力をすぐに使用できます。その結果、| y | の値は、時間 t = 1 で 0 から 4 に増加します。

エッジ トリガー イベントを使用した関数呼び出しの近似

HDL コード生成などで関数呼び出し出力イベントを使用できない場合は、以下を使用して関数呼び出しに似せることができます。

  • エッジ トリガー出力イベント

  • Enabled Subsystem

  • 連続する 2 つのイベント ブロードキャスト

連続エッジ トリガー出力イベントのキュー動作により、Enabled Subsystem を関数呼び出しに似せることができます。

たとえば、次のモデルでは、エッジ トリガー出力イベント output_cmd が Enabled Subsystem をアクティブ化します。

Caller チャートは、send 演算子を使用してエッジ トリガー出力イベントをブロードキャストします。

シミュレーションの開始時点では、トリガー信号の値は 0 です。時間 t = 20 で、チャートは output_cmd を送信し、トリガー信号の値は 1 に変わります。Enabled Subsystem がアクティブとなり、そのタイム ステップの間に実行されます。他のイベント ブロードキャストが発生しないため、t= 40 でシミュレーションが終了するまで、Enabled Subsystem がタイム ステップごとに引き続き実行されます。Display ブロックには最終値 40 が表示されます。

関数呼び出しに似せるには、第 2 のイベント ブロードキャストを同じアクションに追加します。

シミュレーションの開始時点では、トリガー信号の値は 0 です。時間 t = 20 で、チャートは output_cmd を送信し、トリガー信号の値は 1 に変わります。Enabled Subsystem がアクティブとなり、そのタイム ステップの間に実行されます。チャートは、次のタイム ステップでの送信に備えて第 2 のイベントをキューに入れます。時間 t= 21 で、チャートは第 2 の出力イベントを送信し、トリガー信号の値が 0 に戻ります。Enabled Subsystem の実行は停止され、Display ブロックに最終値 20 が表示されます。

関数呼び出しに似せることはできますが、実行の動作には微妙な違いがあります。Function-Call Subsystem は、トリガーを提供するチャート アクションの実行中に実行されます。Enabled Subsystem は、このチャート アクションが終了した "後" に実行されます。

出力イベントと出力端子の関連

チャート内で出力イベントを定義すると、チャート ブロックの右側に出力イベント端子が表示されます。出力イベントはスカラーでなければなりませんが、1 つのチャート内で複数の出力イベントを定義できます。出力イベントの [端子] プロパティは、出力端子の位置を指定します。

既定では、[端子] の値は、出力イベントの追加順に表示されます。これらの割り当ては、イベントの [端子] プロパティを変更することによって変更できます。1 つの出力イベントの [端子] プロパティを変更すると、それ以外の出力イベントの [端子] の値が自動的に変更されます。

参考

関連するトピック