Main Content

使用脚本自动执行模型配置

如果您要对许多模型使用相同的配置设置,可以编写脚本,通过编程以相同的方式配置每个模型。您可以使用该脚本来存档和比较模型使用的配置设置。

此示例说明以编程方式设置模型的配置的三种不同方式:

  • 编辑模型的现有活动配置集

  • 在模型中创建和编辑新配置集

  • 创建指向独立配置集的配置引用

在此示例中,请使用 damped_nonlin_spring 模型。

model = 'damped_nonlin_spring';
open_system(model);

编辑活动配置集

要操作与模型关联的配置集,请使用表示该配置集的 ConfigSet 对象。对于此示例,请使用模型的活动配置。

activeConfigObj = getActiveConfigSet(model);
get_param(activeConfigObj,'Name')
ans = 
'Configuration'

该模型的活动配置是 Configuration。要查看配置中参数的当前值,请使用 get_param 函数和 ConfigSet 对象。

get_param(activeConfigObj,'StopTime')
ans = 
'10'

将配置集重命名为 UpdatedConfig

set_param(activeConfigObj,'Name','UpdatedConfig');

对于此示例,请将停止时间设置为 200,并将求解器类型更改为变步长求解器。

set_param(activeConfigObj,'StopTime','200');
set_param(activeConfigObj,'SolverType','Variable-step');

创建和激活配置集

当您要更改模型的配置并保留其活动配置的原始参数值时,请在模型中创建并激活新配置集。要创建另一个配置集,请复制现有配置集并将副本关联到模型。为了避免在关联副本时出现命名冲突,请在关联副本之前重命名副本,或将 attachConfigSet 的可选的第三个参量 allowRename 设置为 true

对于此示例,请复制活动配置集。将副本重命名为 ConfigCopy,并将其关联到模型。

newConfigObj = copy(activeConfigObj);
set_param(newConfigObj,'Name','ConfigCopy');
attachConfigSet(model, newConfigObj);

将配置集关联到模型时,它处于非活动状态。您可以像操作活动配置集一样操作非活动配置。要使用新配置,请为模型激活它。

set_param(newConfigObj,'SolverType','Fixed-step');

setActiveConfigSet(model,'ConfigCopy');
activeConfigSet = getActiveConfigSet(model);
get_param(activeConfigSet,'Name')
ans = 
'ConfigCopy'

现在,ConfigCopy 是活动配置集。

设置配置引用

如果您要在模型之外存储配置集,请创建一个脚本,该脚本在模型中设置配置引用。该引用存储在模型中并指向独立配置集,该配置集存储在 Simulink® 数据字典或基础工作区中。使用独立配置集和配置引用可在多个模型之间共享一种配置。当您要编辑配置而不更改模型文件时,也可以使用独立配置集。

对于此示例,请将模型 vdp 配置为使用配置引用。首先,通过复制模型的活动配置集,在基础工作区中创建一个独立配置集。独立配置是由变量 freeConfigSet 表示的一个 ConfigSet 对象。如果要引用现有独立配置集,可以跳过此步骤。

model = 'vdp';
open_system(model)

freeConfigSet = copy(getActiveConfigSet(model));

创建配置引用。要使引用指向您的独立配置,请将 SourceName 属性设置为 freeConfigSet,该变量表示您的配置。新引用是由变量 configRef 表示的 ConfigSetRef 对象。将引用命名为 vdpConfigRef

configRef = Simulink.ConfigSetRef;
set_param(configRef,'SourceName','freeConfigSet')
set_param(configRef,'Name','VdpConfigRef')

使用 ConfigSetRef 对象将配置引用关联到模型 vdp。引用只能关联到一个模型。要在模型中使用配置引用,请激活它。

attachConfigSet('vdp',configRef);
setActiveConfigSet('vdp','VdpConfigRef');

现在,当您更改对象 freeConfigSet 所表示的配置集时,这些更改将应用于该模型。

通过使用 get_param,您可以获得配置引用中的参数值。但是,您无法在配置引用中直接更改参数值。要更改这些值,您必须使用表示引用的独立配置集的 ConfigSet 对象。使用 getRefConfigSet 方法从配置引用中获取独立配置集。

referencedConfigObj = getRefConfigSet(configRef);

现在,referencedConfigObj 表示您的模型所引用的同一独立配置集。freeConfigSet 也表示该配置集。使用配置集对象更改所引用的配置集中的参数值。这些更改应用于引用该配置的每个模型。

set_param(referencedConfigObj,'SignalLogging','off');
set_param(referencedConfigObj,'StartTime','10');

另请参阅

相关主题