Прервать исполнение парсима - PullRequest
0 голосов
/ 28 июня 2018

В случае использования возможности прервать параллельное моделирование с помощью интерфейса MATLAB, я хотел бы остановить все запланированные моделирования после того, как пользователь нажал кнопку «Стоп». Все симуляции отправляются одновременно с помощью команды parsim, поэтому что-то вроде обратного вызова моих переменных GUI (App Designer) было бы наиболее предпочтительным решением.

Подходы, которые я рассмотрел, но не давали желаемого решения:

  • Диспетчер моделирования предоставляет функциональные возможности для закрытия моделирования с использованием собственного интерфейса. Если бы у меня был только код, его кнопка «Стоп» выполняется ...
  • parsim использует класс Simulink.SimulationInput в качестве входных данных для запуска симуляций, позволяя изменять preSimFcn в начале каждого моделирования. Я не нашел способа «пропустить» симуляцию на этапе ее инициализации, кроме как намеренно выдать ошибку.

Спасибо за помощь!


Обновление 1 : Использование preSimFcn для установки времени завершения, равного времени запуска, значительно сокращает время моделирования. Но так как первый шаг все еще вычисляется, должно быть лучшее решение.

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

Обновление 2 : Преднамеренно выдает ошибку при выполнении preSimFcn, например, установив его на

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

обеспечивает для меня самое короткое время завершения. Тем не менее, он требует перехвата и идентификации ошибки в ErrorMessage объекта Simulink.SimulationOutput. Поскольку это именно «уродливая» реализация, которую я хотел избежать, проблема все еще активна.

1 Ответ

0 голосов
/ 10 января 2019

Если вы используете 17b или более позднюю версию, parsim предоставляет опцию 'RunInBackground'. Возвращает массив объектов Future.

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

Обратите внимание, что доступно только для параллельного моделирования. Объект F Simulink.Simulation.Future предоставляет метод отмены, который завершает моделирование. Вы можете использовать методы fetchOutputs, чтобы получить результат моделирования.

F.cancel();
...