Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

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

什么是变体?

在基于模型的设计工作流中,为系统组件创建多个设计变体对于满足不同需求集至关重要。这些需求可以满足不同市场需要、客户预设项或地理特征。在从需求到部署的整个开发生命周期中,您可能需要在这些设计选择项之间切换。

Simulink® 变体功能允许您在单个模型中表示一个系统的所有设计备选方案。每个设计选择项都作为一个变体选择项纳入模型中。这种模型有固定的通用结构和一组有限的可变组件,这些组件根据具体变体选择项而被激活。此模型展示 Variant Source 模块如何帮助您实现系统输入信号的变体选择项。非活动选择项淡显。

有关示例,请参阅使用变体创建一个能够适合许多系统的模型

Variable and fixed components in a model

使用变体的好处

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

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

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

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

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

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

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

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

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

何时使用变体

下面三种情况下可以使用变体。

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

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

大体类似但略有不同的模型,例如在要将测试模型与调试模型分开的情况下。左侧的测试模型具有固定设计。右侧是同一个测试模型,但包含一个为了调试目的而引入的变体。

Simulink 中变体的类型

变体模块帮助您在单个模型中表示一个系统组件的多个结构实现或算法实现,并允许您根据需要在它们之间切换。有关 Simulink 中变体模块类型的概述,请参阅 Simulink 中的变体模块

变体参数可帮助您实现需要不同模块参数值的设计变体。有关详细信息,请参阅Use Variant Parameters to Reuse Block Parameters with Different Values

变体转移允许您在同一个 Stateflow® 图中转移到多个设计配置。有关详细信息,请参阅Create Variant Configurations in Stateflow Charts (Stateflow)

维度变体允许您指定根据变体条件而变化的符号维度。请参阅Implement Symbolic Dimensions for Array Sizes in Generated Code (Embedded Coder)

AUTOSAR 变体使您能够使用变体模块来实现具有变体点的 AUTOSAR 软件组件。请参阅Model AUTOSAR Variants (AUTOSAR Blockset)

提示

有关 Simulink 中显示变体功能的示例列表,请参阅V-Model for System Development with Simulink Variants

要查看与变体结合使用的关键术语和参数的定义,请参阅Variant Terminology

有关展示变体代码生成功能的示例,请参阅变体系统 (Embedded Coder)

Simulink 中的变体模块

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

  • 分层变体模块:在模型的一个单独层次结构中创建一个组件的多个实现。

  • 内联变体模块:在模型的同一层级表示所有变体实现。

  • 基于事件的变体:使用变体对上下文相关的系统行为进行建模。

变体的类型变体模块使用
分层变体模块Variant Subsystem

Variant Subsystem 模块是一个模板,其中预配置了用于表示变体选择项的 Subsystem 模块。

Variant Subsystem 模块允许将 Subsystem 模块、Model 模块或 Subsystem Reference 模块的组合作为变体选择项。

Variant Model

Variant Model 模块是一个模板,其中预配置了两个表示变体选择项的 Model 模块。

Variant Model 模块允许将 Subsystem 模块、Model 模块或 Subsystem Reference 模块的组合作为变体选择项。

内联变体模块Variant SourceVariant Source 模块允许您将变体选择项定义为与其每个输入端口相连的模块区域。该模块提供信号源的变体。
Variant SinkVariant Sink 模块允许您将变体选择项定义为与其每个输出端口相连的模块区域。该模块提供信号目标的变体。
Manual Variant SourceManual Variant Source 模块是一个拨动开关,允许您在其输入端口上定义多个变体选择项。
Manual Variant SinkManual Variant Sink 模块是一个拨动开关,允许您在其输出端口上定义多个变体选择项。
Variant Connector (Simscape)Variant Connector 模块允许您在物理网络中定义变体选择项。在仿真期间,您可以在网络中的组件之间切换,而不必实际删除组件或将其排除在仿真之外。
基于事件的变体Simulink FunctionSimulink Function 模块中的变体功能使该模块在特定条件下可用。您可以在函数调用端口模块上指定变体条件,该模块也可以从其函数调用方模块继承条件。
Initialize FunctionReset FunctionTerminate Function 模块InitializeResetTerminate 模块中的变体功能使这些模块在特定条件下可用。您可以在事件侦听程序模块上指定变体条件。

比较变体模块

下表对分层变体模块和内联变体模块进行比较。

功能

Variant SourceVariant Sink 模块

Variant SubsystemVariant Model 模块

变体选择项表示形式

端口数

SubsystemModelSubsystem Reference 模块

允许在一个单独的层次结构中实现变体选择项

支持各变体选择项具有不同的输入和输出数目(这些选择项没有相似的接口)

是,如果将条件传播到可变子系统之外参数设置为 on

是否可以指定默认变体

支持控制端口

可以保存为独立文件

支持用于模拟物理连接线的 Connection Port

仅当变体激活时间参数设置为 update diagram 时。

对变体选择项进行注释(通过在“模块参数”对话框中的变体控制项前添加 % 符号)

使用变体创建一个能够适合许多系统的模型

此示例说明 Simulink 模型中的变体设计。假设需要对一个系统建模,该系统表示一辆具有多种配置的汽车。这些配置虽然有些方面相似,但在油耗、电机类型或排放标准等属性方面可能不同。

Automobile configurations with different properties

