Main Content

ソフトウェア コンポーネント間におけるメッセージ送受信インターフェイスの確立

この例では、異なるアプリケーションで実行されるソフトウェア コンポーネント間のメッセージベースの通信をモデル化する方法を説明します。この例では、C++ コード生成用にモデル コンポーネントを準備する方法についても説明します。

この例では、2 つのコンポーネントの間でメッセージベースの通信が構成されます。Send Component はデータを送信し、Receive Component はデータを消費します。このシナリオにおいて、Send Component がメッセージを送信した後、そのメッセージはキューに格納されます。Receive Component は、それが表現するロジックに従ってメッセージを取り込みます。

Send Component と Receive Component というラベルの付いた 2 つの Model ブロックは、メッセージ ラインで接続されたコンポーネントを表しています。メッセージベースの通信は、ルートレベルの Outport ブロックおよび Inport ブロックに接続された Send ブロックと Receive ブロックを使用して実現されます。

モデル用の C または C++ コードの生成に関する詳細については、Generate C++ Messages to Communicate Data Between Simulink Components (Embedded Coder)およびGenerate C Messages to Communicate Data Between Simulink Components (Embedded Coder)を参照してください。

各コンポーネントの C++ コードを生成することもできます。コードにはオペレーティング システムまたはメッセージ ミドルウェアと接続するのに十分な、必要なソフトウェア インターフェイスが含まれます。詳細については、Generate C++ Messages to Communicate Data Between Simulink and an Operating System or Middleware (Embedded Coder)を参照してください。

Send Component

Send Component のアルゴリズムには、任意の複雑度のロジックを含めることができます。この例では、信号ソースとしてシンプルな Sine Wave ブロックをサブシステム内で使用します。このブロックの [サンプル時間] パラメーターは 0.1 に設定されています。

Send Component をメッセージベースの通信に向けて準備するため、Sendブロックをルートレベルの Outport ブロックに接続します。Send ブロックはデータ信号を変換し、メッセージを送信します。

Send Component をコード生成に向けて準備するため、[モデル コンフィギュレーション パラメーター] で以下を行います。

  1. [ソルバー] ペインの [ソルバーの選択] セクションで [タイプ] を [Fixed-step] に設定します。

  2. [固定ステップ サイズ]0.1 に設定します。

  3. [コード生成] ペインで、[システムターゲットファイル] を [ert.tlc] に設定し、[言語] を [C++] に設定します。

  4. モデルが mSend という名前で保存されます。

Receive Component

Receive Component では、Scope ブロックを使用してメッセージを受信するアルゴリズムを表現します。

Receive Component を準備するため、Inport ブロックをReceiveブロックに接続します。Receive ブロックはメッセージを受信し、信号データに変換します。既定では、Receive ブロックの [サンプル時間] パラメーターは -1 です。

Receive Component をコード生成に向けて準備するため、[モデル コンフィギュレーション パラメーター] で以下を行います。

  1. [ソルバー] ペインの [ソルバーの選択] セクションで [タイプ] を [Fixed-step] に設定します。

  2. [固定ステップ サイズ]0.1 に設定します。

  3. [コード生成] ペインで、[システムターゲットファイル] を [ert.tlc] に設定し、[言語] を [C++] に設定します。

  4. モデルが mReceive という名前で保存されます。

Sequence Viewer ブロックを使用したコンポーネント間遷移の可視化

これは、Send Component と Receive Component を含むコンポジション モデルです。Model ブロックの Send Component はモデル mSend を参照し、Receive Component はモデル mReceive を参照します。

モデルのシミュレーションを実行します。既定で挿入されるキューを観察します。メッセージ ラインの上に表示されるアイコンは、既定のキューを表しています。既定のキューの容量は 1 で、メッセージ上書きポリシーが有効になっています。コンポーネント間に Queue ブロックを使用すると、キューをカスタマイズできます。詳細については、Queue ブロックを使用したメッセージの管理を参照してください。

Sequence Viewerブロックを開きます。このブロックを使用すると、メッセージの遷移イベントとメッセージが搬送するデータを可視化できます。

Sequence Viewer ブロック ウィンドウ左側の縦のバーには、シミュレーション時間が表示されます。各時間グリッド行に、同一のシミュレーション時間に発生したイベントが含まれます。各メッセージ遷移イベントは矢印で表され、各矢印にはメッセージ データの値がラベル付けされます。Sequence Viewer ブロックの詳細については、Sequence Viewer を使用したメッセージ、イベント、エンティティの可視化を参照してください。

Sequence Viewer ブロックで上にスクロールするか、左側にある [最初のイベントに移動] アイコンをクリックします。時間 0 に Send ブロックはデータ値 0 のメッセージを Receive ブロックに送信し、時間 0.1 にはデータ値 0.0998 の別のメッセージを送信していることを観察します。このブロックは 0.1 シミュレーション時間ごとにメッセージを 1 件送信します。

参考

| | | |

関連するトピック