主要内容

输入信号功能

LibBlockInputHasSymbolicWidth (portIdx)

如果指定的块输入端口索引具有符号维度,则返回1 (true)。该函数将端口索引作为输入参数。

看到LibBlockInputHasSymbolicWidthblkio_api.tlc

pidx LibBlockInputPortIndexMode(块)

目的

确定块输入端口的索引模式。

争论

- 块记录

pidx- 端口索引

返回

""对于非索引端口,和“从零开始的”“基于一个”否则。

描述

如果一个输入端口设置为索引端口,其索引基标记为零基或1基,该信息写入模型.rtw文件libblockinputportindexmode.根据输入端口索引库是什么,查询要分支到不同代码的索引库。

例子

%如果LibBlockInputPortIndexMode(块,pidx)=“基于零”…%elseif LibBlockInputPortIndexMode(块,pidx)=“基于一个”…%否则…%恩迪夫

看到libblockinputportindexmode.blkiolib.tlc

LibBlockInputPortIsContinuousQuantity (portIdx)

返回输入端口是否接受协同模拟信号。此函数将端口索引作为输入参数。

看到LibBlockInputPortIsContinuousQuantityblkio_api.tlc

LibBlockInputSignal(portIdx, ucv, lcv, sigIdx)

根据输入端口号(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参数

论点 描述

portidx.

指定输入端口索引的整数(从零开始)。

笔记:对于某些内置块,portidx.可以是标识端口的字符串(例如“启用”“触发”).

ucv

用户控制变量。必须是字符串,可以是索引表达式,也可以是""

液位控制阀

循环控制变量。必须是一个字符串,索引表达式或""

sigidx.

该形式的整数字面值或字符串

整数%整数

例如,以下表示从5开始的信号的实部和虚部:

“% 5”“% 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

因为第一个参数LibBlockInputSignal0索引,则必须为foreach循环开始0和结束时NumDataInputPorts-1

用户控制变量(ucv)处理。这是一种高级模式,s函数作者通常不需要这种模式。

如果UCV!=“”LibBlockInputSignal返回一个右值对于使用用户控制变量索引表达式的输入信号。控制变量索引表达式具有以下形式:

右值id[%]%

获得右值id,请看sigidx..您必须指定sigidx.因为这个块的输入可以是不连续的,这意味着输入可以来自几个不同的记忆区域(信号源)和sigidx.用于识别感兴趣的领域ucv.你也可以用sigidx.确定是否要访问信号的实部或虚部。

你可以获得可选_real_or_imag_part.来自弦的部分sigidx.(例如,“重新”, 要么“我”, 要么"").

注意,for的值液位控制阀被忽略,sigidx.必须指向输入信号中的相同元素ucv最初点。

处理ucvLibBlockInputSignal需要护理。考虑一个不连续的输入信号,如下框图所示输入端口:

使用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而不是液位控制阀

处理输入参数: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) 情况(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(portidx,ucv,lcv,sigidx)

返回一个字符串,该字符串提供指定块输入端口信号的内存地址。

当您需要输入信号地址时,必须使用LibBlockInputSignalAddr而不是附加““返回的字符串LibBlockInputSignal.例如,LibBlockInputSignal可以返回一个字面常数,如5(即不变输入信号)。代码生成器轨道轨道LibBlockInputSignalAddr对不变信号调用,并将该信号声明为const数据(可寻址的),而不是作为文本常量放置在生成的代码中(不可寻址的)。

注意,最后一个输入参数,sigidx.,是没有超载的,它是在LibBlockInputSignal.因此,如果输入信号复杂,则返回复容器的地址。

例子

要获取宽输入信号的地址并将其传递给用户函数进行处理,可以使用

%assign uAddr = LibBlockInputSignalAddr(0, "", "", 0) %assign y = libblocoutputsignal (0, "", "", 0) % =myfcn(% < uAddr >);

看到LibBlockInputSignalAddrblkiolib.tlc

LibBlockInputSignalAliasedThruDataTypeName
(portidx,reim)

返回别名通过数据类型的名称(例如。,int_T,……creal_T)对应于指定的块输入端口。指定re参数为""(空),如果你想要完整的信号类型名称。

例如,如果re==""第一个输出端口是真实的和复杂的,数据类型名称放在dtname.creal_T

%assign dtname = LibBlockInputSignalDataTypeName(0,"")

指定re作为tRealPart如果您想要原始元素类型名称。例如,如果re==tRealPart第一个输出端口是真实且复杂的,返回的数据类型名称是real_T

%assign dtname = LibBlockOutputSignalDataTypeName(0,tRealPart)

看到LibBlockInputSignalAliasedThruDataTypeNameblkiolib.tlc

portIdx LibBlockInputSignalAllowScalarExpandedExpr(块)

允许输入信号是表达式,即使输出信号很宽。这个函数接受块记录和端口索引作为输入参数。函数内部调用此函数BlockInstanceSetup函数。

看到libblockinputsignalallowscalarexpandedexpr.blkio_api.tlc

LibBlockInputSignalASCIIEscapedUnitExpr (portIdx)

返回与指定块输入端口对应的单位的转义名称。该函数将端口索引作为输入参数。

看到libblockinputsignalasciiescapedunitexpr.blkio_api.tlc

LibBlockInputSignalConnected (portIdx)

如果指定的输入端口连接到接地块以外的块,则返回1,否则返回0。

看到LibBlockInputSignalConnectedblkio_api.tlc

libblockinputsignaldatatypeid(portidx)

返回数字标识符(id)对应于指定的块输入端口的数据类型。

如果输入端口信号是复杂的,LibBlockInputSignalDataTypeId返回信号的实部(或虚部)的数据类型。

看到LibBlockInputSignalDataTypeIdblkiolib.tlc

LibBlockInputSignalDataTypeName(portIdx,reim)

返回数据类型的名称(例如,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

LibBlockInputSignalDimensions (portIdx)

返回指定块输入端口的尺寸向量,例如,(2、3)

看到libblockinputsignaldimensions.blkio_api.tlc

LibBlockInputSignalIsComplex (portIdx)

如果指定的块输入端口复杂,则返回1,否则返回0。

看到LibBlockInputSignalIsComplexblkio_api.tlc

LibBlockInputSignalIsExpr(端口DX)

如果输入信号是表达式(而不是变量)则返回1(真),否则返回0(假)。该函数将端口索引作为输入参数。

看到libblockinputsignalisexpr.blkio_api.tlc

LibBlockInputSignalIsFrameData (portIdx)

如果指定的块输入端口是基于帧的,返回1,否则返回0。

看到libblockinputsignalisframedata.blkio_api.tlc

LibBlockInputSignalIsTrivialExpr(端口DX)

如果输入信号是普通表达式(相对于变量),则返回1(true),否则返回0(false)。此函数将端口索引作为输入参数。

看到LibBlockInputSignalIsTrivialExprblkio_api.tlc

LibBlockInputSignalLocalSampleTimeIndex
(portIdx)

返回与指定块输入端口对应的本地样本时间索引。

看到LibBlockInputSignalLocalSampleTimeIndexblkiolib.tlc

LibBlockInputSignalNumDimensions (portIdx)

返回指定块输入端口的维数。

看到libblockinputsignalnumdimensions.blkio_api.tlc

LibBlockInputSignalOffsetTime (portIdx)

返回与指定块输入端口对应的偏移时间。

看到LibBlockInputSignalOffsetTimeblkiolib.tlc

LibBlockInputSignalSampleTime (portIdx)

返回与指定块输入端口对应的采样时间。

看到LibBlockInputSignalSampleTimeblkiolib.tlc

LibBlockInputSignalSampleTimeIndex (portIdx)

返回与指定块输入端口对应的采样时间索引。

看到LibBlockInputSignalSampleTimeIndexblkiolib.tlc

libblockInputSignalSymbolicdDimensions(端口DX)

返回指定块输入端口的维数。

看到libblockInputSignalSymbolicdDimensions(端口DX)blkiolib.tlc

libblockinputsignalsignalsymbolicwidth(portidx)

返回指定块输入端口的符号宽度。

看到libblockinputsignalsignalsymbolicwidth(portidx)blkiolib.tlc

LibBlockInputSignalWidth(端口DX)

返回指定块输入端口索引的宽度。

看到LibBlockInputSignalWidthblkio_api.tlc

LibBlockInputSignalUnitExpr(端口DX)

返回与指定块输入端口对应的单位的名称。该函数将端口索引作为输入参数。

看到LibBlockInputSignalUnitExprblkio_api.tlc

LibBlockInputSignalUnitId (portIdx)

返回与指定块输入端口的单元对应的数字标识符(id)。该函数将端口索引作为输入参数。

看到LibBlockInputSignalUnitIdblkio_api.tlc

另请参阅LibBlockInputSignalUnitExpLibBlockOutputSignalUnitIdblkio_api.tlc

libblocknuminpulpports(块)

返回块的数据输入端口数(不包括控制端口)。

看到LibBlockNumInputPortsblocklib.tlc

相关的话题