Используйте эти методы, чтобы удалить алгебраические циклы в модели.
Этот пример демонстрирует, как удалить алгебраические циклы в модели путем представления задержек между блоками в цикле. Это - один подход, чтобы удалить алгебраические циклы в больших моделях, где такие циклы могут произойти из-за обратной связи между атомарными подсистемами.
Считайте модель присоединенной с этим примером. Существует два алгебраических цикла, вызванные атомарными подсистемами в модели
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.
Когда вы включаете Minimize algebraic loop occurrences, Simulink пытается устранить искусственные алгебраические циклы. В этом примере модель содержит атомарную подсистему, которая вызывает искусственный алгебраический цикл.
Содержимое атомарной подсистемы не является прямым сквозным соединением, но Simulink идентифицирует атомарную подсистему как прямое сквозное соединение.
Если диагностика Algebraic loop установлена в error
, симуляция модели приводит к ошибке, потому что модель содержит искусственный алгебраический цикл, включающий его атомарную подсистему.
Устранить этот алгебраический цикл,
Создайте модель из предыдущей графики с атомарной подсистемой, которая вызывает искусственный алгебраический цикл.
В панели Diagnostics Параметров конфигурации Модели, установленных параметр Algebraic loop на warning
или none
.
В панели Data Import/Export убедитесь, что параметр Signal logging отключен. Если логгирование сигнала включено, Simulink не может устранить искусственные алгебраические циклы.
Чтобы отобразить порядок выполнения блока для этой модели и атомарной подсистемы, во вкладке Debug, выбирают Information Overlays> Execution Order.
Рассмотрение порядка выполнения может помочь вам изучить, как устранить искусственный алгебраический цикл.
Все блоки в подсистеме выполняются на том же уровне: 1. (0 самый низкий уровень, указывая на первые блоки, которые выполнятся.)
Примечание
Для получения дополнительной информации о порядке выполнения блока, смотрите Порядок выполнения Управления и Отображения.
В диалоговом окне Subsystem Parameters модели верхнего уровня выберите Minimize algebraic loop occurrences. Этот параметр направляет Simulink, чтобы попытаться устранить алгебраический цикл, который содержит атомарную подсистему, когда это симулирует модель. Сохраните изменения.
Во вкладке Modeling нажмите Update Model, чтобы повторно вычислить порядок выполнения.
Теперь существует два уровня порядка выполнения в подсистеме: 1 и 2.
Чтобы устранить искусственный алгебраический цикл, Simulink пытается сделать вход подсистемы или непрямого сквозного соединения модели, на которое ссылаются.
Когда вы симулируете модель, все блоки выполняют методы в этом порядке:
mdlOutputs
mdlDerivatives
mdlUpdate
В исходной версии этой модели, выполнении mdlOutputs
метод запускается с блока Plant, потому что блок Plant является непрямым сквозным соединением. Выполнение заканчивается с блоком Controller.
Для получения дополнительной информации об этих методах, см. Модели Simulink.
Если вы включаете параметр 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 соединяется с блоком Outport только через прямые проходные блоки.
В этой модели подсистема Plant+Controller вызывает алгебраический цикл, но это имеет дополнительный блок Gain и дополнительный выход.
Simulink не может переместить mdlOutputs
метод блока Controller к mdlDerivative
метод Атомарного модуля 1, потому что выход атомарной подсистемы зависит от выхода блока Controller. Вы не можете сделать подсистему "не прямым сквозным соединением".
Можно изменить эту модель, чтобы устранить искусственный алгебраический цикл путем переопределения атомарной подсистемы путем добавления дополнительного Inport и блоков Gain, как вы видите в модели здесь. Выполнение так делает In1 "не прямым сквозным соединением" и In2 прямое сквозное соединение, таким образом повреждая алгебраический цикл.