主要内容

本页采用了机器翻译。点击此处可查看英文原文。

变体组件

变体组件定义了架构或软件架构模型中的一部分,该部分可包含多种变体选择项(即变体)。变体是变体组件中众多结构或行为选择项之一。每个变体代表子系统的不同设计配置。您可以在一个模型中对任何变体组件的变体选择项进行建模。您可以将变体选择项定义为由 Simulink® 模型定义的行为与由 System Composer™ 架构模型或软件架构模型定义的架构的组合。例如,一个组件可以有三个变体选择项,包括两个替代结构分解和一个替代 Simulink 行为。

例如,假设您要仿真一个代表具有三种可能发动机配置的车辆的模型:4 缸汽油发动机、6 缸汽油发动机和 8 缸汽油发动机。您可以使用 System Composer 架构模型将每个引擎模型作为单独的变体选择项在 Variant Component 模块中实现。您可以使用架构模型来表示 4 缸汽油和 6 缸汽油发动机配置,并使用 Simulink 行为来表示 8 缸汽油配置。

在架构模型和软件架构模型中,变体组件均由 Variant Component 模块表示。在架构模型中,Variant Component 模块可能包含以下选项:内联组件,或与架构模型、架构子系统文件、软件架构模型、AUTOSAR 架构模型、Simulink 模型或 Simulink 子系统文件关联的引用组件。

注意

软件架构模型中的引用组件不支持链接到架构模型文件、架构子系统文件或 Simulink 子系统文件。

您可以直接向 Variant Component 模块添加变体,或者将 Variant Component 模块转换为 Variant Assembly Component 模块,以便在不打开或修改模型的情况下,从外部来源添加或移除变体。有关详细信息,请参阅将 Variant Component 转换为 Variant Assembly Component

在执行分析时,使用变体可快速切换组件的不同架构设计变体控制项通过确定活动的变体选择项,提供交换不同架构设计的能力。

变体控制

变体控件可以在两种模式下运行:标签表达式模式。

表达式模式下,System Composer 根据对变体条件表达式的计算选择活动变体。每个变体选择项都关联着一个变体控制表达式,该表达式使用了一个通用的变体控制变量。变量的值可以在运行时从任何工作区更改,从而确定变体控制表达式的结果,并由此确定活动选择项。当与变体选择项相关的变体控制表达式评估为 true 时,System Composer 将激活该变体选择项。当变体控制表达式评估为 false 时,System Composer 将停用相应的变体。一次只能有一个变体控制表达式评估为 true

标签模式下,System Composer 根据变体名称选择活动变体。变体控制是一个字符串,无需在任何工作区中定义变量。

此表可帮助您决定对变体组件使用哪种变体控制模式。

变体控制模式用法
expression

使用 expression 模式来:

  • 从基础工作区、模型工作区或数据字典中控制活动选择项。每个源都定义了一个可见性范围,您可以借此为不同范围中的变体高效地设置不同的活动选择项。

  • 允许存在可选的变体选择项,这意味着您可以将模型配置为:如果在仿真运行过程中,没有任何变体控制表达式的计算结果为 true,则忽略该变体组件。

label

使用 label 模式在不创建工作区变量的情况下控制活动选择项。此变体控制模式是激活变体选择项的最简单方法。

在标签模式下创建变体组件

Variant Component 模块将变体抽象为一个独立的分层结构,该结构与顶层架构或软件架构模型层之间隔了一层。

The variant component 'Sensor' with an arrow pointing to the inside. There is an active variant called 'Sensor' and an inactive variant called 'Component'.

