Main Content

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

モデル インターフェイス要素の C コード生成の構成

コード ジェネレーターには、生成されたコードのデータの表現と、Embedded Coder® を使用している場合はエントリポイント関数の表現を制御するツールがあります。たとえば、コードの標準とガイドラインに準拠するようにコード生成のデータと関数を構成したり、生成されたコードを外部コードと統合したり、またはメモリ要件に対応したりできます。

コード ジェネレーターは、次のモデル データ要素と関数のコードを生成します。

  • アプリケーション コードの読み込み元および書き込み先となる入力端子、信号、状態、パラメーターなどのデータ。

  • モデル アルゴリズムを実行するためにアプリケーション コードによって呼び出される、model_step などのエントリポイント関数。

コード マッピング エディター – C またはコード マッピング プログラミング インターフェイス (coder.mapping.api.CodeMapping) を使用してコード生成用にモデル データ要素および関数を構成できます。関数を構成するには Embedded Coder が必要です。データ要素の場合、Simulink データ オブジェクトを作成および構成する代わりに、またはそれに加えて、コード マッピング エディターまたはコード マッピング API を使用します。エディターと API を使用して以下を構成できます。

  • データ要素のカテゴリに対してモデル全体に適用する既定のコード生成設定

  • 個々のデータ要素に適用するコンフィギュレーション設定

以下の図は、全体的なワークフローを示しています。

Iterative flow diagram that shows steps of configuring default mappings, overriding default mappings for individual model elements, and creating code definitions for model elements.

移行

R2020b より前のリリースで作成されたモデルを開くと、Simulink® ではモデルで指定されたコード定義がモデル コード マッピングに移行されます。

必要に応じて、移行中に、モデルが使用する Embedded Coder ディクショナリが構成されます。モデルを保存すると、コード マッピングがモデルの一部として保存されます。

移行の影響および移行前の考慮事項など、詳細については、モデル データ構成のコード マッピングへの移行を参照してください。

コード定義

コード定義には、ストレージ クラスが含まれます。ストレージ クラスでは、コード ジェネレーターが関連付けられたデータのコードを生成するときに使用する外観や場所などのプロパティを定義します。

メモリ セクションは、メモリにおけるデータおよび関数定義の配置を制御します。場合によっては、データ要素と関数を構成するときに必要な特定のメモリ セクションを選択できます。

コード ジェネレーターは、データ要素の事前定義されたコード定義を提供します。Embedded Coder がある場合は、Embedded Coder ディクショナリを使用してコード定義を作成および共有し、たとえば、複数のモデルから生成するコードを標準化したり、異なるアプリケーションのランタイム環境の定義を作成したりすることができます。カスタム定義を作成すると、事前定義では満たすことができないコード生成の目的を実現できます。データ要素の場合は、Embedded Coder カスタム ストレージ クラス デザイナーを使用して、パッケージで作成されたコード定義を作成するオプションもあります。

Embedded Coder ディクショナリを使用して作成したコード定義は、コード マッピング エディター – C に表示され、コード マッピング API を使用してアクセスできます。カスタム ストレージ クラス デザイナーを使用して作成した一部の定義では、それらの定義を参照するように Embedded Coder ディクショナリを構成することで、コード マッピング エディターに定義を表示することができます。

既定では、モデルに対して Embedded Coder ディクショナリを使用して作成したコード定義がモデル ファイルに保存されます。Simulink® データ ディクショナリに定義を保存して、モデルとプロジェクト間でコード定義を共有できます。データ ディクショナリを使用して、共有定義を変更するには、定義を 1 つの場所 (Embedded Coder ディクショナリ) で変更します。

詳細については、Define Service Interfaces, Storage Classes, Memory Sections, and Function Templates for Software Architecture (Embedded Coder)およびカスタム ストレージ クラス デザイナーを使用したストレージ クラスの作成 (Embedded Coder)を参照してください。

データの既定の構成

モデル全体で、入力端子またはモデル ワークスペース パラメーターなど、データ要素のカテゴリの既定の構成を指定して、C コード生成用にモデルを準備する手間を省きます。既定の構成を適用すると、大きいモデルや、マルチインスタンス コードの生成に使用するモデルの場合は特に、時間が節約でき、コードのエラーの発生リスクを抑えることができます。

既定の構成は、参照モデルを除き、モデル全体に適用されます。Simulink では、モデル参照階層内に各モデルの一部としてコード マッピングの個別のセットが保存されます。

モデルに特定のカテゴリの多数の要素 (10 を超えるなど) が含まれる場合、既定の設定を使用してカテゴリを構成してから、特殊なケースでその設定をオーバーライドすると効率が上がります。

