这个例子展示了如何使用金宝appSimulink.SimulationData.DatasetRef
对象和parsim
函数将用于并行模拟的7.3版mat -文件中的输入数据流化。当模拟的输入太大而无法加载到内存中时,请考虑遵循本例中概述的步骤。例如,您可以使用从一组并行模拟中记录到持久存储的数据作为另一组并行模拟的输入。
这个示例使用parsim
运行模型的多个模拟,每个模拟使用唯一的输入数据。这个模型是基于sldemo_suspn_3dof模型,修改后使用轮廓尺寸块作为输入源,而不是信号编辑器块。该模型模拟了悬架系统在不同路况下的响应。本例中使用的mat文件包含多个金宝appSimulink.SimulationData.Dataset
代表各种道路状况的物体。本例使用DatasetRef
对象以流传输整个引用的内容数据集
对象作为模拟输入。
您还可以将单个信号的数据流转换为并行模拟运行parsim
使用matlab.io.datastore.SimulationDatastore
对象。有关创建SimulationDatastore
对象,看到使用SimulationDatastore对象流单个信号.
加载ex_sldemo_suspn_3dof_parsim_stream
模型。模型通过两个import块接收输入数据数据集
用于模拟输入的对象包含两个元素:一个用于每个import。
mdl =“ex_sldemo_suspn_3dof_parsim_stream”;open_system (mdl)
你可以使用金宝appSimulink.SimulationData.DatasetRef.getDatasetVariableNames
函数计算包含输入数据的mat文件的内容,而不将数据加载到内存中。函数返回一个单元格数组,其中包含用于每个单元格名称的元素金宝appSimulink.SimulationData.Dataset
变量文件包含。使用函数来访问变量名,并确定文件中测试用例的数量。
varNames = 金宝appSimulink.SimulationData.DatasetRef.getDatasetVariableNames (“suspn_3dof_test_cases.mat”);numTestCases =元素个数(varNames);
您可以使用流测试用例数据到模型中金宝appSimulink.SimulationData.DatsetRef
对象。的DatasetRef
对象引用用于创建该变量的文件中的变量,并增量加载该变量数据。创建一个DatasetRef
为每一个对象金宝appSimulink.SimulationData.Dataset
对象在测试用例文件中。
为inputData(idx1) = Simulink.SimulationDat金宝appa.DatasetRef(“suspn_3dof_test_cases.mat”,...varNames {idx1});结束
要使用一组测试用例输入作为一组并行模拟的输入,创建一个数组金宝app仿真软件。SimulationInput
对象,可以传递给parsim
函数。使用setExternalInput
函数指定金宝appSimulink.SimulationData.DatasetRef
对象对应于测试用例,作为数据流作为模拟输入。
(1: numTestCases) = S金宝appimulink.SimulationInput (mdl);为idx2 = 1:numTestCases in(idx2) = setExternalInput(in(idx2),inputData(idx2));结束
使用parsim
函数为每个测试用例运行模拟。当您有并行计算工具箱™时,parsim
函数并行地运行模拟。如果没有并行计算工具箱,则parsim
函数以串行方式运行模拟。
的parsim
函数根据并行计算工具箱配置创建工作池。默认情况下,parsim
使用本地池。如果您使用远程工作人员,您可以使用AttachedFiles
将包含测试用例输入数据的mat文件发送给每个工作人员。当你指定AttachedFiles
名称-值对,parsim
向每个工作人员发送文件的副本,对于大文件可能需要一些时间。对于来自大文件的流输入数据,本地工作人员可能更快,因为工作人员无需创建和发送副本就可以访问文件。当您使用远程工作者时,请考虑将mat -文件存储在所有远程工作者都可以访问和创建的位置DatasetRef
引用该文件副本的对象。
= parsim(的);
[08-Sep-2020 23:20:23] check for availability of parallel pool…使用“local”配置文件启动并行池(parpool)…[08-Sep-2020 23:21:00] Starting Simulink on parallel workers…金宝app[08-Sep-2020 23:21:34]配置并行工作器上的模拟缓存文件夹…[08-Sep-2020 23:21:35]加载模型并行工人…[08-Sep-2020 23:21:41]运行模拟…[08- 9 -2020 23:21:53] 20次仿真运行中完成1次[08- 9 -2020 23:21:53]20次仿真运行中完成2次[08- 9 -2020 23:21:53]20次仿真运行中完成3次[08- 9 -2020 23:21:53]20次仿真运行中完成4次[08- 9 -2020 23:21:53]20次仿真运行中完成5次[08- 9 -2020 23:21:53]20次仿真运行中完成6次[08- 9 -2020 23:21:53[08- 9 -2020 23:21:56] 20次仿真运行中完成7次[08- 9 -2020 23:21:56]20次仿真运行中完成8次[08- 9 -2020 23:21:56]20次仿真运行中完成9次[08- 9 -2020 23:21:56]20次仿真运行中完成10次[08- 9 -2020 23:21:56]20次仿真运行中完成11次[08- 9 -2020 23:21:56]20次仿真运行中完成12次[08- 9 -2020 23:21:59] 20次仿真运行中完成13次[08- 9 -2020 23:21:59]20次仿真运行中完成14次[08- 9 -2020 23:21:59]20次仿真运行中完成15次[08- 9 -2020 23:21:59]20次仿真运行中完成16次[08- 9 -2020 23:21:59]20次仿真运行中完成17次[08- 9 -2020 23:21:59]20次仿真运行中完成18次[08-Sep-2020 23:22:01] Completed 19 of 20 simulation runs [08-Sep-2020 23:22:01] Completed 20 of 20 simulation runs
当模拟完成时,您可以通过编程方式访问模拟结果。创建一个图表,显示所有道路剖面测试案例中车辆的垂直位移。
如果isempty(out(1).ErrorMessage) legend_labels = cell(1,numTestCases);为我= 1:numTestCases如果isempty(out(i).ErrorMessage) simOut = out(i);ts = simOut.logsout.get (“vertical_disp”) . values;ts.plot;legend_labels{我}= [“运行”num2str (i)];结束持有所有结束标题(3自由度悬架模型的响应)包含(“时间(s)”);ylabel (“车辆垂直位移(m)”);传奇(legend_labels“位置”,“NorthEastOutside”);结束
你也可以查看parsim
使用仿真管理器.要在仿真管理器中查看结果,请使用ShowSimulationManager
名称-值对的parsim
.使用仿真管理器,您可以监视运行的进度,查看仿真数据,并显示parsim
结果在仿真数据检查.
当您完成运行并行模拟时,您可以关闭工作池。
删除(gcp (“nocreate”));