使用变体子系统模块,有条件地执行子系统
您可以使用有条件地执行子系统使用控制输入端口等启用,触发,重置,函数调用子系统中变异的选择不同的子系统块。有条件地执行系统的更多信息,请参阅有条件地执行子系统概述。
当你使用有条件地执行子系统是不同的选择:
控制端口的类型模块的所有变体的选择必须是一样的不同的子系统块。例如,您不能使用启用子系统和函数调用子系统选择在一个街区不同的子系统块。
控制端口不同的子系统块和相应的控制端口的变体的选择必须具有相同的名称。例如,如果控制端口的名称不同的子系统是
fcn
,那么相应的控制端口的名称选择也必须在所有的变体fcn
。
请注意
内部的控制端口上设置的属性不同的子系统在模拟和生成代码块将被忽略。
创建一个变体子系统与子系统启用的选择
考虑这模型不同的子系统块命名控制器
和两个启用子系统块,线性
和非线性
变体的选择。上的变异条件线性
和非线性
块VSSMODE = = 0
和VSSMODE = = 1
,分别。如果你使用一个启用子系统块的线性
选择,然后非线性
也必须是一个选择启用子系统。
当你从这个模型中,生成的代码线性
和非线性
选择是有相应的变体守卫条件。
步骤(){#如果VSSMODE = = 0为线性选择....... / /代码# elif VSSMODE = = 1 / /代码.......非线性的选择# endif
使用变体子系统块创建一个导出功能模型
导出功能模型是仿真软件金宝app®模型生成代码独立函数,可以集成与外部环境和调度器。您可以使用一个不同的子系统块与函数调用子系统块变体的选择创建一个导出功能模型。导出功能模型的更多信息,参见导出功能模型概述。
考虑一个包含一个模型不同的子系统块命名VariantFcnCall
有两个函数调用子系统块,线性
和非线性
变体的选择。变量条件线性
和非线性
的选择是VSS_MODE = = 0
和VSS_MODE = = 1
,分别。的VariantFcnCall
块根水平函数调用尺寸块,fcn
,相同的名称上的控制端口线性
和非线性
选择块。的变体激活时间参数的VariantFcnCall
被设置为代码编译
。如果你使用一个函数调用子系统块的线性
选择,然后非线性
也必须是一个选择函数调用子系统。
你也可以有类似的建模模式与多点输入函数使用模型块。
在本例中,输入fcln1
,fcln2
,fcln3
路由通过一个不同的子系统块,模型
,它使用模型块是不同的选择。
导出功能模型的代码生成
当你从这个模型生成代码变体激活时间的VariantFcnCall
设置为代码编译
,导出函数的定义fcn
包含了C
预处理条件#如果
和# endif
。的代码线性
和非线性
选择是有相应的变体守卫条件。当你从这个模型生成代码变体激活时间的VariantFcnCall
设置为启动
导出功能的定义,fcn
,包含了常规如果
条件。的代码线性
和非线性
选择是有相应的变体守卫条件。
这是与激活时间设置为生成的代码代码编译
。有关配置的更多信息模型来生成代码,看看准备Variant-Containing模型代码生成。
空白fcn (void) {/ * RootInportFunctionCallGenerator:“< Root > / RootFcnCall_InsertedFor_fcn_at_outport_1”* / #如果VSSMODE rtDWork.Linear = = 0。DiscreteFilter = rtU。三机一体- 0.5 * rtDWork.Linear.DiscreteFilter_states; rtDWork.Linear.DiscreteFilter_states = rtDWork.Linear.DiscreteFilter; #endif /* VSSMODE == 0 */ #if VSSMODE == 1 rtDWork.Nonlinear.DiscreteFilter = look1_binlxpw(rtU.In1, 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
,使用变异条件,使用变异来源块的变体激活时间设置为代码编译
如这个例子所示。
请注意
函数定义是守卫将只有当激活时间代码编译
。函数定义不保护街区启动
激活时间。
在生成的代码中,导出函数的定义,fcn ()
,谨慎= = 1
。
#如果= = 1空白fcn (void) {…. .}# endif
这个函数可以使用类似的代码片段。
……#如果= = 1 fcn () # endif……
传播变异条件变体子系统块条件子系统
当你传播条件变体有条件子系统,同等条件下将所有端口。
考虑这个模型。的不同的子系统块,VariantFcnCall
,有条件子系统模块的选择。的尺寸。fcn
在VariantFcnCall
对应于控制输入端口选择块的变体。对于一个输入,变异来源块的条件= = 1
是连接到fcn
端口。的VariantFcnCall
块得到的变异条件信号连接fcn
端口。条件分配给块然后传播到块连接到其输入和输出端口。当你设置后模拟该模型一个= 1
、变异条件= = 1
传播的VariantFcnCall
块和三机一体
和着干活
块连接,如图所示在不同条件下的传奇。
限制
这些条件不支持使用条件时执行系统在一个变体的选择金宝app不同的子系统布洛克:
行动的港口块的变体的选择。
迭代器端口块的变体的选择不同的子系统与变体激活时间设置为
代码编译
。配置一个模型作为AUTOSAR组件子系统的选择与运行的变体。
初始化函数,重置功能,终止函数,金宝app仿真软件的功能块。
请注意
初始化和终止事件港口总是无条件的,因为他们控制模型的默认和屏蔽一些初始化和终止事件的参考模型。如果您定义一个初始化函数块在参考模型中,它对应于一个显式的初始化事件。