ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

出力イベントを使用した Simulink ブロックのアクティブ化

出力イベントとは

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

出力イベントを使用して、同じモデル内の他のブロックをアクティブ化します。各出力イベントが出力端子に対応するように、1 つのチャートで複数の出力イベントを定義できます (端子 を参照)。

    メモ:   出力イベントはスカラーでなければなりません。

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

エッジ トリガー出力イベントにより、Simulink ブロックが、シミュレーションの現在のタイム ステップ時に実行されます。このタイプの出力イベントは、制御信号の変更がトリガーの役割を果たす場合にのみ機能します。

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

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

エッジ トリガー出力イベントを定義する方法

エッジ トリガー出力イベントを以下のように定義します。

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

  2. イベントの [スコープ] プロパティを [Simulink に出力] に設定します。

    定義する各出力イベントについて、出力端子が Stateflow ブロックに表示されます。

  3. 出力イベントの [トリガー] プロパティを [両エッジ] に設定します。

      メモ:   エッジ トリガー入力イベントとは異なり、[立ち上がり] エッジ トリガーまたは [立ち下り] エッジ トリガーを指定することはできません。

エッジ トリガー出力イベントの使用例

以下の モデルモデル は、エッジ トリガー出力イベントを使用して一定の間隔で Triggered Subsystem をアクティブ化する方法を示しています。

チャートには、エッジ トリガー出力イベント e1 とローカル データ a が含まれています。このローカル データの値は、シミュレーション時に 0 と 1 の間で切り替わります。

チャートでは、エッジ トリガー出力イベントの [トリガー] プロパティは常に [両エッジ] です。ただし、Simulink Triggered Subsystem は、[立ち上がり] トリガー、[立ち下がり] トリガー、または [両エッジ] トリガーを含むことができます。このモデルは、立ち上がりエッジ サブシステムをトリガーする場合と両エッジ サブシステムをトリガーする場合の違いを示しています。

出力イベント e1 がトリガーするサブシステムトリガーするタイミングデータ a が切り替わる場合
両エッジ サブシステム各イベント ブロードキャスト0 から 1、または 1 から 0
立ち上がりエッジ サブシステムその他の各イベント ブロードキャスト0 から 1

モデルのシミュレーションを実行すると、スコープに以下の結果が表示されます。

エッジ トリガー出力イベントを複数回ブロードキャストする場合の待ち行列動作

チャートが、単一のタイム ステップにおいて同じエッジ トリガー出力イベントのブロードキャストを複数回試みる場合、チャートは、現在のタイム ステップでこれらのブロードキャストのうち 1 つのみを送信します。ただし、チャートは送信待機中のブロードキャストを待ち行列に入れます (つまり、連続するタイム ステップにおいて一度に 1 つずつ送信します)。連続するタイム ステップにおいてチャートが起動するたびに、出力イベントについて待機中のブロードキャストが存在すると、チャートはエッジ トリガー サブシステムに実行を求めます。Simulink モデルのブロックの並べ替え順序に基づいて、エッジ トリガー サブシステムが実行されます。(詳細は、Simulink ドキュメンテーションの 「並べ替え順序の制御と表示」 を参照)。

エッジ トリガー出力イベント ブロードキャストの待ち行列追加

このモデルモデルでは、チャート Caller がエッジ トリガー出力イベント output_cmd を使用して、チャート Callee をアクティブ化しています。

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

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

モデルのシミュレーションを実行すると、以下の出力がスコープに表示されます。

t = 1 において、チャート Caller は 4 つの出力イベントのうち 1 つのみを送信します。このため、チャート Callee はそのタイム ステップ中に 1 回実行されます。ただし、チャート Caller は、将来の送信に備えて他の 3 つのイベント ブロードキャストを待ち行列に入れます。 すなわち、t = 2, 3, および 4 で、1 つずつ連続するタイム ステップにおいて Caller が起動するたびに、実行できるように Callee がアクティブ化されます。このため、t = 1、2、3、および 4 のタイム ステップごとに 1 回、アクション y++ が発生します。 シミュレーション時に、Callee は Simulink モデルのブロックの並べ替え順序に基づいて実行されます。

