Main Content

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

Simulink コンポーネント間のデータ通信のための C メッセージの生成

Simulink 環境でモデル コンポーネント間のメッセージベースの通信をサポートする C コードを生成するには、Simulink Messages & Events ライブラリ ブロック Send および Receive を使用します。通信をカスタマイズするには、(同じライブラリの) Queue ブロックを使用して、容量、並べ替えポリシー (LIFO、FIFO、および優先順位)、および上書きポリシー (キューが容量を上回ったときの動作) のパラメーターを設定します。Simulink Coder を使用して GRT ベースのシステム ターゲット ファイル用 C コードを生成したり、Embedded Coder を使用して ERT ベースのシステム ターゲット ファイル用 C コードを生成したりできます。

メッセージは、Simulink 内でモデル化できる分散された複雑なシステムに効果的な通信方法です。

Simulink でメッセージベースの通信用にモデルを準備する方法

Simulink で、次のようにモデル コンポーネント間でメッセージベースの通信をモデル化できます。

  1. Send ブロックを含むモデル (参照モデル) を作成します。

  2. Receive ブロックを含むモデル (参照モデル) を作成します。

  3. 2 つの Model ブロックを含むモデル (最上位モデル) を作成します。

    • 最初の Model ブロックを Send ブロックを含むモデル (手順 1 のモデル) に設定します。

    • 2 番目の Model ブロックを Receive ブロックを含むモデル (手順 2 のモデル) に設定します。

  4. モデルを実行するときに、メッセージ行の上にある最上位モデルにキューが生成されます。キューによって、明示的または暗黙的に、メッセージの通信を制御します。生成されたキューを使用するか、最上位モデルに Queue ブロックを追加して、通信パラメーターを明示的に指定できます。

モデル コンポーネントでメッセージを渡す方法およびコードでこの動作を実装する方法

参照モデルは次のようにメッセージを渡します。

  1. Send ブロックを含むモデルでは、Send ブロックが信号をメッセージに変換します。

  2. キューを含む最上位モデルが、容量、配信順序、およびその他のサービス品質 (QoS) メトリクスを定義するパラメーターに従ってメッセージを管理します。

  3. Receive ブロックを含むモデルでは、Receive ブロックがメッセージから信号へ変換を戻します。

生成された C コードで、最上位モデルは、参照モデルがそれぞれ独自にアクセスできるセット インターフェイスを確立して送信および受信参照モデル間の接続を容易にします。

生成された C コードでは、メッセージの動作が次のように実装されます。

  1. 各モデル境界にサービスが作成されます。サービスには、参照モデルが最上位モデルにメッセージを渡すために使用する、最上位モデルとエントリ ポイント関数 (サービス関数) への参照が含まれます。

  2. 最上位モデルでは、各サービスを初期化して各参照モデルへの接続を作成します。

  3. 参照モデルは、サービス関数を呼び出して最上位モデルにメッセージを渡します。

C コードの生成例

この例では、ソフトウェア コンポーネント間におけるメッセージ送受信インターフェイスの確立で指定されたモデルから C コードを生成し、確認します。

Model that shows how to establish message send and receive interfaces between software components

C コードの生成:

  1. モデルを開きます。

  2. アプリ ギャラリーで [Embedded Coder] をクリックします。

  3. モデル (最上位モデルと両方の参照モデル) ごとに、[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] ペインで、[言語]C に設定し、モデルを保存します。

  4. コードを生成します。[C コード] タブで、[ビルド] をクリックします。

  5. 生成されたコードを表示します。[C コード] タブで、[コードの表示] をクリックします。

