1

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

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

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

感谢您的帮助!


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

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

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

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

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

4

1 回答 1

1

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

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

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

F.cancel();
于 2019-01-10T03:39:33.923 回答