使用Parsim的并行模拟:测试用例扫描
此示例展示了如何在Signal Editor块中使用SimulationInput对象和金宝appparsim
命令。parsim命令使用并行计算工具箱™(如果有的话)并行运行模拟,否则以串行方式运行模拟。
模型概述
该模型sldemo_suspn_3dof
下图模拟了不同路面情况下基于道路-悬挂相互作用的车辆动力学。车辆动力学被捕捉在三个自由度:垂直位移,滚转和俯仰。左右轮胎的道路轮廓数据作为不同的测试用例导入到Signal Editor块中。道路-悬架交互子系统根据道路数据和当前车辆状态计算车辆在四个轮胎位置上的悬架力。在车身动力学子系统中,这些力以及由此产生的俯仰和侧倾力矩用于确定车辆在三个自由度上的运动:垂直位移、侧倾和俯仰。
悬架模型使用不同的道路轮廓进行模拟,以确定设计是否满足预期的性能目标。Parallel Computing Toolbox用于加速这些多重模拟,如下所示。
mdl =“sldemo_suspn_3dof”;isModelOpen = bdIsLoaded(mdl);open_system (mdl);
设置多个模拟所需的数据
使用信号编辑器块的numberofscenario参数确定信号编辑器块中的案例数量。案例的数量用于确定在步骤3中运行的迭代的数量。
sigEditBlk = [mdl .“/路配置文件”];numCases = str2double(get_param(sigEditBlk),“NumberOfScenarios”));
创建一个数组金宝app仿真软件。SimulationInput
对象来定义要运行的模拟集。每个SimulationInput对象对应一个模拟,并将存储为变量中的数组,在
.掩码参数,ActiveScenario
,指定信号编辑器块场景的扫描值。为每个模拟设置活动场景。
为idx = numCases:-1:1 in(idx) = 金宝appSimulink.SimulationInput(mdl);in(idx) = setBlockParameter(in(idx), sigEditBlk,“ActiveScenario”, idx);结束
注意,在SimulationInput对象上指定模型参数并不会立即将其应用于模型。指定的值将在模拟期间应用,并在模拟结束后(如果可能的话)恢复到其原始值。
使用Parsim并行运行模拟
使用parsim
函数并行执行模拟。SimulationInput对象数组,在
,在最后一步中创建的parsim
函数作为第一个参数。的输出。parsim
的数组金宝app仿真软件。SimulationOutput
对象,该对象存储在变量中出
.将“ShowProgress”选项设置为“on”,在MATLAB命令窗口中打印模拟的进度。
Out = parsim(in,“ShowProgress”,“上”);
[21-Feb-2021 01:43:41]检查并行池的可用性…使用“本地”配置文件启动并行池(parpool)…[21 feb -2021 01:44:30]在并行工作上启动Simulink…金宝app[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次模拟运行中的4次[21 feb -2021 01:45:26]完成20次模拟运行中的5次[21 feb -2021 01:45:26]完成20次模拟运行中的6次[21 feb -2021 01:45:28]完成20次模拟运行中的8次[21 feb -2021 01:45:29]完成20次模拟运行中的9次[21 feb -2021 01:45:29]完成了20次模拟运行中的10次[21 feb -2021 01:45:31]完成了20次模拟运行中的12次[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:3101:45:31]完成20次模拟运行中的18次[21-Feb-2021 01:45:34]完成20次模拟运行中的20次[21-Feb-2021 01:45:34]清理并行工人…
每个SimulationOutput对象都包含日志信号和SimulationMetadata
.运行多个模拟时使用parsim
,错误被捕获,以便后续的模拟可以继续运行。任何错误都会显示在ErrorMessage
属性的SimulationOutput对象。
阴谋的结果
从不同的模拟中绘制垂直车辆位移图,以查看车辆在不同的道路轮廓上的表现。信号以Dataset格式记录在SimulationOutput对象中。使用得到
的每个元素中包含时间和信号数据的时间序列对象出
.
legend_labels = cell(1,numCases);为i = 1: simOut = out(i);ts = simOut.logsout.get(“vertical_disp”) . values;ts.plot;Legend_labels {i} = [“运行”num2str (i)];持有所有结束标题(“三自由度悬架模型的响应”)包含(“时间(s)”);ylabel (车辆垂直位移(m));传奇(legend_labels“位置”,“NorthEastOutside”);
关闭MATLAB Workers
最后,关闭并行池和模型(如果它们之前没有打开)。
如果close_system(mdl, 0);结束删除(gcp (“nocreate”));
另请参阅
parsim
|金宝app仿真软件。SimulationInput
|金宝appSimulink.Simulation.Variable