标签模式下创建一个变体组件,并尝试其他相关选项:

  1. 首先,将 Component 模块转换为 Variant Component 模块,创建一个变体组件模块。要完成转换,必须向组件添加变体选择项。要添加变体选择项,请右键点击 Component 模块(组件),然后从组件上下文菜单中选择添加变体选择项。“将组件转换为变体组件”对话框随即打开。

    Convert Component to Variant Component dialog box.

  2. 变体控制项模式参数设置为标签,然后点击转换

  3. 请注意,系统会自动创建两个名为 ComponentComponent1 的变体选择项。默认情况下,Component 选择项处于激活状态。

  4. ComponentComponent1 变体选择项的名称分别修改为 Motor1Motor2。点击工具栏中的蓝色“向上到父级”箭头,返回上一级主架构模型。

  5. 通过从上下文菜单中选择 变体 > 标签模式活动选择项 > Component1 (Motor2) 来切换活动选择项。请注意,Motor2 变体选择项被高亮显示,而 Motor1 组件现在已变为灰色。

  6. 从主架构模型中,通过从上下文菜单中选择 变体 > 打开 > Component1 (Motor2),直接导航到 Variant Component 模块中的 Motor2

  7. 右键点击组件上的 variant 徽章,然后选择模块参数 (Subsystem),查看组件的模块参数。模块参数:“组件”对话框打开。

    The Block Parameters dialog box for a Variant Component block, with Variant control mode set to label.

  8. 请注意,在变体选择项表中,变体选择项名称 Motor1Motor2 分别被分配给变体控制标签 ComponentComponent1。列出在名称 (只读) 列中的变体名称按字母顺序排列,并相应地重新排列变体控制项标签列中分配的变体控件。

  9. 通过检查标签模式活动选择项参数来确定活动选择项。将活动选择项恢复为 Motor1,方法是将标签模式活动选择项参数设置为 Component (Motor1)

  10. 选中将条件传播到可变子系统之外复选框,允许变体状态传播到“变体组件”,以便外部组件相应地调整其接口。映射到活动选择项上的端口将变为活动端口。未映射到非活动选择项上的端口将变为非活动状态。选择此选项可确保变体组件外的组件知道变体组件内组件的活动和非活动状态。

  11. 选中允许灵活接口复选框,以使用输入端口和输出端口数量与 Variant Component 模块不同的变体选择项对模型进行仿真。

在表达式模式下创建变体组件

表达式模式下创建一个变体组件,并尝试其他相关选项:

  1. 双击画布,在组件字段中输入模块名称 Variant Component。从 System Composer 库中选择“变体组件”搜索结果。该模块默认有两个变体选择项,其中 Component 为活动选择项。

  2. 右键点击组件上的 variant 徽章,然后选择模块参数 (Subsystem),查看组件的模块参数。模块参数:“组件”对话框打开。变体控制项模式参数默认设置为标签。将其更改为表达式

  3. 从以下选项中选择变体激活时间

    变体激活时间用法
    update diagram System Composer 在模型编译阶段开始时设置活动选择项。非活动选择项将从仿真工作流中删除。
    update diagram analyze all choicesSystem Composer 分析所有变体选择项,以检查每个选择项是否可以接受与其输入连接的信号。然后在模型编译阶段后期设置活动选择项。非活动选择项将从仿真工作流中删除。

  4. 变体选择项表中,将所有变体选择项的变体控制项表达式设置为可评估为 truefalse 的布尔表达式。例如,如果 b 在封装、模型或基本工作区中被设置为 2,则表达式 b == 2 的计算结果为 true。变体控制表达式支持标量变量和其他数据类型。有关详细信息,请参阅变体控制变量的类型

    Variant Component block parameters with Variant control mode set to expression.

  5. 选择默认选项的替代方案。如果仿真期间没有变体控制表达式评估为 true,则默认选择适用。

    • 内置空选择项 - 输入到 Variant Component 模块的值不会传递到输出端口。换句话说,输入端被终止,输出端接地。在这种情况下,信息不会从变体组件传递到架构模型的其他部分。

    • 内置直通选择项 - 输入值将原样传递到输出端口,不会发生任何变化。信息从变体组件以未修改的形式传递到模型的其他部分。

另请参阅

主题