主要内容

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

R2026b

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

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

  • 在模型中创建和编辑新配置集,以便保留原始设置

  • 创建一个指向独立配置集的配置引用,您可以与其他模型共享该配置集

  • 比较两个配置集的参数值

在此示例中,请使用 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'

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

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

将配置集重命名为 UpdatedConfig。

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

创建和激活配置集

当您要更改模型的配置并保留其活动配置的原始参数值时,请在模型中创建并激活新配置集。要创建另一个配置集,请复制现有配置集并将副本关联到模型。为了避免在关联副本时出现命名冲突,请在关联副本之前重命名副本,或将 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® 数据字典或基础工作区中。使用独立配置集和配置引用可在多个模型之间共享一种配置。当您要编辑配置而不更改模型文件时,也可以使用独立配置集。

对于此示例,请将模型 bouncingBall 配置为使用配置引用。

model = 'bouncingBall';
open_system(model)

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

freeConfigSet = copy(getActiveConfigSet(model));

创建配置引用。

configRef = Simulink.ConfigSetRef;

要使引用指向您的独立配置,请将 SourceName 属性设置为 freeConfigSet,该变量表示您的配置。

set_param(configRef,'SourceName','freeConfigSet')

新引用是由变量 configRef 表示的 ConfigSetRef 对象。将引用命名为 bouncingBallConfigRef。

set_param(configRef,'Name','bouncingBallConfigRef')

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

attachConfigSet(model,configRef);
setActiveConfigSet(model,'bouncingBallConfigRef');

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

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

referencedConfigObj = getRefConfigSet(configRef);

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

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

比较配置

您可以通过将模型的原始配置集与更新后的配置集进行比较来检查哪些配置参数已更改。您也可以比较两个不同模型的配置。

在此示例中,比较您为模型 damped_nonlin_spring 创建的配置集。对这两个配置对象使用函数 isequal,并返回不同参数的列表。

[tf,parameters] = isequal(activeConfigObj,newConfigObj);
parameters
parameters = 1×3 cell
    {'Name'}    {'SolverName'}    {'SolverType'}

示例函数 CompareConfigSets 通过调用 get_param 来报告每个不同参数在每个配置集中的值。使用该示例函数查看两个配置集的参数的不同值。

CompareConfigSets(activeConfigObj,newConfigObj)
ans = 3×3 cell
    {'Name'      }    {'UpdatedConfig'   }    {'ConfigCopy'   }
    {'SolverName'}    {'VariableStepAuto'}    {'FixedStepAuto'}
    {'SolverType'}    {'Variable-step'   }    {'Fixed-step'   }

另请参阅

主题