Main Content

パラメーターの関数

LibBlockMatrixParameter

LibBlockMatrixParameter(param, rucv, rlcv, ridx, cucv, clcv, cidx) は、与えられた行と列のユーザー制御変数 (rucvcucv)、ループ制御変数 (rlcvclcv)、およびインデックス (ridxcidx) に基づいて、ブロックの行列パラメーターを返します。一般に、ブロックでは LibBlockParameter を使用する必要があります。行列パラメーターがある場合は、それを列優先のベクトルとして記述し、LibBlockParameter を介してアクセスする必要があります。

メモ:

現在はループ ローリングはサポートされておらず、要求された場合 (つまり、rlcv または clcv"" と等しくない場合) はエラーが生成されます。

行と列のインデックス引数は LibBlockParameter の引数に似ています。列のインデックス (cidx) は複素数を処理するためにオーバーロードされます。

paramlib.tlcLibBlockMatrixParameter を参照してください。

LibBlockMatrixParameterAddr

LibBlockMatrixParameterAddr(param, rucv, rlcv, ridx, cucv, clcv, cidx) は、行列パラメーターのアドレスを返します。

メモ:

LibBlockMatrixParameterAddr は、行列パラメーターのアドレスを返します。ループ ローリングはサポートされていません (つまり、rlcvclcv はどちらも空の文字列でなければなりません)。

paramlib.tlcLibBlockMatrixParameterAddr を参照してください。

LibBlockMatrixParameterBaseAddr

LibBlockMatrixParameterBaseAddr(param) は、行列パラメーターのベース アドレスを返します。

paramlib.tlcLibBlockMatrixParameterBaseAddr を参照してください。

LibBlockParamSetting

LibBlockParamSetting(bType, psType) は、指定されたブロック タイプの指定されたパラメーター設定の文字列を返します。この関数に空のブロック タイプを渡すと、ブロックの ParamSettings レコードにあるパラメーター設定であると仮定されます。関数に空でないブロック タイプを渡すと、そのブロックの %<Btype>ParamSettings レコードにあるパラメーター設定であると仮定されます。

paramlib.tlcLibBlockParamSetting を参照してください。

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*yxy"両方" が非スカラー式である場合など、特定のタイプの式はサポートされないことに注意してください。

サポートされる正確な関数と構文の詳細については、調整可能なパラメーターに関するドキュメンテーションを参照してください。

警告

パラメーターのアドレスにアクセスする目的では LibBlockParameter を使用しないでください。パラメーターがインライン化されている場合に、数値が誤って参照 (&4.55) される可能性があります。この状況は LibBlockParameterAddr を使用すれば回避できます。

paramlib.tlcLibBlockParameter を参照してください。

LibBlockParameterAddr

LibBlockParameterAddr(param, ucv, lcv, idx) は、ブロック パラメーターのアドレスを返します。

グローバル変数 InlineParams が 1 と等しい場合に LibBlockParameterAddr を使用してパラメーターにアクセスすると、変数がインライン化されずに RAM で const と宣言されます。

調整可能なロールされた変数が式に複数ある場合、式のアドレスにアクセスするとエラーになります。

paramlib.tlcLibBlockParameterAddr を参照してください。

LibBlockParameterBaseAddr

LibBlockParameterBaseAddr(param) は、ブロック パラメーターのベース アドレスを返します。

グローバル変数 InlineParams が 1 と等しい場合に LibBlockParameterBaseAddr を使用してパラメーターにアクセスすると、変数がインライン化されずに RAM で const と宣言されます。

調整可能なロールされた変数が式に複数ある場合、式のアドレスにアクセスするとエラーになります。

paramlib.tlcLibBlockParameterBaseAddr を参照してください。

LibBlockParameterDataTypeId

LibBlockParameterDataTypeId(param) は、指定されたブロック パラメーターのデータ型に対応する数値 ID を返します。

paramlib.tlcLibBlockParameterDataTypeId を参照してください。

LibBlockParameterDataTypeName

LibBlockParameterDataTypeName(param, reim) は、指定されたブロック パラメーターに対応するデータ型の名前を返します。

paramlib.tlcLibBlockParameterDataTypeName を参照してください。

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.tlcLibBlockParameterDimensions を参照してください。

LibBlockParameterIsComplex

LibBlockParameterIsComplex(param) は、指定されたブロック パラメーターが複素数である場合に 1 を返します。それ以外の場合は 0 を返します。

paramlib.tlcLibBlockParameterIsComplex を参照してください。

LibBlockParameterSize

LibBlockParameterSize(param) は、[nRows, nCols] の形式のサイズ 2 のベクトルを返します。ここで、nRows は行数、nCols は列数です。

paramlib.tlcLibBlockParameterSize を参照してください。

LibBlockParameterString

LibBlockParameterString(param) は、ブロック パラメーターの参照 (param) に基づいて、指定されたブロック パラメーターの解釈された文字列を返します。たとえば、この関数は以下を返します。

  • パラメーターが行の行列の場合は STRINGOF(param.Value[0])

  • それ以外の場合は STRINGOF(param.Value)

メモ

この関数を複数の行をもつ行列値のパラメーターで呼び出すとエラーになります。

LibBlockParameterValue または LibBlockParameterString を使用してパラメーター値にアクセスするだけの場合は、パラメーターを調整可能から調整不可能に変換することを検討してください。その後、ssWriteRTWParamSettingsを使用して、パラメーターの値を model.rtw ファイルに書き込みます。パラメーターをインライン化すると、コード ジェネレーターによって生成されるコードでパラメーターのシンボリック名ではなく数値が使用されるため、RAM の使用量が少なくなります。

paramlib.tlcLibBlockParameterString を参照してください。

LibBlockParameterValue

LibBlockParameterValue(param, elIdx) は、ブロック パラメーターの参照 (param) と配列のインデックス要素 (elidx) に基づいて、パラメーターの数値を返します。関数 LibBlockParameterWidth(param) を使用して配列の幅を取得してから、elidx (有効な値は 0width-1) を使用して配列の特定の要素を取得できます。

LibBlockParameterValue または LibBlockParameterString を使用してパラメーター値にアクセスするだけの場合は、パラメーターを調整可能から調整不可能に変換することを検討してください。その後、ssWriteRTWParamSettingsを使用して、パラメーターの値を model.rtw ファイルに書き込みます。パラメーターをインライン化すると、コード ジェネレーターによって生成されるコードでパラメーターのシンボリック名ではなく数値が使用されるため、RAM の使用量が少なくなります。

ブロックのパラメーターに応じて異なる積分器のコードを生成する場合は次を使用します。

%assign mode = LibBlockParameterValue(Integrator, 0)
%switch (mode)
   %case 1
      %<CodeForIntegrator1>
      %break
   %case 2
      %<CodeForIntegrator2>
      %break
   %default
      Error: Unrecognized integrator value.
      %break
%endswitch

paramlib.tlcLibBlockParameterValue を参照してください。

LibBlockParameterWidth

LibBlockParameterWidth(param) は、パラメーターの要素数 (幅) を返します。

paramlib.tlcLibBlockParameterWidth を参照してください。

LibGetParameterValue

LibGetParameterValue は、model.rtwModelParameters レコードに記述されているモデル パラメーターのデータ ベクトルを返します。たとえば、次のようなことができます。

%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.tlcLibGetParameterValue を参照してください。

関連するトピック