このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
入力信号関数
LibBlockInputHasSymbolicWidth(portIdx)
指定されたブロック入力端子インデックスがシンボリック次元をもつ場合は 1 (true) を返します。この関数は、入力引数として端子インデックスを取ります。
blkio_api.tlc
の LibBlockInputHasSymbolicWidth
を参照してください。
LibBlockInputPortIndexMode(block, pidx)
目的
ブロックの入力端子のインデックス モードを決定します。
Arguments
block
— ブロック レコード
pidx
— 端子インデックス
戻り値
インデックス付けされていない端子の場合は ""
。それ以外の場合は "Zero-based"
または "One-based"
。
説明
block
の入力端子がインデックス端子として設定され、そのインデックス ベースが 0 ベースまたは 1 ベースとしてマークされている場合、この情報は
ファイルに書き込まれます。model
.rtwLibBlockInputPortIndexMode
はインデックス ベースをクエリして、入力端子のインデックス ベースに応じて異なるコードに分岐します。
例
%if LibBlockInputPortIndexMode(block, pidx) == "Zero-based" ... %elseif LibBlockInputPortIndexMode(block, pidx) == "One-based" ... %else ... %endif
の blkiolib.tlc
LibBlockInputPortIndexMode
を参照してください。
LibBlockInputPortIsContinuousQuantity(portIdx)
入力端子がコシミュレーション信号を受け入れるかどうかを返します。この関数は、入力引数として端子インデックスを取ります。
blkio_api.tlc
の LibBlockInputPortIsContinuousQuantity
を参照してください。
LibBlockInputSignal(portIdx, ucv, lcv, sigIdx)
LibBlockInputSignal
は、入力端子番号 (portIdx
)、ユーザー制御変数 (ucv
)、ループ制御変数 (lcv
)、信号インデックス (sigIdx
)、およびこの入力信号の取得元に基づいて、ブロック入力信号の参照を返します。
返される string 値は、式に対して有効な rvalue
(右辺の値) です。ブロック入力信号は、他のブロック、状態ベクトル、または外部入力から取得することも、リテラル定数 (5.0 など) にすることもできます。
メモ
入力信号のアドレスにアクセスする目的では LibBlockInputSignal
を使用しないでください。
返される値がリテラル定数になる可能性があるため、入力信号のアドレスにアクセスする目的では LibBlockInputSignal
を使用しないでください。入力信号のアドレスにアクセスするには、LibBlockInputSignalAddr
を使用します。LibBlockInputSignal
を使用して信号のアドレスにアクセスすると、リテラル定数 (5.0 など) を参照することになります。
たとえば、以下は機能 "しません"。
%assign u = LibBlockInputSignal(0, "", lcv, sigIdx) x = &%<u>;
%<u>
が値 4.95
をもつ不変信号を参照する場合、ステートメントは (プリプロセッサによって処理された後) 次のように生成されます。
x = &4.95;
または、入力信号のソースがグラウンドの場合、ステートメントは次のようになります。
x = &0.0;
これらはいずれもコンパイルできません。
LibBlockInputSignalAddr
を使用することで、このような状況を回避します。
%assign uAddr = LibBlockInputSignalAddr(0, "", lcv, sigIdx) x = %<uAddr>;
コード ジェネレーターは、アドレスによってアクセスされる信号とパラメーターを追跡し、それらをアドレス指定可能メモリに宣言します。
入力引数
次の表は、LibBlockInputSignal
への入力引数をまとめたものです。
LibBlockInputSignal 引数
引数 | 説明 |
---|---|
| 入力端子のインデックス (0 ベース) を指定する整数。 メモ:特定の組み込みブロックでは、 |
| ユーザー制御変数。インデックス式または |
| ループ制御変数。インデックス式または |
| 整数リテラルまたは以下の形式の文字列 %<tRealPart>Integer %<tImagPart>Integer たとえば、以下は信号の実数部と 5 から始まる信号の虚数部を示します。 "%<tRealPart>5" "%<tImagPart>5" |
一般的な使用法
LibBlockInputSignal
の使用法は下記のカテゴリに分類されます。
直接インデックス. ucv == ""
および lcv == ""
の場合、LibBlockInputSignal
は sigIdx
で指定された要素のインデックス式を返します。
ループ ローリング/ループ展開. この場合、lcv
および sigIdx
は %roll
命令によって生成され、ucv
は ""
でなければなりません。lcv
に空でない値が許可されるのは、%roll
命令によって生成される場合と、Roller TLC ファイル (または、同じ変数/信号オフセット処理に準拠するユーザー提供の Roller TLC ファイル) を使用する場合だけです。さらに、lcv
による LibBlockInputSignal
の呼び出しは、"U"
または特定の入力端子 ("u0"
など) がロール変数引数を介して %roll
命令に渡される場合にのみ行われる必要があります。
次の例は、単一入力/単一出力端子の S-Function を示しています。
%assign rollVars = ["U", "Y", "P"] %roll sigIdx=RollRegions, lcv=RollThreshold, block, ... "Roller", rollVars %assign u = LibBlockInputSignal( 0, "", lcv, sigIdx) %assign y = LibBlockOutputSignal(0, "", lcv, sigIdx) %assign p = LibBlockParameter( 0, "", lcv, sigIdx) %<y> = %<p> * %<u>; %endroll
%roll
命令では、sigIdx
は現在のロール領域の開始インデックスであり、lcv
は ""
またはインデックス変数です。以下に有効な値の例を示します。
LibBlockInputSignal(0, "", lcv, sigIdx) rtB.blockname[0] LibBlockInputSignal(0, "", lcv, sigIdx) u[i]
最初の例では、入力端子が他のブロックの出力に接続されており、かつ以下のようになっている場合、LibBlockInputSignal
は rtB.blockname[2]
を返します。
%roll
命令によって生成されたループ制御変数 (lcv
) が空であり、現在のロール領域がロールしきい値未満であることを示し、sigIdx
が0
である。入力端子の幅が
1
であり、この端子がスカラー拡張されていることを示す。sigIdx
がゼロ以外の場合、rtB.blockname[sigIdx]
が返されます。たとえば、sigIdx
が3
の場合、rtB.blockname[3]
が返されます。
2 番目の例では、LibBlockInputSignal
は、現在のロール領域がロールしきい値を超えており、入力端子幅が非スカラー (幅の広い) である場合、 u[i]
を返します。この場合、Roller TLC ファイルは入力信号を指すローカル変数 u
を設定し、現在の %roll
命令のコードは for
ループ内に配置されます。
別の例として、各端子の幅が 1 以上で、少なくとも 1 つの端子の幅が 1 に等しい複数の入力端子をもつブロックを考えます。次のコードは、出力信号を入力信号の二乗和に設定します。
%assign y = LibBlockOutputSignal(0, "", "", 0) %<y> = 0; %assign rollVars = ["U"] %foreach port = block.NumDataInputPorts - 1 %roll sigIdx=RollRegions, lcv = RollThreshold, block, ... "Roller", rollVars %assign u = LibBlockInputSignal(port, "", lcv, sigIdx) %<y> += %<u> * %<u>; %endroll %endforeach
LibBlockInputSignal
の最初のパラメーターは 0
のインデックスが付けられているため、0
から開始し NumDataInputPorts-1
で終了するように foreach
ループにインデックスを付ける必要があります。
ユーザー制御変数 (ucv) の処理. これは高度なモードであり、通常は S-Function S の作成者が使用する必要はありません。
ucv != ""
の場合、LibBlockInputSignal
はユーザー制御変数インデックス式を使用して入力信号の rvalue
を返します。制御変数インデックス式は次の形式を取ります。
rvalue_id[%<ucv>]%<optional_real_or_imag_part>
rvalue_id
を取得するには、sigIdx
の整数部分を確認します。sigIdx
を指定する必要があるのは、このブロックへの入力が不連続である可能性があるためです。つまり、入力が複数の異なるメモリ領域 (信号ソース) から取得される可能性があり、ucv
の対象領域を特定するために sigIdx
が使用されます。また、sigIdx
を使用して、信号の実数部と虚数部のどちらにアクセスするかを決定することもできます。
sigIdx
の文字列部分から optional_real_or_imag_part
を取得することができます (つまり、"re"
、"im"
、または ""
)。
lcv
の値は無視され、sigIdx
は、ucv
が最初に指す入力信号の同じ要素を指す必要があることに注意してください。
LibBlockInputSignal
をもつ ucv
の扱いには注意が必要です。次のブロック線図のように、入力端子に入力される不連続な入力信号を考えます。
ucv
をロバストに使用するには、1
のロールしきい値をもつ %roll
命令と、この入力信号に対するループヘッダー/トレーラーの設定がない Roller TLC ファイルを使用する必要があります。さらに、次の TLC コードのように、ROLL_ITERATIONS
を使用して現在のロール領域の幅を決定する必要があります。
{ int i; %assign rollVars = [""] %assign threshold = 1 %roll sigIdx=RollRegions, lcv=threshold, block, ... "FlatRoller", rollVars %assign u = LibBlockInputSignal( 0, "i", "", sigIdx) %assign y = LibBlockOutputSignal(0, "i+%<sigIdx>", "", sigIdx) %assign p = LibBlockParameter( 0, "i+%<sigIdx>", "", sigIdx) for (i = 0; i < %<ROLL_ITERATIONS()>; i++) { %<y> = %<p> * %<u>; } %endroll }
FlatRoller
にはループヘッダー/トレーラーの設定がないことに注意してください (rollVars
は無視されます)。その目的は、ブロックの RollRegions
をたどることです。あるいは、S-Function で以下を指定することで
ssSetInputPortRequiredContiguous(S, port, TRUE)
ブロックへの連続した入力信号を強制することもできます。
この場合、TLC コードは次のように単純化されます。
{ %assign u = LibBlockInputSignal( 0, "i", "", 0) %assign y = LibBlockOutputSignal(0, "i", "", 0) %assign p = LibBlockParameter( 0, "i", "", 0) for (i = 0; i < %<LibBlockInputSignalWidth(0)>; i++) { %<y> = %<p> * %<u>; } }
独自のローラーを作成し、そのインデックス付けが MathWorks 提供の Roller TLC ファイルの動作方法に準拠していない場合は、lcv
の代わりに ucv
を使用する必要があります。
入力引数の処理: ucv、lcv、および sigIdx
次のケースについて考えます。
関数 (ケース 1、2、3、4) | 戻り値の例 |
---|---|
LibBlockInputSignal(0, "i", "", sigIdx) | rtB.blockname[i] |
LibBlockInputSignal(0, "i", "", sigIdx) | rtU.signame[i] |
LibBlockInputSignal(0, "", lcv, sigIdx) | u0[i1] |
LibBlockInputSignal(0, "", lcv, sigIdx) | rtB.blockname[0] |
返される値は、入力信号がブロック線図で何に接続されているか、関数がどのように呼び出されるか (たとえば、%roll
内からか、直接か) によって異なります。上記の例では、以下のようになります。
ucv
を"i"
に設定して明示的な呼び出しを行うと、ケース 1 と 2 が発生します。ケース 1 は、
sigIdx
がブロック I/O ベクトル (つまり"i"
が始まる最初の要素) を指す場合に発生します。たとえば、"i"
をオフセット5
から始まるように初期化する場合は、sigIdx == 5
を指定する必要があります。ケース 2 は、
sigIdx
が外部入力ベクトル (つまり"i"
が始まる最初の要素) を指す場合に発生します。たとえば、"i"
をオフセット20
から始まるように初期化する場合は、sigIdx == 20
を指定する必要があります。ケース 3 と 4 は同じ引数
lcv
とsigIdx
を受け取りますが、戻り値は異なります。ケース 3 は、
LibBlockInputSignal
が%roll
命令内で呼び出され、現在のロール領域がロールされている場合 (lcv != ""
) に発生します。ケース 4 は、
LibBlockInputSignal
が%roll
命令内で呼び出され、現在のロール領域がロールされていない場合 (lcv == ""
) に発生します。
%roll
命令内で呼び出された場合、LibBlockInputSignal
は ucv
、lcv
、sigIdx
、現在のロール領域、および現在のロールしきい値をチェックして戻り値を決定します。変数 ucv
が最も優先度が高く、lcv
が次に優先度が高く、sigIdx
が最も優先度が低くなります。つまり、ucv
が指定された場合、それが使用されます (したがって、%roll
命令で呼び出された場合、通常は ""
になります)。ucv
が指定されず、lcv
と sigIdx
が指定された場合、返される値は、現在のロール領域が for
ループに配置されているか、または拡張されているかによって異なります。ロール領域がループに配置されている場合は lcv
が使用されます。それ以外の場合は sigIdx
が使用されます。
LibBlockInputSignal
の直接呼び出し (%roll
命令内でも命令外でも) では、ucv
および lcv
が ""
として指定されている場合は sigIdx
を使用します。
LibBlockInputSignal
の例については、sfun_multiport.tlc
を参照してください。
blkiolib.tlc
も参照してください。
LibBlockInputSignalAddr(portIdx, ucv, lcv, sigIdx)
指定されたブロック入力端子信号のメモリ アドレスを示す文字列を返します。
入力信号のアドレスが必要な場合は、LibBlockInputSignal
が返す文字列に "&
" を付加するのではなく、LibBlockInputSignalAddr
を使用する必要があります。たとえば、LibBlockInputSignal
は 5
などのリテラル定数 (つまり、不変の入力信号) を返すことがあります。コード ジェネレーターは、LibBlockInputSignalAddr
が不変の信号でいつ呼び出されたかを追跡し、その信号を、生成されたコードでリテラル定数 (アドレス指定不可能) として配置するのではなく、const
データ (アドレス指定可能) として宣言します。
最後の入力引数 sigIdx
はオーバーロードされないことに注意してください。これは、LibBlockInputSignal
ではオーバーロードされます。したがって、入力信号が複素数の場合は、複素数コンテナーのアドレスが返されます。
例
幅の広い入力信号のアドレスを取得してユーザー関数に処理のために渡すには、以下を使用できます。
%assign uAddr = LibBlockInputSignalAddr(0, "", "", 0) %assign y = LibBlockOutputSignal(0, "", "", 0) %<y> = myfcn(%<uAddr>);
blkiolib.tlc
の LibBlockInputSignalAddr
を参照してください。
LibBlockInputSignalAliasedThruDataTypeName
(portIdx, reim)
指定されたブロック入力端子に対応するエイリアスされたスルー データ型 (int_T, ... creal_T
など) の名前を返します。完全な信号の型名が必要な場合は、reim
引数を ""
(空) と指定します。
たとえば、reim
== ""
で、最初の出力端子が実数と複素数の場合、dtname
に配置されるデータ型名は creal_T
になります。
%assign dtname = LibBlockInputSignalDataTypeName(0,"")
生の要素の型名が必要な場合は、reim
を tRealPart
と指定します。たとえば、reim
== tRealPart
で、最初の出力端子が実数と複素数の場合、返されるデータ型名は real_T
になります。
%assign dtname = LibBlockOutputSignalDataTypeName(0,tRealPart)
blkiolib.tlc
の LibBlockInputSignalAliasedThruDataTypeName
を参照してください。
LibBlockInputSignalAllowScalarExpandedExpr(block,portIdx)
出力信号が幅の広い信号の場合でも、入力信号が式であることを許可します。この関数は、入力引数としてブロック レコードと端子インデックスを取ります。この関数は関数 BlockInstanceSetup
内から呼び出します。
blkio_api.tlc
の LibBlockInputSignalAllowScalarExpandedExpr
を参照してください。
LibBlockInputSignalASCIIEscapedUnitExpr(portIdx)
指定されたブロック入力端子に対応する単位のエスケープされた名前を返します。この関数は、入力引数として端子インデックスを取ります。
blkio_api.tlc
の LibBlockInputSignalASCIIEscapedUnitExpr
を参照してください。
LibBlockInputSignalConnected(portIdx)
指定された入力端子が Ground ブロック以外のブロックに接続されている場合は 1 を返します。それ以外の場合は 0 を返します。
blkio_api.tlc
の LibBlockInputSignalConnected
を参照してください。
LibBlockInputSignalDataTypeId(portIdx)
指定されたブロック入力端子のデータ型に対応する数値識別子 (id
) を返します。
入力端子信号が複素数の場合、LibBlockInputSignalDataTypeId
は信号の実数部 (または虚数部) のデータ型を返します。
blkiolib.tlc
の LibBlockInputSignalDataTypeId
を参照してください。
LibBlockInputSignalDataTypeName(portIdx, reim)
指定されたブロック入力端子に対応するデータ型の名前 (int_T
、...、creal_T
など) を返します。
完全な信号の型名が必要な場合は、reim
引数を ""
と指定します。たとえば、reim==""
で、最初の出力端子が実数と複素数の場合、dtname
に配置されるデータ型名は creal_T
になります。
%assign dtname = LibBlockInputSignalDataTypeName(0,"")
生の要素の型名が必要な場合は、reim
引数を tRealPart
と指定します。たとえば、reim==tRealPart
で、最初の出力端子が実数と複素数の場合、返されるデータ型名は real_T
になります。
%assign dtname = LibBlockInputSignalDataTypeName(0,tRealPart)
blkiolib.tlc
の LibBlockInputSignalDataTypeName
を参照してください。
LibBlockInputSignalDimensions(portIdx)
指定されたブロック入力端子の次元のベクトル ([2,3]
など) を返します。
blkio_api.tlc
の LibBlockInputSignalDimensions
を参照してください。
LibBlockInputSignalIsComplex(portIdx)
指定されたブロック入力端子が複素数である場合は 1 を返します。それ以外の場合は 0 を返します。
blkio_api.tlc
の LibBlockInputSignalIsComplex
を参照してください。
LibBlockInputSignalIsExpr(portIdx)
入力信号が (変数に対して) 式の場合は 1 (true) を返します。それ以外の場合は 0 (false) を返します。この関数は、入力引数として端子インデックスを取ります。
blkio_api.tlc
の LibBlockInputSignalIsExpr
を参照してください。
LibBlockInputSignalIsFrameData(portIdx)
指定されたブロック入力端子がフレーム ベースである場合は 1 を返します。それ以外の場合は 0 を返します。
blkio_api.tlc
の LibBlockInputSignalIsFrameData
を参照してください。
LibBlockInputSignalIsTrivialExpr(portIdx)
入力信号が (変数に対して) 自明な式の場合は 1 (true) を返します。それ以外の場合は 0 (false) を返します。この関数は、入力引数として端子インデックスを取ります。
blkio_api.tlc
の LibBlockInputSignalIsTrivialExpr
を参照してください。
LibBlockInputSignalLocalSampleTimeIndex
(portIdx)
指定されたブロック入力端子に対応するローカルのサンプル時間インデックスを返します。
blkiolib.tlc
の LibBlockInputSignalLocalSampleTimeIndex
を参照してください。
LibBlockInputSignalNumDimensions(portIdx)
指定されたブロック入力端子の次元数を返します。
blkio_api.tlc
の LibBlockInputSignalNumDimensions
を参照してください。
LibBlockInputSignalOffsetTime(portIdx)
指定されたブロック入力端子に対応するオフセット時間を返します。
blkiolib.tlc
の LibBlockInputSignalOffsetTime
を参照してください。
LibBlockInputSignalSampleTime(portIdx)
指定されたブロック入力端子に対応するサンプル時間を返します。
blkiolib.tlc
の LibBlockInputSignalSampleTime
を参照してください。
LibBlockInputSignalSampleTimeIndex(portIdx)
指定されたブロック入力端子に対応するサンプル時間インデックスを返します。
blkiolib.tlc
の LibBlockInputSignalSampleTimeIndex
を参照してください。
LibBlockInputSignalSymbolicDimensions(portIdx)
指定されたブロック入力端子の次元数を返します。
blkiolib.tlc
の LibBlockInputSignalSymbolicDimensions(portIdx)
を参照してください。
LibBlockInputSignalSymbolicWidth(portIdx)
指定されたブロック入力端子のシンボリック幅を返します。
blkiolib.tlc
の LibBlockInputSignalSymbolicWidth(portIdx)
を参照してください。
LibBlockInputSignalWidth(portIdx)
指定されたブロック入力端子インデックスの幅を返します。
blkio_api.tlc
の LibBlockInputSignalWidth
を参照してください。
LibBlockInputSignalUnitExpr(portIdx)
指定されたブロック入力端子に対応する単位の名前を返します。この関数は、入力引数として端子インデックスを取ります。
blkio_api.tlc
の LibBlockInputSignalUnitExpr
を参照してください。
LibBlockInputSignalUnitId(portIdx)
指定されたブロック入力端子の単位に対応する数値識別子 (id) を返します。この関数は、入力引数として端子インデックスを取ります。
blkio_api.tlc
の LibBlockInputSignalUnitId
を参照してください。
blkio_api.tlc
の LibBlockInputSignalUnitExp
と LibBlockOutputSignalUnitId
も参照してください。
LibBlockNumInputPorts(block)
ブロックのデータ入力端子の数を返します (制御端子は除きます)。
blocklib.tlc
の LibBlockNumInputPorts
を参照してください。