Порядок выполнения задач и блоков в системе Simulink

В этом примере показано, как создать отчет, который отображает информацию обо всех задачах, выполненных моделью, и о порядке, в котором блоки выполняются во время каждой задачи.

Выполнение блока может быть разделено на различные задачи на основе шага расчета, если выбран параметр Обработать каждую дискретную скорость как отдельный параметр конфигурации задачи. Модели и системы экспортов функций, содержащие определенные блоки, такие как асинхронные прерывания или событийно-инициируемые подсистемы, также группируют выполнение блоков в различные задачи. Смотрите Control and Display Execution Order для получения дополнительной информации о просмотре информации о задаче и порядке выполнения блока в Simulink ®.

На этом изображении показана схема выборки slreportgen_demo_ExecutionOrder и сводные данные задач и порядок выполнения блоков для модели.

Потому что модель является непрерывной системой, основной задачей, Cont, имеет значение шага расчета 0. Во всех моделях постоянные блоки разделяются на Constant задачи.

MultiplyMu является невиртуальной подсистемой. По умолчанию невиртуальные записи подсистемы в списке порядка выполнения блока содержат ссылку на список порядка выполнения блока для этой подсистемы. Также можно сконфигурировать ExecutionOrder опции reporter для отображения блоков подсистемы в виде вложенного списка.

Откройте модель

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

model = "slreportgen_ExecutionOrder_example";
open_system(model);

Setup отчетов

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

import mlreportgen.report.*
import slreportgen.report.*
import slreportgen.finder.*

Создайте и откройте объект отчета Simulink. Чтобы создать HTML-отчет Microsoft ® Word, HTML или один файл, измените значение "pdf" в "docx", «html", или "html-file", соответственно.

rpt = slreportgen.report.Report(model + "_Report","pdf");
open(rpt);

Добавьте заголовка страницу и таблицу содержимого.

titlepage = TitlePage("Title",model + ": Execution Order Report","Author","Jane Doe");
add(rpt,titlepage);
toc = TableOfContents();
add(rpt, toc);

Отчет о задаче и Блоке выполнении заказа

Найдите и закольцовывайте все системы в модели.

finder = SystemDiagramFinder(model);
while hasNext(finder)
    system = next(finder);

Создайте новую главу и добавьте результат схемы.

    ch = Chapter("Title",sprintf("System %s",system.Name));
    add(ch,system);

Сообщать о порядке выполнения системы только в том случае, если это блок или невиртуальная подсистема. Блоки внутри виртуальных подсистем сообщаются в родительский элемент порядке выполнения блока.

    isNonvirtualSubsystem = strcmp(system.Type, "Simulink.SubSystem") ...
        && strcmp(get_param(system.Object, "IsSubsystemVirtual"), "off");
    if strcmp(system.Type,"Simulink.BlockDiagram") || isNonvirtualSubsystem

Создайте Execution Order раздел и ExecutionOrder репортер.

        eoSect = Section("Execution Order");
        eoRptr = ExecutionOrder(system);        

Для подсистем установите ExecutionOrder опции, чтобы подробные сведения о задаче не сообщались, потому что эта информация уже передается родительским порядком выполнения блока.

        if isNonvirtualSubsystem
            eoRptr.ShowTaskDetails = false;
        end

Добавьте ExecutionOrder репортер в Execution Order и добавить эту главу в отчет.

        add(eoSect,eoRptr);
        add(ch,eoSect);
    end

Создайте раздел, содержащий подробную информацию о каждом блоке в системе. Блоки, включенные в ExecutionOrder списки порядка выполнения блоков ссылаются на соответствующие детали блоков в этом разделе.

    blkSect = Section("Blocks");
    blkFinder = BlockFinder(system);
    results = find(blkFinder);
    add(blkSect,results);
    add(ch,blkSect);

Добавить главу в отчет.

    add(rpt,ch);
end

Закройте и просмотрите отчет

close(rpt);
rptview(rpt);

Просмотр выборочных отчетов

Чтобы увидеть, как сообщается о порядке выполнения для других типов моделей, просмотрите выборочные отчеты, доступные в этом примере.

Многозадачные модели

Модель выборки slreportgen_demo_Multitasking сконфигурировано для обработки каждого дискретного шага расчета как отдельной задачи. Система шага расчета для блоков In1_1s, SS1, и SS2 равен 1 секунде, и шаг расчета для блочного In2_2s 2 секунды.

Модель также сконфигурирована, чтобы отображать блоки, закодированные по шагу расчета. Блоки, которые выполняются во шаг расчета 1 секунду, являются красными, а блоки, которые выполняются во шаг расчета 2 секунды, - зелеными. Многократные блоки, такие как блок перехода скорости между Integrator блок и две подсистемы, желтые. Чтобы программно сконфигурировать модель таким образом, выполните эту команду:

set_param(model, "SampleTimeColors", "on");

Порядок выполнения для этой модели сообщает о двух задачах. The Trigger в столбце таблицы подробных данных задачи указывается шаг расчета в секундах для каждой задачи.

Блоки модели разделяются задачей. Блок перехода со скоростью выполняется во время обеих задач, поэтому он включен в оба списка. Однако только его выходной порт выполняется во время D1 задачи, и только его входной порт выполняется во время D2 задачи.

Чтобы просмотреть полный пример отчета, выполните эту команду:

rptview("slreportgen_demo_Multitasking_Report.pdf")

Непериодические задачи

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

События инициализации, сброса и завершения сообщаются как отдельные задачи в порядке выполнения. Их выполнение не зависит непосредственно от шага расчета модели, поэтому им не задается номер порядка в таблице задач. The SourceBlock столбец обозначает блок, определяющий задачу.

Чтобы просмотреть полный пример отчета, выполните эту команду:

rptview("slreportgen_demo_InitResetTerm_Report.pdf")

Условное выполнение

Модель выборки slreportgen_demo_ConditionalExecution содержит блок If и блок Function-Call Generator, которые управляют, когда выполняются определенные подсистемы в модели.

Условно выполненные подсистемы не сообщаются в списке порядка выполнения блока, потому что они не обязательно выполняются на каждом временном шаге. Вместо этого они включены в Conditional Execution таблица, которая выводится после списка порядка выполнения блока.

Чтобы просмотреть полный пример отчета, выполните эту команду:

rptview("slreportgen_demo_ConditionalExecution_Report.pdf")

См. также

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте