Main Content

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

可变子系统、变体模型

包含 Subsystem、Model 或 Subsystem Reference 模块作为变体选择项的模板子系统

  • 库:
  • Simulink / Ports & Subsystems

    HDL Coder / Ports & Subsystems

  • Variant Subsystem, Variant Model block

描述

Variant Subsystem 模块使您可以在一个单独的层次结构中包含组件的多个实现。

例如,假设您要仿真一个车辆模型,该车辆具有三种可能的引擎配置:4 缸、6 缸和 8 缸。您可以将每个引擎模型实现为 Variant Subsystem 中的一个单独子系统,然后根据您选择的Types of Variant Control Modes in Variant Blocks在子系统之间切换。有关详细信息,请参阅Introduction to Variant Controls

注意

在仿真期间,只有一个 Variant Subsystem 实现处于活动状态。

Multiple models of an engine inside a Variant Subsystem block

Variant Subsystem 模块是一个模板,预配置为包含两个或更多模块以用作变体选择项。这些选择项表示系统的多种实现。在模型执行期间,只有一个子模块处于活动状态。处于活动状态的子模块称为活动变体

Variant Subsystem 模块中的每个变体选择项都与一个变体控制项模式, Variant control mode变体控制项模式Variant control mode和一个变体激活时间, Variant activation time变体激活时间Variant activation time相关联。变体控制项模式确定如何选择活动变体。变体激活时间确定激活选择项的时间,并决定在生成的代码中是仅包括活动选择项,还是同时包括活动和非活动选择项。

Variant Subsystem 模块可以同时包含 Subsystem 模块、Model 模块或 Subsystem Reference 模块作为变体选择项。以 Model 模块作为选择项的 Variant Subsystem 模块称为 Variant Model 模块。有关这些模块的详细信息,请参阅创建子系统ModelSubsystem Reference

除了变体选择项之外,您还可以在 Variant Subsystem 模块中包含 InportOutportConnection Port (Simscape) 模块。Variant Subsystem 模块内的各模块之间没有绘制的连接。Simulink® 在模型编译期间自动将活动变体连接到 Variant SubsystemInportOutport 模块。表示变体选择项的模块的输入和输出端口数量可以不同于父级 Variant Subsystem 模块中的输入和输出端口数量。有关详细信息,请参阅在可变子系统中映射变体选择项的输入端口和输出端口

使用 Variant Subsystem 模块,您可以:

  • SubsystemModelSubsystem Reference 模块作为变体选择项来混合使用。

  • 对没有相似接口的组件进行建模。对于一个 Variant Subsystem 中的多个变体选择项,可以使用不同数量的输入端口和输出端口。

  • 建立一个分层模块图,其中 Variant Subsystem 模块位于一个层中,变体选择项位于另一个层中。

  • 将功能相关的模块放在一起。

  • 降低模型的复杂度。

  • 在模型编译期间,Simulink 会去除整个模型中的非活动模块,从而提高模型的运行时性能。

模块图标上变体标记的颜色和图标会根据模块上设置的变体激活时间变体控制项模式将条件传播到可变子系统之外参数的值而变化。有关详细信息,请参阅 变体标记

端口

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

输入

全部展开

包含在 Variant Subsystem 中的每个 SubsystemModelSubsystem Reference 模块表示一个变体选择项。变体选择项可以具有与 Variant Subsystem 容器模块相同的一组输入端口或其子集。

输出

全部展开

包含在 Variant Subsystem 中的每个 SubsystemModelSubsystem Reference 模块表示一个变体选择项。变体选择项可以具有与 Variant Subsystem 容器模块相同的一组输出端口或其子集,它也可以是容器模块上端口的子集。

注意

Variant Subsystem 的未连接输出端口(非活动输出端口)输出接地值。要输出接地值以外的值,请选择 Outport 模块的指定未连接源时的输出参数,并指定值。

参数

全部展开

确定活动变体选择项的变体控制项可以是以下任一类型。

有关变体控制项模式的详细信息,请参阅Introduction to Variant Controls。有关不同类型的变体控制项模式之间的比较,请参阅Compare Different Types of Variant Control Modes in Variant Blocks

依存关系

不同变体激活时间的可用性取决于您指定的变体控制项模式的类型。变体激活时间参数确定 Simulink 设置活动选择项的时间。该参数还确定在生成的代码中包含哪些变异性。下表解释每种变体控制项模式支持的变体激活时间。

变体激活时间
变体控制项模式更新图更新图时分析所有选择项代码编译启动
表达式
标签xxx
sim/codegen 切换xx

此参数确定仿真和代码生成工作流中包含哪些变异性。有关详细信息,请参阅Activate Variant During Different Stages of Simulation and Code Generation Workflow

您可以将变体激活时间参数设置为:

  • 更新图” - 当您执行模型时,仿真和代码生成工作流中只包括该活动选择项。生成的代码只包括该活动选择项。

  • 更新图时分析所有选择项” - 执行模型时,会分析活动和非活动选择项在整个模型中的一致性。但是,仿真和代码生成工作流中只包括该活动选择项。生成的代码只包括该活动选择项。

  • 代码编译” - 执行模型时,系统会分析活动和非活动选择项在整个模型中的一致性,并且仿真和代码生成工作流中包括所有选择项。生成的代码包括预处理器条件句 #if#elif 中包含的活动和非活动选择项。但是,从生成的代码编译的可执行文件只包含活动选择项。

  • 启动” - 执行模型时,系统会分析活动和非活动选择项在整个模型中的一致性,并且仿真和代码生成工作流中包括所有选择项。使用此选项时,您可以使用快速重启来提高迭代仿真的速度。有关详细信息,请参阅Run Iterative Simulations Without Recompiling Model for Variant Systems Using Fast Restart。从模型生成的代码同时包括活动和非活动选择项,这些选择项包含在常规 if 条件中。从生成的代码编译的可执行文件也同时包括活动和非活动选择项。

