中止 parsim 的执行
Abort execution of parsim
对于能够使用 MATLAB GUI 中止并行仿真的用例,我想在用户按下停止按钮后停止所有计划的仿真。
所有模拟都是使用 parsim
命令一次提交的,因此像回调到我的 GUI 变量 (App Designer) 之类的东西将是最可取的解决方案。
我考虑过但未完全提供理想解决方案的方法:
- Simulation Manager 提供了使用自己的界面关闭模拟的功能。如果我只有它的停止按钮执行的代码...
parsim
在每次模拟开始时使用 Simulink.SimulationInput class as input to run simulations, allowing to modify the preSimFcn
。到目前为止,除了故意抛出错误外,我还没有找到 "skip" 在初始化阶段进行模拟的方法。
感谢您的帮助!
更新 1:使用 preSimFcn
将终止时间设置为等于开始时间大大减少了模拟时间。但由于第一步仍然是计算的,因此必须有更好的解决方案。
simin = simin.setModelParameter('StopTime',get_param(mdl,'StartTime'))
更新 2:故意抛出执行 preSimFcn
的错误,例如将其设置为
simin = simin.setModelParameter('SimulationCommand','stop')
为我提供了迄今为止最短的终止时间。但是,它需要捕获并识别 Simulink.SimulationOutput
对象的 ErrorMessage
中的错误。由于这正是我想要避免的 "ugly" 实现,因此问题仍然存在。
如果您使用的是 17b 或更高版本,parsim 会提供 'RunInBackground' 的选项。它 returns 一个 Future 对象数组。
F = parsim(in, 'RunInBackground', 'on')
请注意,仅适用于并行模拟。 Simulink.Simulation.Future 对象 F 提供了一个取消方法,它将终止模拟。您可以使用 fetchOutputs 方法从模拟中获取输出。
F.cancel();
对于能够使用 MATLAB GUI 中止并行仿真的用例,我想在用户按下停止按钮后停止所有计划的仿真。
所有模拟都是使用 parsim
命令一次提交的,因此像回调到我的 GUI 变量 (App Designer) 之类的东西将是最可取的解决方案。
我考虑过但未完全提供理想解决方案的方法:
- Simulation Manager 提供了使用自己的界面关闭模拟的功能。如果我只有它的停止按钮执行的代码...
parsim
在每次模拟开始时使用 Simulink.SimulationInput class as input to run simulations, allowing to modify thepreSimFcn
。到目前为止,除了故意抛出错误外,我还没有找到 "skip" 在初始化阶段进行模拟的方法。
感谢您的帮助!
更新 1:使用 preSimFcn
将终止时间设置为等于开始时间大大减少了模拟时间。但由于第一步仍然是计算的,因此必须有更好的解决方案。
simin = simin.setModelParameter('StopTime',get_param(mdl,'StartTime'))
更新 2:故意抛出执行 preSimFcn
的错误,例如将其设置为
simin = simin.setModelParameter('SimulationCommand','stop')
为我提供了迄今为止最短的终止时间。但是,它需要捕获并识别 Simulink.SimulationOutput
对象的 ErrorMessage
中的错误。由于这正是我想要避免的 "ugly" 实现,因此问题仍然存在。
如果您使用的是 17b 或更高版本,parsim 会提供 'RunInBackground' 的选项。它 returns 一个 Future 对象数组。
F = parsim(in, 'RunInBackground', 'on')
请注意,仅适用于并行模拟。 Simulink.Simulation.Future 对象 F 提供了一个取消方法,它将终止模拟。您可以使用 fetchOutputs 方法从模拟中获取输出。
F.cancel();