将模型转换为变体系统
您可以使用模型转换器工具,通过将限定建模模式替换为变体源和 Variant Subsystem 块来改进模型组件化。模型转换器会报告符合条件的建模模式。您可以选择该工具用 Variant Source 模块或 Variant Subsystem 模块替换哪些建模图案。
模型转换器可以执行以下转换:
如果一个 If 模块连接到一个或多个 If Action Subsystem 模块,并且每个模块都有一个输出端口,则将此建模模式替换为一个子系统和一个 Variant Source 模块。
如果 If 模块连接到没有输出端口或有两个或多个输出端口的 If Action Subsystem 模块,则将此建模模式替换为 Variant Subsystem 模块。
如果一个 Switch Case 模块连接到一个或多个 Switch Case Action Subsystem 模块,并且每个模块都有一个输出端口,则将此建模模式替换为一个子系统和一个 Variant Source 模块。
如果 Switch Case 模块连接到没有输出端口或有两个或多个输出端口的 Switch Case Action Subsystem 模块,则将此建模模式替换为 Variant Subsystem 模块。
将 Switch 模块替换为 Variant Source 模块。
将具有两个或多个数据端口的 Multiport Switch 模块替换为 Variant Source 模块。
要使模型转换器工具执行转换,Multiport Switch 或 Switch 模块的控制输入以及 If 或 Switch Case 模块的输入必须是以下两种情况之一:
一个 Constant 模块,其中常量值参数是一个标量类型的
Simulink.Parameter对象。Constant 块,其中常量值参数是标量类型的
Simulink.Parameter对象,以及构成受支持的 MATLAB® 表达式的其他一些块的组合。除了位运算之外,Types of Operators in Variant Blocks for Different Activation Times 中的 MATLAB 表达式均受支持。
使用模型转换器将模型转换为变体系统
本示例展示了如何使用模型转换器应用程序将模型转换为变体系统。该示例使用模型 ControlFlowOptimization。该模型包含三个 Switch 模块。这些 Switch 模块的控制输入是 Simulink.Parameter cond。模型转换器对话框和本示例将 cond 称为系统常量。
打开模型 ControlFlowOptimization。

打开
Switch1模块参数对话框。将 Threshold 参数更改为0。Threshold 参数必须是整数,因为经过变体转换后,它是 Variant Source 模块中条件表达式的一部分。对 Switch 块、
Switch2块和Switch3块重复步骤 2。将模型保存到您的工作文件夹中。
对示例模型执行变体变换
1.在“应用程序”选项卡中,选择模型转换器打开模型转换器。选中将模型转换为变体系统复选框。

2.在指定系统常量元胞数组字段中,您可以指定一个由 Simulink.Parameters 组成的字符元胞数组。基础工作区必须包含它们的定义。
3.在转换后的模型名称前缀字段中,指定模型名称的前缀。如果您不指定前缀,则默认值为 gen0_。
4.选择运行此检查。模型转换器列出了符合条件成为 Variant Source 或 Variant Subsystem 块中条件表达式一部分的系统常量和块。要使模型转换器列出系统常量,它必须是标量类型的 Simulink.Parameter 对象。在这个示例中,Cond 符合条件表达式的一部分的定义。
5.如果您不希望发生某项转换,可以清除其旁边的复选框。
6.选择重构模型。模型转换器提供指向转换后模型的超链接,以及指向原始模型和转换后模型中相应模块的超链接。转换后的模型位于以 m2m 为前缀加上原始模型名称的文件夹中。在这个示例中,文件夹名称是 m2m_ControlFlowOptimization。
模型转换的局限性
模型转换器工具存在以下局限性:
要对模型运行模型转换器,必须能够仿真该模型。
如果 If Action Subsystem 模块驱动 Merge 模块,并且 Merge 模块具有另一个未连接或由另一个条件子系统驱动的输入端口,则模型转换器不会添加 Variant Source 模块。这种建模模式会生成警告和排除候选对象消息。
模型转换器无法对每种建模模式执行变体转换。此列表包含一些例外情况:
该模型包含一个 Model 模块,该块引用一个受保护的模型。
模型中包含一个 Variant Source 模块,其中变体激活时间参数集为
update diagram。
运行一个或多个任务后,由于运行此检查和全部运行按钮已停用,因此无法重新运行这些任务。如果要重新运行任务,请右键点击模型变换器并选择
Reset来重置模型转换器。不要在转换过程中更改模型。如果要更改模型,请关闭模型变换器,修改模型,然后重新打开模型变换器。
要使模型转换器中的超链接生效,您必须打开链接指向的模型。