В этом примере показано, как создать отчет, который отображает информацию обо всех задачах, выполненных моделью, и о порядке, в котором блоки выполняются во время каждой задачи.
Выполнение блока может быть разделено на различные задачи на основе шага расчета, если выбран параметр Обработать каждую дискретную скорость как отдельный параметр конфигурации задачи. Модели и системы экспортов функций, содержащие определенные блоки, такие как асинхронные прерывания или событийно-инициируемые подсистемы, также группируют выполнение блоков в различные задачи. Смотрите Control and Display Execution Order для получения дополнительной информации о просмотре информации о задаче и порядке выполнения блока в Simulink ®.
На этом изображении показана схема выборки slreportgen_demo_ExecutionOrder
и сводные данные задач и порядок выполнения блоков для модели.
Потому что модель является непрерывной системой, основной задачей, Cont
, имеет значение шага расчета 0
. Во всех моделях постоянные блоки разделяются на Constant
задачи.
MultiplyMu
является невиртуальной подсистемой. По умолчанию невиртуальные записи подсистемы в списке порядка выполнения блока содержат ссылку на список порядка выполнения блока для этой подсистемы. Также можно сконфигурировать ExecutionOrder
опции reporter для отображения блоков подсистемы в виде вложенного списка.
Откройте модель. Этот пример использует однозадачную модель, то есть все блоки, кроме постоянных блоков, выполняются во время одной и той же задачи.
model = "slreportgen_ExecutionOrder_example";
open_system(model);
Импортируйте пакеты 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")
slreportgen.report.ExecutionOrder