既定の設定を使用することで、手動のデータ入力を削減できます。

  • ブロックおよび信号をモデルに追加するときに、新しいデータ要素が既定の設定を継承します。

  • 多くのデータ要素のコード生成設定を一度に変更するには、変更を 1 か所で実行します (既定の設定)。

  • 効率化のために、モデルの他の場所で変更を行うときは命名規則を使用します。

データの既定の設定を構成するには、コード マッピング エディター – C[データの既定の設定] タブまたは関数 setDataDefault を使用します。

モデル データのカテゴリ

データの既定の設定を構成するには、コード マッピング エディター – C[データの既定の設定] タブまたは関数 setDataDefault を使用します。[Data Defaults] タブまたは関数の呼び出しで、以下のデータ要素のカテゴリを選択または指定できます。

モデル要素のカテゴリ説明
InportsInport ブロックや In Bus Element ブロックなど、モデルのルートレベルの入力端子。
OutportsOutport ブロックや Out Bus Element ブロックなど、モデルのルートレベルの出力端子。
Signals, states, and internal dataブロックの出力信号、ブロックの離散状態、データ ストア、ゼロクロッシング信号など、モデル内部のデータ要素。
Shared local data storesブロック パラメーター [モデル インスタンス間で共有する] が設定されている Data Store Memory ブロック。これらのデータ ストアは、それらが定義されているモデルでのみアクセスできます。データ ストア値は、モデルのインスタンス間で共有されます。
Global data storesベース ワークスペースまたはデータ ディクショナリの信号オブジェクトで定義されるデータ ストア。アプリケーション内の複数のモデルがこれらのデータ ストアを使用できます。コード マッピング エディターでこれらのデータ ストアを表示および構成するには、カテゴリ名の右側にある [Refresh] リンクをクリックします。このリンクをクリックすると、モデル線図が更新されます。
Model parametersモデル ワークスペース内のパラメーターなど、モデル内で定義されるパラメーター。モデルの引数は除きます。
External parametersベース ワークスペースまたはデータ ディクショナリ内でオブジェクトとして定義するパラメーター。アプリケーションの複数のモデルがこれらのパラメーターを使用できます。コード マッピング エディターでこれらのパラメーターを表示および構成するには、カテゴリ名の右側にある [Refresh] リンクをクリックします。このリンクをクリックすると、モデル線図が更新されます。

データに対する既定のコード生成の設定を構成する際の考慮事項

データ要素に対して既定のコード生成設定を構成する前に、以下の表の考慮事項を検討してください。

考慮事項詳細
モデルに関連のあるカテゴリ前の表のデータ要素カテゴリ
モデルはカテゴリ内にあるデータの複数のインスタンスを使用しますか。使用する場合は、既定のマッピングを適用すると役に立ちます。使用しない場合は、各データ要素のコード生成を個別に構成することを検討してください。
各カテゴリのコード生成要件と一致するのはどのストレージ クラスですか。 生成されたコードでのデータ表示を制御するストレージ クラスの選択
最適化によってコードから特定のデータが除外されないようにしますか。 最適化によるデータのカテゴリの消去

モデル要素の 1 つ以上のカテゴリを構成した後に、メモリ セクションと [共有ユーティリティ識別子の形式] モデル コンフィギュレーション パラメーターを設定しても、モデル コンフィギュレーションには影響しません。Coder アプリを開くと、Simulink では、モデル コンフィギュレーション パラメーターの設定がコード マッピング エディターに移行されます。Migration of Memory Section and Shared Utility Settings from Configuration Parameters to Code Mappings (Embedded Coder)で説明されているように、移行中に、モデルが使用する Embedded Coder ディクショナリが構成されます。

最適化によるデータのカテゴリの消去

コード生成の最適化によって、コードからデータが消去されることがあります、つまり、アプリケーション コードでデータを操作できなくなります。最適化によるデータ消去の一般的な情報については、生成されたコードによる内部信号、状態、パラメーター データの保存方法 (Embedded Coder)を参照してください。

最適化によってデータが消去されるのは、次のカテゴリだけです。

  • Model parameters

  • Model parameter arguments

  • External parameters

  • Internal data

最適化によりデータを消去した後、コード ジェネレーターは、コード マッピングの既定のコード生成設定を残りのデータに適用します。パラメーターと信号線の場合、最適化によりカテゴリ全体のデータが消去される可能性があります。この消去が実行されると、そのカテゴリに指定した既定の設定はデータに適用されません。

