主要内容

在有条件执行的子系统中使用变体子系统块

可以使用有条件执行的子系统,这些子系统使用控制输入端口,例如启用,触发,重置,函数调用作为变量选择的子系统不同的子系统块。有关有条件执行系统的更多信息,请参见有条件执行的子系统概述

请注意

变体激活时间参数的不同的子系统块被设置为代码编译,所有变体选择中的控制端口块的类型必须相同。例如,您不能使用启用子系统函数调用子系统块作为选择在不同的子系统块,代码编译激活时间。

变量选择块上的控制输入端口和父模块上相应的输入端口不同的子系统块必须具有相同的名称。

创建一个变体子系统,选择启用子系统

考虑这个模型不同的子系统块命名控制器和两个启用子系统块,线性非线性,作为不同的选择。变量的条件线性非线性VSSMODE = = 0VSSMODE = = 1,分别。如果你使用启用子系统块的线性选择,然后非线性选择也必须是一种启用子系统

当您从这个模型生成代码时,线性非线性选择由相应的变量条件保护。

step() {#if VSSMODE==0 //线性选择.......#elif VSSMODE==1 //非线性选择.......# endif

使用变体子系统块创建导出功能模型

导出函数模型是Simulink金宝app®为可以与外部环境和调度程序集成的独立函数生成代码的模型。你可以用不同的子系统块与函数调用子系统块作为变体选择来创建导出功能模型。有关导出功能模型的更多信息,请参见导出功能模型概述

考虑一个包含不同的子系统块命名VariantFcnCall有两个函数调用子系统块,线性非线性,作为不同的选择。变量条件设置为线性非线性的选择是VSS_MODE = = 0VSS_MODE = = 1,分别。的VariantFcnCall块有一个根级函数调用导入块,fcn控件上的控制端口具有相同的名称线性非线性选择块。的变体激活时间参数的VariantFcnCall被设置为代码编译

您还可以使用类似的多点进入功能的建模模式模型块。

在本例中,输入fcln1,fcln2,fcln3通过不同的子系统块,模型,它使用模型块作为变量选择。

导出功能模型的代码生成

当您从这个模型生成代码时,导出函数的定义,fcn,包含了C预处理条件#如果# endif.的代码线性非线性选择由相应的变量条件保护。有关配置模型以生成代码的更多信息,请参见为代码生成准备包含变量的模型

void fcn(void) {/* RootInportFunctionCallGenerator: '/RootFcnCall_InsertedFor_fcn_at_outport_1' */ #if VSSMODE == 0 rtdwork . line . discretefilter = rtU. outport_1';In1 - 0.5 * rtdwork . linear . discrete tefilter_states;rtDWork.Linear。DiscreteFilter_states = rtDWork.Linear.DiscreteFilter;#endif /* VSSMODE == 0 */ #if VSSMODE == 1三机一体,rtCP_LookupTable_bp01Data, rtCP_LookupTable_tableData, 4U) - 0.5 * rtDWork.Nonlinear.DiscreteFilter_states; rtDWork.Nonlinear.DiscreteFilter_states = rtDWork.Nonlinear.DiscreteFilter; #endif /* VSSMODE == 1 */ #if VSSMODE == 0 rtY.Out1 = rtDWork.Linear.DiscreteFilter; #endif /* VSSMODE == 0 */ #if VSSMODE == 1 rtY.Out1 = rtDWork.Nonlinear.DiscreteFilter; #endif /* VSSMODE == 1 */ }

在生成的代码中保护导出函数定义

为了维护出口函数的整体定义,fcn,使用可变条件时,使用变异来源块,如图所示。

使用Variant Source块保护导出函数的定义

在生成的代码中,导出函数的定义,fcn (),由= = 1

void fcn(void) {..... . php . php . php . php . php . php . php . php . php . php} # endif

可以使用与此类似的代码段引用此函数。

.....#if A==1 fcn(

将变量条件从变量子系统块传播到条件子系统

当将变量条件传播到条件子系统时,将为所有端口设置相同的条件。

考虑这个模型。的不同的子系统块,VariantFcnCall,有条件的子系统块作为选择。的尺寸。fcnVariantFcnCall对应于变量选择块上的控制输入端口。对于一个输入,变异来源带条件块= = 1连接到fcn端口。的VariantFcnCall块获取连接到的信号的可变条件fcn端口。分配给块的条件然后传播到连接到它的输入和输出端口的块。当您在设置后模拟此模型时一个= 1,变条件= = 1传播的VariantFcnCallBlock and to the三机一体着干活块连接到它,如变体条件图例所示。

限制

当使用有条件执行的系统作为变量选择时,不支持这些条金宝app件不同的子系统布洛克:

  • 行动的港口块在变量选择中。

  • 迭代器端口块的变体选择不同的子系统变体激活时间设置为代码编译

  • 将模型配置为AUTOSAR组件,并将可运行子系统作为变体选择。

  • 初始化函数,重置功能,终止函数,金宝app仿真软件的功能块。

    请注意

    Initialize和Terminate事件端口始终是无条件的,因为它们控制了所引用模型的模型默认和特定于块的初始化和终止事件。如果在引用的模型中定义Initialize函数块,则它对应于显式的Initialize事件。

相关的话题