パラメーターの関数
LibBlockMatrixParameter
LibBlockMatrixParameter(param, rucv, rlcv, ridx, cucv, clcv, cidx)
は、与えられた行と列のユーザー制御変数 (rucv
、cucv
)、ループ制御変数 (rlcv
、clcv
)、およびインデックス (ridx
、cidx
) に基づいて、ブロックの行列パラメーターを返します。一般に、ブロックでは LibBlockParameter
を使用する必要があります。行列パラメーターがある場合は、それを列優先のベクトルとして記述し、LibBlockParameter
を介してアクセスする必要があります。
メモ:
現在はループ ローリングはサポートされておらず、要求された場合 (つまり、rlcv
または clcv
が ""
と等しくない場合) はエラーが生成されます。
行と列のインデックス引数は LibBlockParameter
の引数に似ています。列のインデックス (cidx
) は複素数を処理するためにオーバーロードされます。
paramlib.tlc
の LibBlockMatrixParameter
を参照してください。
LibBlockMatrixParameterAddr
LibBlockMatrixParameterAddr(param, rucv, rlcv, ridx, cucv, clcv, cidx)
は、行列パラメーターのアドレスを返します。
メモ:
LibBlockMatrixParameterAddr
は、行列パラメーターのアドレスを返します。ループ ローリングはサポートされていません (つまり、rlcv
と clcv
はどちらも空の文字列でなければなりません)。
paramlib.tlc
の LibBlockMatrixParameterAddr
を参照してください。
LibBlockMatrixParameterBaseAddr
LibBlockMatrixParameterBaseAddr(param)
は、行列パラメーターのベース アドレスを返します。
paramlib.tlc
の LibBlockMatrixParameterBaseAddr
を参照してください。
LibBlockParamSetting
LibBlockParamSetting(bType, psType)
は、指定されたブロック タイプの指定されたパラメーター設定の文字列を返します。この関数に空のブロック タイプを渡すと、ブロックの ParamSettings
レコードにあるパラメーター設定であると仮定されます。関数に空でないブロック タイプを渡すと、そのブロックの %<Btype>ParamSettings
レコードにあるパラメーター設定であると仮定されます。
paramlib.tlc
の LibBlockParamSetting
を参照してください。
LibBlockParameter
LibBlockParameter(param, ucv, lcv, sigIdx)
は、パラメーターの参照 (param
)、ユーザー制御変数 (ucv
)、ループ制御変数 (lcv
)、信号インデックス (sigIdx
)、およびパラメーターのインライン化の状態に基づいて、ブロック パラメーターの参照を返します。戻り値は有効な rvalue
(式の右辺の値) です。次に例を示します。
ケース | 関数呼び出し | 生成 |
---|---|---|
1 | LibBlockParameter(Gain, "i", lcv, sigIdx) | rtP.blockname[i] |
2 | LibBlockParameter(Gain, "i", lcv, sigIdx) | rtP.blockname |
3 | LibBlockParameter(Gain, "", lcv, sigIdx) | p_Gain[i] |
4 | LibBlockParameter(Gain, "", lcv, sigIdx) | p_Gain |
5 | LibBlockParameter(Gain, "", lcv, sigIdx) | 4.55 |
6 | LibBlockParameter(Gain, "", lcv, sigIdx) | rtP.blockname.re |
7 | LibBlockParameter(Gain, "", lcv, sigIdx) | rtP.blockname.im |
LibBlockParameter
の基本的な動作を示すために、Gain[0]=4.55
である非複素数のベクトル信号と仮定します。
LibBlockParameter(Gain, "", "i", 0)
ケース | ロール | パラメーターのインライン化 | タイプ | 結果 | メモリに必要 |
---|---|---|---|---|---|
1 | 0 | あり | スカラー | 4.55 | なし |
2 | 1 | あり | スカラー | 4.55 | なし |
3 | 0 | あり | ベクトル | 4.55 | なし |
4 | 1 | あり | ベクトル | p_Gain[i] | あり |
5 | 0 | なし | スカラー | rtP.blk.Gain | なし |
6 | 0 | なし | スカラー | rtP.blk.Gain | なし |
7 | 0 | なし | ベクトル | rtP.blk.prm[0] | なし |
8 | 0 | なし | ベクトル | p.Gain[i] | あり |
ケース 4 に注目してください。「パラメーターのインライン化」が「あり」ですが、for
ループの内部でアクセスされるため、パラメーターをメモリ (RAM) に配置しなければなりません。
メモ:
LibBlockParameter
をインライン パラメーターやパラメーターの調整で使用する場合は式もサポートされます。
たとえば、パラメーター フィールドが MATLAB® 式 '2*a'
だった場合、LibBlockParameter
は C 式 '(2*a)'
を返します。LibBlockParameter
でサポートされる関数のリストは、関数 FcnConvertNodeToExpr
および FcnConvertIdToFcn
で決まります。機能を強化するには、それらのいずれかの関数を拡張または更新してください。
x*y
で x
と y
の "両方" が非スカラー式である場合など、特定のタイプの式はサポートされないことに注意してください。
サポートされる正確な関数と構文の詳細については、調整可能なパラメーターに関するドキュメンテーションを参照してください。
警告
パラメーターのアドレスにアクセスする目的では LibBlockParameter
を使用しないでください。パラメーターがインライン化されている場合に、数値が誤って参照 (&4.55
) される可能性があります。この状況は LibBlockParameterAddr
を使用すれば回避できます。
paramlib.tlc
の LibBlockParameter
を参照してください。
LibBlockParameterAddr
LibBlockParameterAddr(param, ucv, lcv, idx)
は、ブロック パラメーターのアドレスを返します。
グローバル変数 InlineParams
が 1 と等しい場合に LibBlockParameterAddr
を使用してパラメーターにアクセスすると、変数がインライン化されずに RAM で const
と宣言されます。
調整可能なロールされた変数が式に複数ある場合、式のアドレスにアクセスするとエラーになります。
paramlib.tlc
の LibBlockParameterAddr
を参照してください。
LibBlockParameterBaseAddr
LibBlockParameterBaseAddr(param)
は、ブロック パラメーターのベース アドレスを返します。
グローバル変数 InlineParams
が 1 と等しい場合に LibBlockParameterBaseAddr
を使用してパラメーターにアクセスすると、変数がインライン化されずに RAM で const
と宣言されます。
調整可能なロールされた変数が式に複数ある場合、式のアドレスにアクセスするとエラーになります。
paramlib.tlc
の LibBlockParameterBaseAddr
を参照してください。
LibBlockParameterDataTypeId
LibBlockParameterDataTypeId(param)
は、指定されたブロック パラメーターのデータ型に対応する数値 ID を返します。
paramlib.tlc
の LibBlockParameterDataTypeId
を参照してください。
LibBlockParameterDataTypeName
LibBlockParameterDataTypeName(param, reim)
は、指定されたブロック パラメーターに対応するデータ型の名前を返します。
paramlib.tlc
の LibBlockParameterDataTypeName
を参照してください。
LibBlockParameterDimensions
LibBlockParameterDimensions(param)
は、パラメーター データの次元を指定する長さ N
(N >= 1
) の行ベクトルを返します。
次に例を示します。
%assign dims = LibBlockParameterDimensions("paramName") %assign nDims = SIZE(dims,1) %foreach i=nDims /* Dimension %<i+1> = %<dims[i]> */ %endforeach
LibBlockParameterDimensions
は、LibBlockParameterSize
とは異なり、Matrix
パラメーターを列優先のベクトルに変換する前のパラメーター データの次元を返します。変換は outputAsMatrix
フィールドが False
と指定された実行時パラメーターについて実行されます。
paramlib.tlc
の LibBlockParameterDimensions
を参照してください。
LibBlockParameterIsComplex
LibBlockParameterIsComplex(param)
は、指定されたブロック パラメーターが複素数である場合に 1 を返します。それ以外の場合は 0 を返します。
paramlib.tlc
の LibBlockParameterIsComplex
を参照してください。
LibBlockParameterSize
LibBlockParameterSize(param)
は、[nRows, nCols]
の形式のサイズ 2 のベクトルを返します。ここで、nRows
は行数、nCols
は列数です。
paramlib.tlc
の LibBlockParameterSize
を参照してください。
LibBlockParameterString
LibBlockParameterString(param)
は、ブロック パラメーターの参照 (param
) に基づいて、指定されたブロック パラメーターの解釈された文字列を返します。たとえば、この関数は以下を返します。
パラメーターが行の行列の場合は
STRINGOF(param.Value[0])
それ以外の場合は
STRINGOF(param.Value)
メモ
この関数を複数の行をもつ行列値のパラメーターで呼び出すとエラーになります。
LibBlockParameterValue
または LibBlockParameterString
を使用してパラメーター値にアクセスするだけの場合は、パラメーターを調整可能から調整不可能に変換することを検討してください。その後、ssWriteRTWParamSettingsを使用して、パラメーターの値を
ファイルに書き込みます。パラメーターをインライン化すると、コード ジェネレーターによって生成されるコードでパラメーターのシンボリック名ではなく数値が使用されるため、RAM の使用量が少なくなります。model
.rtw
paramlib.tlc
の LibBlockParameterString
を参照してください。
LibBlockParameterValue
LibBlockParameterValue(param, elIdx)
は、ブロック パラメーターの参照 (param
) と配列のインデックス要素 (elidx
) に基づいて、パラメーターの数値を返します。関数 LibBlockParameterWidth(param)
を使用して配列の幅を取得してから、elidx
(有効な値は 0
~ width-1
) を使用して配列の特定の要素を取得できます。
LibBlockParameterValue
または LibBlockParameterString
を使用してパラメーター値にアクセスするだけの場合は、パラメーターを調整可能から調整不可能に変換することを検討してください。その後、ssWriteRTWParamSettingsを使用して、パラメーターの値を
ファイルに書き込みます。パラメーターをインライン化すると、コード ジェネレーターによって生成されるコードでパラメーターのシンボリック名ではなく数値が使用されるため、RAM の使用量が少なくなります。model
.rtw
例
ブロックのパラメーターに応じて異なる積分器のコードを生成する場合は次を使用します。
%assign mode = LibBlockParameterValue(Integrator, 0) %switch (mode) %case 1 %<CodeForIntegrator1> %break %case 2 %<CodeForIntegrator2> %break %default Error: Unrecognized integrator value. %break %endswitch
paramlib.tlc
の LibBlockParameterValue
を参照してください。
LibBlockParameterWidth
LibBlockParameterWidth(param)
は、パラメーターの要素数 (幅) を返します。
の paramlib.tlc
LibBlockParameterWidth
を参照してください。
LibGetParameterValue
LibGetParameterValue
は、model.rtw
の ModelParameters
レコードに記述されているモデル パラメーターのデータ ベクトルを返します。たとえば、次のようなことができます。
%assign numRowValues = SIZE(LibGetParameterValue(RowIndex), 1)
record.Value
を返します。record.Value
を取得する代わりに、関数 LibGetParameterValue
を使用してモデル パラメーターのデータ ベクトルにアクセスします。関数 LibGetParameterValue
から返されるモデル パラメーターのデータ ベクトルが数値スカラーであり、数値式に対してエラーになる場合は、[0]
を付加します。たとえば、次の場合について考えます。
%assign sum = LibGetParameterValue(RowIndex) + 10
“The + operator only works on numeric arguments”
%assign sum = LibGetParameterValue(RowIndex)[0] + 10
の paramlib.tlc
LibGetParameterValue
を参照してください。