C コードの確認:

  1. 各モデル境界にサービスが作成されます。C では、参照モデルでサービスが DWork として表されます。サービスは、最上位モデルのインスタンスへのポインターと、メッセージを渡すために参照モデルが呼び出すサービス関数を提供します。

    1. メッセージを送信するサービスを表示するには、送信参照モデルのヘッダー ファイル mSend.h を開きます。DWork 割り当てを表示します。

      Example code that shows DWork allocation

    2. 送信メッセージ データ型を表示するには、データ型が共有可能な場合 (たとえば、組み込みデータ型、インポートされたバス型、または指定されたデータ型をもつエクスポートされたバス型)、情報は共有ヘッダー ファイルにあります。データ型が共有可能ではない場合、情報はモデル ヘッダー ファイル mSend.h にあります。この例では、共有ヘッダー ファイル SendData_real_T.h を開いて共有可能なデータ型を表示します。

      Example code that shows shareable data type in shared header file

    3. メッセージを受信するサービスを表示するには、受信参照モデルのヘッダー ファイル mReceive.h を開きます。DWork 割り当てを表示します。

      Example code that shows DWork allocation

    4. 受信したメッセージ データ型を表示するには、データ型が共有可能な場合 (たとえば、組み込みデータ型、インポートされたバス型、または指定されたデータ型をもつエクスポートされたバス型)、情報は共有ヘッダー ファイル内にあります。データ型が共有可能ではない場合、情報はモデル ヘッダー ファイル mReceive.h にあります。この例では、共有ヘッダー ファイル RecvData_real_T.h を開いて共有可能なデータ型を表示します。

      Example code that shows shareable data type in shared header file

  2. 最上位モデルでは、各サービスを初期化して各参照モデルへの接続を作成します。C では、最上位モデルが各参照モデルの DWork を初期化します。初期化を確認するには、最上位モデルの C ファイル MessageSendReceiveDefaultBufferModel.c を開きます。

    Example code for initialization

  3. 参照モデルは、サービス関数を呼び出して最上位モデルにメッセージを渡します。C では、参照モデルが、サービス関数のポインターを逆参照し、最上位モデルのインスタンスへのポインターを渡すことでサービス関数を呼び出します。最上位モデルのヘッダー ファイルでサービス関数のプロトタイプを表示できます。それらのサービス関数の参照モデル呼び出しを参照モデル C ファイルで表示できます。

    1. メッセージを送信するサービス関数のプロトタイプを表示するには、最上位モデルのヘッダー ファイル MessageSendReceiveDefaultBufferModel.h を開きます。

      Example code that shows the prototype of the service function that sends messages

    2. メッセージを送信するサービス関数の実装を表示するには、最上位モデルの C ファイル MessageSendReceiveDefaultBufferModel.c を開きます。

      Example code that shows the implementation of the service function that sends messages

      Example code that shows the implementation of the service function that sends messages

    3. 送信参照モデルがサービス関数を呼び出す方法を表示するには、モデルの C ファイル mSend.c を開きます。ステップ関数で、モデルはサービスを呼び出してインスタンス データとメッセージを最上位モデルに送信し、戻りステータスを受信します。

      Example code that shows how the step function invokes the service to send instance data and a message to the top model and receives back a return status

    4. メッセージを受信するサービス関数のプロトタイプを表示するには、最上位モデルのヘッダー ファイル MessageSendReceiveDefaultBufferModel.h を開きます。

      Example code that shows the prototype of the service function that receives messages

    5. メッセージを受信するサービス関数の実装を表示するには、最上位モデルの C ファイル MessageSendReceiveDefaultBufferModel.c を開きます。

      Example code that shows the implementation of the service function that receives messages

      Example code that shows the implementation of the service function that receives messages

    6. 受信参照モデルがサービス関数を呼び出す方法を表示するには、モデルの C ファイル mReceive.c を開きます。ステップ関数で、モデルはサービスを呼び出してメッセージ ペイロードと戻りステータスを受信します。

考慮事項と制限

  • Simulink Coder アプリを使用して、GRT ベースのシステム ターゲット ファイルで C コードをサポートできます。

  • Embedded Coder アプリを使用して、ERT ベースのシステム ターゲット ファイルで C コードをサポートできます。

  • コードを生成するには、最上位モデルと参照モデルで、同じ言語 (C) と同じシステム ターゲット ファイルを選択します。

  • ルートのメッセージ端子をもつ最上位モデルには関数プロトタイプ コントロール (FPC) を構成できません。

  • 外部モデルとバリアント モデルはサポートされません。

  • ソフトウェアインザループ (SIL) シミュレーションとプロセッサインザループ (PIL) シミュレーションはサポートされません。