exponenta event banner

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

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

Выполнение блока может быть разделено на различные задачи на основе времени выборки, если выбран параметр Рассматривать каждую дискретную скорость как отдельный параметр конфигурации задачи. Модели и системы с функциями экспорта, содержащие определенные блоки, такие как асинхронные прерывания или подсистемы, инициируемые событиями, также группируют выполнение блоков в различные задачи. Дополнительные сведения о просмотре информации о задачах и порядке выполнения блоков в Simulink ® см. в разделе Порядок выполнения управления и отображения.

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

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

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

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

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

model = "slreportgen_ExecutionOrder_example";
open_system(model);

Настройка отчета

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

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

Создайте и откройте объект отчета Simulink. Чтобы создать отчет Microsoft ® Word, HTML или однофайловый 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");

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

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

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

rptview("slreportgen_demo_Multitasking_Report.pdf")

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

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

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

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

rptview("slreportgen_demo_InitResetTerm_Report.pdf")

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

Образец модели slreportgen_demo_ConditionalExecution содержит блок If и блок генератора вызовов функций, которые управляют выполнением определенных подсистем в модели.

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

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

rptview("slreportgen_demo_ConditionalExecution_Report.pdf")

См. также

Связанные темы