Main Content

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

在 Variant Subsystem 模块中定义、配置和激活变体选择项

表示可变子系统中的变体选择项

变体选择项是模型中一个组件的两种或多种配置。以下示例说明如何表示 Variant Subsystem 模块中的变体选择项。Variant Subsystem 模块允许您使用 SubsystemModelSubsystem Reference 模块的组合作为变体选择项。有关表示设计变体的其他方法,请参阅 Simulink 中变体的类型

  1. 将一个 Variant Subsystem 模块添加到模型中并对该模块命名。

    此模块用作变体选择项的容器。

  2. 双击 Variant Subsystem 模块。添加 InportOutport 模块,以匹配 Variant Subsystem 模块的输入和输出。

    注意

    您只能在一个 Variant Subsystem 模块内添加 InportOutportSubsystemModelSubsystem Reference 模块。您可以通过数据端口来传递控制信号。

  3. 打开模块参数对话框。右键点击 Variant Subsystem 模块上的标记,然后选择模块参数(子系统)

    提示

    有关 Variant Subsystem 模块上所有参数的信息,请参阅 Variant Subsystem, Variant Model

    模块参数对话框中的变体选择项表显示包含在 Variant Subsystem 中的变体选择项。您可以使用表左侧的按钮来添加或修改表中的元素。

    操作按钮
    创建并添加新子系统选择项:创建一个新的 Subsystem 模块作为变体选择项,并在表中为新选择项添加一个条目。the Create and add a new subsystem choice button
    创建并添加新模型变体选择项:创建一个新的 Model 模块作为变体选择项,并在表中为新选择项添加一个条目。the Create and add a new model variant choice button

    创建/编辑所选变体对象:在全局工作区中创建或编辑一个 Simulink.Variant 对象,并使用 Simulink.Variant 对象参数对话框指定变体条件。

    注意

    对于使用基础工作区的模型,此操作会在基础工作区中创建 Simulink.Variant 对象,并且该对象仅在当前 MATLAB 会话中可用。要永久存储数据,请将对象保存在 MAT 文件或 MATLAB 脚本中。

    the Create or Edit selected variant object button
    打开所选变体模块选择项:打开所选行的 Subsystem 模块。the Open selected variant choice block button
    根据可变子系统内容刷新对话框信息:根据变体选择项以及全局工作区中变体控制项的值,更新变体选择项表。the Refresh dialog information from Variant Subsystem contents button

包含 Subsystem 模块作为变体选择项

要将 Subsystem 模块作为变体选择项包含在 Variant Subsystem 中,请执行以下操作:

  1. 在模块参数对话框中,为要添加的每个可变子系统选择点击 按钮。

    Simulink®Variant Subsystem 模块内创建空的 Subsystem 模块。新模块的输入和输出端口数与作为其父容器的 Variant Subsystem 模块相同。

    提示

    如果您的变体选择项具有不同数量的输入和输出端口,请参阅在可变子系统中映射变体选择项的输入端口和输出端口

  2. 打开每个 Subsystem 模块并创建一个表示变体选择项的模型。

  3. 在为变体进行原型构建时,可以在 Variant Subsystem 模块内创建没有输入或输出的空 Subsystem 模块。使用空子系统,无需对变体完整建模,即可重建子系统处于非活动状态的情形。对于空变体选择项,可以指定变体激活条件,也可以通过在条件前放置 % 符号来注释掉变体条件。

    如果在编译期间空变体选择项处于活动状态,Simulink 将忽略它。

包含 Simulink 模型作为变体选择项

您可以在 Variant Subsystem 模块中包含 Simulink 模型作为变体选择项。

  1. 创建一个要作为变体选择项包含在可变子系统中的模型。确保其输入和输出端口数与作为其父容器的 Variant Subsystem 模块相同。

    注意

    如果您的模型有不同的输入和输出端口数,请参阅在可变子系统中映射变体选择项的输入端口和输出端口

  2. 在模型中,右键点击包含变体选择项的 Variant Subsystem 模块,然后选择模块参数(子系统)

  3. 在模块参数对话框中,点击 按钮以添加 Model 模块作为变体选择项。

    Simulink 在 Variant Subsystem 模块中创建未解析的 Model 模块。

  4. 双击未解析的 Model 模块。在模型名称框中,输入要用作模型变体选择项的模型的名称,然后点击确定

