主要内容

使用Parsim的快速加速器模拟

此示例显示在需要运行并行模拟的应用程序中使用快速加速器进行一系列输入和参数值。

该示例使用模型模拟引擎的空闲速度。模型输入是旁路空气阀的电压。输出是空闲速度。

使用Parsim运行两组阀电压的并行模拟。在两个值的范围内独立地改变三个传递函数中的两个增益参数。下表列出了8个模拟以及参数值。在步骤2中,创建外部输入,不平等。变量BAIN2.GAIN3.对应于两个增益参数。

运行1不同行(1)GAIN2 = 25 GAIN3 = 20

运行2 inpSets(1) gain2 = 25 gain3 = 30

RUN 3 INPSETS(1)GAIN2 = 35 GAIN3 = 20

RUN 4 INPSETS(1)GAIN2 = 35 GAIN3 = 30

RUN 5不同行(2)GAIN2 = 25 GAIN3 = 20

RUN 6 INPSETS(2)GAIN2 = 25 GAIN3 = 30

RUN 7 INPSETS(2)GAIN2 = 35 GAIN3 = 20

运行8不同行(2)GAIN2 = 35 GAIN3 = 30

第1步:准备

首先,打开模型。仿真模式设置为快速加速器。默认输入数据和所需的参数在基础工作区中预加载。

开放模型:

mdl ='sldemo_raccel_engine_idle_speed';Open_System(MDL);

第2步:创建输入集

扰动默认输入值向量以获得新的输入值向量。

inpSets(1) = timeseries(inpData, time);rndPertb = 0.5 + rand(length(time), 1); / /时间长度inpSets (2) = timeseries (inpData。* rndPertb、时间);numInpSets =长度(inpSets);

第3步:创建参数集

接下来,检查怠速如何改变不同的参数值BAIN2.GAIN3.。创建一个数组金宝appsimulink.simulationInpul.对象指定每个仿真的不同参数值和外部输入。为了获得更好的性能,预先分配了SimulationInput对象数组。控件上可以直接指定外部输入SimulationInput对象,而不是使用模型参数。

gain2_vals = 25:10:35;gain3_vals = 20:10:30;num_gain2_vals =长度(gain2_vals);num_gain3_vals =长度(gain3_vals);numsims = num_gain2_vals * num_gain3_vals * num.psets;在(1:numsims)= si金宝appmulink.simulationInput(MDL);Idx = 1;为了IG2 = 1:num_gain2_vals为了IG3 = 1:num_gain3_vals为了numinpset in(idx) = in(idx).setModelParameter('simulationMode''迅速的'......'Rapidacceleratoruptodatecheck'“关闭”......“SaveTime”'在'......'saptoutput''在');%使用SetVariable来指定变量期间的新值%的模拟在(idx)=中(IDX).setvariable('gain2',gain2_vals(Ig2));在(idx)=中(IDX).setvariable('gain3',gain3_vals(Ig3));在(IDX).externalInput = Inpsets(Inpsetsidx);idx = idx + 1;结尾结尾结尾

注意:这个例子使用了setmodelparameter.方法的方法SimulationInput对象设置模型参数以在快速加速器模式下运行模拟并启用日志记录。快速加速器目标是使用该的setupfcn.。快速加速器目标是建立一次并由所有后续模拟使用,保存模型编译所需的时间。这是setupfcn的代码

函数sldemo_parallel_rapid_accel_sims_script_setup(mdl)%临时将工人上的当前文件夹更改为空%文件夹,以便客户端上的任何现有的SLPRJ文件夹都没有%干扰构建过程。currentFolder = pwd;tempDir = tempname;mkdir (tempDir);cd (tempDir);c = onCleanup(@() cd (currentFolder));金宝appSimulink.BlockDiagram.buildRapidAcceleratorTarget (mdl);结尾

第4步:执行模拟

使用Parsim函数并行地执行模拟。的数组SimulationInput对象,,在最后一步中创建的Parsim用作第一个参数。将仿真输出数据存储在变量中,出去,其值是一系列的金宝appsimulink.simulationOutput.对象。每个仿真output.对象包含已记录的信号和仿真metadata.。运行多个模拟时Parsim,捕获错误,以便随后的模拟可以继续运行。任何错误都会显示出来ErrorMessage财产的仿真output.对象。

出局= Parsim(在,'showprogress''在'......“SetupFcn”,@()sldemo_parallel_rapid_accel_sims_script_setup(mdl));
[21-May-2021 17:46:47] Checking for availability of parallel pool…使用“local”配置文件启动并行池(parpool)…[21-May-2021 17:47:51] Starting Simulink on parallel workers…金宝app分析和传送文件给工人…完成。[21-May-2021 17:48:54]配置并行工作器上的模拟缓存文件夹…[21-May-2021 17:48:55] Running SetupFcn on parallel workers…[21-May-2021 17:50:14]加载模型并行工人…[21-May-2021 17:50:22]运行模拟…[21-May-2021 17:50:29] 8次仿真运行中完成1次[21-May-2021 17:50:29] 8次仿真运行中完成2次[21-May-2021 17:50:29] 8次仿真运行中完成3次[21-May-2021 17:50:29] 8次仿真运行中完成4次[21-May-2021 17:50:29] 8次仿真运行中完成5次[21-May-2021 17:50:29] 8次仿真运行中完成5次[21-May-2021 17:50:29] 8次仿真运行中完成5次[21-May-2021 17:50:29] 8次仿真运行中完成6次[21-May-2021 17:50:29[21-May-2021 17:50:36]完成8次模拟运行中的7次[21-May-2021 17:50:36]清理并行工作人员…

第五步:记录结果

在不同参数值和输入的时间方面绘制发动机空闲速度。输出以阵列格式记录,可以从SimulationOutput对象访问。

为了i = 1:numsims simout = out(i);t = simout.tout;y = simout.yout;绘图(T,Y)持有所有结尾

步骤6:关闭MATLAB Workers

删除(GCP('noicreate')))

也可以看看

相关的话题