2013-03-05 5 views
2

Я пытаюсь управлять симуляцией из M-файла. Что я хочу сделать в M-файле, это дать модели simulink некоторый ввод, запустить модель simulink, изменить одно входное значение на 0,6 секунды, продолжить работу модели simulink с новым входом.control simulink из M-файла

Я уже знаю, что с помощью set_param я могу начать, приостановить и продолжить симуляцию, но проблема в том, что я не знаю, как приостановить модель simulink в определенное время (0,6 с), возможно ли получить текущее время от модели simulink и прочитать ее в M-файле?

Другой способ, который я уже знаю, - использовать sim для запуска модели simulink от 0 до 0,6 и использовать SimState для сохранения информации на 0,6 секунды, а затем загрузить эту информацию, чтобы возобновить симуляцию. Я пытаюсь изменить входные данные до возобновления моделирования, но, похоже, модель будет загружать входные значения из сохраненной информации, она не будет принимать новое значение ввода.

Я застрял в этой проблеме в течение очень долгого времени, может ли кто-нибудь помочь мне с этим, пожалуйста?

спасибо.

ответ

1

В настоящее время это невозможно из M-файла. Если вы хотите динамически изменять ввод в заданное время извне, для этого потребуется S-функция. Даже это решение сложно и связано с блеском, поскольку Mathworks не хочет поддерживать эту функциональность тем, что она побеждает одну из функций другого инструментария, который они продают. Со временем я верю, что они предоставят это приношение, но сегодня этого не существует. Кроме того, почему бы не использовать динамический входной блок для изменения входного значения, например карты, построителя сигналов и т. Д.?

+0

См. Мой ответ, это неправда, что это невозможно. Я реализовал это для себя некоторое время назад, чтобы показать подобие, дающее прогресс симуляционной симуляции. – mmumboss

+0

@ Johann3s, правда, что вы можете обнаружить, когда сеанс Matlab достиг времени моделирования 0.6s, теперь изменить значение переменной, используемой моделью во время симуляции, как указано в вопросе, сложнее, и я считаю, что не возможно в M-script в настоящее время. – macduff

+0

Я думаю, что это будет возможно таким же образом, выдав команду из вашего m-файла во время моделирования. Очевидно, вам нужно отключить встроенные параметры, но я не понимаю, почему это не сработает? – mmumboss

1

Вы можете получить текущее время запущенной симуляции с:

get_param('simulink_model_name', 'SimulationTime'); 

Так, например, проверив это значение из вашего M-файла во время моделирования с помощью

timer(...) 

вы можете обнаружить, когда симуляция составляет 0,6 секунды.

0

Я использовал комбинацию simulink и m-script для достижения аналогичной цели.

В вашей модели добавьте блок 'assert'. Дважды щелкните его и снимите флажок «Остановить симуляцию, если утверждение не выполнено». В поле «Симуляция обратного вызова при отказе утверждения» добавьте три команды:

  1. set_param (bdroot, 'SimulationCommand', 'pause');
  2. run ('myscript.m'); % вставить имя скрипта
  3. set_param (bdroot, 'SimulationCommand', 'continue');

Теперь подключите inport этого блока к реляционному оператору 'не равным'. Подключите первый inport оператора отношения к часам (pls установите прореживание для аналоговых часов или время выборки [обычно -1 для унаследованных] для цифровых часов). Второй inport подключен к постоянному блоку со значением 0,6

При моделировании модели симуляция приостанавливается на 0,6 секунды, выполняется m-файл, чтобы изменить входной параметр (учитывая, что он настраивается), а затем продолжить с симуляцией.

Блок подтверждения вызывается, когда его входной сигнал становится равным 0. При 0.6 сек, выход реляционного оператора будет равен 0.

Сообщите мне, если это сработало.

Смежные вопросы