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