条件与变体子系统传播
当你指定条件变体模型包含变种子系统模块,仿真软件万博1manbetx®传播这些条件来确定哪些组件模型的仿真期间是活跃的。变异条件可以是一个条件表达式或变量对象。
变异条件注释帮助您可视化传播条件。查看变异条件注释,点击显示>块>变异条件传奇。
请注意
的变异条件传奇只有当选择是可用显示>块>变异条件是活跃的。
考虑这个模型包含一个不同的子系统块与变体的选择。一个特定的变体条件激活每一块。
在不同子系统(控制器
),sensor1
和sensor3
都采用线性控制器和非线性控制器,但sensor2
只有在使用线性控制器。因此,sensor2
块只有当执行线性控制器的选择是积极和不执行任何其他的选择。确保组件之外的变体子系统(控制器
)的活动或非活动状态的街区不同的子系统,阻止条件必须传播以外的不同的子系统。
传播条件没有生成预处理条件
传播条件以外的变体子系统没有生成预处理条件,选择传播条件子系统之外的变体复选框的块参数对话框不同子系统的块。默认情况下,传播条件子系统之外的变体不是选择。
当你模拟模型与非线性控制器和主动的选择传播条件子系统之外的变体选择,只有积极的选择进行了分析。请注意,分析所有选择在更新图和生成预处理条件复选框不选中。
的变异条件传奇显示活动的条件假
。在这里,sensor2
不活跃的变体选择非线性控制器和被标记为假
。上显示的注释sensor2
连接端口和不活跃的块sensor2
。
当你为条件生成代码传播没有生成预处理条件,活动块将被忽略。在本例中,输入端口In2
不是生成的代码所示。
传播条件和生成预处理条件
传播条件变体以外的子系统生成预处理条件,选择传播条件子系统之外的变体复选框和分析所有选择在更新图和生成预处理条件复选框的块参数对话框的变体子系统。
当你模拟模型与非线性控制器和积极的选择传播条件子系统之外的变体复选框和分析所有选择在更新图和生成预处理条件复选框选中,所有变量的选择进行了分析。的变异条件传奇显示与模型相关的变异情况。
当您生成代码的传播条件生成预处理条件,模型分析了所有的选项。在本例中,输入端口In2
一度是必要条件。
变体自适应用户界面子系统
当您选择传播条件子系统之外的变体复选框的块的参数对话框中,变异子系统调整接口连接块。考虑这个模型。
控制器子系统,它提供了一个块是一个变体线性
和一个非线性
选择。的线性
选择是活跃的时V = 1
,非线性
选择是活跃的时V = 2
。在这里,V
是一个变异的控制变量万博1manbetxSimulink.Parameter
类型。选择控制器的块,并在仿真软件点击万博1manbetx图>块的参数(子系统)。验证传播条件子系统之外的变体复选框被选中。
改变变量控制变量的值,在MATLAB命令窗口中,键入V。Value = 1
或V。Value = 2
。
双击控制器块以查看其内容。的线性
选择使用sensor1
和sensor3
控制器的输入(变体子系统块)。这是没有使用sensor2
因此,不产生饱和
输出。
模拟该模型时,变体子系统块调整界面,这样的条件V = 2
(v: 1 v = 2
)传播In2
,过滤器
,饱和记录器
块。
条件与条件系统传播
传播条件有条件的系统时,同等条件下将所有端口。有关更多信息,请参见传播条件变体条件子系统。
考虑这个模型。是传播到这里,当条件轮廓尺寸块(fcn
),同等条件下传播的港口和外港(变体传说中所示),使不同的子系统块条件。
已知的限制
传播的变异条件变体子系统不能设置在Simscape块™域或Stateflow基于块。
不支持c++代码生成模型包含之外的传播条件万博1manbetx不同的子系统。
请注意
所有元素的Mux,多路分配器,或者一个向量连接块信号必须有相同的变异情况。
传播条件以编程方式
以外的传播条件不同的子系统通过编程,使用这些语法之一:
传播条件没有生成预处理条件:
set_param (VariantSubsystemName“PropagateVariantConditions”,“上”)
例如,
set_param (“sldemo_variant_subsystems /控制器”、“PropagateVariantConditions”,“上”)
传播条件生成预处理条件:
set_param (VariantSubsystemName PropagateVariantConditions,…“上”、“GeneratePreprocessorConditionals”,“上”)
例如,
set_param (sldemo_variant_subsystems /控制器,‘PropagateVariantConditions’,‘上’,……“GeneratePreprocessorConditionals”,“上”)
代码生成与有条件的系统
你可以通过选择为模型生成代码代码>C / c++代码>构建模型。配置模型来生成代码的更多信息,见准备Variant-Containing模型代码生成。
考虑模型包含一个变体不同的子系统块生成代码。
在生成的代码中,里面的代码fcn
把守C预处理器定义条件#如果
和# endif
。
无效fcn(空白){/ * RootInportFunctionCallGenerator:“< Root > / RootFcnCall_InsertedFor_fcn_at_outport_1”* / #如果VSSMODE rtDWork.Linear = = 0。DiscreteFilter = rtU。in - 0.5 * rtDWork.Linear.DiscreteFilter_states;rtDWork.Linear。DiscreteFilter_states = rtDWork.Linear.DiscreteFilter;# endif / * * / # VSSMODE = = 0如果VSSMODE rtDWork.Nonlinear = = 1。DiscreteFilter = look1_binlxpw (rtU。In1, rtCP_LookupTable_bp01Data rtCP_LookupTable_tableData 4 u) - 0.5 * rtDWork.Nonlinear.DiscreteFilter_states;rtDWork.Nonlinear。DiscreteFilter_states = rtDWork.Nonlinear.DiscreteFilter;# endif / * * / # VSSMODE = = 1如果而VSSMODE = = 0。着干活= rtDWork.Linear.DiscreteFilter;# endif / * * / # VSSMODE = = 0如果而VSSMODE = = 1。着干活= rtDWork.Nonlinear.DiscreteFilter;# endif / * VSSMODE = = 1 * /}
请注意
配置模型AUTOSAR组件不支持子系统的选择与运行的变体。万博1manbetx
守卫函数调用的定义
保护整个函数调用的含义(fcn
),使用变异来源如下所示。
在生成的代码中fcn ()
定义是守卫= = 1。
#如果= = 1无效fcn(空白){……}# endif
这个函数可以使用类似如下所示的代码片段。
……#如果= = 1 fcn () # endif……
相关的话题
- 准备Variant-Containing模型代码生成
- 源和汇变异条件下传播与变体
- 模型AUTOSAR变体(嵌入式编码)
- 代表子系统和模型变体在生成的代码(嵌入式编码)
- 掩蔽变体模型