块目标文件的方法
块功能概述
每个块都有一个目标文件,决定哪些代码应该生成的块。代码块可以取决于准确的参数或连接的类型(例如,宽比标量输入)。
在每一个目标文件,块功能指定代码输出的块或子系统的模型开始
函数,输出
函数,更新
函数,等等。
每个内部的函数声明块目标文件系统被称为目标文件。在这些表,块
指的是一个模型金宝app®块名称(例如,获得
获得块)和系统
是指子系统块所在。第一个表列出了两个函数,用于预处理和设置。这两个函数输出生成的代码。
以下功能生成可执行代码,代码生成器的地方适当:
在面向对象的编程术语中,这些功能在本质上是多态的,因为每一块目标文件包含相同的功能。目标语言编译器在运行时动态地决定了块函数执行根据块的类型。也就是说,只有指定的系统文件输出
要执行的功能,例如,。特定的输出
函数是由目标语言编译器根据块的类型。
写一个目标文件,使用这些多态块功能结合目标语言编译器库函数。对目标语言编译器库函数的完整列表,看到TLC函数库参考目标语言编译器。
BlockInstanceSetup(块,系统)
的BlockInstanceSetup
函数执行这个函数的模块目标文件中定义一个模型。例如,如果一个模型包括从工作区10块,然后BlockInstanceSetup
函数fromwks.tlc
执行10倍,一旦从工作区为每个块实例。使用BlockInstanceSetup
为每个给定的实例生成代码块类型。
看到TLC函数库参考目标语言编译器可用工具处理函数来调用从这个块的内部函数。看到这个文件
的一个例子matlabroot
/ / rtw / c / tlc /块lookup2d.tlcBlockInstanceSetup
函数。
语法
BlockInstanceSetup(块,系统)无效块=参考模型块系统=引用nonvirtual仿真软件子系统金宝app
这个示例使用BlockInstanceSetup
:
%函数BlockInstanceSetup(块,系统)无效%如果(块。InMask = = " yes ") %分配blockName = LibParentMaskBlockName其他(块)% %分配blockName = LibGetFormattedBlockPath(块)% endif %如果(CodeFormat = = " Embedded-C ") %如果! (ParamSettings。ColZeroTechnique = = " NormalInterp " & &……ParamSettings。RowZeroTechnique = = " NormalInterp ") % selectfile STDOUT注意:删除重复零值X和Y轴会产生更高效的代码块:% < blockName >。定位块,类型open_system (“% < blockName >”)在MATLAB命令提示符。% selectfile NULL_FILE % endif % endif % endfunction
BlockTypeSetup(块,系统)
BlockTypeSetup
每一块类型代码生成开始前执行一次。也就是说,如果10块查找表中存在模型,BlockTypeSetup
函数look_up.tlc
只有一次。使用这个函数执行一般为给定类型的多个块工作。
看到TLC函数库参考目标语言编译器对相关函数的列表调用从这个块的内部函数。看到look_up.tlc
的一个例子BlockTypeSetup
函数。
语法
BlockTypeSetup(块,系统)无效块=参考模型块系统=引用nonvirtual仿真软件子系统金宝app
作为一个例子,考虑到功能喷火
,这就需要一个#定义
和两个函数声明头文件中,您可以定义:
%函数BlockTypeSetup(块、系统)无效% % #在模型中定义的头文件% openfile closefile缓冲缓冲# define A2D_CHANNEL 0% % < LibCacheDefine(缓冲区)> % %模型中的函数原型的头文件% openfile缓冲空start_a2d(无效);空白reset_a2d(无效);% closefile缓冲% < LibCacheFunctionPrototype(缓冲区)> % endfunction
其余的模型中的每个块的函数执行一次。
使(块,系统)
代码生成器创建启用
函数nonvirtual子系统仿真软件时子系统包含一块金宝app启用
函数。包括启用
功能块的目标文件的地方的代码块的具体支持子系统启用
函数。例如:
% %功能:支持= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = % %文摘:% %子系统启用代码只需要离散形式% %的正弦。设置布尔真正原因% %输出函数同步的最后值cos (wt)和% % sin (wt)。% % %功能启用(块,系统)输出%如果LibIsDiscrete (TID) / * % <类型>块:% <名称> * / % < LibBlockIWork (SystemEnable,”“、”“0) > = (int_T)真实;% endif % endfunction
禁用(块,系统)
Nonvirtual子系统禁用
函数创建一个模型时子系统包含一块金宝app禁用
函数。包括禁用
功能块的目标文件的地方的具体禁用代码块在这个子系统禁用
函数。
开始(块,系统)
包括一个开始
函数中的代码的地方开始
函数。里面的代码开始
函数执行一次,只有一次。通常,您包含一个开始
函数执行代码一旦仿真开始时(例如,工作中的初始化值向量)或代码时不需要重新执行子系统启用它所在。看到constant.tlc
的一个例子开始
函数。
% %功能:开始= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = % %文摘:% %设置输出恒定的参数值,如果块% %输出模型的启动函数中是可见的范围,即。,% %在全球rtB结构。% % %开始(块,系统)输出函数%如果LibBlockOutputSignalIsInBlockIO(0) / * % <类型>块:% <名称> * / %分配rollVars = (“Y”,“P”) %辊idx = RollRegions lcv = RollThreshold,块,……“滚”,rollVars %分配年= LibBlockOutputSignal(0”“液位控制阀,……“% < tRealPart > % < idx > ") %分配公关= LibBlockParameter(价值,”“,液位控制阀,…“% < tRealPart > % < idx > ") % <年> = % <公关>;%如果LibBlockOutputSignalIsComplex(0) %分配易= LibBlockOutputSignal(0”“液位控制阀,……“% < tImagPart > % < idx > ") %分配π= LibBlockParameter(价值,”“,液位控制阀,…“% < tImagPart > % < idx > ") % <易> = % <π>;% endif % endroll % endif % endfunction % %开始
InitializeConditions(块,系统)
TLC的代码块的生成InitializeConditions
函数出现在两个地方之一。一个包含一个nonvirtual子系统初始化
功能配置为复位状态时启用。在这种情况下,这个块函数生成的TLC代码放置在子系统初始化
功能,开始
函数调用这个子系统初始化
函数。但是,如果模型块驻留在根系或non金宝appvirtual子系统,它不需要一个初始化
函数,从这一块函数所生成的代码是直接放置(内联)进入开始
函数。
有一个微妙的区别块功能开始
和InitializeConditions
。通常,您包含一个开始
函数执行代码时不需要重新执行子系统启用它所在。你包括InitializeConditions
函数执行代码时必须重新执行子系统启用它所在。例如:
% %功能:InitializeConditions = = = = = = = = = = = = = = = = = = = = = = = = = = = = = % % % %文摘:无效的输出和输入存储在% % rwork [1 2 * blockWidth]通过设置时间戳% %存储在rwork rtInf [0])。% % %函数InitializeConditions(块,系统)输出/ * % <类型>块:% <名称> * / % < LibBlockRWork (PrevT,”“、”“0) > = % < LibRealNonFinite(正)>;% endfunction
系统输出(块)
一块通常应该包括一个输出
函数。薄层色谱的代码块的生成输出
函数是放置在两个地方之一。代码是直接放置在模型中输出
函数如果阻止不驻留在一个nonvirtual子系统,一个子系统的输出
函数如果块位于nonvirtual子系统。例如:
% %功能:输出= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = % %文摘:% % Y[我]=晶圆厂(U[我])如果你(我)是真实的或Y % %[我]= sqrt (U[我]。再保险^ 2 + U[我].im ^ 2)如果你(我)是复杂的。% % %函数输出(块,系统)输出/ * % <类型>块:% <名称> * / % % %分配inputIsComplex = LibBlockInputSignalIsComplex(0) %分配RT_SQUARE = " RT_SQUARE " % % %分配rollVars = [“U”、“Y”] %如果inputIsComplex %辊sigIdx = RollRegions lcv = RollThreshold,…,“滚”,rollVars % % %分配你= LibBlockInputSignal(0”“液位控制阀,……“% < tRealPart > % < sigIdx >”) %分配ui = LibBlockInputSignal(0”“液位控制阀,……“% < tImagPart > % < sigIdx >”) % % %分配y = LibBlockOutputSignal(0”“液位控制阀,sigIdx) % < y > = sqrt (% < RT_SQUARE >(% <你>)+ % < RT_SQUARE > (% < ui >));其他% endroll % %辊sigIdx = RollRegions lcv = RollThreshold,…,“滚”,rollVars %分配u = LibBlockInputSignal(0”“液位控制阀,sigIdx) %分配y = LibBlockOutputSignal(0”“液位控制阀,sigIdx) % < y > =晶圆厂(% < u >);% endroll % endif % endfunction
请注意
放置在零交点重置代码输出
函数。
如果你写TLC代码生成内联代码从一个功能,如果TLC代码包含一个输出
功能,您必须修改TLC代码如果所有这些条件都是真的:
一个输出端口使用或继承常数样品时间。输出端口一个常数值。
函数是一个多重速率的功能或使用和出口样品时间。
在这种情况下,TLC constant-valued代码必须生成代码输出端口通过使用函数OutputsForTID
而不是函数输出
。有关更多信息,请参见指定固定样本时间(正)端口(金宝app模型)。
系统更新(块)
包括一个更新
功能块是否需要更新的代码在每个主要的时间步。从这个函数生成的代码放置在模型或子系统更新
函数,根据块是否驻留在nonvirtual子系统。例如:
% %功能:更新= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = % %文摘:% % X[我]=[我]% % % U函数更新块,系统输出/ * % <类型>块:% <名称> * / %分配rollVars = (“U”、“Xd) %辊idx = RollRegions lcv = RollThreshold,块,……“滚”,rollVars %分配u = LibBlockInputSignal(0”“液位控制阀,idx) %分配x = LibBlockDiscreteState(“”,液位控制阀,idx) % < x > = % < u >;% % % endroll % endfunction更新
衍生品(块,系统)
包括一个衍生品
函数计算生成代码块的连续状态。从这个函数生成的代码放置在模型或子系统衍生品
函数,根据块是否驻留在nonvirtual子系统。看到integrat.tlc
的一个例子衍生品
函数。
终止(块,系统)
包括一个终止
函数代码的地方MdlTerminate
。用户定义的功能目标文件可以使用这个函数来保存数据,释放内存,重启硬件在目标,等等。看到tofile.tlc
的一个例子终止
函数。