中止执行parsim

时间:2018-06-28 08:47:56

标签: matlab parallel-processing simulink matlab-guide matlab-app-designer

对于能够使用MATLAB GUI中止并行仿真的用例,我想在用户按下“停止”按钮后停止所有计划的仿真。 使用parsim命令可一次提交所有模拟,因此,最可取的解决方案是回调GUI变量(App Designer)。

我已经考虑过但并未完全提供理想解决方案的方法:

  • Simulation Manager提供了使用其自己的界面关闭仿真的功能。如果我只有代码,则会执行“停止”按钮...
  • parsim使用Simulink.SimulationInput类作为输入来运行模拟,从而允许在每次模拟开始时修改preSimFcn。除了到目前为止有意引发错误外,我还没有找到一种在初始化阶段“跳过”模拟的方法。

谢谢您的帮助!


更新1 :使用preSimFcn将终止时间设置为等于开始时间,可以大大减少仿真时间。但是,由于仍然要计算第一步,因此必须有一个更好的解决方案。

simin = simin.setModelParameter('StopTime',get_param(mdl,'StartTime'))

更新2 :故意抛出执行preSimFcn的错误,例如将其设置为

simin = simin.setModelParameter('SimulationCommand','stop')

为我提供了迄今为止最短的终止时间。但是,它需要捕获并识别Simulink.SimulationOutput对象的ErrorMessage中的错误。由于这正是我要避免的“丑陋”实现,因此该问题仍然存在。

1 个答案:

答案 0 :(得分:0)

如果您使用的是17b或更高版本,parsim将为“ RunInBackground”提供一个选项。它返回一个Future对象数组。

F = parsim(in, 'RunInBackground', 'on')

请注意,仅适用于并行仿真。 Simulink.Simulation.Future对象F提供了一个cancel方法,该方法将终止模拟。您可以使用fetchOutputs方法从模拟中获取输出。

F.cancel();