传播变异条件变体以外的子系统
在模拟和代码生成,仿真软件金宝app®传播模型的变异条件来确定哪些组件保持活跃。默认情况下,这些条件并不外传播不同的子系统。允许传播条件的连接块,您可以使用传播条件子系统之外的变体的参数不同的子系统块。更多的信息不同的子系统块,看变体子系统,变体模型。
传播的变异条件之外的不同的子系统块确保组件之外的块都知道底层块的活跃的和不活跃的状态不同的子系统。
提示
变异条件注释模型组件帮助您可视化传播条件。
查看注释,调试选项卡上,选择信息覆盖>变体的传说。
如果变体的传说不可用,对吗调试选项卡上,选择信息覆盖>变异的条件。
影响传播的变异的因素条件
传播的变异条件之外的不同的子系统取决于物体的变体激活时间和潜在的接口变量的选择。的变体激活时间确定模型必须分析只有主动选择金宝app或活跃的和不活跃的选择的块当模拟或从模型中生成代码。如果分析变体选择的接口匹配的接口不同的子系统块,外的变异状况没有传播不同的子系统。换句话说,如果分析变异的选择使用所有的输入和输出信号不同的子系统块,变异条件不传播以外的块。变异条件之外的传播不同的子系统块只有在接口不匹配。
变体自适应用户界面子系统
这个例子展示了如何传播变异条件变体子系统外块使块适应其接口根据底层块不同活化时间的状态。同时,生成的代码不同的激活时间解释道。因素影响传播的信息,请参阅影响传播的变异的因素条件。
考虑到slexVariantSubsystemsAdaptiveInterface
模型包含子系统块命名的一个变体控制器
有两个变体的选择,线性
和非线性
。的线性
控制器是活跃的时V = 1
,非线性
控制器是活跃的时V = 2
。V
控制变量是一个变体中定义的吗PreLoadFcn
模型的回调。
改变变量控制变量的值,在MATLAB™命令窗口中,键入V = 1
或V = 2
。
双击控制器
块以查看其内容。的线性
和非线性
控制器模块没有相同的接口。的港口sensor1
和sensor3
被用在线性
控制器和非线性
控制器模块,但sensor2
只有在使用线性
控制器。因此,sensor2
只有当块活跃线性
控制器是活跃的和不执行其他的选择。使模型组件之外的变体子系统(控制器
)的活动或非活动状态块内的变异子系统块,块条件必须传播的边界之外。外部的传播条件控制器
块,选择传播条件子系统之外的变体块参数对话框的块。默认情况下,这个参数设置从
。
传播的变异条件子系统依赖于外的变体变体激活时间块和接口的底层变体的选择。有关更多信息,请参见传播不同的激活时间。
传播不同的激活时间
接下来,模拟的模型和生成代码线性
和非线性
与不同活化时间控制器。
请注意
在模型中,饱和
端口是一个无关的输出端口,所以它不包括在生成的代码的任何变体激活时间。
传播条件更新图
块的参数对话框
控制器
块,设置变体激活时间来更新图。激活
线性
控制器及其连接块,改变的价值V
来1
和模拟模型。从模型生成代码通过使用嵌入式编码器®并观察结果。生成的代码只包含
线性
控制器。关于如何生成代码的信息,请参阅使用嵌入式编码器生成代码(嵌入式编码)。同样,激活
非线性
控制器及其连接块,改变的价值V
来2
和模拟模型。从模型生成代码并观察结果。
这个表比较了传播的变异条件和生成的代码线性
和非线性
控制器的选择更新图
激活时间。
当V = 1线性控制器是活跃的 | 当V = 2非线性控制器是活跃的 |
---|---|
|
|
请注意
当传播变体以外的条件不同的子系统与更新图
激活时间:
如果你设置允许控制零活跃的变体来
在
、变异条件显示在所有其他活跃的港口和其连接块区分属于变异区域活动块和块属于固定区域在模拟。生成的代码允许控制零活跃的变体是相同的。
传播条件更新图分析所有的选择
块的参数对话框
控制器
块,设置变体激活时间来更新图分析所有的选择。激活
线性
控制器及其连接块,改变的价值V
来1
和模拟模型。从模型生成代码通过使用嵌入式编码器和观察结果。生成的代码只包含
线性
控制器。关于如何生成代码的信息,请参阅使用嵌入式编码器生成代码(嵌入式编码)。同样,激活
非线性
控制器及其连接块,改变的价值V
来2
和模拟模型。从模型生成代码并观察结果。
这个表比较了传播条件的变体线性
和非线性
控制器的选择与更新图分析所有的选择
激活时间。生成的代码是一样的更新图
。
当V = 1线性控制器是活跃的 | 当V = 2非线性控制器是活跃的 |
---|---|
|
|
请注意
当传播变体以外的条件不同的子系统与更新图分析所有的选择
激活时间:
如果你设置允许控制零活跃的变体来
在
、变异条件显示在所有其他活跃的港口和其连接块区分属于变异区域活动块和块属于固定区域在模拟。生成的代码允许控制零活跃的变体是相同的。
传播条件代码编译
块的参数对话框
控制器
块,设置变体激活时间来代码编译。激活
线性
控制器及其连接块,改变的价值V
来1
和模拟模型。从模型生成代码通过使用嵌入式编码器和观察结果。生成的代码只包含
线性
控制器。关于如何生成代码的信息,请参阅使用嵌入式编码器生成代码(嵌入式编码)。同样,激活
非线性
控制器及其连接块,改变的价值V
来2
和模拟模型。从模型生成代码并观察结果。
变体的传播条件线性
和非线性
控制器的选择是一样的更新图分析所有的选择
。生成的代码线性
和非线性
控制器如图所示。
代码包含活跃的和不活跃的港口。至少使用的港口没有任何必要的变体的选择是封闭的预处理条件#如果
和# elif
。在本例中,输入端口sensor2
是封闭的条件V = = 2
。
/ / slexVariantSubsystemsAdaptiveInterface。h外部输入(根尺寸信号用默认存储)* / typedef struct {real_T三机一体;/ * < Root > / In1”* / #如果V = = 2 real_T In2;/ * < Root > / In2”* / # define EXTERNALINPUTS_VARIANT_EXISTS # endif real_T In3;/ * < Root > / In3”* /} ExternalInputs;/ /外部输出(根外港的/ /信号与默认存储)typedef struct {real_T u;
活跃的和不活跃的选择是封闭的预处理条件#如果
和# elif
。
/ / slexVariantSubsystemsAdaptiveInterface。c / *模型阶跃函数* /无效步骤(void){#如果V = = 1 / /线性逻辑选择# elif V = = 2 / /非线性逻辑选择}/ *模型初始化函数* /空间初始化(void){/ *(不需要初始化代码)* /}
请注意
当传播变体以外的条件不同的子系统与代码编译
激活时间,如果你设置允许控制零活跃的变体来在
,选择封闭在一个额外的条件语句#如果V = = 1 | | V = = 2
。这跳过编译的选择,如果没有选择的评估真正的
。
传播条件启动
块的参数对话框
控制器
块,设置变体激活时间来启动。激活
线性
控制器及其连接块,改变的价值V
来1
和模拟模型。从模型生成代码通过使用嵌入式编码器和观察结果。生成的代码只包含
线性
控制器。关于如何生成代码的信息,请参阅使用嵌入式编码器生成代码(嵌入式编码)。同样,激活
非线性
控制器及其连接块,改变的价值V
来2
和模拟模型。从模型生成代码并观察结果。
变体的传播条件线性
和非线性
控制器的选择是一样的更新图分析所有的选择
。
生成的代码线性
和非线性
控制器如图所示。
代码包含活跃的和不活跃的港口。
/ / slexVariantSubsystemsAdaptiveInterface。h / *外部输入(根尺寸信号用默认存储)* / typedef struct {real_T三机一体;/ * < Root > / In1”* / real_T In2;/ * < Root > / In2”* / real_T In3;/ * < Root > / In3”* /} ExternalInputs;/ /外部输出(根外港美联储通过信号/ /默认存储)* / typedef struct {real_T u;/ * < Root > / u的* /}ExternalOutputs;
常规的活跃的和不活跃的选择是封闭的如果
和其他的如果
条件。
/ / slexVariantSubsystemsAdaptiveInterface。c / *模型阶跃函数* /无效步骤(void){如果(V = = 1) / /线性逻辑选择else if (V = = 2) / /非线性逻辑选择}/ *模型初始化函数* /空间初始化(void) {startupVariantChecker ();}静态孔隙startupVariantChecker (void){/ *启动变体* / utAssert ((rtP条件检查。V = = 1.0) + (rtP。V = = 2.0) = = 1);}
请注意
当传播变体以外的条件不同的子系统与启动
激活时间,如果你设置允许控制零活跃的变体来在
,选择封闭在一个额外的条件语句如果V = = 1 | | V = = 2
。这跳过编译的选择,如果没有选择的评估真正的
。
没有尺寸和外港块传播
考虑这模型不同的子系统块,有两个不同的选择。没有港口或输出港。两个变体选择的条件Var = = 1
和Var = = 2
,分别。当传播条件子系统之外的变体参数的不同的子系统块设置为从
,一个逻辑或变异的条件,Var = = 1 | | Var = = 2
上设置的不同的子系统块。当参数设置在
,没有条件应用于不同的子系统块。
传播条件以编程方式
外的传播条件不同的子系统块编程,使用这些语法:
传播条件:
set_param (VariantSubsystemName“PropagateVariantConditions”,“上”)
例如,
set_param (“sldemo_variant_subsystems /控制器”、“PropagateVariantConditions”,“上”)
传播条件和生成代码预处理条件:
set_param (VariantSubsystemName PropagateVariantConditions,…“上”、“VariantActivationTime”、“代码编译)
例如,
set_param (“slexVariantSubsystems /控制器”、“PropagateVariantConditions”,…“上”、“VariantActivationTime”、“代码编译)
限制
传播的变异条件变体子系统可以设置在Simscape™或Stateflow®块的更新图
变体激活时间。
请注意
所有元素的Mux,多路分配器,或者一个向量连接块信号必须有相同的变异情况。