Используйте эти методы для удаления алгебраических циклов в модели.
В этом примере показано, как удалить алгебраические циклы в модели путем введения задержек между блоками в цикле. Это один из подходов к удалению алгебраических петель в более крупных моделях, где такие петли могут возникать из-за обратной связи между атомарными подсистемами.
Рассмотрим модель, присоединенную к этому примеру. Существует два алгебраических цикла, вызванных атомными подсистемами в модели
Blackbox A -> Blackbox B -> Blackbox C -> Blackbox A
Blackbox B -> Blackbox C -> Blackbox B

При обновлении этой модели Simulink ® обнаруживает петлюBlackbox A -> Blackbox B -> Blackbox C -> Blackbox A
Поскольку содержимое этих подсистем неизвестно, разорвать петли можно путем добавления блока задержки установки вне подсистем. Существует три способа использования блока Unit Delay для разрыва этих контуров:
Добавление единичной задержки между Blackbox A и Blackbox C.
Добавление единичной задержки между Blackbox B и Blackbox C.
Добавление блоков единичной задержки в оба алгебраических цикла.
Добавление единичной задержки между BlackBox A и BlackBox C
При добавлении единичной задержки по сигналу обратной связи между подсистемами Blackbox A и Blackbox C, вы вводите в систему минимальное количество единичных задержек (1). Вводя задержку до Blackbox A, Blackbox B и Blackbox C использовать данные текущего временного шага.

Добавление единичной задержки между BlackBox B и BlackBox C
При добавлении единичной задержки между подсистемами Blackbox B и Blackbox C, вы разрываете алгебраический цикл между Blackbox B и Blackbox C. Кроме того, разрывается петля между Blackbox A и Blackbox C, потому что этот сигнал завершает алгебраический цикл. Вставкой блока «Единичная задержка» перед Blackbox C, Blackbox C теперь работает только с данными предыдущего временного шага.

Добавление единичных задержек в оба алгебраических цикла
В приведенном примере вставляются блоки единичной задержки, чтобы разорвать оба алгебраических цикла. В этой модели BlackBox_A и BlackBox_B используют данные предыдущего шага времени. BlackBox_C использует данные текущего временного шага.

Если Simulink ® не может решить алгебраический цикл, программа сообщает об ошибке. Используйте один из следующих методов для решения цикла вручную:
Реструктуризация базовых дисковых полок с использованием таких методов, как дифференциация или изменение координат. Эти методы приводят дисковые полки в форму, которую проще решить с помощью алгебраического решателя циклов.
Преобразуйте дисковые полки в ODE, что исключает любые алгебраические циклы.
Создание начальных догадок с помощью блоков IC и алгебраических ограничений
Модель может содержать контуры, для которых решатель цикла не может сойтись без хорошего начального предположения для алгебраических состояний. Вы можете указать начальное предположение для алгебраических переменных состояния, но используйте этот метод только тогда, когда вы считаете цикл легитимным.
Существует два способа определения начального предположения:
Поместите блок ИС в алгебраический цикл.
Укажите начальное предположение для сигнала в алгебраическом цикле, используя блок алгебраического ограничения.
При включении опции Минимизировать вхождения алгебраических циклов Simulink пытается устранить искусственные алгебраические циклы. В этом примере модель содержит атомную подсистему, которая вызывает искусственный алгебраический цикл.

Содержимое атомной подсистемы не является прямым каналом, но Simulink идентифицирует атомную подсистему как прямой канал.

Если для диагностики алгебраического цикла установлено значение errorмоделирование модели приводит к ошибке, поскольку модель содержит искусственный алгебраический цикл, включающий ее атомарную подсистему.
Чтобы устранить этот алгебраический цикл,
Создайте модель из предыдущей графики с помощью атомной подсистемы, которая вызывает искусственный алгебраический цикл.
На панели Диагностика (Diagnostics) окна Параметры конфигурации модели (Model Configuration Parameters) задайте для параметра Алгебраического цикла значение warning или none.
На панели Импорт/экспорт данных убедитесь, что параметр Signal logging отключен. Если регистрация сигналов включена, Simulink не может устранить искусственные алгебраические циклы.
Чтобы отобразить порядок выполнения блока для этой модели и атомной подсистемы, на вкладке Отладка (Debug) выберите Информационные наложения (Information Overlays) > Порядок выполнения (Execution Order).
Просмотр порядка выполнения поможет вам понять, как устранить искусственный алгебраический цикл.
Все блоки в подсистеме выполняются на одном уровне: 1. (0 - самый низкий уровень, указывающий первые выполняемые блоки.)

Примечание
Дополнительные сведения о порядке выполнения блоков см. в разделе Управление и отображение порядка выполнения.
В диалоговом окне «Параметры подсистемы» модели верхнего уровня выберите «Минимизировать вхождения алгебраического цикла». Этот параметр указывает Simulink на попытку устранения алгебраического цикла, содержащего атомарную подсистему, при моделировании модели. Сохраните изменения.
На вкладке Моделирование (Modeling) щелкните Обновить модель (Update Model), чтобы пересчитать порядок выполнения.
Теперь существует два уровня порядка выполнения внутри подсистемы: 1 и 2.

Чтобы исключить искусственный алгебраический цикл, Simulink пытается сделать вход подсистемы или ссылочной модели непрямым проходом.
При моделировании модели все блоки выполняют методы в следующем порядке:
mdlOutputs
mdlDerivatives
mdlUpdate
В первоначальной версии этой модели выполнение mdlOutputs метод начинается с блока Plant, поскольку блок Plant является непрямым каналом. Выполнение завершается блоком контроллера.

Дополнительные сведения об этих методах см. в разделе Модели Simulink.
Если для атомной подсистемы включен параметр Минимизировать вхождения алгебраического цикла, Simulink делит подсистему на две атомарные единицы.

Эти условия верны:
Атомная установка 2 не проходит прямой проход.
Атомная единица 1 имеет только mdlOutputs способ.
Только mdlDerivatives или mdlUpdate методы Атомного блока 2 нуждаются в выходе Атомного блока 1. Simulink может выполнять то, что обычно выполнялось во время mdlOutput метод Атомного блока 1 в mdlDerivatives методы Атомного блока 2.
Новый порядок выполнения модели:
mdlOutputs метод модели
mdlOutputs метод Атомного блока 2
mdlOutputs методы других блоков
mdlDerivatives метод модели
mdlOutputs метод Атомного блока 1
mdlDerivatives метод Атомного блока 2
mdlDerivatives способ других блоков
Для успешного выполнения метода Минимизировать вхождения алгебраических циклов подсистема или ссылочная модель должна иметь блок непрямого канала, подключенный непосредственно к порту ввода. Simulink может затем установить DirectFeedthrough свойство блока Inport to false для указания на то, что входной порт не имеет прямого канала.
Если атомная подсистема вызывает искусственный алгебраический цикл, преобразуйте атомную подсистему в виртуальную подсистему. Это изменение не влияет на поведение модели. Когда подсистема является атомной и моделируется модель, Simulink вызывает решатель алгебраического цикла. Решатель завершается после одной итерации. Алгебраический цикл автоматически решается, потому что нет алгебраической константы. После создания виртуальной подсистемы Simulink не вызывает алгебраический решатель циклов во время моделирования.
Чтобы преобразовать атомарную подсистему в виртуальную, выполните следующие действия.
Откройте модель, содержащую атомарную подсистему.
Щелкните правой кнопкой мыши атомарную подсистему и выберите «Параметры подсистемы».
Снимите флажок Обработать как атомную единицу измерения (Treat as atomic unit parameter).
Сохраните изменения.
Если атомарная подсистема заменена виртуальной подсистемой, а моделирование по-прежнему завершается с ошибкой алгебраического цикла, проверьте модель на предмет одного из следующих вариантов:
Алгебраическое ограничение
Искусственный алгебраический цикл, который не был вызван этой атомной подсистемой
Некоторые модели объединяют сигналы. Это объединение может привести к тому, что Simulink обнаружит алгебраический цикл, даже если алгебраического ограничения не существует. При перенаправлении одного или нескольких сигналов можно удалить искусственный алгебраический цикл.
В этом примере линеаризованная модель моделирует динамику двухбачковой системы, питаемой одним насосом. В этой модели:
Продукция q1 - скорость потока жидкости в бак из насоса.
Продукция h2 - высота жидкости во втором резервуаре.
Блок State-Space определяет динамическую реакцию системы резервуара на работу насоса:

Выходные данные блока State-Space представляют собой вектор, содержащий q1 и h2.

