このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
コードの定義とマッピングに関する制限と考慮事項
制限
コード マッピングを使用して、ブロック パラメーターとして使用されている MATLAB® 変数を設定することはできません。モデル ワークスペースで変数を
Simulink.Parameter
オブジェクトに変換します。結果のデータ オブジェクトがモデル パラメーターとしてコード マッピング エディターに表示されます。コード マッピングを使用して構成できるのは、モデル内のブロックごとに 1 つの離散状態のみです。
コード マッピング エディター (または同等のプログラム インターフェイス) を使用している場合、組み込みの Simulink® ライブラリにリンクされたブロック内の状態に個別にアクセスしたり構成したりすることはできません。そのような状態からコードを生成する場合、コード ジェネレーターはモデル マッピングの
Data Defaults
セクションにあるSignals, states, and internal data
カテゴリに従います。モデルに調整可能な非有限パラメーターが含まれている場合 (たとえば、
inf
の値をもつ場合など)、コード ジェネレーターは指定された既定のパラメーター マッピングを適用しません。パラメーターが既定のパラメーター データ構造体rtP
のフィールドとして表示されます (リアルタイム モデル データ構造体を参照)。
既定のコード マッピングに関する制約
カテゴリ [External parameters] および [Global data stores] の既定のコード マッピングは、モデル参照階層全体のモデルで同じでなければなりません。
モデルの編集操作と個々のデータ要素のコード マッピング
コーダー アプリのコンテキストでモデルを編集している間、コピー、元に戻す、コード マッピングなど、Simulink モデルの編集ツール間の関係を認識する必要があります。コーダー アプリのコンテキストでは、モデル内でコピーと貼り付けまたは切り取りと貼り付けの編集操作を実行すると、コーダー アプリによって個々のデータ要素のコード マッピングが保持されます。たとえば、モデル内で、特定のストレージ クラスを使用して構成されている信号のソース ブロックをコピーして貼り付ける場合、貼り付けられた信号端子は同じストレージ クラスを保持します。
モデル データ要素に行った編集アクションに対して元に戻す操作およびやり直し操作を使用できますが、コード マッピングの設定中は使用できません。たとえば、State ブロックを削除してから [元に戻す] をクリックする場合、そのブロックはモデル キャンバスに再表示され、状態のコード構成がコード マッピングに再表示されます。コード マッピング エディターで、状態のストレージ クラス設定を Auto
から Model default
に変更してから [元に戻す] をクリックする場合、ストレージ クラスは Auto
に戻りません。この場合、変更は、モデルのデータ要素ではなくコード マッピングに関連しています。
ストレージ クラスと再呼び出し可能なマルチインスタンス モデルとコンポーネント
モデルまたはコンポーネント (参照モデルまたはサブシステム) から生成したコードは、実行中にアプリケーションでコンポーネントの複数の独立したインスタンスを維持できる場合、"マルチインスタンス コード" となります。たとえば、モデル コンフィギュレーション パラメーター [コード インターフェイスのパッケージ化] を [再利用可能な関数]
に設定して、モデル全体から再呼び出し可能なマルチインスタンス コードを生成できます。マルチインスタンス モデルとコンポーネントの詳細については、モデルのコンポジションと再利用を参照してください。
状況によっては、ストレージ クラスの適用により次のことが起こる可能性があります。
マルチインスタンス コードの生成ができなくなる。
一部のデータ要素が生成されたコードでシングルトンとして表示される。これにより、モデルまたはコンポーネントの各インスタンスが直接同一の共有グローバル データにアクセスし、インスタンス間での依存関係が作成される。
エラーや予期しない単一インスタンスのコードおよびシングルトン データの生成を回避するため、以下のガイドラインおよび制限を遵守してください。
直接適用されるストレージ クラス
ストレージ クラスをデータ要素に直接適用する場合、次についての考慮が必要です (C Data Code Interface Configuration for Model Interface Elementsを参照)。
マルチインスタンス コードを生成するには、ストレージ クラスを、パラメーター オブジェクト、グローバル データ ストア、共有ローカル データ ストア、ルートレベル I/O のみに適用しなければならない。
ストレージ クラスはシングルトン データのみを生成する。
既定で適用されるストレージ クラス
既定のストレージ クラスを適用する場合、次についての考慮が必要です (C Data Code Interface Configuration for Model Interface Elementsを参照)。
次のデータ カテゴリーについてはシングルトン データのみ生成できる。
Model parameters
External parameters
Global data stores
Shared local data stores
[内部データ] については、インスタンス固有のデータのみ生成できる。すなわち、モデルまたはコンポーネントの各インスタンスは個別のデータのコピーに対して動作する。これらのカテゴリについては、クイック スタート ツールを使用してコード生成用のモデルを準備すると表示される、組み込みストレージ クラス
SignalStruct
を使用しなければなりません。あるいは、Embedded Coder® ディクショナリを使用して、独自の構造体化されたストレージ クラスを作成して使用できます。
詳細については、再呼び出し可能なコードとはおよび生成されたコードでのデータ表示を制御するストレージ クラスの選択を参照してください。
サブシステムを参照モデルに変換するときにコード マッピングをコピー
サブシステムを参照モデルに変換するときに、コード マッピングをコピーできます。
モデル参照変換アドバイザーで、[コード マッピングをコピー] を選択します。
MATLAB コマンド ウィンドウで、
'CopyCodeMappings'
とtrue
で構成されるコンマ区切りのペアを指定して関数Simulink.SubSystem.convertToModelReference
を使用します。
参考
コード マッピング エディター – C | coder.mapping.api.CodeMapping