Удалите алгебраические циклы

Используйте эти методы, чтобы удалить алгебраические циклы в модели.

Введите задержку, чтобы удалить алгебраические циклы

Этот пример демонстрирует, как удалить алгебраические циклы в модели путем представления задержек между блоками в цикле. Это - один подход, чтобы удалить алгебраические циклы в больших моделях, где такие циклы могут произойти из-за обратной связи между атомарными подсистемами.

Считайте модель присоединенной с этим примером. Существует два алгебраических цикла, вызванные атомарными подсистемами в модели

  • 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 вне подсистем. Существует три способа использовать блок Unit Delay, чтобы повредить эти циклы:

  • Добавьте Unit Delay между Blackbox A и Blackbox C.

  • Добавьте Unit Delay между Blackbox B и Blackbox C.

  • Добавьте блоки Unit Delay в оба алгебраических цикла.

Добавьте единичную задержку между 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, потому что тот сигнал завершает алгебраический цикл. Путем вставки блока Unit Delay перед Blackbox C, Blackbox C теперь работает с данными из предыдущего временного шага только.

Добавьте единичные задержки в оба алгебраических цикла

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

Решите алгебраические циклы вручную

Если Simulink® не может решить алгебраический цикл, программное обеспечение сообщает об ошибке. Используйте один из этих методов, чтобы решить цикл вручную:

Создайте исходные предположения Используя блоки алгебраического ограничения и IC

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

Существует два способа задать исходное предположение:

  • Поместите блок IC в алгебраический цикл.

  • Задайте исходное предположение для сигнала в алгебраическом цикле с помощью блока Algebraic Constraint.

Как Simulink устраняет искусственные алгебраические циклы

Когда вы включаете Minimize algebraic loop occurrences, Simulink пытается устранить искусственные алгебраические циклы. В этом примере модель содержит атомарную подсистему, которая вызывает искусственный алгебраический цикл.

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

Если диагностика Algebraic loop установлена в error, симуляция модели приводит к ошибке, потому что модель содержит искусственный алгебраический цикл, включающий его атомарную подсистему.

Устранить этот алгебраический цикл,

  1. Создайте модель из предыдущей графики с атомарной подсистемой, которая вызывает искусственный алгебраический цикл.

  2. В панели Diagnostics Параметров конфигурации Модели, установленных параметр Algebraic loop на warning или none.

  3. В панели Data Import/Export убедитесь, что параметр Signal logging отключен. Если логгирование сигнала включено, Simulink не может устранить искусственные алгебраические циклы.

  4. Чтобы отобразить отсортированный порядок для этой модели и атомарной подсистемы, во вкладке Debug, выбирают Information Overlays> Execution Order.

    Рассмотрение отсортированного порядка может помочь вам изучить, как устранить искусственный алгебраический цикл.

    Все блоки в подсистеме выполняются на том же уровне: 1. (0 самый низкий уровень, указывая на первые блоки, которые выполнятся.)

    Примечание

    Для получения дополнительной информации об отсортированном порядке, смотрите Управление и Отображение Порядок выполнения.

  5. В диалоговом окне Subsystem Parameters модели верхнего уровня выберите Minimize algebraic loop occurrences. Этот параметр направляет Simulink, чтобы попытаться устранить алгебраический цикл, который содержит атомарную подсистему, когда это симулирует модель. Сохраните изменения.

  6. Во вкладке Modeling нажмите Update Model, чтобы повторно вычислить отсортированный порядок.

    Теперь существует два уровня отсортированного порядка в подсистеме: 1 и 2.

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

Когда вы симулируете модель, все блоки выполняют методы в этом порядке:

  1. mdlOutputs

  2. mdlDerivatives

  3. mdlUpdate

В исходной версии этой модели, выполнении mdlOutputs метод запускается с блока Plant, потому что блок Plant является непрямым сквозным соединением. Выполнение заканчивается с блоком Controller.

Для получения дополнительной информации об этих методах, см. Модели Simulink.

Если вы включаете параметр Minimize algebraic loop occurrences для атомарной подсистемы, Simulink делит подсистему на два атомарных модуля.

Эти условия верны:

  • Атомарный модуль 2 не является прямым сквозным соединением.

  • Атомарный модуль 1 имеет только mdlOutputs метод.

Только mdlDerivatives или mdlUpdate для методов Атомарного модуля 2 нужен выход Атомарного модуля 1. Simulink может выполнить то, что обычно выполнялось бы во время mdlOutput метод Атомарного модуля 1 в mdlDerivatives методы Атомарного модуля 2.

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

  1. mdlOutputs метод модели

    1. mdlOutputs метод Атомарного модуля 2

    2. mdlOutputs методы других блоков

  2. mdlDerivatives метод модели

    1. mdlOutputs метод Атомарного модуля 1

    2. mdlDerivatives метод Атомарного модуля 2

    3. mdlDerivatives метод других блоков

Для метода Minimize algebraic loop occurrences, чтобы быть успешными, подсистема или модель, на которую ссылаются, должны иметь блок "не прямое сквозное соединение", соединенное непосредственно с Inport. Simulink может затем установить DirectFeedthrough свойство блока Inport к false указать, что входной порт не имеет прямого сквозного соединения.

