Main Content

サブシステムの参照モデルへの変換とコードの生成

サブシステムを参照モデルに変換すると、インクリメンタルなコード生成、参照モデルのモジュール開発、およびコードの再利用を強化できます。多くの大規模なモデルでは、参照モデルとサブシステムの組み合わせを使用します。

Subsystem ブロックを Model ブロックに変換するには、次のいずれかの方法を使用します。

  • Simulink® エディターで、Subsystem ブロックを選択します。Simulink ツールストリップの [Subsystem ブロック] タブで、[変換][Model ブロック] を選択します。

  • MATLAB® コマンド ウィンドウで、引数 'UseConversionAdvisor'true に設定して関数 Simulink.SubSystem.convertToModelReference を使用します。

サブシステムを参照モデルに変換する前に次を実行します。

  1. Subsystem ブロックを Atomic サブシステムとして設定します。Subsystem ブロック パラメーターで [Atomic サブシステムとして扱う] プロパティを選択します。

    Atomic サブシステムは親モデルを基準にした単位として実行されます。サブシステムの実行は親ブロックの実行とインターリーブしません。このプロパティにより、サブシステムを抽出し、スタンドアロン モデルおよび生成されたコードの関数として使用することができます。

  2. モデル コンフィギュレーション パラメーターの [信号の関連付け][明示的のみ] または [なし] に設定します。

コード マッピング エディターまたはコード マッピング API (coder.mapping.api.CodeMapping) を使用して、モデルのデータ要素のカテゴリまたは個別の要素にストレージ クラスをマッピングできます。次に、コード マッピング エディターまたは API を使用して、ヘッダー ファイル、定義ファイル、メモリ セクションなど、ストレージ クラスに固有のコード構成設定を指定します。モデルにコード マッピングが含まれている場合は、サブシステムを参照モデルに変換するときに、コード マッピングを移行できます。詳細については、コード マッピング エディター – C を参照してください。

コード マッピングの構成

  1. モデル例 RollAxisAutopilot を開きます。

    openExample('RollAxisAutopilot')

  2. Simulink ツールストリップの [アプリ] タブで、[Embedded Coder] または [Simulink Coder] アプリを選択します。

  3. [C コード] タブで、[コード インターフェイス][既定のコード マッピング] をクリックします。このオプションにより、コード マッピング エディターがピン留めされます。

  4. ストレージ クラスをモデル データ要素のカテゴリにマッピングします。コード マッピング エディターで [データの既定の設定] タブを選択します。Inport カテゴリの場合、[ストレージ クラス][ExportedGlobal] に指定します。

あるいは、Inport の既定のマッピングを構成するために、MATLAB コマンド ウィンドウに次のように入力します。

roll_mapping = coder.mapping.api.get('RollAxisAutopilot');
setDataDefault(roll_mapping,'Inports','StorageClass','ExportedGlobal');

サブシステムの参照モデルへの変換

  1. サブシステムを参照モデルに変換するには、モデル参照変換アドバイザーを開きます。サブシステム HeadingMode を選択します。[Subsystem ブロック] タブで、[変換][Model ブロック] を選択します。

    モデル参照変換アドバイザーを使用すると、変換パラメーターを対話的に指定して、アドバイザーが検出する問題を修正できます。

    Model Reference Conversion Advisor window is open. New model name is autopopulated as HeadingMode.

  2. 自動入力されたモデル名を確認します。必要であれば、この名前を更新できます。

  3. 変換プロセスを速めるには、[自動的にエラーを修正 (可能な場合)] を選択します。このオプションにより、一部の変換の問題が修正されます。修正は制御できません。

  4. モデルに対して指定されたコード マッピングをコピーするには、[コード マッピングをコピー] オプションを選択します。このオプションにより、コード マッピングが親モデルから新しく変換された参照モデルに移行されます。既定の設定では、このオプションはオフです。このオプションは、ERT ベースのシステム ターゲット ファイルとサービス コード インターフェイスで構成されたモデルではサポートされません。

  5. [変換] をクリックします。

    モデル参照変換アドバイザーが各チェックをステップ実行します。アドバイザーによって報告される問題に対応します。モデル参照変換アドバイザーは、変換が正常に完了した後、Subsystem ブロックを新しいモデルを参照する Model ブロックと置き換えます。

あるいは、サブシステムを参照モデルに変換するために、MATLAB コマンド ウィンドウに次のように入力します。

Simulink.SubSystem.convertToModelReference(...
   'RollAxisAutopilot/HeadingMode', ...
   'HeadingMode', ...
   'AutoFix',true,...
   'ReplaceSubsystem',true,...
   'CopyCodeMappings',true);

サブシステムの変換後のコード マッピングのコピー

コード マッピングを親モデルから参照モデルにコピーする場合で、モデル参照変換アドバイザーで前もって [コード マッピングをコピー] オプションを選択しなかった場合、MATLAB コマンド ウィンドウに次のように入力します。

roll_mapping = coder.mapping.api.get('RollAxisAutopilot');
roll_sc = getDataDefault(roll_mapping,'Inports','StorageClass');

mode_mapping = coder.mapping.api.get('HeadingMode');
setDataDefault(mode_mapping,'Inports','StorageClass',roll_sc);

生成コードのレビュー

参照モデル HeadingMode を含むモデル RollAxisAutopilot について、[C コード] タブを開きます。モデル参照階層向けのコードを生成するには、[ビルド] をクリックします。

Simulink Coder™ ビルド プロセスによって、コードが生成され、コンパイルされます。現在のフォルダーに、次に示す新しいファイルと新しいフォルダーが作成されます。

フォルダーまたはファイル目的
RollAxisAutopilot_grt_rtw最上位モデルの生成コードを含むビルド フォルダー。
slprjgrtHeading Mode参照モデルの生成コードを含むビルド フォルダー。
RollAxisAutopilot.exeビルド プロセスによって作成された実行可能ファイル。
RollAxisAutopilot.slxc最上位モデルの Simulink キャッシュ ファイル。
HeadingMode.slxc参照モデルの Simulink キャッシュ ファイル。

関連するトピック