Simulink: моделирование в режиме отладки - PullRequest
3 голосов
/ 07 февраля 2011

У меня есть еще одна проблема на Simulink:

Можно ли приостановить симуляцию во время ее выполнения? После создания нескольких шагов с помощью «Задержки модуля» я хочу приостановить симуляцию до того, как будет сделан следующий шаг (для отображения значений, которые должен увидеть пользователь). После, скажем, нажатия на симуляцию, вы переходите на один шаг, и процедура повторяется. В конце концов это должно иметь какую-то функцию отладки.

Я не очень уверен, как это можно реализовать. Догадываюсь где-то в параметрах симуляции, но где и как?

1 Ответ

7 голосов
/ 07 февраля 2011

Мне известно о трех способах решения этой проблемы.

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

Преимущество: вы не получаете бит по порядку выполнения и пауза симуляции, вызывающая непонятные результаты.

Недостаток: может быть сложно "синхронизировать по времени" различные линии области видимости в вашей голове, особенно если не все из них выполняют каждый шаг симуляции.(Отчасти это связано с тем, что графы блоков области видимости отображаются в виде пошаговых функций, хотя в действительности они являются точечными диаграммами.

Метод 2: Используйте встроенный отладчик Simulink. (Донне теряйте надежды.) Откройте это с помощью пункта меню Tool> Simulink Debugger в используемой модели. Этот инструмент позволяет вам устанавливать точки останова на определенных блоках, шаг по одному блоку за раз или некоторую комбинацию двух.

Преимущество: Позволяет точно контролировать симуляцию.

Недостаток: На практике я нахожу этот инструмент запутанным и склонным к падению Matlab. Также будьте осторожны с порядком выполнения.

Метод 3: Создайте встроенную функцию Matlab в начале порядка выполнения моделирования. Вот пример:

function y = func (x);y = x;

Отбросьте эту функцию на одну из сигнальных линий в начале симуляции (для принудительного определения порядка выполнения). Затем установите точку отладки на строку y = x; Теперь, когдаЕсли ваша симуляция попадает в эту строчку, симуляция будет приостановлена, пока вы не нажмете кнопку «продолжить» в редакторе Matlab.

Преимущество: Надежно, просто.

Недостаток: будьте осторожны спорядок выполнения.

порядок выполнения:

Если вы не знакомы с порядком выполнения в Simulink, я предлагаю вам включить «Формат> Отображение блоков> Сортировка»Заказать »из модельного меню.Это поместит загадочные числовые / буквенные коды в каждый блок, которые каким-то образом указывают порядок, в котором блоки выполняются в вашей имитации.В зависимости от вашей модели и компоновки эти числовые / буквенные коды могут иметь большой смысл, а могут и нет.Я не рекомендую использовать этот сортированный порядок отображения в обычной практике.Вместо этого я рекомендую изучить и понять, как Simulink определяет отсортированный порядок / порядок выполнения.

Важно помнить, что точка отладки (при использовании отладчика Simulink или встроенного Matlab) является частью порядка выполнения.Это означает, что при достижении точки отладки блоки после этой точки не будут обновлять свои состояния.Это имеет смысл, но вас может удивить то, что дисплеи и области часто являются одними из последних блоков для обновления состояний, даже если они подключены к сигнальным линиям, которые получены блоками в начале выполнения.Это верно даже в том случае, если эти дисплеи и области находятся внутри (неатомарных) подсистем, а ваша точка отладки находится за пределами этой подсистемы.Вы можете оказаться в ситуации, когда значение, отображаемое на дисплее или в области видимости, может быть от последнего временного шага в вашей имитации.

Как вы обходите это?Поместите все ваши симуляции внутри атомной подсистемы, включая дисплеи и области видимости.Затем поместите вашу точку отладки за пределы этой подсистемы.Это гарантирует, что всякий раз, когда будет достигнута точка отладки, состояние всех блоков (включая дисплеи и области) будет согласованным.

Если что-то из этого не имеет смысла, дайте мне знать.

...