Удаление алгебраических циклов

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

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

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

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

  • 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 Model Параметры Конфигурации установите параметр 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 метод начинается с блока Объекта, потому что блок Объекта является непрямым сквозным соединением. Выполнение завершается блоком 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 to false чтобы указать, что порт входа не имеет прямых сквозных соединений.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Блок State-Space определяет динамическую характеристику системы бака на операцию насоса:

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

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

Чтобы исключить этот алгебраический цикл:

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

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

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

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

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

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

    • Атомарные подсистемы - В диалоговом окне Параметры выберите 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 решить искусственные алгебраические циклы.

Рассмотрим следующий пример модели.

При симуляции этой модели подсистема Atomic Unit и блоки Gain и 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.

Совет

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

Когда Simulink не может устранить искусственные алгебраические циклы

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

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

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

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

Похожие темы