主要内容

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

将 Variant Component 转换为 Variant Assembly Component

Variant Component 模块表示的变体组件可以包含多个变体选择项(即变体),这些变体代表不同的结构体或行为选项。每个选项代表子系统的不同设计配置。有关详细信息,请参阅变体组件

您可以将 Variant Component 模块转换为 Variant Assembly Component 模块,以便在不打开或修改模型的情况下,从外部来源添加或删除变体选择项。在架构模型中,Variant Component 模块可以包含以下选项:内联组件,或者与架构模型、架构子系统文件、软件架构模型、AUTOSAR 架构模型、Simulink® 模型或 Simulink 子系统文件关联的引用组件。

注意

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

转换为 Variant Assembly Component 后,引用组件保持不变,而内联组件则会被转换为具有相应类型的引用组件。例如,在架构模型中,类型为 Simulink 子系统的内联组件会被转换为 Simulink 子系统引用组件。在软件架构模型中,所有内联组件都会转换为软件架构引用组件。

交互式地将标签模式下的 Variant Component 模块转换为变体装配体 Component 模块

本示例演示了如何通过“块参数”对话框,将处于标签模式的 Variant Component 模块转换为变体装配体 Component 模块。

1.打开 mobileRobotAPI 架构模型。

modelName = "mobileRobotAPI";
open_system(modelName);

考虑 mobileRobotAPI 模型中的 Motion 模块。Motion 模块是一个 Variant Component 模块,需要将其转换为 Variant Assembly Component 模块。

2.打开 Motion 模块的“模块参数”对话框。请注意,变体控制模式参数已设置为 label。与标签模式活动选项列表中选定的控制标签相对应的变体选择项即为当前活动选项,并在转换后仍保持为活动选项。在这种情况下,在 MotionMotionAlt 这两个变体选择项中,Motion 是当前选中的选项。

3.点击转换为变体装配体按钮。此时将打开“将变体组件转换为变体装配体组件”对话框。

4.在“引用组件类型”列表中,指定转换为 Variant Assembly Component 模块后生成的组件类型。以下是可选选项:

  • Subsystem Reference - 转换后,内联组件将转换为架构子系统引用组件或 Simulink 子系统引用组件。如果某个内联组件具有 Simulink 行为且其工件类型为子系统,则该组件将被转换为 Simulink 子系统引用组件。有关详细信息,请参阅使用子系统组件创建 Simulink 行为

  • Model Reference - 转换后,内联组件将转换为架构模型引用组件。

注意:在软件架构模型中,System Composer 仅将内联软件组件转换为软件架构模型的引用组件。引用组件类型字段默认设置为 Model Reference,且无法更改。

5.请为转换配置以下参数:

  • 新参考文件的位置 - 指定用于创建新模型或子系统文件的文件夹名称。若要更改模型或子系统文件的位置,请指定相对于当前工作文件夹的相对路径,或指定绝对路径。您还可以通过点击浏览文件夹按钮,从文件系统中选择一个文件夹。

  • 用于 新建 子系统 文件的文件夹的绝对路径 - 由新建引用文件的位置参数指定的文件夹的绝对路径。

  • 新引用 文件名 - 将为内联组件创建的新模型或子系统文件的名称。新模型或子系统文件的名称与 Variant Component 模块中的内联组件名称相同。System Composer 不会将引用组件转换为模型或子系统文件,因为这些文件已经存在。

请查看对话框底部的只读表,该表列出了该模块中所有变体选择项的名称,以及它们在名称变体控件标签列中对应的标签。如果所有变体均为引用组件,则仅显示此表。

Convert Variant Component in Label Mode to Variant Assembly Component Interactively

6.点击转换按钮。如果未满足某些条件,System Composer 将执行以下一系列操作:

  • 如果指定的文件夹在文件系统中存在,但在 MATLAB 路径中不存在,则会弹出一个对话框,提示您将该文件夹添加到 MATLAB 路径中。点击添加到路径

  • 如果文件系统中不存在指定的文件夹,System Composer 将使用 mkdir 命令创建该文件夹,并将其添加到 MATLAB 路径中。

  • 如果指定文件夹中包含一个与新模型或子系统文件同名的文件,您必须确定是否要替换该文件。

