Если Simulink® сообщает об алгебраическом цикле в вашей модели, алгебраический решатель цикла может смочь решить цикл. Если Simulink не может решить цикл, существует несколько методов, чтобы устранить цикл.
Используйте этот рабочий процесс, чтобы решить, как вы хотите устранить алгебраический цикл.
Используйте getAlgebraicLoops
, чтобы идентифицировать алгебраические циклы в модели и подсветить их в Редакторе Simulink. С этим подходом:
Можно пересечь несколько слоев иерархии модели, чтобы определить местоположение алгебраических циклов.
Можно идентифицировать действительные и искусственные алгебраические циклы.
Можно визуализировать все циклы в модели одновременно.
Вы не должны развертывать в и из модели через контуры.
Вы не должны обнаруживать циклы в последовательном порядке. Кроме того, вы не должны компилировать модель каждый раз, когда вы обнаруживаете и решаете цикл. Поэтому можно решить циклы быстро.
Вы выполняете алгебраическое выделение цикла на целой модели, не на определенных подсистемах.
Откройте модель.
В панели Diagnostics Образцовых Параметров конфигурации, набор Algebraic loop к none
или warning
. Установка этого параметра на error
препятствует тому, чтобы модель компилировала.
Скомпилируйте модель без любых ошибок. Модель должна скомпилировать, прежде чем можно будет подсветить любые алгебраические циклы.
В командной строке MATLAB®, введите:
Simulink.BlockDiagram.getAlgebraicLoops(bdroot)
Функция getAlgebraicLoops
подсвечивает алгебраические циклы в модели, включая алгебраические циклы в подсистемах. Это также создает отчет с информацией о каждом цикле:
Сплошные линии представляют действительные алгебраические циклы.
Пунктирные линии представляют искусственные алгебраические циклы.
Красная подсветка появляется вокруг блока, присвоенного с алгебраической переменной.
Loop ID помогает вам идентифицировать систему, которая содержит конкретный цикл.
Настройте отчет путем выбора или снятия флажка Visible для цикла.
Если вы идентифицировали алгебраические циклы в модели, можно удалить их путем редактирования модели. Закройте отчет подсветки и внесите изменения в модель. Можно отредактировать модель только после того, как вы закроете отчет.
Simulink не сохраняет выделение цикла. Закрытие модели или выход из отображения удаляют выделение цикла.
Simulink обнаруживает алгебраические циклы во время инициализации симуляции, например, когда вы обновляете свою схему. Можно установить Алгебраическую диагностику цикла сообщать об ошибке или предупреждении, если программное обеспечение обнаруживает какие-либо алгебраические циклы в модели.
В панели Диагностики Образцовых Параметров конфигурации, установленных Алгебраический параметр цикла:
'none'--
Simulink пытается решить алгебраический цикл; сообщает ошибка, только если алгебраический цикл не может быть решен.
предупреждение--
Алгебраические циклы приводят к предупреждениям. Simulink пытается решить алгебраический цикл; сообщает ошибка, только если алгебраический цикл не может быть решен.
ошибка--
Алгебраические циклы останавливают инициализацию. Рассмотрите цикл вручную, прежде чем Simulink попытается решить цикл.
Этот пример показывает, как использовать алгебраическую диагностику цикла, чтобы подсветить алгебраические циклы в модели sldemo_hydcyl
.
Откройте модель sldemo_hydcyl
В панели Диагностики Образцовых Параметров конфигурации, установленных Алгебраический параметр цикла на error
.
Попытайтесь моделировать модель
Когда Simulink обнаруживает алгебраический цикл во время инициализации, остановок симуляции. Диагностическое Средство просмотра отображает сообщение об ошибке и перечисляет все блоки в модели, которые являются частью того алгебраического цикла. В модели красные подсветки показывают блоки и сигналы, которые составляют цикл.
Чтобы удалить подсветки, закройте Диагностическое Средство просмотра.