Примите эти методы проектирования для больших моделей с алгебраическими циклами:
Постарайтесь не создавать циклы, которые содержат разрывы или недвойные типы данных. Simulink® алгебраический решатель цикла основан на градиенте и должен решить алгебраические ограничения к высокой точности.
Разработайте схему того, чтобы ясно идентифицировать атомарные подсистемы как прямое сквозное соединение или не прямое сквозное соединение. Используйте визуальную схему, такую как окраска блоков или определение соглашения о присвоении имен блока.
Если вы планируете сгенерировать код для своей модели, включите параметр Minimize algebraic loop occurrences для всех атомарных подсистем. Когда возможно, убедитесь, что входные порты для атомарных подсистем соединяются непосредственно с блоками "не прямое сквозное соединение".
Постарайтесь не комбинировать "не прямые проходные" и прямые проходные пути с помощью блоков Mux или Bus Creator. Simulink не может смочь устранить любые получившиеся искусственные алгебраические циклы. Вместо этого рассмотрите кластеризацию "не прямых проходных" и прямых проходных объектов в отдельных подсистемах.
Используйте блоки Селектора Шины, чтобы передать только необходимые сигналы в атомарные подсистемы.
Когда блок Model является частью цикла, и блок является прямым каналом через блок, алгебраический цикл может закончиться. Алгебраический цикл в модели является не обязательно ошибкой, но он может дать неожиданные результаты. См.:
Подсветите Алгебраические Циклы в Модели для получения информации о наблюдении алгебраических циклов графически.
Отобразите Алгебраическую информацию о Цикле для получения информации о трассировке алгебраических циклов в отладчике.
Параметры конфигурации Модели: панель Диагностики Алгебраическая опция цикла для получения информации об обнаружении алгебраических циклов автоматически.
Блок Model может быть прямым каналом через блок из-за структуры модели, на которую ссылаются. Где прямой канал посредством результатов структуры подмодели и причин нежелательный алгебраический цикл, вы можете:
Автоматически устраните алгебраический цикл с помощью методов, описанных в:
Вручную вставьте количество блоков Unit Delay, должен был повредить алгебраический цикл.
Типовое реальное время (grt
) и встроенное реальное время (ert
) основанные цели предоставляют возможность Single output/update function на диалоговом окне Configuration Parameters. Эта опция управляет, имеет ли сгенерированный код отдельные функции выхода и обновления или объединенную функцию выхода/обновления. См.:
Сконфигурируйте генерацию кода C для Функций Точки входа Модели (Simulink Coder) для получения информации об отдельных и объединенных функциях выхода и обновления.
Одна функция выхода/обновления (Simulink Coder) для получения информации об определении, имеет ли код отдельные или объединенные функции.
Когда функции выхода/обновления Single включают (значение по умолчанию), блок Model имеет объединенную функцию выхода/обновления. Функция делает блок прямым каналом через блок для всего импорта, независимо от структуры модели, на которую ссылаются. Где нежелательный алгебраический цикл заканчивается, вы можете:
Отключите функцию выхода/обновления Single. Код для блока Model затем имеет отдельные функции выхода и обновления, устраняя прямой канал через и следовательно алгебраический цикл.
Вручную вставьте один или несколько блоков Unit Delay по мере необходимости, чтобы повредить алгебраический цикл.
Во время обновляющейся фазы симуляции Simulink определяет порядок выполнения симуляции методов блока. Этим упорядоченным расположением вызова блока является execution order.
Если вы присваиваете приоритеты невиртуальным блокам, чтобы указать к Simulink на их порядок выполнения относительно других блоков, алгебраический решатель цикла не соблюдает эти приоритеты при попытке решить любые алгебраические циклы.