主要内容

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

这个例子展示了如何在信号编辑器块中使用SimulationInput对象和金宝appparsim命令。parsim命令使用并行计算工具箱™(如果可用的话)来并行运行模拟,否则将以串行方式运行模拟。

模型概述

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

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

mdl =“sldemo_suspn_3dof”;isModelOpen = bdIsLoaded(mdl);open_system (mdl);

设置多次模拟所需的数据

使用Signal Editor块的numberofscenario参数确定Signal Editor块中的案例数量。用例的数量来确定要在步骤3中运行的迭代的数量。

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

创建一个数组金宝app仿真软件。SimulationInput对象来定义要运行的模拟集。每个SimulationInput对象对应于一个模拟,并将作为变量中的数组存储,.mask参数,ActiveScenario,指定信号编辑器块场景的扫描值。为每个模拟设置活动场景。

idx:-1:1 in(idx) = Simulink.Si金宝appmulationInput(mdl);in(idx) = setBlockParameter(in(idx), sigEditBlk,“ActiveScenario”, idx);结束

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

使用Parsim并行运行模拟

使用parsim函数并行执行模拟。SimulationInput对象数组,,在最后一步中创建的parsim函数作为第一个参数。的输出parsim的数组金宝app仿真软件。SimulationOutput对象,该对象存储在变量中.设置'ShowProgress'选项为'on',在MATLAB命令窗口中打印模拟的进度。

Out = parsim(in,“ShowProgress”“上”);
[28-Feb-2018 12:26:20]检查并行池的可用性…使用“本地”配置文件启动并行池(parpool)…连接6个工人。[28-Feb-2018 12:27:04]在并行工人上加载S金宝appimulink…[28-Feb-2018 12:27:04]在并行工作器上配置模拟缓存文件夹…[28-Feb-2018 12:27:04]并行工作负载模型…[12:27:08]运行模拟…[28-Feb-2018 12:27:18]完成20次模拟中的2次[28-Feb-2018 12:27:18]完成20次模拟中的4次[28-Feb-2018 12:27:18]完成20次模拟中的5次[28-Feb-2018 12:27:18]完成20次模拟中的6次[28-Feb-2018 12:27:22]完成20次模拟中的7次[28-Feb-2018 12:27:22]完成20次模拟中的8次[28-Feb-2018 12:27:22]完成20次模拟中的9次[28-Feb-2018 12:27:22] 20次模拟跑中完成11次[28-Feb-2018 12:27:23] 20次模拟跑中完成13次[28-Feb-2018 12:27:26] 20次模拟跑中完成14次[28-Feb-2018 12:27:26] 20次模拟跑中完成15次[28-Feb-2018 12:27:26] 20次模拟跑中完成16次[28-Feb-2018 12:27:26] 20次模拟跑中完成17次[28-Feb-2018[28-Feb-2018 12:27:29]完成20个模拟运行中的19个[28-Feb-2018 12:27:29]完成20个模拟运行中的20个[28-Feb-2018 12:27:29]清理并行工人…

每个SimulationOutput对象都包含日志信号和SimulationMetadata.当运行多个模拟时使用parsim,错误被捕获,以便后续的模拟可以继续运行。任何错误都会显示在ErrorMessage属性的SimulationOutput对象。

阴谋的结果

绘制垂直车辆位移从不同的模拟,看看车辆如何执行不同的道路轮廓。信号以Dataset格式记录在SimulationOutput对象中。使用得到的每个元素中包含时间和信号数据的时间序列对象

legend_labels = cell(1,numCases);i = 1:numCases simOut = out(i);ts = simOut.logsout.get(“vertical_disp”) . values;ts.plot;Legend_labels {i} = [“运行”num2str (i)];持有所有结束标题(“三自由度悬架模型的响应”)包含(“时间(s)”);ylabel (“车辆垂直位移(m)”);传奇(legend_labels“位置”“NorthEastOutside”);

关闭MATLAB工作程序

最后,如果之前没有打开并行池和模型,则关闭它们。

如果(~isModelOpen) close_system(mdl, 0);结束删除(gcp (“nocreate”));
使用“本地”配置文件的并行池正在关闭。