主要内容

使用Parsim的并行模拟:测试用例扫描

这个例子展示了如何在Signal Editor块中使用SimulationInput对象万博1manbetx和帕西姆parsim命令使用并行计算工具箱™, 如果可用,则以并行方式运行模拟,否则以串行方式运行模拟。

模型概述

模型sldemo_suspn_3dof下图根据不同路面轮廓的道路-悬架相互作用模拟车辆动力学。车辆动力学在三个自由度中捕获:垂直位移、侧倾和俯仰。左右轮胎的路面轮廓数据作为不同的测试用例导入到信号编辑器块中。道路悬架维度交互子系统根据道路数据和当前车辆状态计算四个轮胎位置处车辆上的悬挂力。在车身动力学子系统中,这些力以及由此产生的俯仰和侧倾力矩用于确定车辆在三个自由度下的运动:垂直位移、侧倾和pitcH

悬架模型使用不同的路面轮廓进行模拟,以确定设计是否满足预期的性能目标。并行计算工具箱用于加速这些多个模拟,如下所示。

mdl=“sldemo\u susn\u 3dof”;isModelOpen = bdIsLoaded (mdl);open_system (mdl);

设置多个模拟所需的数据

使用信号编辑器块的NumberOfScenarios参数确定信号编辑器块中的事例数。事例数用于确定在步骤3中运行的迭代次数。

sigEditBlk=[mdl“/路配置文件”];numCases = str2double (get_param (sigEditBlk“NumberOfScenarios”));

创建一个万博1manbetx模拟输入对象定义要运行的模拟集。每个SimulationInput对象对应于一个仿真,并将作为数组存储在变量中,在里面.掩码参数,活动场景,指定信号编辑器块方案的扫描值。为每个模拟设置活动方案。

对于idx = numCases:-1:1 in(idx) = 万博1manbetxSimulink.SimulationInput(mdl);in(idx) = setBlockParameter(in(idx), sigeditblock,“ActiveScenario”, idx);终止

注意,在SimulationInput对象上指定模型参数并不会立即将其应用到模型中。在仿真过程中应用指定的值,如果可能,在仿真完成后恢复到初始值。

使用Parsim并行运行模拟

使用帕西姆函数并行执行模拟。SimulationInput对象数组,在里面,在最后一步中创建的帕西姆函数作为第一个参数帕西姆的数组万博1manbetx模拟输出存储在变量中的对象出来.将“ShowProgress”选项设置为“on”,在MATLAB命令窗口上打印模拟的进度。

out=parsim(in,“展示进步”,“开”);
[21-Feb-2021 01:43:41]检查并行池的可用性…使用“local”配置文件启动并行池(parpool)…[21- 2 -2021 01:44:30] Starting Simulink on parallel workers…万博1manbetx[21-Feb-2021 01:45:05]在并行工作器上配置模拟缓存文件夹…[21-Feb-2021 01:45:07]加载模型并行工人…[21-Feb-2021 01:45:13]运行模拟…[21-Feb-2021 01:45:26] 20次仿真运行中完成1次[21-Feb-2021 01:45:26] 20次仿真运行中完成2次[21-Feb-2021 01:45:26] 20次仿真运行中完成3次[21-Feb-2021 01:45:26] 20次仿真运行中完成4次[21-Feb-2021 01:45:26] 20次仿真运行中完成5次[21-Feb-2021 01:45:26] 20次仿真运行中完成6次[21-Feb-2021 01:45:29] 20次仿真运行中完成7次[21-Feb-2021 01:45:29] 20次仿真运行中完成8次[21-Feb-2021 01:45:29] 20次仿真运行中完成9次[21-Feb-2021 01:45:29] 20次仿真运行中完成10次[21-Feb-2021 01:45:29] 20次仿真运行中完成11次[21-Feb-2021 01:45:29] 20次仿真运行中完成12次[21-Feb-2021 01:45:31] 20次仿真运行中完成13次[21-Feb-2021 01:45:31] 20次仿真运行中完成14次[21-Feb-2021 01:45:31] 20次仿真运行中完成15次[21-Feb-2021 01:45:31] 20次仿真运行中完成16次[21-Feb-2021 01:45:31] 20次仿真运行中完成17次[21-Feb-2021 01:45:31] 20次仿真运行中完成18次[21-Feb-2021 01:45:34] Completed 19 of 20 simulation runs [21-Feb-2021 01:45:34]

每个SimulationOutput对象包含记录的信号以及模拟元数据。当使用帕西姆,将捕获错误,以便后续模拟可以继续运行。任何错误都将显示在ErrorMessageSimulationOutput对象的属性。

绘图结果

绘制不同模拟的垂直车辆位移图,以查看车辆在不同道路剖面上的表现。信号以数据集格式记录在SimulationOutput对象中。使用收到方法获取包含来自每个元素的时间和信号数据的timeseries对象出来

图例_标签=细胞(1,numCases);对于i=1:numCases simOut=out(i);ts=simOut.logsout.get(“垂直显示”).Values;ts.plot;图例_标签{i}=[“跑”num2str(i)];等待所有终止头衔(“三自由度悬架模型的响应”)包含(“时间(s)”); 伊拉贝尔(‘车辆垂直位移(m)’);传奇(legend_labels“位置”,“东北外”);

密切合作

最后,关闭并行池和模型(如果之前未打开)。

如果(~ isModelOpen) close_system (mdl 0);终止删除(gcp)(“不创造”));

另见

||

相关的话题