Используйте эти методы, чтобы удалить алгебраические циклы в модели.
Алгебраические циклы могут произойти в больших моделях, когда атомарные подсистемы создают обратную связь.
В типичной модели здесь, существует два алгебраических цикла, которые включают подсистемы.
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, чтобы повредить эти циклы:
Добавьте единичную задержку между BlackBox_A
и BlackBox_C
.
Добавьте единичную задержку между BlackBox_B
и BlackBox_C
.
Добавьте блоки Единичной задержки в оба алгебраических цикла.
Add a unit delay between BlackBox_A and BlackBox_C
Если вы добавляете единичную задержку на сигнале обратной связи между подсистемами BlackBox_A и BlackBox_C, вы вводите минимальный номер единичных задержек (1) к системе. Путем представления задержки перед BlackBox_A BlackBox_B и BlackBox_C используют данные из шага текущего времени.
Add a unit delay between BlackBox_B and BlackBox_C
Если вы добавляете единичную задержку между подсистемами BlackBox_B и BlackBox_C, вы повреждаете алгебраический цикл между BlackBox_B и BlackBox_C. Кроме того, вы повреждаете цикл между BlackBox_A и BlackBox_C, потому что тот сигнал завершает алгебраический цикл. Путем вставки блока Unit Delay перед BlackBox_C BlackBox_C теперь работает с данными из предыдущего временного шага только.
Add unit delays to both algebraic loops
В примере здесь, вы вставляете блоки Единичной задержки, чтобы повредить оба алгебраических цикла. В этой модели BlackBox_A и BlackBox_B используют данные из предыдущего временного шага. BlackBox_C использует данные из шага текущего времени.
Если Simulink не может решить алгебраический цикл, программное обеспечение сообщает об ошибке. Используйте один из этих методов, чтобы решить цикл вручную:
Реструктурируйте базовые ДАУ с помощью методов, таких как дифференцирование или смена системы координат. Эти методы помещают ДАУ в форму, которая легче для алгебраического решателя цикла решить.
Преобразуйте ДАУ в ОДУ, который устраняет любые алгебраические циклы.
Создайте исходные предположения Используя блоки алгебраического ограничения и IC
Ваша сила модели содержит циклы, для которых решатель цикла не может сходиться без хорошего, исходного предположения для алгебраических состояний. Можно задать исходное предположение для алгебраических переменных состояния, но использовать этот метод только, когда вы думаете, что цикл законен.
Существует два способа задать исходное предположение:
Поместите блок IC в алгебраический цикл.
Задайте исходное предположение для сигнала в алгебраическом цикле с помощью блока Algebraic Constraint.
Когда вы включаете Minimize algebraic loop occurrences, Simulink пытается устранить искусственные алгебраические циклы. В этом примере модель содержит атомарную подсистему, которая вызывает искусственный алгебраический цикл.
Содержимое атомарной подсистемы не является прямым сквозным соединением, но Simulink идентифицирует атомарную подсистему как прямое сквозное соединение.
Если диагностика Algebraic loop установлена в error
, моделировав образцовые результаты по ошибке, потому что модель содержит искусственный алгебраический цикл, включающий его атомарную подсистему.
Устранить этот алгебраический цикл,
Создайте модель из предыдущей графики с атомарной подсистемой, которая вызывает искусственный алгебраический цикл.
В панели Diagnostics Образцовых Параметров конфигурации, установленных параметр Algebraic loop на warning
или none
.
В панели Data Import/Export убедитесь, что параметр Signal logging отключен. Если журналирование сигнала включено, Simulink не может устранить искусственные алгебраические циклы.
Чтобы отобразить отсортированный порядок для этой модели и атомарной подсистемы, выберите Display> Blocks> Sorted Execution Order.
Рассмотрение отсортированного порядка может помочь вам понять, как устранить искусственный алгебраический цикл.
Все блоки в подсистеме выполняются на том же уровне: 1. (0 самый низкий уровень, указывая на первые блоки, которые выполнятся.)
Для получения дополнительной информации об отсортированном порядке, смотрите Управление и Отображение Отсортированный Порядок.
В диалоговом окне Subsystem Parameters модели верхнего уровня выберите Minimize algebraic loop occurrences. Этот параметр направляет Simulink, чтобы попытаться устранить алгебраический цикл, который содержит атомарную подсистему, когда это моделирует модель. Сохраните изменения.
Нажмите Simulation> Update Diagram, чтобы повторно вычислить отсортированный порядок.
Теперь существует два уровня отсортированного порядка в подсистеме: 1 и 2.
Чтобы устранить искусственный алгебраический цикл, Simulink пытается сделать вход подсистемы или образцового непрямого сквозного соединения, на которое ссылаются.
Когда вы моделируете модель, все блоки выполняют методы в этом порядке:
mdlOutputs
mdlDerivatives
mdlUpdate
В исходной версии этой модели осуществление метода mdlOutputs
запускается с блока Plant, потому что блок Plant является непрямым сквозным соединением. Выполнение заканчивается с блоком Controller.
Для получения дополнительной информации об этих методах, см. Методы Блока.
Если вы включаете параметр Minimize algebraic loop occurrences для атомарной подсистемы, Simulink делит подсистему на два атомарных модуля.
Эти условия верны:
Атомарный модуль 2 не является прямым сквозным соединением.
Атомарный модуль 1 имеет только метод mdlOutputs
.
Только mdlDerivatives
или методам mdlUpdate
Атомарного модуля 2 нужен вывод Атомарного модуля 1. Simulink может выполнить то, что обычно выполнялось бы во время метода mdlOutput
Атомарного модуля 1 в методах mdlDerivatives
Атомарного модуля 2.
Новый порядок выполнения для модели:
Метод mdlOutputs
модели
Метод mdlOutputs
Атомарного модуля 2
Методы mdlOutputs
других блоков
Метод mdlDerivatives
модели
Метод mdlOutputs
Атомарного модуля 1
Метод mdlDerivatives
Атомарного модуля 2
Метод mdlDerivatives
других блоков
Для метода Minimize algebraic loop occurrences, чтобы быть успешными, подсистема или модель, на которую ссылаются, должны иметь блок "не прямое сквозное соединение", соединенное непосредственно с Inport. Simulink может затем установить свойство DirectFeedthrough
блока Inport к false
указывать, что входной порт не имеет прямого сквозного соединения.
Если атомарная подсистема вызывает искусственный алгебраический цикл, преобразуйте атомарную подсистему в виртуальную подсистему. Это изменение не имеет никакого эффекта на поведение модели. Когда подсистема является атомарной, и вы моделируете модель, Simulink вызывает алгебраический решатель цикла. Решатель останавливается после одной итерации. Алгебраический цикл автоматически решен, потому что нет никакой алгебраической константы. После того, как вы сделаете подсистему виртуальной, Simulink не вызывает алгебраический решатель цикла во время симуляции.
Преобразовывать атомарную подсистему в виртуальную подсистему:
Откройте модель, которая содержит атомарную подсистему.
Щелкните правой кнопкой по атомарной подсистеме и выберите Subsystem Parameters.
Очистите параметр Treat as atomic unit.
Сохраните изменения.
Если вы заменяете атомарную подсистему на виртуальную подсистему, и симуляция все еще перестала работать с алгебраической ошибкой цикла, исследуйте модель на один из них:
Алгебраическое ограничение
Искусственный алгебраический цикл, который не был вызван этой атомарной подсистемой
Некоторый пакет моделей сигнализирует вместе. Это связывание может заставить Simulink обнаруживать алгебраический цикл, даже когда алгебраическое ограничение не существует. Если вы перенаправляете один или несколько сигналов, можно смочь удалить искусственный алгебраический цикл.
В этом примере линеаризовавшая модель моделирует динамику системы 2D корпуса, питаемой одним насосом. В этой модели:
Вывод q1
является уровнем потока жидкости в корпус от насоса.
Вывод h2
является высотой жидкости во втором корпусе.
Блок State-Space задает динамический ответ системы корпуса к работе насоса:
Вывод от блока State-Space является вектором, который содержит q1
и h2
.
Если вы моделируете эту модель с набором параметра Algebraic loop к warn
или error
, Simulink идентифицирует алгебраический цикл.
Устранить этот алгебраический цикл:
Измените C
и матрицы D
можно следующим образом:
Передайте 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.
Используйте блоки Селектора Шины, чтобы передать только необходимые сигналы в атомарные подсистемы.
Установка параметра Minimize algebraic loop occurrences не всегда работает. Simulink не может изменить свойство DirectFeedthrough
Inport для атомарной подсистемы, если Inport соединяется с Выходным портом только через прямые проходные блоки.
В этой модели подсистема Plant+Controller вызывает алгебраический цикл, но это имеет дополнительный блок Gain и дополнительный вывод.
Simulink не может переместить метод mdlOutputs
блока Controller к методу mdlDerivative
Атомарного модуля 1, потому что вывод атомарной подсистемы зависит от вывода блока Controller. Вы не можете сделать подсистему "не прямым сквозным соединением".
Можно изменить эту модель, чтобы устранить искусственный алгебраический цикл путем переопределения атомарной подсистемы путем добавления дополнительных блоков Inport и Gain, как вы видите в модели здесь. Выполнение так делает In1 "не прямым проходным" и прямым сквозным соединением In2, таким образом повреждая алгебраический цикл.