并行模拟使用Parsim:测试用例
这个例子展示了如何运行多个仿真软件®模拟信号编辑器中对应不同的测试用例使用Simulat金宝appionInput对象和块parsim
命令。parsim命令使用并行计算工具箱™,如果它是可用的,模拟并行运行,否则在串行模拟运行。
模型概述
该模型sldemo_suspn_3dof
所示模拟车辆动力学基于不同道路的道路——悬挂交互配置文件。车辆动力学三个自由度的捕获:垂直位移,滚,音高。路左和右轮胎的配置文件数据导入到信号编辑块不同的测试用例。Road-Suspension交互子系统计算悬浮力的四个轮胎的车辆位置基于道路数据和当前车辆的状态。这些力量在体内动力学子系统和滚转力矩产生的音高和用于确定三个自由度的车辆运动:垂直位移,滚,音高。
悬架模型是使用不同的道路模拟配置文件来确定设计是否满足预期的性能目标。并行计算工具箱用于加快这些多个模拟,如下图所示。
mdl =“sldemo_suspn_3dof”;isModelOpen = bdIsLoaded (mdl);open_system (mdl);
设置多个模拟所需数据
确定病例数在编辑器的信号块使用NumberOfScenarios参数信号编辑器的块。病例数用于确定迭代的数量在步骤3中运行。
sigEditBlk = [mdl“/路配置文件”];numCases = str2double (get_param (sigEditBlk“NumberOfScenarios”));
创建一个数组的金宝appSimulink.SimulationInput
对象定义的模拟运行。每个SimulationInput对象对应于一个仿真,并将作为一个数组存储在一个变量,在
。面具参数,ActiveScenario
指定扫描信号的值编辑块场景。为每个模拟活动场景设置。
为idx = numCases: 1:1 (idx) = Si金宝appmulink.SimulationInput (mdl);(idx) = setBlockParameter (sigEditBlk (idx),“ActiveScenario”,idx);结束
注意,指定SimulationInput对象模型参数不立即应用到模型。指定的值将被应用在模拟和恢复回原来的值,如果可能的话,在仿真完成之后。
使用Parsim并行运行模拟
使用parsim
函数执行并行模拟。SimulationInput对象的数组,在
,传递到最后一个步骤中创建的parsim
函数的第一个参数。的输出parsim
命令是一个数组金宝appSimulink.SimulationOutput
对象存储在变量中出
。将“ShowProgress”选项设置为“在”打印一个进度模拟的MATLAB命令窗口。
= parsim (,“ShowProgress”,“上”);
(21 - 2月- 2021 01:43:41)检查可用性平行池……开始平行池(parpool)使用“本地”概要文件…连接到平行池(工人数量:6)。[21 - 2月- 2021 01:44:30]开始仿真软件并行工人……金宝app(21 - 2月- 2021 01:45:05)配置模拟缓存文件夹在平行的工人……(21 - 2月- 2021 01:45:07)加载模型并行的工作……(21 - 2月- 2021 01:45:13)运行模拟……(21 - 2月- 2021 01:45:26)完成1 20模拟运行[21 - 2月- 2021 01:45:26]完成2 20模拟运行(21 - 2月- 2021 01:45:26)完成3 20模拟运行(21 - 2月- 2021 01:45:26)完成4 20模拟运行(21 - 2月- 2021 01:45:26)完成5 20模拟运行(21 - 2月- 2021 01:45:26)完成6 20模拟运行(21 - 2月- 2021 01:45:28)完成7 20模拟运行(21 - 2月- 2021 01:45:29)完成8 20模拟运行(21 - 2月- 2021 01:45:29)完成9 20模拟运行(21 - 2月- 2021 01:45:29)完成10的20模拟运行(21 - 2月- 2021 01:45:29)完成20 11模拟运行(21 - 2月- 2021 01:45:29)完成12 20模拟运行(21 - 2月- 2021 01:45:31)完成13 20模拟运行(21 - 2月- 2021 01:45:31)完成14 20模拟运行(21 - 2月- 2021 01:45:31)完成15 20模拟运行(21 - 2月- 2021 01:45:31)完成16 20模拟运行(21 - 2月- 2021 01:45:31)完成17 20模拟运行(21 - 2月- 2021 01:45:31)完成18 20模拟运行(21 - 2月- 2021 01:45:34)完成19 20模拟运行(21 - 2月- 2021 01:45:34)完成20 20模拟运行(21 - 2月- 2021 01:45:34)清理平行工人……
每个SimulationOutput对象包含记录的信号的SimulationMetadata
。当运行多个模拟使用parsim
,捕获错误,以便后续模拟可以继续运行。任何错误都会出现在ErrorMessage
SimulationOutput对象的属性。
阴谋的结果
情节从不同的模拟车辆垂直位移,看看车辆执行概要文件的不同道路。的信号是登录SimulationOutput对象数据集格式。使用得到
方法获取timeseries对象包含时间和信号数据的每个元素出
。
legend_labels =细胞(1、numCases);为i = 1: numCases simOut = (i);ts = simOut.logsout.get (“vertical_disp”). values;ts.plot;legend_labels{我}= [“运行”num2str (i)];持有所有结束标题(一个三自由度悬架模型的响应)包含(“时间(s)”);ylabel (“车辆垂直位移(m)”);传奇(legend_labels“位置”,“NorthEastOutside”);
关闭MATLAB工人
最后,关闭并行池和模型如果他们尚未打开。
如果(~ isModelOpen) close_system (mdl 0);结束删除(gcp (“nocreate”));
另请参阅
parsim
|金宝appSimulink.SimulationInput
|金宝appSimulink.Simulation.Variable