В случае использования возможности прервать параллельное моделирование с помощью интерфейса 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
. Поскольку это именно «уродливая» реализация, которую я хотел избежать, проблема все еще активна.