使用脚本自动执行模型配置
如果您要对许多模型使用相同的配置设置,可以编写脚本,通过编程以相同的方式配置每个模型。您可以使用该脚本来存档和比较模型使用的配置设置。
此示例说明以编程方式设置模型的配置的三种不同方式:
编辑模型的现有活动配置集
在模型中创建和编辑新配置集
创建指向独立配置集的配置引用
在此示例中,请使用 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');
另请参阅
Simulink.BlockDiagram.saveActiveConfigSet