然后,Motion 模块被转换为 Variant Assembly Component 模块。引用组件保持不变。

如果将引用组件类型设置为 Subsystem Reference,则 System Composer 会将具有架构类型组合的内联组件转换为架构子系统引用组件,并将具有 Simulink® 行为架构类型的内联组件转换为 Simulink 子系统引用组件。在此示例中,子系统选项 MotionMotionAlt 被转换为子系统引用选项,并保存在子系统文件 Motion``.slxMotionAlt``.slx 中。

如果您将引用组件类型设置为 Model Reference,则内联组件将被转换为架构模型引用组件。

注意:在软件架构模型中,当引用组件类型设置为 Model Reference 时,内联组件将被转换为软件架构模型的引用组件。

转换后,请查看“模块参数”对话框中的变体选择项指定符参数。其值的形式为 {'Motion', '``MotionAlt``'},其中 MotionMotionAlt 是转换后模块的变体选择项。转换后,仍保留 Motion 作为活动变体选择项。

若要更改当前选中的变体选择项,请将标签模式当前选中选项的值设置为 MotionAlt,然后运行模型。

通过编程方式将标签模式下的 Variant Component 模块转换为变体装配体 Component 模块

本示例演示了如何使用 makeVariantAssembly 函数,将处于标签模式的 Variant Component 模块转换为变体装配 Component 模块。

1.打开 mobileRobotAPI 架构模型。

modelName = 'mobileRobotAPI';
open_system(modelName);

考虑 Motion 模块。打开 Motion 模块的“模块参数”对话框。Motion 模块是一个 Variant Component 模块,需要将其转换为 Variant Assembly Component 模块。请注意,Motion 模块的变体控制模式参数已设置为 label

2.创建一个名为 varCompObjsystemcomposer.arch.VariantComponent 对象,该对象代表 Motion Variant Component 模块。

scModel = systemcomposer.loadModel(modelName);
varCompBlkPath = [modelName,'/Motion'];
varCompObj = lookup(scModel,Path=varCompBlkPath); 

3.将 Motion 模块转换为 Variant Assembly Component 模块。在转换过程中,子系统选项 MotionMotionAlt 将被转换为子系统引用组件,并作为架构子系统文件 Motion.slx and MotionAlt.slx 保存在您在当前工作目录中指定的文件夹中。

makeVariantAssembly(varCompObj,ReferenceFilesFolderPath=fullfile(pwd,"ConvertVC"),ReferenceComponentType="ModelReference"); 

这里,ReferenceFilesFolderPath 是包含新子系统文件的绝对路径,ReferenceComponentType 是新创建的引用文件的类型。对于架构模型,ReferenceComponentType 参量的可能取值如下:

  • ModelReference - System Composer 将变体选择项转换为架构模型参考文件。

  • SubsystemReference - System Composer 会根据内联组件的类型,将变体选择项转换为架构子系统引用组件或 Simulink 子系统引用组件。

有关 ReferenceComponentType 参量的详细信息,请参阅makeVariantAssembly

注意:对于软件架构模型,引用组件类型默认设置为 ModelReference,且无法通过 makeVariantAssembly 函数进行更改,因为软件架构模型不支持子系统文件。

如果变体组件没有内联组件,即所有变体选择项要么是模型引用组件,要么是子系统引用组件,那么您可以不带 ReferenceFilesFolderPath 参量调用 makeVariantAssembly 函数,因为模型或子系统文件已经存在于 MATLAB 路径中。

4.打开 ConvertVC 文件夹,查看新创建的架构模型参考文件 Motion.slx and MotionAlt.slx

您可以打开 Variant Component 模块 (Motion) 的“模块参数”对话框,以检查变体 选项 限定符参数。该参数的值为 {'Motion', '``MotionAlt``'},其中 MotionMotionAlt 是转换后模块的变体选择项。转换后,仍保留 Motion 作为活动变体选择项。

