生成されたコードにおけるブロック パラメーターの調整可能性の制限
ブロック パラメーター、MATLAB® 変数または Simulink.Parameter
オブジェクトは、グローバル変数など、メモリ内に格納されているデータとして生成されたコードに表示される場合は調整可能です。たとえば、ストレージ クラス ExportedGlobal
をパラメーター オブジェクトに適用すると、パラメーター オブジェクトは生成されたコードに調整可能として表示されます。[既定のパラメーター動作] を [調整可能]
に設定すると、MATLAB 変数とパラメーター オブジェクトは生成されたコードに調整可能として表示されます。定義上、モデルの引数も調整可能として表示されます。
条件によっては、コード ジェネレーターはパラメーター、変数、オブジェクトまたは式の調整可能性を維持できません。この場合、コード ジェネレーターは数値をインライン化し、コードの実行中に値が変更されないようにします。
モデル内でこれらの条件を検出するには、モデル コンフィギュレーション パラメーターの [調整可能性の消失を検出] (調整可能性の消失を検出を参照) を [警告]
または [エラー]
に設定します。
調整可能な式の制限
ブロック パラメーター値を、Simulink.Parameter
オブジェクトまたはワークスペース変数を使用する式として指定できます。たとえば、式 5 * gainParam
を使用できます。式を使用してブロック パラメーター値を設定する一般的な情報については、数式、MATLAB 関数、カスタム関数の使用を参照してください。Simulink.Parameter
オブジェクト値の設定に使用する式に関する制限については、式の値を使用したパラメーター オブジェクトのコード生成を参照してください。
"調整可能なワークスペース変数" は、生成されたコードで調整可能として表示される Simulink.Parameter
オブジェクトまたはワークスペース変数です。たとえば、Auto
以外のストレージ クラスを適用するか、[既定のパラメーター動作] を [調整可能]
に設定する場合、オブジェクトまたは変数は調整可能です。
1 つ以上の調整可能なワークスペース変数、モデルの引数または調整可能なマスク パラメーターが含まれる式は、"調整可能な式" と呼ばれます。コード ジェネレーターがコード内に式を保持しようとするため、この式は調整可能です。コード ジェネレーターは式を保持するため、コード実行時にパラメーター データの値を変更できます。
コード ジェネレーターは、生成されたコード内で特定の式をインライン化された数値に簡約します。インライン化により、ワークスペース変数は式で調整不可能となります。式がサポートされていないために調整可能性が失われることを回避するには、以下のガイドラインに注意してください。
複素数 (
i
) のワークスペース変数またはパラメーター オブジェクトを伴う式はサポートされない。演算子および関数によっては、コード ジェネレーターが式を簡潔にするために調整可能性が削減される。演算子または関数によって調整可能性が失われるかどうかを特定するには、以下の表の情報を使用してください。
カテゴリ 演算子または関数 1
+ - .* ./ < > <= >= == ~= & |
2
* /
3
abs
,acos
,asin
,atan
,atan2
,boolean
,ceil
,cos
,cosh
,exp
,floor
,log
,log10
,sign
,sin
,sinh
,sqrt
,tan
,tanh
,single
,int8
,int16
,int32
,uint8
,uint16
,uint32
4
: .^ ^ [] {} \ .\ ' .' , ;
調整可能性の消失がないカテゴリ 1 の演算子を使用する。
少なくとも 1 つのオペランドがスカラー値である場合、カテゴリ 2 の演算子を式で使用する。たとえば、「スカラー/スカラー」と「スカラー/行列」オペランドの組み合わせはサポートされますが、「行列/行列」オペランドの組み合わせはサポートされません。
調整可能なワークスペース変数を引数としてカテゴリ 3 の関数に使用できる。その他の関数を使用すると、コード ジェネレーターは引数の調整可能性を削除します。
カテゴリ 4 の演算子はサポートされない。
Fcn ブロックと If ブロックは、コード生成または参照モデルで調整可能な式をサポートしない。
変数を作成および変更するマスク初期化コードを作成できる。こうした変数を式で使用する場合、生成コードでその式は調整できません。この制限は、マスク初期化コードを含む Simulink® ライブラリ ブロックにも適用されます。たとえば、Bitwise ブロック、Bit Set ブロック、および Bit Clear ブロックのビット演算を指定するブロック パラメーターは、ブロックのマスク初期化コードで使用されるため調整できません。
式を構成する
Simulink.Parameter
オブジェクトまたはワークスペース変数のデータ型を指定できます。これらの変数およびオブジェクトのデータ型と、対応するブロック パラメーターのデータ型が同じまたはdouble
である場合、コード ジェネレーターは調整可能性を維持できます。空の要素をもつバスおよび構造体の型では、生成されたコード内の調整可能な式はサポートされていません。回避策として、空の要素の値を表すために
-1
を使用するといった代替規則を使用できます。
コード ジェネレーターが、整数データ型の少なくとも 1 つの要素を含むパラメーター式の調整可能性を維持する場合、生成されたコードのシミュレーションおよび実行により数値的に一致しない結果が生成されます。生成されたコードでの式の評価により、シミュレーション中に式が飽和する間にオーバーフローが発生します。詳細については、モデルと生成されたコードのシミュレーション結果における数値の整合性を参照してください。
線形ブロック パラメーターの調整可能性
以下のブロックは、数値パラメーターの調整可能性に影響する Realization
パラメーターをもっています。
Transfer Fcn
State-Space
Discrete State-Space
Realization
パラメーターを設定するには、以下のコマンド プロンプトを使用しなければなりません。
set_param(gcb,'Realization','auto')
Realization
パラメーターの場合、以下のオプションを選択できます。
general
:ブロックの数値パラメーターは生成されたコードに調整可能として表示される。sparse
:生成されたコードはブロックのパラメーターを効率を上げる変換値として表す。パラメーターは調整不可能です。[Auto]
:既定値。1 つ以上のブロックのパラメーターが調整可能な場合 (たとえば、調整可能なパラメーター オブジェクトを使用してパラメーター値を設定するため)、ブロックはgeneral
の実現を使用します。それ以外の場合、ブロックはsparse
の実現を使用します。エクスターナル モード シミュレーション中にこれらのブロックのいずれかのパラメーター値を調整するには、ブロックは
general
の実現を使用しなければなりません。
パラメーター構造体
生成されたコードにおける構造体へのデータの整理で説明するように、パラメーター データの構造体を生成されたコードに作成できます。
パラメーター構造体が調整可能の場合、構造体の数値フィールドは、生成されたコードで調整可能です。ただし、多次元配列などの調整可能なエントリのないフィールドの場合は、構造体のフィールドは調整可能ではありません。
パラメーター構造体内の個々のサブ構造体またはフィールドを調整可能として宣言できません。
Simulink.Parameter
オブジェクトを構造体フィールドの値として使用することはできません。代わりに、構造体全体をパラメーター オブジェクトに格納しなければなりません。