待ち行列動作による関数呼び出し近似

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

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

  • Enabled Subsystem

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

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

以下の モデルモデル では、チャート Caller がエッジ トリガー出力イベント output_cmd を使用して、Enabled Subsystem をアクティブ化しています。シミュレーション時に、出力イベントの値がスコープに表示されます。

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

モデルのシミュレーションを実行すると、以下の出力がスコープに表示されます。シミュレーションは 40 秒間実行されます。

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

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

モデルのシミュレーションを実行すると、以下の出力がスコープに表示されます。シミュレーションは 40 秒間実行されます。

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

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

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

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

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

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

関数呼び出し出力イベントを定義する方法

関数呼び出し出力イベントを定義するには以下のようにします。

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

  2. イベントの [スコープ] プロパティを [Simulink に出力] に設定します。

    定義する各出力イベントについて、出力端子が Stateflow ブロックに表示されます。

  3. 出力イベントの [スコープ] プロパティを [関数呼び出し] に設定します。

関数呼び出し出力イベントの使用例

モデル sf_loop_schedulersf_loop_scheduler は、関数呼び出し出力イベントを使用して Simulink ブロックをアクティブにする方法を示しています。このモデルの実行と動作の詳細は、単一のステップにおける単一のサブシステムのスケジューリング を参照してください。

関数呼び出し出力イベントチャートアクティブ化対象
callEdge to Functionチャート Looping Scheduler
A1Looping SchedulerFunction-Call Subsystem A1

関数呼び出し出力イベントを複数回ブロードキャストする場合のインターリーブ動作

チャートが、単一のタイム ステップにおいて同じ関数呼び出し出力イベントのブロードキャストを複数回試みる場合、チャートは、そのタイム ステップでこれらのブロードキャストをすべて送信します。Function-Call Subsystem の実行は、ファンクションコール開始プログラムの実行と交互に行われる (インターリーブ) ため、Function-Call Subsystem からの出力をファンクションコール開始プログラムですぐに使用できます(詳細は、Simulink ドキュメンテーションの 「Function-Call Subsystem の作成」 を参照)。

関数呼び出し出力イベント ブロードキャストのインターリーブ

この モデルモデル では、チャート Caller が関数呼び出し出力イベント output_cmd を使用して、チャート Callee をアクティブ化しています。

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

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

モデルのシミュレーションを実行すると、以下の出力がスコープに表示されます。

t = 1 において、チャート Caller は 4 つの出力イベントをすべて送信します。このため、チャート Callee はそのタイム ステップ中に 4 回実行されます。その結果、アクション y++ も、そのタイム ステップ中に 4 回発生します。シミュレーション時に、Callee と Caller が交互に実行されるため、Callee からの出力をすぐに使用できます。

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

[端子] プロパティは、出力イベントを、そのイベントを所有するチャート ブロックの出力端子に関連付けます。このプロパティは、他の端子に対する出力端子の相対的位置を指定します。

すべての出力端子が上から下に順次、表示されます。出力データ端子は、チャート ブロックの右側の出力イベント端子の上に順次、表示されます。出力イベントを追加すると、その既定の [端子] プロパティが現在の端子リストの末尾に順次、表示されます。

[端子] プロパティをリセットすることで、イベントの既定の端子割り当てを変更できます。出力イベントの [端子] プロパティを変更すると、それ以外の出力イベントの端子番号は自動的に変更され、元の順序が維持されます。たとえば、3 種類の出力イベント OE1OE2、および OE3 が存在し、それぞれ出力端子 4、5、および 6 に関連付けられていると仮定します。OE2[端子] プロパティを 6 に変更した場合は、OE1OE3 の端子番号はそれぞれ 4 と 5 に変更されます。

出力イベントによってトリガーされる Simulink サブシステムへのアクセス

Stateflow 出力イベントに関連付けられた Simulink サブシステムにアクセスするには以下のようにします。

  1. チャート内で、対象のイベントを含むステートまたは遷移を右クリックして、[エクスプローラー] を選択します。

  2. 対象のイベントを選択します。

    イベントに関連付けられている Simulink サブシステムが表示されます。

この情報は役に立ちましたか?