Устраните искусственные алгебраические циклы, вызванные атомарными подсистемами

Если атомарная подсистема вызывает искусственный алгебраический цикл, преобразуйте атомарную подсистему в виртуальную подсистему. Это изменение не оказывает влияния на поведение модели. Когда подсистема является атомарной, и вы симулируете модель, Simulink вызывает алгебраический решатель цикла. Решатель завершает работу после одной итерации. Алгебраический цикл автоматически решен, потому что нет никакой алгебраической константы. После того, как вы сделаете подсистему виртуальной, Simulink не вызывает алгебраический решатель цикла в процессе моделирования.

Преобразовывать атомарную подсистему в виртуальную подсистему:

  1. Откройте модель, которая содержит атомарную подсистему.

  2. Щелкните правой кнопкой по атомарной подсистеме и выберите Subsystem Parameters.

  3. Очистите параметр Treat as atomic unit.

  4. Сохраните изменения.

Если вы заменяете атомарную подсистему на виртуальную подсистему, и симуляция все еще перестала работать с алгебраической ошибкой цикла, исследуйте модель на один из них:

  • Алгебраическое ограничение

  • Искусственный алгебраический цикл, который не был вызван этой атомарной подсистемой

Связанные сигналы, которые создают искусственные алгебраические циклы

Некоторый пакет моделей сигнализирует вместе. Это связывание может заставить Simulink обнаруживать алгебраический цикл, даже когда алгебраическое ограничение не существует. Если вы перенаправляете один или несколько сигналов, можно смочь удалить искусственный алгебраический цикл.

В этом примере линеаризовавшая модель симулирует динамику системы 2D бака, питаемой одним насосом. В этой модели:

  • Выведите q1 уровень потока жидкости в бак от насоса.

  • Выведите h2 высота жидкости во втором баке.

  • Блок State-Space задает динамический ответ системы бака к работе насоса:

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

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

Устранить этот алгебраический цикл:

  1. Измените C и D матрицы можно следующим образом:

  2. Передайте q1 непосредственно к Осциллографу вместо через блок State-Space.

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

Модель и параметры блоков, чтобы диагностировать и устранить искусственные алгебраические циклы

Существует два параметра, чтобы рассмотреть, когда вы думаете, что ваша модель имеет искусственный алгебраический цикл:

  • Параметр Minimize algebraic loop occurrences — Указывает, что Simulink пытается устранить любые искусственные алгебраические циклы для:

    • Атомарные подсистемы — В диалоговом окне Subsystem Parameters, выберите Minimize algebraic loop occurrences.

    • Блоки Model — Для модели, на которую ссылаются, в панели Model Referencing Параметров конфигурации, выбирают Minimize algebraic loop occurrences.

  • Параметр Minimize algebraic loop — Задает, какие диагностические меры Simulink принимает, если параметр Minimize algebraic loop occurrences не оказывает влияния.

    Параметр Minimize algebraic loop находится в панели Diagnostics Параметров конфигурации. Диагностические действия для этого параметра:

    Установка Ответ симуляции
    none

    Simulink не принимает мер.

    warning

    Simulink выводит предупреждение, что параметр Minimize algebraic loop occurrences не оказывает влияния.

    error

    Simulink отключает симуляцию и отображает ошибку, что параметр Minimize algebraic loop occurrences не оказывает влияния.

Блокируйте сокращение и искусственные алгебраические циклы

Когда вы включаете оптимизацию Block reduction в Параметрах конфигурации Модели, Simulink сворачивает определенные группы блоков в один, более эффективный блок или удаляет их полностью. Включение сокращения блока приводит к более быстрому выполнению во время симуляции модели и в генерации кода.

Включение сокращения блока может также помочь Simulink решить искусственные алгебраические циклы.

Рассмотрите следующую модель в качестве примера.

Первоначально, блокируйтесь, сокращение выключено. Когда вы симулируете эту модель, Атомарную Модульную подсистему и Усиление и Выдерживаете сравнение с Постоянными блоками, часть алгебраического цикла, который не может решить Simulink.

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

Сравнивание с Постоянным и блоками Усиления было устранено из модели, таким образом, они больше не генерируют алгебраическую ошибку цикла. Атомарная Модульная подсистема генерирует предупреждение:

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 не может устранить искусственные алгебраические циклы

Установка параметра Minimize algebraic loop occurrences не всегда работает. Simulink не может изменить DirectFeedthrough свойство блока Inport для атомарной подсистемы, если блок Inport соединяется с блоком Outport только через прямые проходные блоки.

В этой модели подсистема Plant+Controller вызывает алгебраический цикл, но это имеет дополнительный блок Gain и дополнительный выход.

Simulink не может переместить mdlOutputs метод блока Controller к mdlDerivative метод Атомарного модуля 1, потому что выход атомарной подсистемы зависит от выхода блока Controller. Вы не можете сделать подсистему "не прямым сквозным соединением".

Можно изменить эту модель, чтобы устранить искусственный алгебраический цикл путем переопределения атомарной подсистемы путем добавления дополнительного Inport и блоков Gain, как вы видите в модели здесь. Выполнение так делает In1 "не прямым сквозным соединением" и In2 прямое сквозное соединение, таким образом повреждая алгебраический цикл.

Похожие темы