主要内容

。

金宝appSimulink的コンポーネント间の通信のためのC ++メッセージの生成

金宝app的Simulink环境でモデルコンポーネント间のメッセージベースの通信をサポートするC ++コードを生成するには,Simulink的消息和事件ライブラリブロック发送および收到を使用します。通信をカスタマイズするには,(同じライブラリの)队列ブロックを使用して,容量,並べ替えポリシー(先进先出,后进先出および優先順位),および上書きポリシー(キューが容量を上回ったときの動作)のパラメーターを設定します。金宝app仿真软件编码器を使用しGRTてベースのシステムターゲットファイル用c++コードを生成したり,嵌入式编码器を使用してERTベースのシステムターゲットファイル用c++コードを生成したりできます。

メッセージは,金宝appSimulink的内でモデル化できる分散された复雑なシステムに效果的な通信方法です。メッセージベースの通信に対する生成コードのサポートについて理解を深めるために,以下の说明を参照してください。

  • 金宝appSimulink中でメッセージベースの通信用にモデルを准备する方法。

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

  • 特定のモデル例からC ++コードを生成して调べる方法。

金宝app仿真软件でメッセージベースの通信用にモデルを準備する方法

金宝appSimulink中で,次の手顺を使用して,モデルコンポーネント间でメッセージベースの通信をモデル化できます。

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

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

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

    • 最初の模型ブロックを发送ブロックを含むモデル(手顺1のモデル)に设定します。

    • 2番目の模型ブロックを接收ブロックを含むモデル(手顺2のモデル)に设定します。

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

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

概念上,参照モデルは次の方法でメッセージを渡します。

  1. 发送ブロックを含むモデルでは,发送ブロックが信号をメッセージに変换します。

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

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

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

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

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

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

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

これらの手順の実装の詳細を,生成されたコード例に示します。

C ++コードの生成例

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

C ++コードの生成:

  1. モデルを开きます。

  2. アプリギャラリーで[嵌入式编码]をクリックします。

  3. 各モデル(最上位モデルと両方の参照モデル)に対して,[コンフィギュレーションパラメーター]ダイアログボックスで次のパラメーターを设定します。

    • [コード生成]ペインで,[言语]C ++に设定します。

    • [インターフェイス]ペインで,[コードインターフェイスのパッケージ化]C ++类に设定します。

    モデルを保存します。

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

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

C ++コードの确认:

  1. 各モデル境界にサービスが作成されます.C ++では,サービスは,最上位モデルのインスタンス,およびメッセージを渡すために参照モデルが呼び出すサービス关数を保持するオブジェクトとして表されます。

    1. サービスの作成を确认するには,最上位モデルのC ++ファイルMessageSendReceiveDefaultBufferModel.cppを开きます。コンストラクターメソッドを表示します。

      コンストラクターメソッドReceiveComponentRecvData(*此)およびSendComponentSendData(*此)は,最上位モデルのインスタンスへの参照を引数として取ることで,受信および送信サービスオブジェクトをそれぞれ作成します。各サービスオブジェクトは最上位モデルへの参照を保存し,メッセージインターフェイス(サービス关数RecvDataおよび送出数据)を定义します。

    2. 受信および送信サービスクラスを表示するには,最上位モデルのヘッダーファイルMessageSendReceiveDefaultBufferModel.hを開き,次のセクションを表示します。

  2. 最上位モデルでは,各サービスを初期化して各参照モデルへの接続を作成します。初期化を表示するには,最上位モデルのc++ファイルMessageSendReceiveDefaultBufferModel.cppを开きます。コンストラクターメソッドを表示します。

    コンストラクターメソッドReceive_ComponentMDLOBJ0 (get_ReceiveComponentRecvData ())は,受信サービスへの参照を受信参照モデルに渡します。コンストラクターメソッドSend_ComponentMDLOBJ1(get_SendComponentSendData())は,送信サービスへの参照を送信参照モデルに渡します。

  3. 参照モデルは,サービス关数を呼び出して最上位モデルにメッセージを渡します.C ++では,参照モデルが,最上位モデル(阶层内である场合は共通の先祖)のサービス关数を呼び出してメッセージを送信または受信します(具体的には,参照モデルが,手顺2で作成されたインターフェイスから抽象サービスメソッド(RecvDataまたは送出数据)を呼び出します)。抽象インターフェイスクラスは共有フォルダーに出力されます。各サービスでのサービス关数の実装は,最上位モデルのC ++ファイルで定义されます。

    1. メッセージを送信する抽象インターフェイスクラスを表示するには,共有フォルダーからヘッダーファイルSendData_real_T.hを开きます。

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

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

    4. メッセージを受信する抽象インターフェイスクラスを表示するには,共有フォルダーからヘッダーファイルRecvData_real_T.hを开きます。

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

    6. 受信参照モデルがサービス关数を呼び出す方法を表示するには,そのC ++ファイルmRecieve.cppを开きます。ステップ关数で,モデルはサービス关数を呼び出して最上位モデルからメッセージとステータスを受信します。

考慮事項と制限

  • 金宝appSimulink的编码器アプリを使用して,GRTベースのシステムターゲットファイルでC ++コードをサポートできます。

  • 嵌入式编码アプリを使用して,ERTベースのシステムターゲットファイルでC ++コードをサポートできます。

  • コードを生成するには,最上位モデルと参照モデルで同じ言语(C ++)とシステムターゲットファイルを选択しなければなりません。

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

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

  • シミュレーションでは,SIL / PILはサポートされません。

关键词トピック