Main Content

Target Language Compiler 関数の規則

これらの関数の使用例は matlabroot/toolbox/simulink/blocks/tlc_c および matlabroot/toolbox/simulink/sfuntemplates/tlc_c にあります。対応する MEX S-Function のソース コードは matlabroot/simulink/src または matlabroot/toolbox/simulink/simdemos/simfeatures/src にあります。MATLAB® ファイルの S-Function および MEX ファイルの実行可能ファイル (たとえば、sfunction.mex*) は matlabroot/toolbox/simulink/blocks または matlabroot/toolbox/simulink/simdemos/simfeatures にあります。上記フォルダー名のいずれかをクリックすると、MATLAB 内でそのフォルダーに移動し、MATLAB の現在のフォルダー ブラウザーにフォルダーの内容を表示します。

一般的な関数の引数

複数の関数が類似または同一の引数を受け取ります。リファレンス ページを簡略化するために、そうした引数の一部について、リファレンス ページではなく以下に詳細にドキュメント化しています。

引数説明

portIdx

0 から始まる入力または出力端子のインデックスを指します。たとえば、S-Function の最初の入力端子は 0 です。

ucv

ユーザー制御変数。これは、lcv パラメーターおよび sigIdx パラメーターをオーバーライドする高度な機能です。インライン化された S-Function 内で使用する場合は、一般的に、"" として指定する必要があります。

lcv

ループ制御変数。これは通常、2 番目の %roll 引数 (たとえば、lcv=RollThreshold) を介して %roll 命令で生成され、ライブラリ関数に直接渡す必要があります。%roll による現在のパスがインライン化されることを示す "" が含まれるか、%roll による現在のパスがループに配置されることを示す "i" などのループ制御変数の名前にします。%roll 命令の外側では、これは通常 "" として指定されます。

sigIdx "または" idx

信号インデックス。信号要素インデックスと呼ぶこともあります。入力信号または出力信号の特定の要素に直接アクセスする際には、各種ライブラリ ルーチンの呼び出しの ucv=""lcv=""、および sigIdx は 0 から始まる目的の整数信号インデックスに等しくなくてはなりません。複素信号では、sigIdx は、アクセス対象が実数部なのか虚数部なのか、およびどの要素にアクセスするのかを指定する、オーバーロードされた整数インデックスにすることができます。%roll 内のこれらの項目にアクセスする際には、%roll 命令で生成された sigIdx を使用します。

sigIdx 引数を受け取るほとんどの関数は、オーバーロードされた形式でそれを受け入れます。ここで、sigIdx は以下のいずれかです。

  • 整数 (3 など)。参照信号が複素数の場合、これは複素数コンテナーの識別子を指します。参照信号が複素数でない場合、これは識別子を指します。

  • id-num。通常は次の形式です (sigIdx のオーバーロードを参照)。

    1. "%<tRealPart>%<idx>" ("re3" など)。信号要素の実数部。sigIdx%roll 命令によって生成される場合は通常、"%<tRealPart>%<sigIdx>" です。

    2. "%<tImagPart>%<idx>" ("im3" など)。信号要素の虚数部または "" (信号が複素数でない場合)。sigIdx%roll 命令によって生成される場合は通常、"%<tImagPart>%<sigIdx>" です。

idx 名は、状態または作業ベクトルを参照する際に使用します。

3 つの引数 ucvlcvsigIdx (または idx) を受け入れる関数は、%roll 命令内で使用されるかどうかに応じて別の方法で呼び出されます。%roll 命令内で使用される場合、ucv は通常 "" として指定され、lcvsigIdx%roll 命令で指定されているものと同じになります。%roll 命令内で使用されていない場合、ucvlcv は通常 "" として指定され、sigIdx はアクセスするインデックスを指定します。

paramIdx

パラメーター インデックス。パラメーター要素インデックスと呼ぶこともあります。このパラメーターの処理は上記の sigIdx と非常に似ており、#re#、または im# になります。

stateIdx

状態インデックス。状態ベクトル要素インデックスと呼ぶこともあります。整数に評価される必要があり、最初の要素が 0 から開始します。

sigIdx のオーバーロード

信号インデックス (sigIdxidx と記述されることもある) は、ほとんどのライブラリ関数に渡されるときにオーバーロードできます。たとえば、信号の要素 3 に関心があり、ucv=""lcv="" であるものとします。次の表では、以下が示されています。

  • sigIdx の値

  • 参照信号が複素数かどうか

  • sigIdx を使用する関数の戻り値

  • 返される変数の例

  • 返される変数のデータ型

なお、次の表の "コンテナー" とは、tmwtypes.h で定義されている、creal_T などの数値の実数部と虚数部の両方をカプセル化するオブジェクトを指します。

sigIdx複素数関数が返すものデータ
"re3"

あり

要素 3 の実数部

u0[2].re

real_T

"im3"

あり

要素 3 の虚数部

u0[2].im

real_T

"3"

あり

要素 3 の複素数コンテナー

u0[2]

creal_T

3

あり

要素 3 の複素数コンテナー

u0[2]

creal_T

"re3"

なし

要素 3

u0[2]

real_T

"im3"

なし

""

N/A

N/A

"3"

なし

要素 3

u0[2]

real_T

3

なし

要素 3

u0[2]

real_T

次に、以下を仮定します。

  1. 信号の要素 3 に関心がある。

  2. (ucv = "i" かつ lcv == "") または (ucv = "" かつ lcv = "i")。

次の表では、idx の値、信号が複素数かどうか、および idx を使用する関数の戻り値を示します。

sigIdx複素数関数が返すもの
"re3"

あり

要素 i の実数部

"im3"

あり

要素 i の虚数部

"3"

あり

要素 i の複素数コンテナー

3

あり

要素 i の複素数コンテナー

"re3"

なし

要素 i

"im3"

なし

""

"3"

なし

要素 i

3

なし

要素 i

メモ

  • ベクトル インデックスは幅の広い信号の場合にのみ追加されます。

  • ucv が空の string ("") でない場合、上記の例では sigIdx の代わりに ucv が使用され、lcvsigIdx がいずれも無視されます。

  • ucv が空であるが lcv が空でない場合は、関数は "&y%<portIdx>[%<lcv>]" を返し、sigIdx は無視されます。

  • ローラー内でアクセスされる変数がローラーで宣言および初期化されているものと想定されています。ローラー内でアクセスされる変数は、%roll 命令への引数として rollVars を使用して指定する必要があります。

関連するトピック