execution order для модели является порядком, в котором Simulink® вызывает методы выхода блоков во время симуляции. Simulink определяет этот порядок во время обновления модели, который можно инициировать, нажав Update Model на вкладке Modeling. Simulink также обновляет модель во время симуляции.
Вы не можете задать порядок выполнения, но можно присвоить приоритеты невиртуальным блокам, чтобы указать порядок их выполнения относительно других блоков в соответствующей блок-схеме. Simulink пытается чествовать настройки приоритета блоков, если нет конфликта с зависимостями данных. Чтобы подтвердить результаты заданных приоритетов или отладить модель, отобразите и проверьте порядок выполнения ваших невиртуальных блоков и подсистем.
Примечание
Для получения дополнительной информации о блоке методах и выполнении смотрите:
На вкладке Debug выберите Information Overlays > Execution Order. Средство просмотра порядка выполнения откроется на панели в правой части редактора Simulink.
Средство просмотра порядка выполнения отображает список задач для текущей системы.
Каждое System Index значение соответствует группе блоков, которые выполняются независимо от других блоков, таких как блоки в невиртуальной подсистеме. В модели значения System Index уникальны. В модель-ссылку иерархиях одно и то же значение System Index может использоваться несколько раз, но оно остается уникальным в каждой модели в этой иерархии. Чтобы определить, являются ли подсистемы частью одной и той же системы в модели, сравните их System Index значения.
Каждая задача, перечисленная в столбце Task ID, соответствует группе блоков, которые имеют общую частоту дискретизации. Для размеров с фиксированным шагом, Обработка каждой дискретной скорости как отдельного параметра конфигурации задачи определяет, выполняет ли Simulink блоки с дискретными скоростями в одной или нескольких задачах.
При выборе задачи в средстве просмотра порядка выполнения подсвечиваются блоки, принадлежащие задаче, и отображается их порядок выполнения. По умолчанию Simulink выбирает первую задачу, которая соответствует активному блоку.
Когда активная блок-схема не содержит блоков, которые выполняются как часть заданной задачи, вы не можете выбрать задачу в средстве просмотра порядка выполнения. Активная блок-схема может содержать виртуальные блоки, такие как блоки Inport, которые являются частью этой задачи.
Чтобы скрыть порядок подсветки и выполнения, нажмите кнопку Clear Highlighting.
Чтобы отобразить задачи, в которых выполняется блок, щелкните по блоку.
Номера задач в метке являются ссылками, которые можно щелкнуть, чтобы выбрать соответствующую задачу в средстве просмотра порядков выполнения. Когда у модели много задач, эти ссылки обеспечивают альтернативу прокрутке списка задач в средстве просмотра порядка выполнения.
Чтобы сравнить задачи среди блоков, выберите несколько блоков.
Simulink отображает число в правом верхнем углу каждого невиртуального блока. Эти номера указывают порядок выполнения блоков. Первый блок для выполнения имеет самый низкий порядок выполнения, который обычно 1
. Отображаемый порядок выполнения может пропустить номера, но блоки всегда выполняются в порядке видимых чисел. Предположим, что в задаче отображаются порядки выполнения 1, 2 и 4. Блок с меткой 1 выполняется перед блоком с меткой 2, который выполняется перед блоком с меткой 4.
Для примера, в vdp
модель, порядок выполнения блока колеблется от 1
на 9
, с каждым невиртуальным блоком, получающим порядок выполнения.
Блоки виртуальных Subsystem существуют только графически и не выполняются. Следовательно, они не являются частью порядка выполнения. Блоки внутри виртуальной подсистемы имеют порядок выполнения в контексте модели корневого уровня. Для виртуальных подсистем порядок выполнения блоков в подсистеме указан в фигурных скобках {}.
Невиртуальные блоки Subsystem существуют функционально и выполняются как модуль. Они имеют один порядок выполнения и другой системный индекс, чем родительская модель. Блоки внутри невиртуальной подсистемы имеют свои собственные порядки выполнения, которые независимы от родительской модели.
Например, следующая модель содержит виртуальную подсистему с именем Car Dynamics и атомарную, невиртуальную подсистему с именем Discrete Cruise Controller.
Виртуальная подсистема Car Dynamics показывает список порядков выполнения в фигурных скобках для блоков, которые она содержит. Содержащиеся в нем блоки выполняются на корневом уровне. Блок Integrator выполняет первое и отправляет свой выход в блок Scope в модели корневого уровня, которая выполняет второе.
Невиртуальная подсистема дискретного Контроллера имеет один порядок выполнения (5
), что указывает, что подсистема и блоки в ней являются пятыми, которые выполняются относительно блоков на корневом уровне.
Примечание
В зависимости от строения модели Simulink может вставлять скрытые, невиртуальные подсистемы в вашу модель. В результате видимые блоки внутри скрытого Subsystem блока могут иметь системный индекс, который отличается от текущего системного индекса. Например, если вы выбираете параметр конфигурации выполнения Условной входной ветви, Simulink создает скрытые, невиртуальные подсистемы, которые могут повлиять на отсортированный порядок выполнения.
Блоки в алгебраическом цикле перемещаются в скрытую невиртуальную подсистему. Порядок выполнения скрытой подсистемы определяется в контексте других блоков; затем определяется порядок выполнения блоков в скрытой подсистеме.
Для подсистем function-call и action выполнение подсистемы привязано к выполнению инициатора. Поэтому подсистема и ее инициатор совместно используют порядок выполнения.
На корневом уровне моделей export-function порядки выполнения вызова функции имеют F
префикс.
Для получения дополнительной информации смотрите Обзор моделей экспорта функций.
Блок имеет множество потоков выполнения порядка, когда блок выполняет несколько раз на основе различных путей выполнения к этому блоку. Для примера:
Блок, соединенный с шиной, имеет порядок выполнения, соответствующий каждому сигналу, который содержит шина.
Подсистема вызов-функция или действие с несколькими инициаторами имеет порядок выполнения, соответствующий каждому инициатору.
Simulink использует основанную на задаче сортировку, чтобы задать порядок выполнения блоков и портов на основе их производной информации о шаге расчета. Основанная на задачах сортировка обеспечивает эффективный и более простой процесс определения порядка выполнения блоков.
С основанной на задачах сортировкой:
Задачи сортируются индивидуально на основе шага расчета.
Несколько отсортированных списков генерируются вместо одного сплющенного, отсортированного списка блоков по всем задачам.
Упрощена обработка переходом со скоростью.
Ложных нарушений зависимостей данных с участием блоков в различных задачах избегают.
Результаты генерации кода заключаются в эффективных группировках скоростей.
Одна подсистема может принадлежать различным отсортированным спискам в нескольких задачах.
Чтобы убедиться, что порядок выполнения отражает зависимости данных среди блоков, Simulink классифицирует входные порты блоков в соответствии с зависимостью выходов блоков от входных портов блоков. Порт входа, текущее значение которого определяет текущее значение одного из выходов блока, является портом с прямой связью. Примеры блоков, которые имеют порты с прямой связью, включают:
Примеры блоков, которые имеют непереходные входы, включают:
Integrator - Выход является функцией своего состояния.
Constant - Не имеет входа.
Memory - Выход зависит от его входа от предыдущего временного шага.
Для сортировки блоков Simulink использует следующие правила:
Если блок управляет портом прямой передачи другого блока, блок должен появиться в порядке выполнения перед блоком, который он управляет.
Это правило гарантирует, что входные входы прямой передачи в блоки действительны, когда Simulink вызывает блочные методы, которые требуют текущих входов.
Блоки, которые не имеют входных входов прямой передачи, могут появиться где угодно в порядке выполнения, пока они предшествуют любым управляемым ими блокам прямой передачи.
Размещение всех блоков, которые не имеют портов прямой передачи в начале порядка выполнения, удовлетворяет этому правилу. Это расположение позволяет Simulink игнорировать эти блоки в процессе сортировки.
Применение этих правил приводит к порядку выполнения. Блоки без портов прямой передачи появляются в начале списка не в определенном порядке. За этими блоками следуют блоки с портами прямой передачи, расположенными так, что они могут подавать действительные входы в блоки, которые они управляют.
Следующая модель иллюстрирует этот результат. Следующие блоки не имеют прямой передачи и поэтому появляются в начале порядка выполнения системы корневого уровня:
Блок интегратора в виртуальной подсистеме Car Dynamics
Блок скорости в модели корневого уровня
Внутри подсистемы Discrete Cruise Controller все блоки Gain, которые имеют порты прямой передачи, запускаются перед блоком Sum, которым они управляют.
В симуляции инициаторы асинхронного вызова функции имеют самый высокий приоритет при определении порядка сортировки блоков в задаче. Для получения дополнительной информации смотрите Asynchronous Sample Time and Rate Transitions and Asynchronous Blocks (Simulink Coder).
Чтобы определить порядок выполнения блока в моделях, содержащих асинхронные шаги расчета, Simulink использует следующие правила:
Если инициатор вызова асинхронной функции запускается дискретной скоростью, разделяемой соответствующим блоком перехода скорости, то в задаче общей дискретной скорости инициатор вызова асинхронной функции будет отсортирован первым.
Для примера в приведенной ниже модели существует один инициатор вызова асинхронной функции, который запускается дискретной скоростью D1
. В рамках дискретной задачи сначала сортируется инициатор вызова асинхронной функции. Блоки Rate Transition преобразуются между асинхронной частотой, A1
и дискретную скорость, D1
.
Если блок Rate Transition сокращен до NoOp
блок Rate Transition не выполняется, и его положение в сортированном порядке в дискретной задаче передается в восходящий или нисходящий дискретный блок, с которым он соединяется.
Для примера в вышеописанной модели RTB2
уменьшается до NoOp
, поэтому его положение в отсортированном порядке передается в нисходящий Gain блок.
Если два инициатора вызова асинхронной функции имеют общую задачу дискретной скорости, то инициатор вызова асинхронной функции с более высоким приоритетом выполняет сначала в рамках задачи дискретной скорости.
Для примера в приведенной ниже модели два инициатора вызова асинхронной функции инициируются одной и той же дискретной скоростью D1
. Первый сортируется с более высоким приоритетом задачи.
Объединение асинхронных шагов расчета не поддерживается сортировкой на основе задач. Модели, содержащие объединение нескольких асинхронных шагов расчета по умолчанию к глобальному порядку выполнения, в котором все блоки сортируются в рамках одной задачи.
Использование основанной на задаче сортировки вместо устаревшей (блочной) сортировки может изменить относительный порядок выполнения с участием блоков Data Store Memory. Проверка Upgrade Advisor обнаруживает изменения и предоставляет опцию сохранить исходный порядок выполнения при обновлении вашей модели из более ранних версий Simulink.
Откройте советник по вопросам обновления. На вкладке Modeling выберите Model Advisor > Upgrade Advisor.
Установите флажок для Check relative execution orders for Data Store Read and Data Store Write blocks.
Нажмите Run This Check.
Просмотрите все изменения в таблице Result. Если необходимо сохранить исходный порядок выполнения, нажмите Modify.
Когда модель компилируется для генерации кода, относительный порядок выполнения блоков Data Store Read и Data Store Write может отличаться в сгенерированном коде от порядка в режиме нормальной симуляции. Проверка Model Advisor обнаруживает эти различия и предоставляет опцию изменить порядок выполнения в режиме нормальной симуляции, чтобы соответствовать порядку в сгенерированном коде.
Откройте Model Advisor. На вкладке Modeling выберите Model Advisor > By Product > Simulink Coder.
Установите флажок для Check for relative execution order change for Data Store Read and Data Store Write blocks.
Нажмите Run This Check.
Просмотрите все изменения в таблице Result. Если перечислены расхождения и вы хотите изменить порядок выполнения в нормальной симуляции, чтобы соответствовать порядку выполнения в сгенерированном коде, нажмите Modify block priorities.