配置变体控制项

您可以使用变体控制项指定激活变体选择项的条件。虽然模型中的每个变体选择项与一个变体控制项相关联,但只有一个变体控制项的计算结果为 true。您还可以将最多一个变体选择项指定为默认值。

您可以使用变体控制项模式参数选择您要指定变体控制项所处的模式。此示例使用“表达式”模式。此处,我们将变体控制项指定为布尔条件表达式,其中包含在模型的基础工作区中定义的普通 MATLAB® 变量。

提示

有关不同变体控制项模式的信息,请参阅Introduction to Variant Controls

有关变体条件表达式中支持的变体控制项变量类型的信息,请参阅Types of Variant Control Variables (Operands) in Variant BlocksTypes of Variant Control Variables (Operands) in Variant Parameters

  1. 在 MATLAB 命令行窗口中,指定可组合创建激活条件的变体控制项变量。

    mode = 3;
    version = 2;

  2. 右键点击 Variant Subsystem 模块(该模块是模型中变体选择项的容器),然后选择模块参数(子系统)

  3. 在模块参数对话框的变体控制项列中,选择一个选择项的 “(默认值)”。

  4. 为每个其他选择项指定一个变体条件。如果您使用的是空变体选择项,请为该选择项指定一个变体条件,或通过在条件前放置 % 符号来注释掉现有激活条件。

    Simulink 计算变体控制项,并验证在仿真期间只有一个变体选择项处于活动状态。如果没有变体控制项的计算结果为 true,则 Simulink 使用 “(默认值)” 变体进行仿真和代码生成。

    如果选择允许零个活动变体控制项,则 Variant Subsystem 中可以有零个活动变体选择项。当您选择此选项并且没有活动变体选择项时,Simulink 会在 Variant Subsystem 中没有任何活动变体选择项的情况下仿真模型。仅当 Variant Subsystem 中没有 “(默认值)” 变体选择项且您将变体控制项模式设置为“表达式”时,此参数才可用。

  5. 点击应用以保存所做更改。

    Block parameter dialog box for a Variant Subsystem with an empty variant choice, a default variant choice, and two other choices

在可变子系统中映射变体选择项的输入端口和输出端口

Variant Subsystem 模块允许您使用 SubsystemModelSubsystem Reference 模块的组合作为变体选择项。Variant Subsystem 模块从上游模型组件接收的输入映射到变体选择项的输入和输出端口。

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

  • 变体选择项必须具有与 Variant Subsystem 容器模块相同的一组输入端口,或它必须是容器模块上端口的子集。

  • 变体选择项必须具有与 Variant Subsystem 容器模块相同的一组输出端口,或它必须是容器模块上端口的子集。

  • 变体选择项必须具有与 Variant Subsystem 容器模块相同的控制端口集。

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

转换为 Variant Subsystem 模块

在 Simulink 编辑器中,您可以将下列模块转换为 Variant Subsystem 模块:

  • Subsystem 模块

  • Model 模块

  • Variant Model 模块(对于在 R2017b 之前的版本中创建的模型)

  • 条件执行子系统

为此,请右键点击模块。然后,在上下文菜单中点击子系统和模型引用 > 转换为 > 可变子系统

您也可以通过编程方式将这些模块转换为 Variant Subsystem 模块。为此,请使用以下任一语法:

  • Simulink.VariantManager.convertToVariant(gcb)

  • Simulink.VariantManager.convertToVariant(gcbh)

例如:

open_system('sldemo_variant_subsystems');
Simulink.VariantManager.convertToVariant('sldemo_variant_subsystems/Controller');

如果将变体模型转换为可变子系统,请注意 Model 模块参数生成预处理器条件句的行为与 Variant Subsystem 模块参数变体激活时间的行为不同。对于变体模型,启用生成预处理器条件句参数会导致仿真和更新图仅编译活动变体。对于可变子系统,启用该参数会编译所有变体,这会使仿真和更新变慢。

将变体模型转换为可变子系统可能需要更新使用 Variants 命令行参数的脚本。

相关示例

详细信息