主要内容

传播变异条件变体以外的子系统

在模拟和代码生成,仿真软件金宝app®传播模型的变异条件来确定哪些组件保持活跃。默认情况下,这些条件并不外传播不同的子系统。允许传播条件的连接块,您可以使用传播条件子系统之外的变体的参数不同的子系统块。更多的信息不同的子系统块,看变体子系统,变体模型

传播的变异条件之外的不同的子系统块确保组件之外的块都知道底层块的活跃的和不活跃的状态不同的子系统

提示

变异条件注释模型组件帮助您可视化传播条件。

查看注释,调试选项卡上,选择信息覆盖>变体的传说

如果变体的传说不可用,对吗调试选项卡上,选择信息覆盖>变异的条件

模型展示传播的变异条件子系统之外的一个变体

影响传播的变异的因素条件

传播的变异条件之外的不同的子系统取决于物体的变体激活时间和潜在的接口变量的选择。的变体激活时间确定模型必须分析只有主动选择金宝app或活跃的和不活跃的选择的块当模拟或从模型中生成代码。如果分析变体选择的接口匹配的接口不同的子系统块,外的变异状况没有传播不同的子系统。换句话说,如果分析变异的选择使用所有的输入和输出信号不同的子系统块,变异条件不传播以外的块。变异条件之外的传播不同的子系统块只有在接口不匹配。

变体自适应用户界面子系统

这个例子展示了如何传播变异条件变体子系统外块使块适应其接口根据底层块不同活化时间的状态。同时,生成的代码不同的激活时间解释道。因素影响传播的信息,请参阅影响传播的变异的因素条件

考虑到slexVariantSubsystemsAdaptiveInterface模型包含子系统块命名的一个变体控制器有两个变体的选择,线性非线性。的线性控制器是活跃的时V = 1,非线性控制器是活跃的时V = 2V控制变量是一个变体中定义的吗PreLoadFcn模型的回调。

改变变量控制变量的值,在MATLAB™命令窗口中,键入V = 1V = 2

双击控制器块以查看其内容。的线性非线性控制器模块没有相同的接口。的港口sensor1sensor3被用在线性控制器和非线性控制器模块,但sensor2只有在使用线性控制器。因此,sensor2只有当块活跃线性控制器是活跃的和不执行其他的选择。使模型组件之外的变体子系统(控制器)的活动或非活动状态块内的变异子系统块,块条件必须传播的边界之外。外部的传播条件控制器块,选择传播条件子系统之外的变体块参数对话框的块。默认情况下,这个参数设置

传播的变异条件子系统依赖于外的变体变体激活时间块和接口的底层变体的选择。有关更多信息,请参见传播不同的激活时间

传播不同的激活时间

接下来,模拟的模型和生成代码线性非线性与不同活化时间控制器。

请注意

在模型中,饱和端口是一个无关的输出端口,所以它不包括在生成的代码的任何变体激活时间。

传播条件更新图

  1. 块的参数对话框控制器块,设置变体激活时间更新图

  2. 激活线性控制器及其连接块,改变的价值V1和模拟模型。

  3. 从模型生成代码通过使用嵌入式编码器®并观察结果。生成的代码只包含线性控制器。关于如何生成代码的信息,请参阅使用嵌入式编码器生成代码(嵌入式编码)

  4. 同样,激活非线性控制器及其连接块,改变的价值V2和模拟模型。从模型生成代码并观察结果。

这个表比较了传播的变异条件和生成的代码线性非线性控制器的选择更新图激活时间。