若要更改当前选中的变体选择项,请将标签模式当前选中选项的值设置为 MotionAlt,然后运行模型。

在表达式模式下,以交互方式将 Variant Component 模块转换为变体装配体 Component 模块

本示例演示了如何通过“模块参数”对话框,将处于 expression 模式的 Variant Component 模块转换为变体装配体 Component 模块。

1. 打开 mobileRobotAPI 架构模型。

modelName = 'mobileRobotAPI_expression';
open_system(modelName);

2.考虑 Motion 模块。Motion 模块是一个 Variant Component 模块,需要将其转换为 Variant Assembly Component 模块。打开 Motion 模块的“模块参数”对话框。请注意,在变体控制模式列表中已选中 expression

3.点击转换为变体装配体按钮。此时将打开“将变体组件转换为变体装配体组件”对话框。

4.请配置或查看转换过程中的以下参数:

  • 变体控制变量的名称 - 请指定一个符合 有效名称 中规则的有效变量名称,或指定一个符合 基于变量生成字段名称 中规则的有效结构体字段名称。在转换过程中,System Composer™ 会创建一个变量或结构体字段,用作变体控制变量。变体控制变量的值决定了转换后模块的有效选项。

  • 要创建的枚举类名称 - 请指定一个有效的枚举类名称。在转换过程中,System Composer 会创建指定的枚举类,并将 MotionMotionAlt 作为该类的成员。您可以通过点击浏览按钮,指定一个用于存放此枚举类的文件夹。枚举文件所在文件夹的绝对路径参数显示该枚举类所在文件夹的绝对路径。

  • 枚举文件所在文件夹的绝对路径 - 显示待创建的枚举文件所在文件夹的绝对路径。

  • 引用组件类型 - 指定转换为 Variant Assembly Component 模块后生成的组件类型。如果选择 Subsystem Reference,内联组件将被转换为架构子系统引用组件或 Simulink® 子系统引用组件。如果某个内联组件具有 Simulink 行为且其工件类型为子系统,则该组件将被转换为 Simulink 子系统引用组件。有关详细信息,请参阅使用子系统组件创建 Simulink 行为。如果选择 Model Reference,则内联组件将转换为架构模型引用组件。

注意:在软件架构模型中,引用组件类型字段默认设置为 Model Reference by,且无法更改。

  • 新子系统文件的位置 - 显示将创建模型或子系统文件的文件夹名称。若要更改子系统文件的位置,请指定相对于当前工作文件夹的相对路径,或指定绝对路径。您还可以通过点击浏览文件夹按钮,从文件系统中选择一个文件夹。

  • 新子系统文件的文件夹绝对路径 - 根据您为新子系统文件输入的位置,显示将要创建的子系统文件所在文件夹的绝对路径。

  • 新子系统文件名列表 - 列出了待创建的子系统文件的名称。子系统文件的名称与子系统选项的名称相同。

Convert Variant Subsystem to Variant Assembly Subsystem dialog box.

变体选择项(变体系统表) 表列出了转换后模块中各变体选择项的名称。对于每个变体选择项,System Composer 都会生成一个变体控制表达式。在生成的表达式中,变体控制变量位于左侧,而变体枚举类的成员位于右侧。该表达式的两边通过 == 相关联。当在仿真过程中某个表达式求值结果为 true 时,相应的变体选择项将生效。

5.点击转换按钮。如果这些验证通过,System Composer 会将 Motion 模块转换为 Variant Assembly Component 模块:

  • 如果指定的文件夹在文件系统中存在,但在 MATLAB® 路径中不存在,则会弹出一个对话框,提示您将该文件夹添加到 MATLAB 路径中。点击添加到路径

  • 如果文件系统中不存在指定的文件夹,System Composer 将使用 mkdir 命令创建该文件夹,并将其添加到 MATLAB 路径中。

  • 如果指定文件夹中包含一个与新模型或子系统文件同名的文件,您必须确定是否要替换该文件。

在转换过程中,System Composer 会验证 Motion 模块中的变体选择项。引用组件保持不变。内联组件将被转换为模型或子系统文件,并保存在 MATLAB 路径下。

