Main Content

モデルまたはサブシステムのコードへの C++ クラス インターフェイスの生成

モデル コードへの C++ クラス インターフェイスを生成するには、モデル コンフィギュレーション パラメーターコード インターフェイスのパッケージ化[C++ クラス] に設定します。生成されたインターフェイスは必要なモデル データを C++ クラスの属性にカプセル化し、モデル エントリ ポイント関数を C++ クラスのメソッドにカプセル化します。C++ クラスのカプセル化の利点には、次のようなものがあります。

  • モデル データへのアクセスのより厳密な制御

  • モデル クラスの複数のインスタンスを作成する機能

  • モデル コードの C++ プログラミング環境への簡単な統合

C++ クラスのカプセル化は、右クリックによる非バーチャル サブシステムのビルドにも機能します(適用される要件の詳細については、非バーチャル サブシステム コードへの C++ クラス インターフェイスの生成を参照してください)。

モデル コードへの C++ クラス インターフェイスの生成

モデルからカプセル化された C++ クラス コードを生成するには、次を行います。

  1. モデル コンフィギュレーション パラメーター [言語][C++] に設定します。この選択によってモデルの C++ クラス コード インターフェイスのパッケージ化も有効になります。

  2. モデル コンフィギュレーション パラメーター [コード インターフェイスのパッケージ化][C++ クラス] に設定されていることを確認します。

  3. [マルチインスタンス コードのエラーの診断] の設定を調べます。モデルがマルチインスタンス コードの生成に対する要件に違反した場合に、表示される診断の重大度レベルを変更する必要がある場合を除き、パラメーターは既定値 [エラー] のままにしておきます。

  4. モデルのコードを生成します。

  5. 生成されたファイル model.h および model.cpp で、C++ モデル クラス コードを調べます。たとえば、モデル例 rtwdemo_secondOrderSystem に対して生成された H ファイルから抜粋された次のコードは、モデルの C++ クラスの宣言を表しています。

    /* Class declaration for model rtwdemo_secondOrderSystem */
    class rtwdemo_secondOrderSystemModelClass {
      /* public data and function members */
     public:
      /* External outputs */
      ExtY_rtwdemo_secondOrderSyste_T rtwdemo_secondOrderSystem_Y;
    
      /* Model entry point functions */
    
      /* model initialize function */
      void initialize();
    
      /* model step function */
      void step();
    
      /* model terminate function */
      void terminate();
    
      /* Constructor */
      rtwdemo_secondOrderSystemModelClass();
    
      /* Destructor */
      ~rtwdemo_secondOrderSystemModelClass();
    
      /* Real-Time Model get method */
      RT_MODEL_rtwdemo_secondOrderS_T * getRTM();
    ...
    };

    モデル エントリポイント関数の生成と呼び出しの詳細については、生成された C 関数インターフェイスをモデルのエントリポイント関数用に構成を参照してください。

メモ

Embedded Coder® ライセンスがあり、モデルに ERT ベースのシステム ターゲット ファイルを選択した場合は、生成された C++ クラス インターフェイスをカスタマイズするための [コード生成][インターフェイス] ペインの追加のパラメーターを使用します。

非バーチャル サブシステム コードへの C++ クラス インターフェイスの生成

次の要件が満たされている場合、非バーチャル サブシステムを右クリックでビルドするための C++ クラス インターフェイスを生成できます。

  • モデルは [C++] 言語と [C++ クラス] コード インターフェイスのパッケージ化用に構成されています。

  • サブシステムは関数 Model を使用して Simulink.SubSystem.convertToModelReference ブロックに変換可能です。参照モデルの変換要件は、Simulink® のリファレンス ページ Simulink.SubSystem.convertToModelReference を参照してください。

要件を満たすサブシステムの C++ クラス インターフェイスを構成するには、以下を実行します。

  1. 含まれているモデルを開いて Subsystem ブロックを選択します。

  2. サブシステムを右クリックし、[C/C++ コード][このサブシステムをビルド] を選択します。

  3. サブシステムのビルドが完了した後、生成されたファイル内の C++ クラス インターフェイスと HTML コード生成レポートを調べます。モデル エントリポイント メソッドの生成と呼び出しの詳細については、生成された C 関数インターフェイスをモデルのエントリポイント関数用に構成を参照してください。

Embedded Coder ライセンスがあり、モデルに ERT ベースのシステム ターゲット ファイルを選択した場合は、MATLAB® コマンドの RTW.configSubsystemBuild を使用してサブシステム コードへの生成された C++ クラス インターフェイスをカスタマイズできます。

C++ クラス インターフェイスの制限

  • [コンフィギュレーション パラメーター] ダイアログ ボックスの [インターフェイス] ペインで使用可能なデータ交換インターフェイスの中で、[C++ クラス] のコード生成には C API インターフェイスのみがサポートされます。[エクスターナル モード] または [ASAP2 インターフェイス] を選択した場合は、コード生成が検証エラーで失敗します。

  • モデルのルートの Inport の値が Simscape™ 変換ブロックに接続されている場合、Simulink Signal Conversion ブロックをルートの Inport と Simscape 変換ブロックの間に挿入しなければなりません。Simulink Signal Conversion ブロック パラメーターのダイアログ ボックスで、['ブロック削減' の最適化からこのブロックを排除する] を選択します。

  • 組み合わせた出力/更新関数を参照モデルがもつことができない場合には、C++ クラス インターフェイスを使用できません。これには、モデルの次のような場合が含まれます。

    • 連続サンプル時間がある

    • 状態を保存する

関連するトピック