依存关系

不同变体激活时间的可用性取决于您指定的变体控制项模式的类型。变体激活时间参数确定 Simulink 何时设置活动选择项。该参数还确定在生成的代码中包含哪些变异性。下表解释每种变体控制项模式支持的变体激活时间。

变体激活时间
变体控制项模式 更新图更新图时分析所有选择项代码编译启动
表达式
标签xxx
sim/codegen 切换xx

编程用法

模块参数VariantActivationTime
类型:字符向量
值:更新图” | “更新图时分析所有选择项” | “代码编译” | “启动
默认值:更新图

可变子系统中的每个变体选择项对应此表中的一行。如果没有变体选择项,则表为空。

您可以使用变体选择项表左侧的按钮来修改表中的元素。

如需执行以下操作...请点击...
创建并添加新子系统选择项:创建一个新的 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

此只读字段显示可变子系统中包含的模块的名称。

选择项的名称,指定为字符串。

依存关系

要启用此参数,请将变体控制项模式设置为“标签”。

指定条件表达式以确定活动选择项。当条件表达式的计算结果为 true 时,Simulink 激活对应的变体选择项。当条件表达式的计算结果为 false 时,Simulink 反激活对应的变体选择项。

变体控制项可以是:

此处,AB 是称为变体控制项变量的操作数。==~=&& 是条件表达式中的运算符。条件表达式可以包含一个或多个这样的变体控制项变量和运算符。有关变体控制项变量支持的类型和存储位置的信息,请参阅Types of Variant Control Variables (Operands) in Variant BlocksStorage Locations for Variant Control Variables (Operands) in Variant Blocks。有关运算符的信息,请参阅Types of Operators in Variant Blocks for Different Activation Times

有关详细信息,请参阅Switch Between Choices Using Condition Expressions in Variant Blocks

编程用法

结构体字段:Variant 参数结构体中的只读 variant.Name 字段表示
类型:字符向量
值:与变体选择项关联的变体控制项
默认值:'variant'

此只读字段显示指定为 Simulink.Variant 对象的条件表达式。要更改或编辑该条件表达式,请使用双击工作区中的对象时出现的 Simulink.Variant 参数对话框。

注意

您在 Simulink.Variant 类型的条件表达式中指定的操作数必须在基础工作区或数据字典中定义。不支持指定在封装工作区或模型工作区中定义的操作数。

此列表包含所有变体选择项的标签。要设置活动选择项,请从列表中选择一个标签。对应的选择项将激活。您也可以按照Set Active Choices Using Variant Control Labels中所述的方法在标签模式下更改活动选择项。

依存关系

要启用此参数,请将变体控制项模式参数设置为“标签”。

编程用法

参数:LabelModeActivechoice
类型:字符向量
值:如果未指定标签模式活动选择项,则值为空。如果指定标签模式活动选择项,则值是标签模式活动选择项的名称。
默认值:''
  • off - Simulink 在没有活动变体选择项时生成错误。

  • on - 当您选择此选项时,如果没有活动变体选择项,Simulink 将在 Variant Subsystem 中没有任何活动变体选择项的情况下仿真模型。Simulink 会断开连接到 Variant Subsystem 模块的输入和输出流的所有模块的连接,从而从模型中完全删除变体区域。子系统的非活动输出端口输出接地值。要输出接地值以外的值,请选择 Outport 模块的指定未连接源时的输出参数,并指定您的选择项的值。

依存关系

仅当 Variant Subsystem 中没有 default 变体选择项且您将变体控制项模式设置为“表达式”时,此参数才可用。

编程用法

参数:AllowZeroVariantControls
类型:字符向量
值:'off' | 'on'
默认值:'off'

当您选择将条件传播到可变子系统之外参数时,Simulink 会将底层模块的变体条件传播到 Variant Subsystem 容器模块,以便子系统可以使其接口适应底层模块的状态。映射到活动选择项上的端口的端口将变为活动状态。未映射到非活动选择项上的端口的端口将变为非活动状态。选择此选项可确保 Variant Subsystem 外部的组件了解 Variant Subsystem 模块内的模块的活动和非活动状态。有关详细信息,请参阅Propagate Variant Conditions Outside Variant SubsystemsUse Variant Subsystem Blocks with Conditionally Executed Subsystems

注意

如果 Variant Subsystem 模块内的所有变体选择项都具有相同的接口,则变体条件不会传播到该模块之外。

编程用法

参数:PropagateVariantConditions
类型:字符向量
值:'off' | 'on'
默认值:'off'

模块特性

数据类型

Booleana | busa | doublea | enumerateda | fixed pointa | halfa | integera | singlea | stringa

直接馈通

多维信号

有限a

可变大小信号

有限a

过零检测

a 实际支持的数据类型或功能取决于模块实施。

扩展功能

版本历史记录

在 R2010b 中推出