当V = 1线性控制器是活跃的 当V = 2非线性控制器是活跃的
  • 只有线性控制器进行了分析。

  • 线性控制器只使用sensor1,sensor3u端口,这些端口和连接块是活跃的。的线性控制器不使用sensor2饱和端口,这些端口和连接块是不活跃的。因为的接口线性控制器是不同的控制器子系统,子系统的变异条件外传播。条件只传播使用的端口不选择至少一个变体。在这个例子中,变异注释v: 2与条件设置为显示在sensor2,饱和,所有的连接块。在不同条件下的传说,被设置为一个条件如果条件的块与不活跃。

    传播的变异条件以外的控制器子系统当V = 1更新图激活时间

  • 生成的代码只包含活跃的港口。在本例中,输入端口In2是不活跃的,所以它不是生成的代码的一部分。

    / / slexVariantSubsystemsAdaptiveInterface。h / *外部输入(根尺寸信号用默认存储)* / typedef struct {real_T三机一体;/ * < Root > / In1”* / real_T In3;/ * < Root > / In3”* /} ExternalInputs;/ *外部输出(与默认存储根外港)* / typedef struct {real_T u;/ * < Root > / u的* /}ExternalOutputs;

    主动选择无条件的。无条件语句不包含在任何条件语句和编译或执行(不分的状态变量的选择。

    / / slexVariantSubsystemsAdaptiveInterface。c / *模型阶跃函数* /无效步骤(void){/ /线性逻辑选择}/ *模型初始化函数* /空间初始化(void){/ * * /(不需要初始化代码)

  • 只有非线性控制器进行了分析。

  • 非线性控制器使用的所有输入和输出端口控制器子系统,因此所有输入端口sensor1,sensor2,sensor3,和所有的连接块是活动的。此外,所有的输出端口u,饱和,和所有的连接块是活动的。由于匹配的接口,变体以外的条件不传播控制器子系统。

    传播的变异条件以外的控制器子系统当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;

    主动选择无条件的。无条件语句不包含在任何条件语句和编译或执行(不分的状态变量的选择。

    / *模型阶跃函数* /无效步骤(void){/ /非线性逻辑选择}/ *模型初始化函数* /空间初始化(void){/ * * /(不需要初始化代码)

请注意

当传播变体以外的条件不同的子系统更新图激活时间:

  • 如果你设置允许控制零活跃的变体、变异条件显示在所有其他活跃的港口和其连接块区分属于变异区域活动块和块属于固定区域在模拟。

  • 生成的代码允许控制零活跃的变体是相同的。

传播条件更新图分析所有的选择

  1. 块的参数对话框控制器块,设置变体激活时间更新图分析所有的选择

  2. 激活线性控制器及其连接块,改变的价值V1和模拟模型。

  3. 从模型生成代码通过使用嵌入式编码器和观察结果。生成的代码只包含线性控制器。关于如何生成代码的信息,请参阅使用嵌入式编码器生成代码(嵌入式编码)

  4. 同样,激活非线性控制器及其连接块,改变的价值V2和模拟模型。从模型生成代码并观察结果。

这个表比较了传播条件的变体线性非线性控制器的选择与更新图分析所有的选择激活时间。生成的代码是一样的更新图

当V = 1线性控制器是活跃的 当V = 2非线性控制器是活跃的
  • 线性控制器和非线性控制器的选择进行了分析。

  • 线性控制器只使用sensor1,sensor3u端口,这些端口和连接块是活跃的。的线性控制器不使用sensor2饱和端口,这些端口和连接块是不活跃的。

  • 因为只有的接口非线性控制器的匹配控制器子系统的接口线性控制器的接口不匹配控制器子系统,变异条件之外的传播控制器子系统。条件只传播使用的端口不选择至少一个变体。在这个例子中,变异注释v: 1与条件设置为V = = 2是显示在sensor2,饱和,其连接块。

传播的变异条件以外的控制器子系统当V = 1更新图分析所有选择激活时间

  • 线性控制器和非线性控制器的选择进行了分析。

  • 非线性控制器使用的所有输入和输出端口控制器子系统,因此所有输入端口sensor1,sensor2,sensor3,和所有的连接块是活动的。此外,所有的输出端口u,饱和,和所有的连接块是活动的。

  • 因为只有的接口非线性控制器的匹配控制器子系统的接口线性控制器的接口不匹配控制器子系统,变异条件之外的传播控制器子系统。条件只传播使用的端口不选择至少一个变体。在这个例子中,变异注释v: 1与条件设置为V = = 2是显示在sensor2,饱和,其连接块。

传播的变异条件以外的控制器子系统当V = 2更新图分析所有选择激活时间

请注意

当传播变体以外的条件不同的子系统更新图分析所有的选择激活时间:

  • 如果你设置允许控制零活跃的变体、变异条件显示在所有其他活跃的港口和其连接块区分属于变异区域活动块和块属于固定区域在模拟。

  • 生成的代码允许控制零活跃的变体是相同的。

传播条件代码编译

  1. 块的参数对话框控制器块,设置变体激活时间代码编译

  2. 激活线性控制器及其连接块,改变的价值V1和模拟模型。

  3. 从模型生成代码通过使用嵌入式编码器和观察结果。生成的代码只包含线性控制器。关于如何生成代码的信息,请参阅使用嵌入式编码器生成代码(嵌入式编码)

  4. 同样,激活非线性控制器及其连接块,改变的价值V2和模拟模型。从模型生成代码并观察结果。

变体的传播条件线性非线性控制器的选择是一样的更新图分析所有的选择。生成的代码线性非线性控制器如图所示。

代码包含活跃的和不活跃的港口。至少使用的港口没有任何必要的变体的选择是封闭的预处理条件#如果# 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。这跳过编译的选择,如果没有选择的评估真正的

传播条件启动

  1. 块的参数对话框控制器块,设置变体激活时间启动

  2. 激活线性控制器及其连接块,改变的价值V1和模拟模型。

  3. 从模型生成代码通过使用嵌入式编码器和观察结果。生成的代码只包含线性控制器。关于如何生成代码的信息,请参阅使用嵌入式编码器生成代码(嵌入式编码)

  4. 同样,激活非线性控制器及其连接块,改变的价值V2和模拟模型。从模型生成代码并观察结果。

变体的传播条件线性非线性控制器的选择是一样的更新图分析所有的选择

生成的代码线性非线性控制器如图所示。

代码包含活跃的和不活跃的港口。

/ / 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 = = 1Var = = 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,多路分配器,或者一个向量连接块信号必须有相同的变异情况。

相关的话题