文档

使用Parsim的快速加速器仿真

这个例子展示了在需要为一系列输入和参数值运行并行模拟的应用程序中使用Rapid Accelerator。

我们使用发动机怠速模型来模拟发动机的怠速。该模型的输入为旁通气阀的电压,输出为怠速。

我们运行并行模拟使用parsim使用两组阀电压,并通过在两个值范围内独立改变传递函数的三个增益参数中的两个。因此,我们总共将运行八组不同的模拟。

通过修改用于构建此示例的脚本文件,很容易为您自己的应用程序定制此示例。单击本页左上角的链接来编辑脚本文件。点击右上角的链接从MATLAB®运行此示例。

1 .准备

首先我们打开模型,其中仿真模式已设置为快速加速器。默认的输入数据和所需的参数被预加载到模型工作区中。

参数gain2和gain3已被指定为可调参数,以便以后可以使用实用程序函数Simulink.BlockDiagram.modifyTunableParameters修改它们。万博1manbetx要了解如何以图形方式选择可调参数并设置其属性,请阅读有关的帮助页面“模型参数配置”对话框

我们将默认输入和时间数据复制到一个变量中,以便稍后修改它们并将它们传递给SIM命令。

%开放模式:mdl =“sldemo_raccel_engine_idle_speed”;open_system (mdl);%复制输入数据inpData = evalin(“基地”“inpData”);tData = evalin(“基地”“时间”);

步骤2:设置以构建快速加速器目标

方法在SetupFcn调用中构建模型的快速加速器可执行文件buildRapidAcceleratorTarget函数万博1manbetx仿真软件。立体图包中。的buildRapidAcceleratorTarget函数返回分配给全局变量的默认运行时参数集,RTP,在下一步中用于修改参数值。开放sldemo_parsim_paramsweep_suspn_raccel_setup在编辑器中查看代码。请注意,构建过程是经过优化的,因此如果构建文件已经存在并且与模型和机器体系结构兼容,那么它就会提前返回。

步骤4:创建输入集

这里我们扰动默认的输入值向量来获得一个新的输入值向量。

在这个例子中,我们将绘制发动机怠速作为不同参数值下阀门电压的函数。

inpSets{1} = inpData;rndPertb = 0.5 + rand(length(tData), 1);inpSets{2} = inpSets{1}.*rndPertb;numInpSets = length(inpSets);

步骤3:创建参数集

使用第2步中的默认rtp结构,我们为模型中的可调变量构建一个具有不同值的新结构。我们想看看在参数gain2和gain3的不同值下,空闲速度是如何变化的。因此,我们使用不同的gain2和gain3值生成不同的参数集,并保留其他可调变量的默认值。

实用函数Simulink.BlockDia万博1manbetxgram.modifyTunableParameters是一种使用不同参数值构建rtp结构的方便方法。

创建一个数组万博1manbetx仿真软件。SimulationInput对象来为每个模拟指定不同的参数值和外部输入。SimulationInput对象数组是预先分配的,以获得更好的性能。还要注意,外部输入可以直接在SimulationInput对象上指定,而不是使用模型参数。

Gain2_vals = 25:10:35;Gain3_vals = 20:10:30;Num_gain2_vals = length(gain2_vals);Num_gain3_vals = length(gain3_vals);numSims = num_gain2_vals*num_gain3_vals*numInpSets;in(numSims) = 万博1manbetxSimulink.SimulationInput(mdl);Idx = 1;iG2 = 1:num_gain2_valsiG3 = 1:num_gain3_valsinpSetsIdx = 1:numInpSets in(idx)。ModelName = mdl;in(idx) = in(idx).setModelParameter“SimulationMode”“快速”“RapidAcceleratorUpToDateCheck”“关闭”“SaveTime”“上”“SaveOutput”“上”);在(idx)。PreSimFcn = @(x) sldemo_parallel_rapid_accel_sims_script_presim(x, gain2_vals(iG2), gain3_vals(iG3));在(idx)。ExternalInput = [tData, inpSets{inpSetsIdx}];Idx = Idx + 1;结束结束结束

步骤4:执行模拟

使用parsim函数来并行执行模拟。SimulationInput对象的数组,在上一步中创建的parsim函数作为第一个参数。将仿真输出数据存储在变量中,,其值是一个数组万博1manbetx仿真软件。SimulationOutput对象。每个SimulationOutput对象都包含记录的信号以及SimulationMetadata。运行多个模拟时使用parsim,错误被捕获,以便后续的模拟可以继续运行。任何错误都会显示在ErrorMessage属性。

Out = parsim(in,“ShowProgress”“上”“SetupFcn”, @() sldemo_parallel_rapid_accel_sims_script_setup(mdl));
[06-02-2018 21:34:34]检查并行池的可用性…使用“本地”配置文件启动并行池(parpool)…连接到12个工人。[06-02-2018 21:34:56]在并行worker上万博1manbetx加载Simulink…分析并将文件传送给工人…完成。[06-02-2018 21:35:20]在并行工作上配置模拟缓存文件夹…[06-02-2018 21:35:21]运行SetupFcn并行工作…[06-02-2018 21:35:58]在并行工人上加载模型…[06-02-2018 21:35:58]运行模拟…[06-Feb-2018 21:36:04]完成8次模拟运行中的1次[06-Feb-2018 21:36:04]完成8次模拟运行中的3次[06-Feb-2018 21:36:04]完成8次模拟运行中的5次[06-Feb-2018 21:36:04]完成8次模拟运行中的7次[06-Feb-2018 21:36:04]完成8次模拟运行中的8次[06-Feb-2018 21:36:04]清理并行 workers...

步骤5:绘制结果

在不同的参数值和输入下绘制发动机怠速与时间的关系图。输出以数组格式记录,并且可以从simulationoutput对象访问。

i = 1:numSims simOut = out(i);t = simOut.tout;y = simOut.yout;Plot (t, y) hold住所有结束

步骤6:关闭MATLAB Workers

删除(gcp (“nocreate”))
使用“本地”配置文件的并行池正在关闭。
这个话题有帮助吗?