您可以将这些配置表示为单个模型中的多个变体选择项,而不必为每个配置设计单独的模型。您可以根据自己的需要选择激活任一变体选择项。这种方法使通用组件保持不变。

此模型包含一个表示车辆电机的 Variant Subsystem 模块 Motor Variant Subsystem。该电机有两种可能的配置,即 GasElectric,它们在 Variant Subsystem 模块中表示为变体选择项。Variant Subsystem 模块根据底层模块的状态调整其接口。此处,Electric 电机没有 exhaust temperature 输入。当您激活 Electric 变体时,Simulink 会自动禁用 Motor Variant Subsystem 上的对应端口以及与该输入相关联的任何其他模型组件。

对于此模型的 exhaust temperature 传感器,请考虑是否需要在两家供应商提供的五种不同传感器之间进行切换。您可以使用 Variant Source 模块来表示同一模型中的所有选择项,并一次只激活一个选择项。

Variant Source blocks used to select a sensor

使用变体

变体模型中的可视元素

可视元素使用
变体条件图例

“变体条件图例”对话框可帮助您可视化应用于模型的变体条件。Simulink 对具有变体条件的模型组件进行注释,变体条件图例显示每个注释的条件。请参阅Visualize Propagated Variant Conditions Using Variant Conditions Legend

variant condition legend

变体标记

每个变体模块显示一个标记,该标记随模块上设置的不同参数值而变化。请参阅变体标记

variant badge on variant block

变体淡显和信号突出显示

默认情况下,非活动变体选择项的颜色淡显。您可以选择使用 Simulink 编辑器的调试选项卡上的叠加信息菜单中的变体淡显选项来禁用淡显效果。

突出显示通过变体模块的信号会突出显示活动变体选择项的路径。请参阅变体系统中的信号突出显示

Signal highlighting in variant model

变体标记

每个变体模块显示一个标记。变体标记的颜色和图标根据模块上设置的以下参数的值而变化:

  • 变体激活时间

  • 变体控制项模式

  • 允许零个活动变体控制项(适用于 Variant SourceVariant Sink 模块)

  • 将条件传播到可变子系统之外(适用于 Variant Subsystem 模块)

通过变体标记还可以快速访问一些变体命令。右键点击变体标记可访问这些命令。

 变体模块上不同设置的变体标记图标

定义和控制变体选择项

您必须将模型中的每个变体选择项与一个用于确定该选择项是活动还是非活动的变体控制项相关联。对于变体模块,您可以使用变体控制项模式参数选择您要指定变体控制项所处的模式。有关详细信息,请参阅Introduction to Variant Controls

Variant control mode and variant activation time in the block parameters dialog box

使用变体条件传播自动识别变体区域

Simulink 通过变体条件传播过程确定在仿真期间处于活动状态的模型组件。此过程会计算在变体模块上指定的变体控制项,并自动将变体条件传播到连接模块。变体条件可以通过信号线、总线和函数调用传播。该过程会反激活与非活动选择项相关联的模型组件,将它们排除在仿真之外。您可以停止条件传播来定义模型中的变体区域。请参阅Variant Condition Propagation Overview

Variant condition propagation

选择变体激活时间

您也可以选择何时使用变体激活时间参数来确定活动变体选择项。此参数还确定活动和非活动选择项如何参与仿真和代码生成工作流。请参阅Activate Variant During Different Stages of Simulation and Code Generation Workflow

注意

仅当变体控制项模式设置为 expression 时,您才能为变体模块选择变体激活时间。

Manual Variant SourceManual Variant Sink 模块不支持变体控制项和变体激活时间。它们分别根据活动输入端口和输出端口来确定活动变体选择项。

Variant Connector 模块不支持变体激活时间。

使用变体管理器管理所有变体

变体管理器是一个集中管理工具,可用于管理模型中的所有变体点。该工具可帮助您可视化模型层次结构以及各个层级中的变体使用情况。请参阅Variant Manager for Simulink

创建和激活变体配置:

一个模型层次结构可能包含若干个变体模块,每个模块有许多变体选择项。这些变体选择项的组合对应于系统的特定配置。在这些配置之间切换并手动验证它们可能相当复杂,还可能引入错误。您可以使用变体管理器为一个模型创建预定义的配置,并在其中任一配置下运行该模型。您还可以根据一组约束来验证配置。

分析和简化变体配置:

您可以使用变体管理器中的变体配置分析工具来比较一个模型的各种变体配置,并确定在每个配置中使用哪些模块。该工具在模型验证和确认工作流中很有用,因为它可以识别模型中未使用的区域。

您可以使用变体管理器中的变体简化器工具,为部分变体配置自动生成简化模型,并在详细报告中分析该简化模型。简化过程会删除指定变体配置的非活动组件。变体简化器可简化模型中相关联的模型引用、子系统引用和库。该工具还可以简化任何依赖的工件,如 MAT 或 .sldd 文件,并将所有简化的工件打包到指定的输出文件夹中。vendor-supplier 工作流就使用了该工具。

Variant Manager

从变体模型中生成代码

您可以使用 Simulink Coder™ 或 Embedded Coder® 从变体模型生成代码。请参阅Prepare Variant-Containing Model for Code Generation

有关展示变体代码生成功能的示例,请参阅变体系统 (Embedded Coder)

相关示例

详细信息