主要内容

使用可变子系统块和有条件执行的子系统

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

请注意

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

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

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

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

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

step() {#if VSSMODE==0 //线性选择的代码.......#elif VSSMODE==1 // code for非线性选择.......# endif

使用变量子系统块创建导出函数模型

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

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

您还可以使用使用的多点入口函数来获得类似的建模模式模型块。

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

导出函数模型的代码生成

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

void fcn(void) {/* RootInportFunctionCallGenerator: '/RootFcnCall_InsertedFor_fcn_at_outport_1' */ #if VSSMODE == 0 rtd工作。In1 - 0.5 * rtdwork . linear . discrete tefilter_states;rtDWork.Linear。discrete tefilter_states = rtdwork . linear .离散过滤器;#endif /* VSSMODE == 0 */ #if VSSMODE == 1 rtdwork .非线性. discrete tefilter = look1_binlxpw(rtU. rtU.)三机一体,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

#if A == 1 void fcn(void) {.....} # endif

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

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

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

当您将一个可变条件传播到一个条件子系统时,将对所有端口设置相同的条件。

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

限制

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

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

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

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

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

    请注意

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

相关的话题