Simulink 関数によるメッセージ受信インターフェイスの接続
この例では、メッセージベースのシステムでデータの入手に実行を同期させる方法を説明します。イベントとアクションを使用してこの動作をモデル化する方法を示します。この例は、2 つのソフトウェア コンポーネントがメッセージを使用して通信する別の例、ソフトウェア コンポーネント間におけるメッセージ送受信インターフェイスの確立に基づいています。
前の例と同様に、SendComponent と ReceiveComponent にコード生成プロセスを適用する必要があります。Message Storage は、ミドルウェアをモデル化するとともに、ミドルウェアによって提供されるデータ通知イベントをモデル化します。
以下は、2 つの Model ブロックを使用して作成された、SendComponent と ReceiveComponent を含むコンポジション モデルです。これらの 2 つの Model ブロックは、Queue ブロックを通してメッセージ ラインで接続されています。

メッセージが Queue ブロックに到達すると、Queue エントリ イベント アクションを使用してその到着が ReceiveComponent に伝えられます。これにより、ReceiveComponent 内の Simulink Function ブロックがアクティブになり、処理を行うために新しいメッセージを受信します。

この動作を実現するために、Queue ブロックの [Event actions] タブの [Entry] フィールドで、このブロックは Simulink 関数 onMessageAvailable() を呼び出します。イベント アクションの詳細については、Event Action Languages and Random Number Generation (SimEvents)を参照してください。

Simulink Function ブロックがアクティブになると、メッセージを受信し、信号に変換します。

その結果、SendComponent から送信されたメッセージにより、ReceiveComponent 内の実行がトリガーされます。この動作を観察するため、Sequence Viewerブロックを使用します。
たとえば、シミュレーション時間 0 を観察します。
Send ブロックから Queue ブロックへの矢印は、データ値
0のメッセージが送信されたことを表しています。Queue ブロックから Simulink Function ブロックへの矢印は、関数
onMessageAvailable()の呼び出しを示しています。Queue ブロックからの矢印は、この関数呼び出し内でデータ値
0のメッセージが Receive ブロックによって受信されたことを示しています。Simulink Function ブロックから Queue ブロックへの水平の破線矢印は、関数
onMessageAvailable()のリターンを示しています。

Sequence Viewer ブロックの詳細については、Sequence Viewer を使用したメッセージ、イベント、エンティティの可視化を参照してください。
参考
Sine Wave | Send | Receive | Queue
トピック
- Simulink メッセージの概要
- ソフトウェア コンポーネント間におけるメッセージ送受信インターフェイスの確立
- Generate C Messages to Communicate Data Between Simulink Components (Embedded Coder)
- Generate C++ Messages to Communicate Data Between Simulink Components (Embedded Coder)
- Generate C++ Messages to Communicate Data Between Simulink and an Operating System or Middleware (Embedded Coder)
- Model Message-Based Communication Integrated with POSIX Message Queues (Embedded Coder)