System Composer 将具有架构类型组合的内联组件转换为具有组合的子系统引用组件,并将具有架构类型 Simulink® 行为的内联组件转换为具有 Simulink 行为的子系统引用组件。在此示例中,子系统选项 MotionMotionAlt 被转换为子系统引用选项,并保存在子系统文件 Motion.slxMotionAlt.slx 中。

如果您将引用组件类型设置为 Model Reference,则内联组件将被转换为架构模型引用组件。

注意:在软件架构模型中,当引用组件类型设置为 Model Reference 时,内联组件将被转换为软件架构模型的引用组件。

6.若要仿真采用 Motion 变体选择项的架构模型,请将 V 的值指定为 myEnum.Motion。在仿真过程中,控制表达式 V == myEnum.Motion 的计算结果为 true,此时 Motion 变体选择项被激活。

通过编程方式将表达式模式下的 Variant Component 模块转换为变体装配 Component 模块

本示例演示了如何使用 makeVariantAssembly 函数,将处于表达式模式下的 Variant Component 模块转换为 Variant Assembly Component。

1.打开 mobileRobotAPI 架构模型。

modelName = 'mobileRobotAPI_expression';
open_system(modelName);

考虑 Motion 模块。Motion 模块是一个 Variant Component 模块,需要将其转换为 Variant Assembly Component 模块。请注意,Motion 模块的变体控制模式已设置为 expression

2.创建一个名为 varCompObjsystemcomposer.arch.VariantComponent 对象,该对象代表 Motion Variant Component 模块:

scModel = systemcomposer.loadModel(modelName);
varCompBlkPath = [modelName,'/Motion'];
varCompObj = lookup(scModel,Path=varCompBlkPath); 

3.创建一个变体控制变量 V,并将其初始值设为 0。变体控制变量决定了转换后模块的有效选项,随后会被赋值给一个枚举类的某个成员,该枚举类定义了所有变体选择项。该成员随后将成为当前选定项。

V = 0; 

4.将 Motion 模块转换为 Variant Assembly Component 模块。如果变体组件的变体选择项中包含模型或子系统引用组件,则无需指定目标文件夹的路径即可调用该函数,因为模型或子系统文件已经存在。

如果 Variant Component 模块中包含的变体选择项既不是模型引用组件也不是子系统引用组件,也就是说,如果其中包含内联组件,则必须指定当前工作目录中目标文件夹的路径。

makeVariantAssembly(varCompObj,VariantControlVariableName="V",EnumerationClassFilePath="testEnum.m",ReferenceFilesFolderPath=fullfile(pwd,"ConvertVC_Expression"));

在此,VariantControlVariable 的值是用于确定转换后模块中有效选项的变体控制变量,而 EnumerationClassFilePath 的值则是 System Composer 生成的枚举类的名称。枚举类包含 Variant Component 模块的选项。该枚举类将包含 MotionMotionAlt 这两个变体选择项作为其成员。目前,请将活动选项设置为 testEnum.Motion。参量 ReferenceFilesFolderPath 是指向目标文件夹的路径,新创建的模型或子系统文件将存储在此文件夹中。

注意EnumerationClassFilePath 参量的值必须包含枚举类文件的 .m 扩展名。

5.将变体控制变量 V 赋值给枚举类的某个成员。选中的成员 testEnum.Motion 随即成为当前选定对象。

V = testEnum.Motion;

请观察包含变体选择项的表中变体控制表达式列中的表达式。System Composer 会生成每个表达式,其中表达式的左侧是变体控制变量,右侧是变体枚举类的成员。该表达式的两边通过 == 相关联。当某个表达式在仿真过程中求值结果为 true 时,相应的变体选择项就会生效。在这种情况下,变体控制变量被设置为 testEnum.Motion,该选项随即成为活动选项。

通过将变量控制变量 V 的值分别改为 testEnum.MotionAlttestEnum.Motion,然后运行模型,来仿真 MotionAltMotion 的模型。

另请参阅

模块

对象

函数