Hi,

Мои Simulink симуляции управляются большим набором файлов .m, и вместо того, чтобы запускать симуляцию самостоятельно с помощью кнопки Воспроизвести, я предпочитаю вызывать файл . m-файл, который настраивает среду, а затем запускает симуляцию.

Я запускаю свою симуляцию с

set_param('main','SimulationCommand','start');

Однако этот вызов является неблокирующим. Есть ли хороший способ заблокировать m-файл до завершения моделирования?

Я мог бы использовать опрос в цикле for (запрос состояния снова и снова), но это явно не считается хорошим решением.

Я мог бы использовать команду «sim», но я не хочу этого, потому что я «не вижу» работающего Simulink (включая состояния, время моделирования и т. д.).

В идеале должна быть опция «блокировки» для запуска «SimulationCommand».

Еще одно решение, о котором я мог подумать (не уверен, что это поддерживается MATLAB?), Чтобы создать событие и позволить сценарию Matlab ожидать сигнала события. Затем событие сигнализируется обратным вызовом «StopFcn». Важно, что это решение не полагается на опрос…

Есть креативные идеи?

ПРИМЕЧАНИЕ. 

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

Запуск Simulink с командой sim имеет свои ограничения по сравнению с set_param и наоборот, и я понимаю, почему вы можете захотеть использовать set_param. Если вы вызовете set_param(gcs, ‘SimulationCommand’, ‘start’) из mfile, код инициализирует и запустит текущую модель Simulink. Затем mfile будет продолжать работать независимо от статуса симуляции Simulink.

Вот сценарий:

Мы хотим приостановить mfile. Он должен оставаться приостановленным до тех пор, пока, скажем, Simulink не сделает паузу с блоком утверждения. Затем mfile продолжает работать.

Решение:

Мы помещаем эти строки после set_param(gcs, ‘SimulationCommand’, ‘start’) в наш m-файл

%Это создание Java-робота. мы будем использовать его в Simulink для написания кода в командной строке позже.

робот = java.awt.Robot;

%Это инициирует режим отладки. mfile будет приостановлен, пока мы не выйдем из режима отладки

клавиатура

Теперь mfile будет приостановлен. Мы хотим выйти из режима отладки, когда Simulink закончит работу. Мы можем выйти из режима отладки, нажав соответствующую кнопку на вкладке «Редактор» или написав dbcont в командной строке. Конечно, мы хотим автоматизировать это. Если мы поместим dbcont в обратные вызовы нашей модели Simulink, мы получим ошибку, потому что модель Simulink находится не в режиме отладки, а наш mfile. Вот где робот пригодится! Мы позволим роботу написать код в командной строке за нас!

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