快速使用Parsim加速器模拟
这个例子显示了在应用程序中使用快速的加速器要求一系列平行模拟输入和参数值。
该示例使用一个模型,模拟发动机的怠速。模型输入的电压是绕过空气阀。输出是怠速。
使用parsim
与两套阀运行并行模拟电压。独立不同的两个三个传递函数增益参数范围的两个值。下表列出了八个模拟,以及参数值。在第2步,创建外部输入,inpSets
。的变量gain2
和gain3
对应两个增益参数。
运行1 inpSets (1) gain2 = 25 gain3 = 20
运行2 inpSets (1) gain2 = 25 gain3 = 30
跑3 inpSets (1) gain2 = 35 gain3 = 20
运行4 inpSets (1) gain2 = 35 gain3 = 30
运行5 inpSets (2) gain2 = 25 gain3 = 20
运行6 inpSets (2) gain2 = 25 gain3 = 30
运行7 inpSets (2) gain2 = 35 gain3 = 20
运行8 inpSets (2) gain2 = 35 gain3 = 30
步骤1:准备
首先,打开模型。模拟模式设置为快速的加速器。默认的输入数据和所需的参数预加载的基本工作空间。
打开模型:
mdl =“sldemo_raccel_engine_idle_speed”;open_system (mdl);
步骤2:创建输入集
扰乱默认输入值向量来获得一个新的输入值向量。
inpSets (1) = timeseries (inpData、时间);rndPertb = 0.5 +兰德(长度(时间),1);inpSets (2) = timeseries (inpData。* rndPertb、时间);numInpSets =长度(inpSets);
步骤3:创建参数集
接下来,检查怠速如何变化不同的参数值gain2
和gain3
。创建一个数组的金宝appSimulink.SimulationInput
对象指定不同的参数值,并为每个模拟外部输入。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 * numInpSets;(1:numSims) = Si金宝appmulink.SimulationInput (mdl);idx = 1;为iG2 = 1: num_gain2_vals为iG3 = 1: num_gain3_vals为inpSetsIdx = 1: numInpSets在(idx) = (idx) .setModelParameter (“SimulationMode”,“快速”,…“RapidAcceleratorUpToDateCheck”,“关闭”,…“SaveTime”,“上”,…“SaveOutput”,“上”);%使用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);oc = onCleanup (@ () cd (currentFolder));金宝appSimulink.BlockDiagram.buildRapidAcceleratorTarget (mdl);结束
第四步:执行模拟
使用parsim
函数执行并行模拟。的数组SimulationInput
对象,在
,传递到最后一个步骤中创建的parsim
函数的第一个参数。模拟输出数据存储在一个变量,出
,其值是一个数组金宝appSimulink.SimulationOutput
对象。每一个SimulationOutput
随着对象包含记录的信号SimulationMetadata
。当运行多个模拟使用parsim
,捕获错误,以便后续模拟可以继续运行。任何错误都会出现在ErrorMessage
财产的SimulationOutput
对象。
= parsim (,“ShowProgress”,“上”,…“SetupFcn”@ ()sldemo_parallel_rapid_accel_sims_script_setup (mdl));
(21 - 2021年5月——17:46:47)检查可用性平行池……开始平行池(parpool)使用“本地”概要文件…连接到平行池(工人数量:6)。[21日- 2021年5月——17:47:51]开始仿真软件并行工人……金宝app工人们…做分析和传输文件。(21 - 2021年5月——17:48:54)配置模拟缓存文件夹在平行的工人……(21 - 2021年5月——17:48:55)在并行运行SetupFcn工人……(21 - 2021年5月——17:50:14)加载模型并行的工作……(21 - 2021年5月——17:50:22)运行模拟……(21 - 2021年5月——17:50:29)完成1 8模拟运行[21 - 2021年5月——17:50:29]完成了2 8模拟运行(21 - 2021年5月——17:50:29)完成3 8模拟运行(21 - 2021年5月——17:50:29)完成4 8模拟运行(21 - 2021年5月——17:50:29)完成5 8模拟运行(21 - 2021年5月——17:50:29)完成6 8模拟运行[21日- 2021年5月——17:50:36]完成7 8模拟运行[21日- 2021年5月——17:50:36]完成8 8模拟运行[21日- 2021年5月——17:50:36]清理平行工人……
第五步:阴谋的结果
情节发动机怠速时间不同的参数值和输入。输出数组中记录格式和从SimulationOutput对象可以访问。
为i = 1: numSims simOut = (i);t = simOut.tout;y = simOut.yout;情节(t, y)所有结束
第六步:关闭MATLAB工人
删除(gcp (“nocreate”))