Основанная на задаче сортировка устанавливает порядок выполнения блоков и портов на основе их выведенной информации о шаге расчета. Это улучшает блочную сортировку путем обеспечения более эффективного и более простого процесса для определения порядка выполнения блоков.
С основанной на задаче сортировкой:
Задачи сортируются на основе шага расчета индивидуально.
Несколько отсортированных списков сгенерированы вместо одного сглаженного отсортированного списка блоков через все задачи.
Обработка перехода уровня упрощена.
Ложных нарушений зависимостей данных избегают, включая блоки в различных задачах.
Результаты генерации кода находятся в более эффективных группировках уровня.
Одна подсистема может принадлежать несколько отсортированных списков.
API обеспечивает способность получить подробную информацию основанных на задаче отсортированных списков. Советник по вопросам Обновления проверка обращается к любому изменению поведения между сортировкой основы задачи и блочной сортировкой.
Средство просмотра Порядка выполнения отображает список задач. Выбор задачи отображает порядок выполнения для блоков, принадлежащих задаче.
От вкладки Debug и в разделе Diagnostics. выберите Information Overlays выпадающая стрела. В разделе Blocks диалогового окна выберите Execution Oder. Выполнение Одерское средство просмотра открывается в панели на правой стороне Редактора Simulink.
Кликните по задаче в таблице задачи.
Выбранная строка подсвечена в синем. Все блоки в задаче подсвечены на блок-схеме. Порядок выполнения отображен в красных числах для блоков в задаче. Блоки в других задачах отображаются серым.
Используйте обеспеченный API, чтобы просмотреть задачи и порядок выполнения для блоков.
Получите задачи в модели.
<объяснить>
>> sLists = get_param('mExample1', 'SortedLists') sLists = 2×1 struct array with fields: TaskIndex SampleTimes SortedBlocks
Индекс задачи для первой задачи (Task 0
в средстве просмотра Порядка выполнения)
<объяснить>
>> sLists(1) ans = struct with fields: TaskIndex: 0 SampleTimes: [1×1 struct] SortedBlocks: [4×1 struct]
Шаг расчета детализирует для Task 0
.
<объяснить>
>> sLists(1).SampleTimes ans = struct with fields: RateSpec: [1×1 struct] Annotation: 'D1' Description: 'Discrete 1' >> sLists(1).SampleTimes.RateSpec ans = struct with fields: period: 1 offset: 0 rateType: 'ClassicPeriodicDiscrete'
Блоки в Task 0
.
>> sLists(1).SortedBlocks.BlockType ans = 'RateTransition' ans = 'Abs' ans = 'Scope' ans = 'RateTransition'
Детали первого блока в Task 0
.
>> sLists(1).SortedBlocks(1) ans = struct with fields: BlockHandle: 109.0001 BlockPath: 'mExample1/D' BlockType: 'RateTransition' InputPorts: [] OutputPorts: 1
Получите выполнение (отсортированный) порядок для блока.
>> blockOrder = get_param('mExample1/D','SortedOrder') blockOrder = struct with fields: TaskIndex: 0 SystemIndex: 0 BlockIndex: 1
Используя основанную на задаче сортировку вместо блочной сортировки может изменить относительный порядок выполнения, включающий Блоки памяти Хранилища данных. Проверка Model Advisor обнаруживает изменения и предоставляет возможность обновлять вашу модель с исходным порядком выполнения.
Откройте Советника по вопросам Обновления. На вкладке Modeling и в разделе Evaluate and Manage, нажмите Model Advisor. От выпадающего диалогового окна выберите Update Advisor.
Установите флажок для Check relative execution orders for Data Store Read and Data Store Write blocks
.
Нажмите кнопку Run This Check.
Рассмотрите любые изменения в таблице Result. Если вы хотите сохранить исходный порядок выполнения, нажмите кнопку Modify.
Этот раздел показывает порядок выполнения блока с помощью основанной на задаче сортировки в общих шаблонах модели.
Соединение шины к входу блока Delay создает несколько скрытых блоков каждый с их собственным порядком выполнения блока.
Блоки в алгебраическом цикле перемещены в скрытую невиртуальную подсистему. Порядок выполнения скрытой подсистемы определяется в контексте других блоков модели, затем порядок выполнения блоков в скрытой подсистеме определяется.
Для виртуальных подсистем блокируйтесь, порядок выполнения в подсистеме перечислен в фигурных скобках {}.
Для блоков Function-Call Subsystem блок Inport вызова функции, блок Subsystem и блок Outport выполняются вместе. Поскольку порядок выполнения относительно другого блока в модели не может быть определен, прежде чем симуляция, блоки отобразят порядок вызова функции с помощью оверлейных программ, таких как F0 и F1.
Можно просмотреть порядок выполнения, включая скрытые блоки, со следующими командами. Блок Inport сопоставлен со скрытым блоком Function-Call Generator, и блок Function-Call Subsystem перечислен с порядком выполнения 2
.
>> set_param('export_function_model','DisplaySortedLists','on') >> get_param('export_function_model', 'SortedLists') ---- Sorted list for 'export_function_model' [6 nonvirtual block(s), directFeed=1] Total number of tasks = 2 - Sorted list of task index [1], 3 nonvirtual block(s) (1)0:1 'export_function_model/RootFcnCall_InsertedFor_function_call_1_at_outport_1' (RootInportFunctionCallGenerator) Input ports: [0] Output ports: [0] (1)0:2 'export_function_model/Function-Call Subsystem 1' (SubSystem) Input ports: [0] Output ports: [0] (1)0:3 'export_function_model/output_1' (Outport) Input ports: [0] Output ports: []