如果指定的块输入端口索引具有符号维度,则返回1 (true)。该函数将端口索引作为输入参数。
看到LibBlockInputHasSymbolicWidth
在blkio_api.tlc
.
确定块输入端口的索引模式。
块
- 块记录
pidx
- 端口索引
""
对于非索引端口,和“从零开始的”
或“基于一个”
否则。
如果一个输入端口块
设置为索引端口,其索引基标记为零基或1基,该信息写入
文件模型
.rtwlibblockinputportindexmode.
根据输入端口索引库是什么,查询要分支到不同代码的索引库。
%如果LibBlockInputPortIndexMode(块,pidx)=“基于零”…%elseif LibBlockInputPortIndexMode(块,pidx)=“基于一个”…%否则…%恩迪夫
看到libblockinputportindexmode.
在
.blkiolib.tlc
返回输入端口是否接受协同模拟信号。此函数将端口索引作为输入参数。
看到LibBlockInputPortIsContinuousQuantity
在blkio_api.tlc
.
根据输入端口号(portidx.
),用户控制变量(ucv
),循环控制变量(液位控制阀
)、信号指数(sigidx.
),以及该输入信号的来源,LibBlockInputSignal
返回对块输入信号的引用。
返回的字符串值是有效的右值
(右值)。块输入信号可以来自另一个块、状态向量或外部输入,也可以是文字常量(例如5.0)。
请注意
不要使用LibBlockInputSignal
访问输入信号的地址。
因为返回的值可能是一个字面常数,所以你不应该使用LibBlockInputSignal
访问输入信号的地址。要访问输入信号的地址,请使用LibBlockInputSignalAddr
.通过。访问信号的地址LibBlockInputSignal
可以引入对文字常数的引用(例如,5.0)。
例如,以下将不是工作。
%分配u=LibBlockInputSignal(0,”,lcv,sigIdx)x=&%;
如果% u > <
指具有值的不变信号4.95
,语句(经过预处理器处理后)将生成为
x=&4.95;
或者,如果输入信号源到地面,则该声明可能会出现
x=&0.0;
这些都不会汇编。
通过使用避免这种情况LibBlockInputSignalAddr
.
%分配uAddr=LibBlockInputSignalAddr(0,”,lcv,sigIdx)x=%;
代码生成器跟踪由其地址访问的信号和参数,并在可寻址内存中声明它们。
下表总结了到的输入参数LibBlockInputSignal
.
LibBlockInputSignal参数
论点 | 描述 |
---|---|
|
指定输入端口索引的整数(从零开始)。 笔记:对于某些内置块, |
|
用户控制变量。必须是字符串,可以是索引表达式,也可以是 |
|
循环控制变量。必须是一个字符串,索引表达式或 |
|
该形式的整数字面值或字符串 % 例如,以下表示从5开始的信号的实部和虚部: “% |
的使用LibBlockInputSignal
属于下面描述的类别。
直接索引。如果ucv = = "
和lcv ==“”
,LibBlockInputSignal
指定的元素返回索引表达式sigidx.
.
循环滚动/展开。在这种情况下,液位控制阀
和sigidx.
由此产生%卷
指令,ucv
必须""
.一个不可拍的价值液位控制阀
仅当由%卷
指令和使用滚子TLC文件(或符合相同的变量/信号偏移处理的用户提供的滚子TLC文件)。此外,呼叫LibBlockInputSignal
与液位控制阀
应该只发生“你”
或特定的输入端口(例如,“情况”
)传递给%卷
通过滚动变量参数指令。
下面的例子显示了单输入/单输出端口s函数。
%assign rollVars = ["U", "Y", "P"] %assign sigIdx=RollRegions, lcv=RollThreshold, block,…" rolvars %assign u = LibBlockInputSignal(0, "", lcv, sigIdx) %assign y = libblocoutputsignal (0, "", lcv, sigIdx) %assign p = libblocparameter (0, "", lcv, sigIdx) %= % * %;% endroll
与%卷
指令,sigidx.
是当前卷区域的起始指数和液位控制阀
是""
或者索引变量。以下是有效值的示例:
LibBlockInputSignal(0,”,lcv,sigIdx)rtB.blockname[0]LibBlockInputSignal(0,”,lcv,sigIdx)u[i]
在第一个例子中,LibBlockInputSignal
返回RTB.BlockName [2]
当输入端口连接到另一个块的输出时,并且
回路控制变量(液位控制阀
),由%卷
指令为空,表示当前滚动区域低于滚动阈值,并且sigidx.
是0
.
输入端口的宽度是1
,表示该端口正在标量扩展。
如果sigidx.
那么是非零吗rtB.blockname [sigIdx]
返回。例如,如果sigidx.
是3.
,然后RTB.BlockName [3]
返回。
在第二个例子中,LibBlockInputSignal
返回你[我]
当当前滚转区域高于滚转阈值且输入端口宽度是非标量(宽)时。在本例中,Roller TLC文件设置一个局部变量,u
,以指向输入信号,并在当前代码%卷
指令放在为
循环。
再举一个例子,考虑一个具有多个输入端口的块,其中每个端口的宽度大于或等于1,至少一个端口的宽度等于1。
%assign y = LibBlockOutputSignal(0, "", "", 0) %= 0;%assign rollVars = ["U"] %foreach port = block。NumDataInputPorts - 1% roll sigIdx=RollRegions, lcv = RollThreshold, block,…" rollVars %assign u = LibBlockInputSignal(port, "", lcv, sigIdx) % += % * %;% endroll % endforeach
因为第一个参数LibBlockInputSignal
是0
索引,则必须为foreach
循环开始0
和结束时NumDataInputPorts-1
.
用户控制变量(ucv)处理。这是一种高级模式,s函数作者通常不需要这种模式。
如果UCV!=“”
,LibBlockInputSignal
返回一个右值
对于使用用户控制变量索引表达式的输入信号。控制变量索引表达式具有以下形式:
右值id[%
获得右值id
,请看sigidx.
.您必须指定sigidx.
因为这个块的输入可以是不连续的,这意味着输入可以来自几个不同的记忆区域(信号源)和sigidx.
用于识别感兴趣的领域ucv
.你也可以用sigidx.
确定是否要访问信号的实部或虚部。
你可以获得可选_real_or_imag_part.
来自弦的部分sigidx.
(例如,“重新”
, 要么“我”
, 要么""
).
注意,for的值液位控制阀
被忽略,sigidx.
必须指向输入信号中的相同元素ucv
最初点。
处理ucv
与LibBlockInputSignal
需要护理。考虑一个不连续的输入信号,如下框图所示输入端口:
使用ucv
以一种健壮的方式,您必须使用%卷
指令的滚动阈值为1
以及一个辊子TLC文件,该文件没有针对该输入信号的循环头/拖车设置。此外,您需要使用roll_Interations.
来确定当前辊区宽度,如以下TLC代码所示:
{int我;%assign rollVars = [""] %assign threshold = 1"FlatRoller", rollVars %assign u = LibBlockInputSignal(0, "i", "", sigIdx) %assign y = libblocoutputsignal (0, "i+%", "", sigIdx) %assign p = libblocparameter (0, "i+% ", "", sigIdx) for (i = 0;我< % < ROLL_ITERATIONS () >;I ++) {% = % * %;} % endroll}
请注意,FlatRoller
没有循环标题/拖车设置(rollVars
被忽略)。它的目的是步行RollRegions
的块。或者,您可以通过指定将连续的输入信号强制到块
sssetInputportRequiredContify(s,端口,true)
在你的S函数中。
在本例中,TLC代码简化为
{%assign u = LibBlockInputSignal(0, "i", "", 0) %assign y = libblocoutputsignal (0, "i", "", 0) %assign p = libblocparameter (0, "i", "", 0) for (i = 0;我< % < LibBlockInputSignalWidth (0) >;I ++) {%= % * %;}}
如果您创建自己的辊子,而索引不符合MathWorks提供的辊子TLC文件的操作方式,则必须使用ucv
而不是液位控制阀
.
考虑以下情况:
功能(情况1、2、3、4) | 示例返回值 |
---|---|
libblockinputsignal(0,“i”,“”,sigidx) |
rtB.blockname[i] |
libblockinputsignal(0,“i”,“”,sigidx) |
RTU.Signame [i] |
libblockinputsignal(0,“”,lcv,sigidx) |
情况(i1) |
libblockinputsignal(0,“”,lcv,sigidx) |
RTB.BlockName [0] |
返回值取决于在框图中连接的输入信号是什么,以及函数是如何被调用的(例如,在%卷
或直接)。在上面的例子中,
案例1和2在用明确呼叫时发生ucv
设置为“我”
.
案例1发生时sigidx.
指向块I/O向量,即“我”
以。。开始。例如,如果初始化“我”
从抵消开始5
,则应指定sigidx == 5.
.
案例2发生时sigidx.
指向外部输入向量,即,第一个元素“我”
以。。开始。例如,如果初始化“我”
从偏移开始20.
,则应指定sigIdx = = 20
.
案例3和4的论点是一样的,液位控制阀
和sigidx.
;然而,它们产生不同的返回值。
情况3发生在LibBlockInputSignal
在一个%卷
指令,当前滚动区域正在被滚动(LCV!=“”
).
情况4发生在LibBlockInputSignal
在一个%卷
指令,且当前滚动区域未被滚动(lcv ==“”
).
当呼叫内部时%卷
指令,LibBlockInputSignal
看着ucv
,液位控制阀
,sigidx.
,电流辊区域和电流辊阈值以确定返回值。变量ucv
有最优先权,液位控制阀
有第二高的优先权,然后呢sigidx.
具有最低优先级。也就是说,如果ucv
,则使用它(因此,当在%卷
指令通常是""
).如果ucv
未指定,如果液位控制阀
和sigidx.
时,返回值取决于当前滚动区域是否被放置在为
循环或被扩展。如果滚动区域被放置在一个循环中,那么液位控制阀
使用;否则,,sigidx.
使用。
直接呼叫LibBlockInputSignal
(在内部或外部%卷
指令)使用sigidx.
什么时候ucv
和液位控制阀
指定为""
.
举个例子LibBlockInputSignal
,请参阅sfun_multiport.tlc.
.
另请参阅blkiolib.tlc
.
返回一个字符串,该字符串提供指定块输入端口信号的内存地址。
当您需要输入信号地址时,必须使用LibBlockInputSignalAddr
而不是附加“&
“返回的字符串LibBlockInputSignal
.例如,LibBlockInputSignal
可以返回一个字面常数,如5
(即不变输入信号)。代码生成器轨道轨道LibBlockInputSignalAddr
对不变信号调用,并将该信号声明为const
数据(可寻址的),而不是作为文本常量放置在生成的代码中(不可寻址的)。
注意,最后一个输入参数,sigidx.
,是没有超载的,它是在LibBlockInputSignal
.因此,如果输入信号复杂,则返回复容器的地址。
要获取宽输入信号的地址并将其传递给用户函数进行处理,可以使用
%assign uAddr = LibBlockInputSignalAddr(0, "", "", 0) %assign y = libblocoutputsignal (0, "", "", 0) %=myfcn(% < uAddr >);
看到LibBlockInputSignalAddr
在blkiolib.tlc
.
返回别名通过数据类型的名称(例如。,int_T,……creal_T
)对应于指定的块输入端口。指定re
参数为""
(空),如果你想要完整的信号类型名称。
例如,如果re
==""
第一个输出端口是真实的和复杂的,数据类型名称放在dtname.
是creal_T
.
%assign dtname = LibBlockInputSignalDataTypeName(0,"")
指定re
作为tRealPart
如果您想要原始元素类型名称。例如,如果re
==tRealPart
第一个输出端口是真实且复杂的,返回的数据类型名称是real_T
.
%assign dtname = LibBlockOutputSignalDataTypeName(0,tRealPart)
看到LibBlockInputSignalAliasedThruDataTypeName
在blkiolib.tlc
.
允许输入信号是表达式,即使输出信号很宽。这个函数接受块记录和端口索引作为输入参数。函数内部调用此函数BlockInstanceSetup
函数。
看到libblockinputsignalallowscalarexpandedexpr.
在blkio_api.tlc
.
返回与指定块输入端口对应的单位的转义名称。该函数将端口索引作为输入参数。
看到libblockinputsignalasciiescapedunitexpr.
在blkio_api.tlc
.
如果指定的输入端口连接到接地块以外的块,则返回1,否则返回0。
看到LibBlockInputSignalConnected
在blkio_api.tlc
.
返回数字标识符(id
)对应于指定的块输入端口的数据类型。
如果输入端口信号是复杂的,LibBlockInputSignalDataTypeId
返回信号的实部(或虚部)的数据类型。
看到LibBlockInputSignalDataTypeId
在blkiolib.tlc
.
返回数据类型的名称(例如,int_T
,……creal_T
)对应于指定的块输入端口。
指定re
参数为""
如果需要完整的信号类型名称。例如,如果雷姆= = "
第一个输出端口是真实的和复杂的,数据类型名称放在dtname.
是creal_T
.
%assign dtname = LibBlockInputSignalDataTypeName(0,"")
指定re
参数为tRealPart
如果您想要原始元素类型名称。例如,如果reim == trealpart.
第一个输出端口是真实且复杂的,返回的数据类型名称是real_T
.
%分配dtname = libblockinputsignaldatatypename(0,trealpart)
看到libblockinputsignalDatatyPename.
在blkiolib.tlc
.
返回指定块输入端口的尺寸向量,例如,(2、3)
.
看到libblockinputsignaldimensions.
在blkio_api.tlc
.
如果指定的块输入端口复杂,则返回1,否则返回0。
看到LibBlockInputSignalIsComplex
在blkio_api.tlc
.
如果输入信号是表达式(而不是变量)则返回1(真),否则返回0(假)。该函数将端口索引作为输入参数。
看到libblockinputsignalisexpr.
在blkio_api.tlc
.
如果指定的块输入端口是基于帧的,返回1,否则返回0。
看到libblockinputsignalisframedata.
在blkio_api.tlc
.
如果输入信号是普通表达式(相对于变量),则返回1(true),否则返回0(false)。此函数将端口索引作为输入参数。
看到LibBlockInputSignalIsTrivialExpr
在blkio_api.tlc
.
返回与指定块输入端口对应的本地样本时间索引。
看到LibBlockInputSignalLocalSampleTimeIndex
在blkiolib.tlc
.
返回指定块输入端口的维数。
看到libblockinputsignalnumdimensions.
在blkio_api.tlc
.
返回与指定块输入端口对应的偏移时间。
看到LibBlockInputSignalOffsetTime
在blkiolib.tlc
.
返回与指定块输入端口对应的采样时间。
看到LibBlockInputSignalSampleTime
在blkiolib.tlc
.
返回与指定块输入端口对应的采样时间索引。
看到LibBlockInputSignalSampleTimeIndex
在blkiolib.tlc
.
返回指定块输入端口的维数。
看到libblockInputSignalSymbolicdDimensions(端口DX)
在blkiolib.tlc
.
返回指定块输入端口的符号宽度。
看到libblockinputsignalsignalsymbolicwidth(portidx)
在blkiolib.tlc
.
返回指定块输入端口索引的宽度。
看到LibBlockInputSignalWidth
在blkio_api.tlc
.
返回与指定块输入端口对应的单位的名称。该函数将端口索引作为输入参数。
看到LibBlockInputSignalUnitExpr
在blkio_api.tlc
.
返回与指定块输入端口的单元对应的数字标识符(id)。该函数将端口索引作为输入参数。
看到LibBlockInputSignalUnitId
在blkio_api.tlc
.
另请参阅LibBlockInputSignalUnitExp
和LibBlockOutputSignalUnitId
在blkio_api.tlc
.
返回块的数据输入端口数(不包括控制端口)。
看到LibBlockNumInputPorts
在blocklib.tlc
.