Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

什么是变体以及何时使用变体

什么是变体?

在 Simulink® 中,您可以使用变体模块创建一个能够满足多种变体要求的模型。此类模型具有一个固定的通用结构和一组有限的可变组件。可变组件根据您选择的变体选择项来激活。因此,产生的活动模型是基于变体选择项的固定结构和可变组件的组合。

在模型中使用变体模块有助于提高模型在不同条件表达式(称为变体选择项)中的重用率。这种方法可以帮助您根据应用、成本或运营考量来满足各种各样的客户需求。

您可以根据模型设计使用以下变体模块:

  • Variant Subsystem:适用于分层模型结构。该模块是一个模板,其中包含两个用作变体系统的 Subsystem 模块。您可以为变体添加 Subsystem 模块以及 Model 模块。

  • Variant Model:适用于分层模型结构。该模块是一个模板,其中包含两个用作变体系统的 Model 模块。您可以为变体添加 Model 模块以及 Subsystem 模块。

  • 内联变体:适用于平面模型结构。

注意

单输入 Variant Source / Variant Sink 模块的采样时间可能与多输入 Variant Source / Variant Sink 模块的采样时间不同。有关采样时间的详细信息,请参阅什么是采样时间?

使用 Variant Subsystem 模块具有以下优点:

  • 允许您混合 Model Subsystem 模块作为变体系统

  • 支持灵活的 I/O,因此,各个变体不必全都具备相同数量的输入和输出端口

要将包含变体模型的 Model 模块转换为包含引用了变体模型的 Model 模块的 Variant Subsystem 模块,请右键点击 Model 模块,然后选择 Subsystems & Model Reference > Convert to > Variant Subsystem。也可以使用 Simulink.VariantManager.convertToVariant 函数。指定 Model 模块名称或模块句柄。转换后的模型与原始模型产生相同的结果。

如果您要仿真一个模型,它表示一辆具有多种配置的汽车。这些配置虽然有些方面相似,但在油耗、发动机尺寸或排放标准等属性方面可能不同。这种情况下,您可以使用变体只建模不同的配置部分,而不用设计多个模型一起表示所有可能的配置。这种方法使通用组件保持不变。

此模型在一个 Variant Subsystem 模块中包含两个变体选择项。变体选择项是模型中一个组件的两种或多种配置。

使用变体的好处

在基于模型的设计中使用变体有几个好处:

  • 变体可让您设计出一个能够适合许多系统的模型。

  • 您可以通过变体的形式快速为多种设计可能性建立原型,而无需从模型中注释掉不同的部分。

  • 变体可帮助您开发模块化设计平台,方便重用和自定义。这种方法通过降低复杂度来提高工作流速度。

  • 如果一个模型组件有几种替代配置,您可以高效地探索这些变化的替代方案,而不用改动固定的、不变的组件。

  • 您可以使用同一个模型的不同变体配置进行仿真或代码生成。

  • 对于给定的测试套件,您可以通过组合的方式对每一种设计可能性进行仿真。

  • 如果您正在进行大型设计,则可以将这些设计的测试过程分散到一组多核计算机上。也可以将不同的测试套件映射到设计替代方案,以便有效地管理设计特定的测试。

  • 您可以从具有许多变体的主模型生成包含部分配置的简化模型。

何时使用变体

变体可以帮助您在一个统一的模块图中指定一个模型的多种实现。下面三种情况下可以使用变体:

  • 表示多种仿真、代码生成或测试工作流的模型。

  • 在组件级别包含多种设计选择的模型。

    表示变体选择项的 Subsystem 模块的输入和输出端口数量可以不同于父级 Variant Subsystem 模块中的输入和输出端口数量。请参阅映射变体选择项的输入和输出端口

  • 大体类似但略有不同的模型,例如在要将测试模型与调试模型分开的情况下。

    左侧的测试模型具有固定设计。右侧是同一个测试模型,但包含一个为了调试目的而引入的变体。

Simulink 将在更新图和编译代码时选择活动变体。

Simulink 中表示变体的选项

在以下模块中,可将一个或多个变体表示为变体选择项。

 

Variant SourceVariant Sink 模块

Variant SubsystemVariant Model 模块

变体选择项表示形式

端口数

SubsystemModel 模块

允许使用选择层次结构

变体选择项之间的输入和输出端口数量不匹配

Simulink 将禁用非活动端口

Simulink 将禁用非活动端口

是否可以指定默认变体

支持控制端口

可以保存为独立文件

支持物理建模连接端口

部分

注释选择 (%)

此外,也可以使用 Variant SourceVariant Sink 模块表示变体选择项。这些模块支持在整个模型中传播变体条件,并可以在模型引用层次结构中传播条件。

