Main Content

Model ブロックで使用されるパラメーターおよび信号のストレージ クラス

参照モデルと最上位モデルとの間でデータを転送するには、信号とパラメーターを使用します。パラメーターを使用して、外部データをモデル参照階層に統合することもできます。あるモデルを他のモデル内に含め、モデル参照階層を作成するには、Model ブロックを使用します。

信号やパラメーターなどの、モデル内のデータ項目にストレージ クラスを適用して、次のことができます。

  • データ項目が生成コードでグローバル シンボル (通常はグローバル変数) として表示されるようにする。

  • [既定のパラメーター動作] および [信号ストレージの再利用] などの最適化が、生成されたコードでデータ項目を排除するのを防止する。

例については、C Data Code Interface Configuration for Model Interface Elementsを参照してください。

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

Model ブロックでのパラメーターのストレージ クラス

Model ブロックを含むモデルでは、パラメーターのストレージ クラスを使用して外部コードとインターフェイスできます。[Auto] を除いて、ストレージ クラスは調整可能です。サポートされるストレージ クラスには次のものがあります。

  • Simulink® Coder™ および Embedded Coder® で事前定義されたストレージ クラス

  • Embedded Coder ディクショナリを使用して作成された新規のストレージ クラス

Embedded Coder ストレージ クラスの制限事項については、ストレージ クラスの制限を参照してください。

参照モデルでのパラメーターの制限事項には次のものがあります。

  • 調整可能なパラメーターは、インラインでない S-Function ではサポートされません。

  • [モデル パラメーター設定] ダイアログ ボックスを使用して設定された調整可能なパラメーターは無視されます。

ターゲット用に生成されたコードでの、調整可能なグローバル パラメーターの宣言方法、定義方法、使用方法に関連して、次について検討してください。

  • 調整可能なグローバル パラメーターは、[Auto] 以外のストレージ クラスをもつベース ワークスペースのパラメーターです。

  • extern 宣言は特定のパラメーターを使用するモデル用に生成されます。

  • パラメーターがエクスポートされると、最上位モデルは、最上位モデルがそのパラメーターを使用するかどうかにかかわらず、パラメーターを定義 (メモリを割り当て) します。

  • グローバル パラメーターは、グローバル メモリとして直接アクセスされます。それらは参照モデル用に生成された関数に、引数として渡されません。

  • コード マッピング エディターでパラメーター データのカテゴリに対する既定のストレージ クラスを Default に設定している参照モデルでは、[Model default] パラメーター用の記号は、model_P 構造体に書き込まれるのではなく、構造体ではない変数 (rtP_xxx) を使用して生成されます。その後、それぞれの参照モデルを個別にコンパイルできます。

Model ブロックの引数として使用するパラメーターは、参照モデルのワークスペースで定義されなければなりません。詳細については、再利用可能な参照モデルのインスタンスのパラメーター化を参照してください。

Model ブロックでの信号のストレージ クラス

Model ブロックを含むモデルはストレージ クラス [Auto] の信号を使用することができます。

グローバル信号は [Auto] 以外のストレージ クラスをもつ信号です。サポートされるストレージ クラスには次のものがあります。

  • Simulink Coder および Embedded Coder で事前定義されたストレージ クラス

  • Embedded Coder ディクショナリを使用して作成された新規のストレージ クラス

Embedded Coder がある場合、[ストレージ タイプ][Unstructured] に設定された Embedded Coder ディクショナリで定義されたストレージ クラスを使用して、または [Unstructured] に設定された [ストレージ タイプ] をもつ Embedded Coder ディクショナリ内にストレージを作成することで、グローバル信号を作成できます。

これらの信号は、ストレージ クラス Model default を使用する個別の信号とは異なります。コード マッピング エディターで、対応するデータ カテゴリの既定のストレージ クラスを Default に設定すると、これらの信号は [Auto] ストレージ クラスをもつテスト ポイントとして取り扱われます。

信号をグローバルとして宣言する場合、その信号の扱い方に注意してください。グローバル信号は以下のように宣言し、定義し、使用します。

  • extern 宣言はグローバル信号を使用するモデル用に生成されます。

    その結果、信号が Model ブロック境界を通過すると、最上位モデルと参照モデル両方がその信号の extern 宣言を生成します。

  • エクスポートされた信号に対しては、最上位モデルがその信号を使用するかどうかにかかわらず、最上位モデルがその信号の定義 (メモリの割り当て) を行います。

  • 参照モデルが使用するグローバル信号は、グローバル メモリとして直接アクセスされます。それらは参照モデル用に生成された関数に、引数として渡されません。

Embedded Coder ディクショナリを使用して作成するストレージ クラスも、最上位モデルの前述のルールに従います。

メモ

参照モデルでは、Embedded Coder ディクショナリを使用して作成するストレージ クラスを、ルートレベルの Inport と Outport に使用することはできません。

特定のストレージ クラスにはモデル参照での使用のサポートに制限があります。ストレージ クラスの制限を参照してください。

モデル参照の境界間での信号名の不一致

親モデル内で Model ブロックに入出力される信号の名前とストレージ クラスが、その参照モデル内のルートの入力端子または出力端子に入出力する信号のものと一致しない場合があります。参照モデルは親モデルとは無関係に個別にコンパイルされるため、親モデルでの信号の名前と保存方法の違いを参照モデルに適合することはできません。

コード ジェネレーターは、参照モデルの入力信号と出力信号が [Auto] ストレージ クラスをもつ場合に受け入れます。そのような信号がテスト ポイントやグローバルの場合、特定の制約が適用されます。親モデルと参照モデルでの信号のラベルとストレージ クラスの不一致がどのように処理されるかを次の表で説明します。

参照モデルの境界間での信号とストレージ クラスの関係

参照モデルのストレージ クラス親モデルのストレージ クラス信号の引き渡し方法信号の不一致チェック
AutoAuto 以外関数の引数信号ラベルの不一致

Model default (コード マッピング エディターが [Default] ストレージ クラスを指定する場合) または信号オブジェクトに関連付けられる

Auto 以外関数の引数信号ラベルの不一致
Auto 以外Autoグローバル変数なし
Auto 以外Auto 以外グローバル変数ストレージ クラスの 1 つは [Auto] でなければならない (そうでない場合はエラー)

コード生成には次の信号関連付けルールが適用されます。

  • 参照モデルのルートの入力信号や出力信号のストレージ クラスが [Auto] または [Model default] (コード マッピング エディターで対応するデータ カテゴリのストレージ クラスを [Default] に設定している場合) の場合、信号は関数の引数として渡されます。そのような信号が Auto 以外であるか、親モデルで Simulink.Signal オブジェクトに関連付けられる場合、[信号ラベルの不一致] 診断が適用されます。

  • 参照モデルのルートの入力信号や出力信号がグローバルの場合、信号は直接メモリ アクセス (グローバル変数) を使用して伝達されます。親モデルの対応する信号は [Auto] でなければなりません。

  • 参照モデルでは、Embedded Coder ディクショナリを使用して作成するストレージ クラスは使用できません。

モデル コンフィギュレーション パラメーター [信号ラベルの不一致] 診断を [エラー][警告]、または [なし] に設定できます。

参考

関連するトピック