主要内容

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

此示例显示如何使用模拟浇口对象和信号编辑器块中的不同测试用例对应的多个Simulink®金宝app模拟。parsim命令。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用于定义要运行的模拟集的对象。每个仿真upput对象对应于一个仿真,并且将作为变量中的数组存储在一起,.面具参数,ActiveScenario,指定Signal Editor块场景的扫描值。为每个模拟设置活动场景。

idx = numcases:-1:1在(idx)= sim金宝appulink.simulationInput(MDL)中;在(idx)= setBlockParameter(在(IDX)中,SigEditBlk,'ActiveScenario',IDX);结束

请注意,在SimulationInput对象上指定模型参数不立即将其应用于模型。在模拟期间将应用指定的值,并在模拟结束后恢复为原始值。

使用Parsim并行运行模拟

使用parsim函数并行地执行模拟。SimulationInput对象数组,,在最后一步中创建的被传递到parsim函数作为第一个参数。的输出parsim命令是一系列金宝app仿真软件。SimulationOutput对象存储在变量中.将“showprogress”选项设置为“开”以在MATLAB命令窗口上打印模拟的进度。

= parsim (,“ShowProgress”“上”);
[21-FEB-2021 01:43:41]检查并行池的可用性......使用“本地”配置文件启动并行池(Parpool)...连接到并行池(工人数量:6)。[21-FEB-2021 01:44:30]在并行工人上启动Si金宝appmulink ... [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-2月2021 01:45:26]完成了20个模拟运行中的2个[21-FeB-2021 01:45:26]完成了20个模拟运行中的3个(21-Feb-2021 01:45:26)完成了20个模拟跑步[21-FEB-2021 01:45:26]完成了5个模拟运行中的5个[21-FEB-2021 01:45:26]完成了6个20个模拟运行[21-FEB-2021 01:45:28]完成7个20个模拟运行[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个仿真运行[21-FEB-2021 01:45:31]完成了20个模拟运行中的17个[21-FEB-2021 01:45:31]完成了20个模拟运行中的18个[21-Feb-2021 01:45:34]完成了19个的20个模拟运行中的19个[21-FeB-2021 01:45:34]完成了20个仿真运行中的20个[21-Feb-2021 01:45:34]清理平行工人......

每个SimulationOutput对象包含记录的信号和SimulationMetadata.当运行多个模拟使用parsim,捕获错误,以便后续模拟可以继续运行。任何错误都会在错误信息属性的模拟输出对象。

阴谋的结果

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

legend_labels =细胞(1、numCases);i = 1:numCases simOut = out(i);ts = simOut.logsout.get (“vertical_disp”) . values;ts.plot;legend_labels{我}= [“运行”num2str(i)];抓住全部结束标题(3自由度悬架模型的响应)xlabel('时间'');ylabel (“车辆垂直位移(m)”);传奇(Legend_Labels,'地点'“NorthEastOutside”);

关闭MATLAB工人

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

如果(〜是iSmodevenen)Close_System(MDL,0);结束删除(gcp (“nocreate”));

另请参阅

||

相关话题