您可以在模型层次结构中的多个级别创建变体。

映射变体选择项的输入和输出端口

Variant Subsystem 模块是以 SubsystemModel 模块表示的变体选择项的容器。Variant Subsystem 模块从上游模型组件接收的输入映射到变体选择项的输入和输出端口。

表示变体选择项的 SubsystemModel 模块的输入和输出端口数量可以不同于父级 Variant Subsystem 模块中的输入和输出端口数量。但是,必须满足以下条件:

  • 变体选择项的输入端口的名称是父级可变子系统使用的输入端口名称的子集。

  • 变体选择项的输出端口的名称是父级可变子系统使用的输出端口名称的子集。

  • 如果变体选择项具有控制端口,则数据输入端口的名称必须与控制端口名称匹配。

仿真期间,Simulink 将禁用 Variant Subsystem 模块中的非活动端口。

变体标记

每个 Variant 模块都有一个关联的标记。变体标记的颜色和图标指示 Variant 模块的状态。通过它还可以快速访问几个变体命令。您可以右键点击变体标记来访问这些命令。

变体标记

变体信源

变体信宿

可变子系统

未选择任何选项时的默认变体标记。

Variant control mode 选为 “Label” 并从 Label mode active choice 选项中选择了活动变体的 Variant 模块。

选中 Allow zero active variant controls 选项的 Variant 模块。

expression” 选为 Variant control mode 且 “update diagram” 选为 Variant activation time 的 Variant 模块。

expression” 选为 Variant control mode 且 “update diagram analyze all choices” 选为 Variant activation time 的 Variant 模块。

expression” 选为 Variant control mode 且 “code compile” 选为 Variant activation time 的 Variant 模块。

sim codegen switching” 选为 Variant control mode 且 “update diagram” 选为 Variant activation time 的 Variant 模块。

sim codegen switching” 选为 Variant control mode 且 “update diagram analyze all choices” 选为 Variant activation time 的 Variant 模块。

选中 Propagate conditions outside of variant subsystem 选项的 Variant 模块。

不适用

不适用

update diagram” 选为 Variant activation time 且选择了 Allow zero active variant controls 选项的 Variant 模块。

update diagram analyze all choices” 选为 Variant activation time 且选择了 Allow zero active variant controls 选项的 Variant 模块。

code compile” 选为 Variant activation time 且选择了 Allow zero active variant controls 选项的 Variant 模块。

update diagram” 选为 Variant activation time 且选择了 Propagate conditions outside of variant subsystem 选项的 Variant 模块。

不适用

不适用

update diagram analyze all choices” 选为 Variant activation time 且选择了 Propagate conditions outside of variant subsystem 选项的 Variant 模块。

不适用

不适用

code compile” 选为 Variant activation time 且选择了 Propagate conditions outside of variant subsystem 选项的 Variant 模块。

不适用

不适用

选择了 Allow zero active variant controlsPropagate conditions outside of variant subsystem 选项的变体模块。

不适用

不适用

sim codegen switching” 选为 Variant control mode 且选择了 Propagate conditions outside of variant subsystem 选项的 Variant 模块。

不适用

不适用

Comment Out 和 Comment Through

假设您要在对 Simulink 模型进行仿真时排除其中某些模块,但并不实际删除这些模块。Simulink 中的 Comment OutComment Through 命令可帮助您从仿真中排除模块。根据您的建模要求,您可以使用以下选项:

  • Comment Out:从仿真中排除所选模块。信号将终止并采用接地值。

  • Comment Through:从仿真中排除所选模块。信号会通过。要将某个模块注释直通,该模块的输入端口数和输出端口数必须相同。

要访问 Comment OutComment Through 选项,请右键点击该模块,然后在上下文菜单中根据您的建模需求选择 Comment OutComment Through

您也可以选择模块,然后按 Ctrl+Shift+X 注释掉该模块,或按 Ctrl+Shift+Y 将该模块注释直通。

您可以使用 get_paramset_param 命令以编程方式查看或更改模块的注释状态。例如,

  • get_param(gcb,'commented'); % To view the commented state of the block

  • set_param(gcb,'commented','on'); % To comment out a block

  • set_param(gcb,'commented','through'); % To comment through a block

  • set_param(gcb,'commented','off'); % To uncomment a block

当您注释掉模块时,该模块输出端口的信号名称将被忽略。要在仿真时包括这些信号,必须在模块输入端口添加其信号名称。

以下模块不支持 Comment OutComment ThroughInportOutport、Duplicate Port、Connection portsArgument InportArgument OutportData Store MemorySignal GeneratorGoto Tag Visibility、For 和 While 模块。

相关示例

详细信息