最適化による個々のデータ要素の消去を回避するには、ストレージ クラスを個々の要素に明示的に適用します。ストレージ クラスは、生成されたコード内のデータの外観を制御します。データ要素に指定した既定のストレージ クラスを使用させるには、ストレージ クラスの [Model default] を明示的に適用します。生成されたコードでのデータ表示を制御するストレージ クラスの選択を参照してください。

共有ディクショナリのデータの既定値

データのカテゴリに対して既定のコード定義を設定するコーダー ディクショナリが含まれる Simulink データ ディクショナリにモデルをリンクする場合、コード マッピング エディターを使用してディクショナリの既定の設定を適用できます。コード マッピング エディターの [Data Defaults] タブで、カテゴリを選択し、ストレージ クラスを [Dictionary Default] に設定します。誰かが共有されたコーダー ディクショナリで既定の設定を変更すると、コード ジェネレーターでモデルのコードが生成されるときに更新された既定値が適用されます。Configure Default Code Mapping in a Shared Dictionary (Embedded Coder)を参照してください。

個々のデータ要素の構成

モデル全体の既定の設定を構成した後に、個々のデータ要素の既定値をオーバーライドできます。個々のデータ要素の構成は、モデル内の特定のデータ要素に適用されます。データ要素を個別に構成するのは、以下の場合です。

  • モデルに、一意のソース、名前付け、または配置の要件を持つ特定のカテゴリの要素がいくつか含まれている。

  • 既定の設定を構成済みで、個々の要素の既定の設定をオーバーライドする必要がある。

個々のデータ要素では、最初にストレージ クラスが [Auto] に設定されています。つまり、コード ジェネレーターは最適化の目的で関連コードの表示を消去または変更する可能性があります。最適化が不可能な場合、コード ジェネレーターはモデルの既定の構成を適用します。

  • 最適化を回避し、コード ジェネレーターで既定の構成が強制的に使われるようにするには、ストレージ クラスを [Model default] に設定します。

  • 既定の構成をオーバーライドするには、そのデータ要素のコード生成に関する要件を満たすストレージ クラスを指定します。

モデル内のデータ要素に名前がない場合 (たとえば、信号にラベルがない、状態に名前がないなど)、C コード生成用に設定するときに、そのデータ要素のコード識別子を指定しなければなりません。ストレージ クラス プロパティ [Identifier] の値を指定することで、コード識別子を設定します。

データの構成

  1. Simulink Coder™ アプリを開きます。

  2. データ要素のカテゴリに対する既定のマッピングを構成します。[コード インターフェイス][既定のコード マッピング] を選択します。コード マッピング エディターの [Data Defaults] タブで、モデル要素のカテゴリを選択し、ストレージ クラスを設定します。プロパティ インスペクターで、モデル要件に合わせてストレージ クラスのプロパティを設定します。

  3. 個々のデータ要素の既定の構成設定をオーバーライドするかどうかを決定します。設定をオーバーライドしない場合は、手順 8 に進みます。

  4. 個別に構成する MATLAB 変数を特定し、モデル ファイルにコンフィギュレーションを保存します。モデル エクスプローラーで、変数を Simulink.Parameter オブジェクトに変換します。結果のデータ オブジェクトがモデル パラメーターとしてコード マッピング エディターに表示されます。

  5. 生成コードの実行中に監視するアルゴリズム データを表す信号を特定し、それらの信号を個別に構成します。特定した信号ごとに、次のいずれかを実行します。

    • モデルに固有の (共有されていない) 信号データの場合は、信号をコード マッピング エディターに追加する。

    • 共有されている信号データの場合は、Simulink.Signal オブジェクトを作成し、構成する。

  6. 個々のデータ要素を構成します。コード マッピング エディターで、カテゴリ タブをクリックし、データ要素を選択して、ストレージ クラスを設定します。プロパティ インスペクターで、ストレージ クラスのプロパティ値を設定します。モデル コンフィギュレーション パラメーター [既定のパラメーター動作] の設定を変更するには、ストレージ クラスが [Auto] に設定されている場合の動作を示すリンクをクリックします。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、パラメーターの設定を [調整可能] または [インライン] に変更します。

    特定のタイプのデータ要素の構成については、以下を参照してください。

  7. ベース ワークスペースまたはデータ ディクショナリ内に保存されている外部データ オブジェクトを表示および構成するには、コード マッピング エディターの [Data Defaults] タブで、カテゴリ名の右にある [Refresh] リンクをクリックします。

  8. コードの生成とレビュー

詳細と例については、以下を参照してください。

参考

|

関連するトピック