Main Content

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

可变子系统、变体模型

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

  • 库:
  • Simulink / Ports & Subsystems

    HDL Coder / Ports & Subsystems

  • Variant Subsystem, Variant Model block
  • Variant Subsystem, Variant Model block

说明

Variant Subsystem 模块最多只能有一个用于仿真的活动选择项。Variant Subsystem 模块是一个预先配置的可变子系统模板,其中包含两个要用作 Variant Subsystem 选项的 Subsystem 模块。

Variant Subsystem 模块可以同时包含 SubsystemModel 模块作为变体系统。其中还包括 InportOutportConnection Port 模块。Variant Subsystem 模块内部没有任何绘制的连接。

Model 模块为选择项的 Variant Subsystem 模块,称为 Variant Model 模块。

每个变体系统与一个全局工作区中创建的变体控制项关联。变体控制项确定哪个变体系统处于活动状态。变体控制项可以是条件表达式、指定条件表达式的 Simulink.Variant 对象或默认变体。计算结果为 true 的变体控制项确定活动变体。

当您选择 Variant Subsystem 模块中的 Outport 模块中的 Specify output when source is unconnected 选项时,可以指定非接地值作为其输出。

注意

您必须在 Outport 模块对话框的 Signal Attributes 部分中指定正确的数据类型。

端口

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

输入

全部展开

可变子系统中包含的每个 SubsystemModel 模块代表一个变体系统。如果变体系统上的输入端口名称是 Variant Subsystem 容器模块使用的输入端口名称的子集,则变体系统模块的输入端口数量可以不同于 Variant Subsystem 模块的输入端口数量。

输出

全部展开

可变子系统中包含的每个 SubsystemModel 模块代表一个变体系统。如果变体系统上的输出端口名称是 Variant Subsystem 模块使用的输出端口名称的子集,则变体系统模块的输出端口数量可以不同于 Variant Subsystem 模块的输出端口数量。

参数

全部展开

  • expression” - 要根据变体条件的计算结果来选择活动变体,请使用 “expression” 模式。变体条件中使用的变体控制项变量必须在全局工作区或数据字典中创建。

  • Label” - 要根据您在 Label mode active choice 参数中指定的变体名称选择活动变体,请使用 “label” 模式。在 label 模式下,变体控制项是字符串,不需要在任何工作区中创建。

    选择 “Label” 模式时,变体标记将指示发生的变化。

    注意

    Label mode active choice 参数提升到封装时,Variant control mode 将禁用。

    • 如果在模块处于 “expression” 模式时将 Label mode active choice 参数提升到封装,则可以从 Mask 对话框中更改提升的 Label mode active choice 参数,以将 Variant control mode 更改为 “label”。

    • 如果在模块处于 “label” 模式时将 Label mode active choice 参数提升到封装,则不能将 Variant control mode 更改为 “expression” 模式。

    有关将参数提升到封装的信息,请参阅Promote Parameter to Mask

  • sim codegen switching” - 要在仿真和代码生成工作流的变体之间自动切换,请使用 “sim codegen switching” 模式。当您对模型进行仿真(Normal、Accelerator、Rapid Accelerator)时,Simulink 会自动选择 sim 分支作为活动选择项。同样,当您进行软件在环 (SIL)、处理器在环 (PIL) 仿真或生成代码或使用外部模式时,Simulink 会自动选择 codegen 分支。

当您将此参数设置为不同值时,变体标记会发生变化,如变体标记中所示。

依存关系

仅当您将 Variant control mode 参数设置为 “expression” 或 “sim codegen switching” 时,Variant activation time 参数才可用。

