从MAT文件作为输入的并行仿真流数据

这个例子说明如何使用万博1manbetxSimulink.SimulationData.DatasetRef对象和parsim函数从版本7.3 MAT-文件并行仿真流的输入数据。考虑当你的模拟输入过大加载到内存按照这​​个例子中列出的步骤。例如,可以使用从一组平行的模拟作为另一个输入的记录到永久存储的数据。

本例使用parsim运行一个模型的多个模拟,每个模拟使用唯一的输入数据。模型基于sldemo_suspn_3dof模型,修改为使用轮廓尺寸块作为输入的源,而不是信号编辑器块。该模型模拟的悬架系统的不同的路况的响应。在这个例子中使用的MAT-文件包含多个万博1manbetxSimulink.SimulationData.Dataset对象代表各种路况。该示例使用DatasetRef对象到流引用的全部的内容数据集对象作为模拟输入。

您还可以流单个信号数据转换成并行仿真与运行parsim运用matlab.io.datastore.SimulationDatastore对象。有关创建SimulationDatastore对象,看到使用SimulationDatastore对象流化单个信号

加载模型并访问输入数据

加载ex_sldemo_suspn_3dof_parsim_stream模型。模型通过两个Inport块接收输入数据数据集用作模拟输入对象包含两个元素:一个用于每个INPORT。

MDL ='ex_sldemo_suspn_3dof_parsim_stream';open_system (mdl)

您可以使用万博1manbetxSimulink.SimulationData.DatasetRef.getDatasetVariableNames函数计算包含输入数据的mat文件的内容,而不将数据加载到内存中。该函数返回一个单元格数组,其中包含每个单元格名称的元素万博1manbetxSimulink.SimulationData.Dataset文件包含的变量。使用函数来访问变量名,并确定文件中测试用例的数量。

varNames = 万博1manbetxSimulink.SimulationData.DatasetRef.getDatasetVariableNames ('suspn_3dof_test_cases.mat');numTestCases =元素个数(varNames);

您可以使用流测试用例数据导入模型万博1manbetxSimulink.SimulationData.DatsetRef对象。该DatasetRef对象引用用于创建该变量的文件中的一个变量,并增量地加载该变量数据。创建一个DatasetRef对象的每个万博1manbetxSimulink.SimulationData.Dataset对象在测试用例文件。

对于IDX1 = 1:numTestCases inputData(IDX1)= S万博1manbetximulink.SimulationData.DatasetRef('suspn_3dof_test_cases.mat'...varNames {IDX1});结束

配置和运行并行计算

要使用测试用例输入集作为一组并行模拟的输入,请创建一个数组万博1manbetxSimulink.SimulationInput对象可以传递到parsim功能。使用setExternalInput函数指定万博1manbetxSimulink.SimulationData.DatasetRef对象对应于测试情况下的数据作为模拟输入流。

(1:numTestCases) = Si万博1manbetxmulink.SimulationInput (mdl);对于IDX2 = 1:在(IDX2)= setExternalInput numTestCases(在(IDX2),inputData(IDX2));结束

使用parsim函数来运行每个测试情况下的模拟。当你有并行计算工具箱™,parsim函数并行运行模拟。如果没有并行计算工具箱,则parsim功能运行在串行模拟。

parsim函数创建一个基于并行计算工具箱配置的工作池。默认,parsim使用本地池。如果您使用远程工作者,您可以使用AttachedFiles名称 - 值对发送包含测试用例输入数据到每个工人的MAT-文件。当您指定AttachedFiles名称 - 值对,parsim发送文件的副本给每个工人,这可能需要一些时间,大文件。对于从一个大的文件流媒体输入数据,本地工人可能更快,因为工人有权访问文件,而无需创建和发送副本。当您使用远程工作人员,考虑保存MAT文件中的位置,所有的远程办公人员可以访问和创建DatasetRef引用该文件副本的对象。

OUT = parsim(IN);
[29-Feb-2020 02:25:17]检查平行池的可用性…使用“本地”配置文件启动并行池(parpool)…连接到并行池(worker数量:4)。万博1manbetx[29-Feb-2020 02:26:58]在并行工人上配置模拟缓存文件夹…[29-Feb-2020 02:26:58]并行工作者加载模型…[2月29日02:27:31]运行模拟…(29 - 2月- 2020 02:27:41)完成1 20模拟运行[29 - 2月- 2020 02:27:42]完成2 20模拟运行(29 - 2月- 2020 02:27:42)完成3 20模拟运行(29 - 2月- 2020 02:27:43)完成4 20模拟运行(29 - 2月- 2020 02:27:44)完成5 20模拟运行(29 - 2月- 2020 02:27:45)完成6 20模拟运行(29 - 2月- 2020 02:27:45)完成7 20模拟运行(29 - 2月- 2020 02:27:47)完成8 20模拟运行(29 - 2月- 2020 02:27:48)完成9 20模拟运行(29 - 2月- 2020 02:27:48)完成10的20模拟运行(29 - 2月- 2020 02:27:50)完成20 11模拟运行(29 - 2月- 2020 02:27:51)完成12 20模拟运行(29 - 2月- 2020 02:27:52)完成13 20模拟运行(29 - 2月- 2020 02:27:52)完成14 20模拟运行(29 - 2月- 2020 02:27:54)完成15 20模拟运行(29 - 2月- 2020 02:27:54)完成16 20模拟运行(29 - 2月- 2020 02:27:54)完成20模拟运行[29日- 2月17 - 2020完成20次模拟运行中的18次[29-Feb-2020 02:27:58]完成20次模拟运行中的19次[29-Feb-2020 02:27:58]

查看仿真结果

您可以通过编程访问模拟结果当模拟完成。创建显示车辆的所有道路轮廓测试用例的垂直位移曲线。

如果的isEmpty(OUT(1).ErrorMessage)legend_labels =细胞(1,numTestCases);对于我= 1:numTestCases如果的isEmpty(下(ⅰ).ErrorMessage)simOut = OUT(ⅰ);TS = simOut.logsout.get('vertical_disp').Values;ts.plot;legend_labels {I} = ['跑 'num2str(I)];结束保持所有结束标题(“三自由度悬架模型的响应”)包含(“时间(s)”);ylabel(“车辆垂直位移(M)”);传奇(legend_labels“位置”'NorthEastOutside');结束

您还可以查看parsim使用模拟结果仿真管理器。要查看仿真管理效果,请使用ShowSimulationManager名称 - 值对用于parsim。随着仿真管理,可以监控运行,视景仿真数据的进展情况,并显示parsim结果在仿真数据检查

关闭并行的工人

当你完成并行运行模拟,您可以关闭工作池。

删除(GCP('nocreate的'));

相关的话题

负载模拟大数据

日志数据永久存储

平行模拟使用parsim