При моделировании этой модели с параметром алгебраического цикла, равным warn или error, Simulink идентифицирует алгебраический цикл.

Чтобы исключить этот алгебраический цикл:
Изменить C и D матрицы следующим образом:

Проход q1 непосредственно в Область, а не через блок State-Space.
Теперь, вход (q1) не передается непосредственно на выход ( D матрица равна 0), поэтому блок State-Space больше не имеет прямого канала. Сигнал обратной связи теперь имеет только один элемент, поэтому блок селектора больше не нужен, как можно видеть в следующей модели.

Есть два параметра, которые нужно учитывать, когда вы думаете, что модель имеет искусственный алгебраический цикл:
Параметр Минимизировать вхождения алгебраических циклов - укажите, что Simulink пытается устранить любые искусственные алгебраические циклы для:
Атомарные подсистемы (Atomic subsystems) - в диалоговом окне Параметры подсистемы (Subsystem Parameters) выберите Минимизировать вхождения алгебраического цикла (Minimize algebric loo
Блоки модели - для ссылочной модели на панели Привязка модели (Model Referencing) в разделе Параметры конфигурации (Configuration Parameters) выберите Минимизировать вхождения алгебраического цикла (Minimize algebric loop occurrences).
Параметр Минимизировать алгебраический цикл (Minimize algebraic loop parameter) - указывает, какое диагностическое действие выполняет Simulink, если параметр Минимизировать вхождения алгебраического цикла (Minimize algebric loop occurrences) не
Параметр Минимизировать алгебраический цикл находится на панели Диагностика (Diagnostics) в разделе Параметры конфигурации (Configuration Parameters). Диагностические действия для этого параметра:
| Настройка | Реакция моделирования |
|---|---|
none | Simulink не выполняет никаких действий. |
warning | Simulink отображает предупреждение о том, что параметр Минимизировать вхождения алгебраического цикла не имеет эффекта. |
error | Simulink завершает моделирование и отображает ошибку, заключающуюся в том, что параметр Минимизировать вхождения алгебраического цикла не имеет эффекта. |
Если в окне Параметры конфигурации модели (Model Configuration Parameters) включена оптимизация сокращения блоков, Simulink сворачивает определенные группы блоков в один, более эффективный блок или полностью удаляет их. Включение сокращения блоков приводит к более быстрому выполнению во время моделирования модели и генерации кода.
Включение уменьшения блоков также может помочь Simulink решить искусственные алгебраические циклы.
Рассмотрим пример следующей модели.


При моделировании этой модели подсистема Atomic Unit и блоки Gain and Compare to Constant являются частью алгебраического цикла, который Simulink не может решить.

Если включить сокращение блоков и порядок выполнения и снова смоделировать модель, Simulink не отображает порядок выполнения для блоков, которые были сокращены. Теперь можно быстро увидеть, какие блоки были сокращены.

Блоки Compare to Constant и Gain были исключены из модели, поэтому они больше не генерируют ошибки алгебраического цикла. Подсистема Atomic Unit выдает предупреждение:
Warning: If the inport 'ex_aloop_block_reduction_errwarn/ Atomic Unit/In1' of subsystem 'ex_aloop_block_reduction_errwarn/ Atomic Unit' involves direct feedback, then an algebraic loop exists, which Simulink cannot remove. Consider clearing the 'Minimize algebraic loop occurrences' parameter to avoid this warning.
Совет
Блоки выбора шины используются для передачи в атомарные подсистемы только требуемых сигналов.
Установка параметра Минимизировать вхождения алгебраического цикла не всегда работает. Simulink не может изменить DirectFeedthrough свойство блока Inport для атомной подсистемы, если блок Inport соединен с блоком Outport только через блоки прямого канала.
В этой модели подсистема Plant + Controller вызывает алгебраический цикл, но имеет дополнительный блок усиления и дополнительный выход.


Simulink не может перемещать mdlOutputs способ блока контроллера mdlDerivative способ атомарного блока 1, поскольку выход атомной подсистемы зависит от выхода блока контроллера. Невозможно сделать подсистему непрямой.
Можно изменить эту модель, чтобы исключить искусственный алгебраический цикл, переопределив атомарную подсистему, добавив дополнительные блоки Inport и Gain, как видно из модели. Это делает In1 непрямым и In2 прямым, тем самым разрывая алгебраический цикл.