此参数确定在更新图或代码编译期间,Simulink 是否设置 Variant Subsystem 模块的活动选择项。此参数还确定为 ERT 目标生成的代码中包含哪些变异性。如果您选择包含所有变体选择项,这些选择项将包含在生成代码中的 C 预处理器条件句(#if 和 #endif)中。

当您将此参数设置为不同值时,变体标记会发生变化,如变体标记中所示。

您可以将 Variant activation time 参数设置为:

  • update diagram” - Simulink 在信号属性传播之前的更新图期间设置活动选择项。在传播信号属性之前会删除非活动选择项,因此生成的代码只包含活动选择项。

  • update diagram analyze all choices” - Simulink 在信号属性传播之后的更新图期间设置活动选择项。信号属性传播到活动和非活动选择项。对所有选择项进行分析,以确保仿真结果和代码生成之间所有变体分支的一致性。在模型开始之前,非活动选择项在更新图结束时被删除。生成代码只包含活动选择项。对于仿真和代码生成,此工作流保持不变。

  • code compile” - 对于仿真,工作流与 “update diagram analyze all choices” 相同。但是,在代码生成过程中,非活动选择项不会被删除。生成代码包含活动和非活动选择项,这些选择项包含在 C 预处理器条件句 #if#endif 中。

下图显示您在此参数中指定的不同值的变体激活时间。

有关详细信息,请参阅 Represent Variant Source and Sink Blocks in Generated Code (Embedded Coder)

依存关系

  • 当您将 Variant control mode 设置为 “expression” 时,此参数可以设置为 “update diagram”、“update diagram analyze all choices” 或 “code compile”。

  • 当您将 Variant control mode 设置为 “sim codegen switching” 时,此参数可以设置为 “update diagram” 或 “update diagram analyze all choices”。“code compile” 选项变为不可用。

编程用法

模块参数VariantActivationTime
类型:字符向量
值:update diagram” | “update diagram analyze all choices” |“code compile
默认值:update diagram

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

您可以使用 Variant choices 表左侧的按钮来修改表中的元素。

如需执行以下操作...请点击...
Create and add a new subsystem choice:在表中放置一个新 Subsystem Variant 选项,并在 Variant Subsystem 模块图中创建一个 Subsystem 模块。
Create and add a new model variant choice:在表中放置一个新模型变体选择项,并在 Variant Subsystem 模块中创建一个 Model 模块。
Create/Edit selected variant object:在全局工作区中创建一个 Simulink.Variant 对象,并打开 Simulink.Variant 对象参数对话框以指定变体 Condition
Open selected variant choice block:为 Variant choices 表中选定的行打开子系统模块图。
Refresh dialog information from variant subsystem contents:根据变体系统以及全局工作区中变体控制项的值,更新 Variant choices 表。

此只读字段基于变体系统名称。要添加子系统变体选择项,请点击 。要添加模型变体选择项,请点击

要输入变体名称,请在新行中双击 Variant control 单元,然后键入变体控制项表达式。

要输入非数值变体控制项值,请使用枚举数据。有关使用枚举数据的信息,请参阅在 Simulink 模型中使用枚举数据

编程用法

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

此只读字段基于全局工作区中关联的变体控制项的条件。可在 Simulink.Variant 参数对话框或全局工作区中创建或更改变体条件。

当您对 Variant control mode 选择 “Label” 时,Label mode active choice 选项可用。您可以从 Label mode active choice 选项中选择活动变体选择项。您也可以右键点击 Variant Subsystem 模块上的标记,然后选择 Label Mode Active Choice

对于 Label mode active choice 选项,变体控制项不需要是布尔条件表达式或 Simulink.Variant 对象。以 % 符号开头的变体控制项将被忽略。

注意

Label mode active choice 选项在 “Expression” 模式下不可用。

依存关系

要启用此参数,请从 Variant control mode 参数中选择 “Label” 选项。

编程用法

参数:LabelModeActivechoice
类型:字符向量
值:如果未指定 Label 模式活动选择项,则值为空。如果指定 Label 模式活动选择项,则值是 Label 模式活动选择项的名称。
默认值:''

要在不使用活动变体选择项的情况下模型(包含变体系统)进行仿真,请选择 Allow zero active variant controls 选项。当您选择此选项并且没有活动变体选择项时,Simulink 会禁用连接到 Variant Subsystem 模块的输入和输出流的所有模块。更新图或仿真会忽略禁用的模块。

如果不选择此选项,则当没有活动变体选择项时 Simulink 会生成错误。

依存关系

  • 未选择变体的 (default) 选项

  • Variant control mode 选择 “Expression” 选项。

编程用法

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

如果选择此选项,Simulink 会将底层模块的变体条件传播到 Variant Subsystem 模块之外的模块。在仿真期间,连接到活动选择项的子系统外部的组件将变为活动状态,连接到非活动选择项的组件将变为非活动状态。

选择此选项可确保可变子系统外部的组件了解 Variant Subsystem 模块内的模块的活动和非活动状态。有关详细信息,请参阅 Adaptive Interface for Variant Subsystems

当您选择此选项时,变体标记将指示发生的变化。

编程用法

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

模块特性

数据类型

Boolean[a] | bus[a] | double[a] | enumerated[a] | fixed point[a] | half[a] | integer[a] | single[a] | string[a]

直接馈通

多维信号

有限[a]

可变大小信号

有限[a]

过零检测

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

扩展功能

在 R2010b 中推出