ソフトウェア コンポーネント間におけるメッセージ送受信インターフェイスの確立
この例では、異なるアプリケーションで実行されるソフトウェア コンポーネント間のメッセージベースの通信をモデル化する方法を説明します。この例では、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 をコード生成に向けて準備するため、[モデル コンフィギュレーション パラメーター] で以下を行います。
[ソルバー] ペインの [ソルバーの選択] セクションで [タイプ] を [
Fixed-step
] に設定します。[固定ステップ サイズ] を
0.1
に設定します。[コード生成] ペインで、[システムターゲットファイル] を [
ert.tlc
] に設定し、[言語] を [C++] に設定します。モデルが
mSend
という名前で保存されます。
Receive Component
Receive Component では、Scope ブロックを使用してメッセージを受信するアルゴリズムを表現します。
Receive Component を準備するため、Inport ブロックをReceiveブロックに接続します。Receive ブロックはメッセージを受信し、信号データに変換します。既定では、Receive ブロックの [サンプル時間] パラメーターは -1
です。
Receive Component をコード生成に向けて準備するため、[モデル コンフィギュレーション パラメーター] で以下を行います。
[ソルバー] ペインの [ソルバーの選択] セクションで [タイプ] を [
Fixed-step
] に設定します。[固定ステップ サイズ] を
0.1
に設定します。[コード生成] ペインで、[システムターゲットファイル] を [
ert.tlc
] に設定し、[言語] を [C++] に設定します。モデルが
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 件送信します。
参考
Sine Wave | Send | Receive | Queue | Sequence Viewer
関連するトピック
- 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)
- メッセージの送受信のアニメーション化および理解