Поисковики и репортеры сокращают время и сложность, необходимые для написания кода для поиска и создания отчетов по элементам модели Simulink ®, таким как диаграммы и блоки, а также по диаграммам и переходам Stateflow ® и т.д. API Simulink Report Generator™ Report является слоем поверх API DOM. Его поисковики и репортеры основаны на базовом классе поиска Simulink и Stateflow. Указывается контейнер для поиска определенных элементов, например блоков в подсистеме или состояний в диаграмме. Объекты поиска возвращают свои результаты в соответствующий массив объектов результатов поиска.
API Simulink Report также включает в себя классы репортеров, которые возвращают изображение контейнера. Это изображение является верхним уровнем модели.

Каждый объект результата, возвращенный поисковиком, имеет связанный объект reporter, который сообщает об этих результатах. Объект reporter содержит содержимое и форматирует его, например, таблицы свойств и графики данных. Объекты reporter добавляются в отчеты. Для определения общих элементов отчета используйте отчеты MATLAB ® Report API. Смотрите «Что такое репортер?» для информации.
Все поисковики и репортеры имеют следующие особенности:
Поведение и значения по умолчанию
Разрешить переопределение и настройку их выходных данных
Все поисковики имеют find, hasNext, и next методы. find метод находит и возвращает в массиве результирующих объектов все элементы для каждого найденного элемента указанного типа. hasNext и next методы находят и возвращают один элемент за раз и используются для итерации по списку результатов. hasNext проверяет, имеет ли контейнер хотя бы один из элементов указанного типа. Если контейнер имеет один или несколько элементов, то hasNext метод ставит его в очередь для next метод для поиска и возврата в качестве результирующего объекта.
Все репортеры имеют предопределенные шаблоны. Шаблон для каждого репортера определяет его форматирование, макет и отверстия содержимого. Нет необходимости изменять шаблон или задавать любые форматы, компоновки или отверстия, если не требуется пользовательский отчет. Можно настроить отчет, скопировав и отредактировав его шаблон по умолчанию или используя новый шаблон. Редактирование копии шаблона по умолчанию дает начальную точку и структуру для настройки шаблона. Использование нового шаблона позволяет полностью определить шаблон, начиная с пустого файла. Чтобы изменить порядок содержимого отчета, измените порядок отверстий в шаблоне. Поисковики не используют шаблоны. Другой способ настроить класс репортера - это его подкласс.
Шаблоны отчетов по умолчанию для каждого типа вывода находятся в библиотеке шаблонов, которая составляет
matlab\toolbox\shared\slreportgen\rpt\rpt\+slreportgen\
+report\@<reporter>\resources\templates\<output>DiagramReporter для вывода в формате PDF: matlab\toolbox\shared\slreportgen\rpt\rpt\+slreportgen\
+report\@DiagramReporter\resources\templates\pdf\default.pdftxAPI Simulink Report предоставляет эти классы поиска, результатов и отчетов. Для использования этих классов в программе генератора отчетов необходимо создать контейнер типа slreportgen.report.Report для хранения отчета.
| Класс API отчетов | Описание |
|---|---|
slreportgen.finder.AnnotationFinder | Поиск аннотаций блок-схемы Simulink. |
slreportgen.finder.BlockFinder | Поиск блоков в блок-схеме Simulink. |
slreportgen.finder.BlockResult | Содержит блок, найденный BlockFinder объект. |
slreportgen.finder.ChartDiagramFinder | Поиск диаграмм Stateflow в модели. |
slreportgen.finder.DataDictionaryFinder | Поиск словарей данных Simulink. |
slreportgen.finder.DataDictionaryResult | Содержит словарь данных, найденный DataDictionary объект. |
slreportgen.finder.DiagramElementFinder | Поиск элементов блок-схемы Simulink или диаграммы Stateflow. |
slreportgen.finder.DiagramElementResult | Содержит элемент схемы, найденный DiagramElementFinder объект. |
slreportgen.finder.DiagramFinder | Поиск блок-схем и диаграмм в модели Simulink. |
slreportgen.finder.DiagramResult | Содержит диаграмму, найденную DiagramFinder объект. |
slreportgen.finder.ModelVariableFinder | Поиск переменных, используемых моделью Simulink. |
slreportgen.finder.ModelVariableResult | Содержит переменную модели, найденную ModelVariableFinder объект. |
slreportgen.finder.SignalFinder | Поиск сигналов, используемых моделью или блоком. |
slreportgen.finder.SignalResult | Содержит сигнал, найденный SignalFinder объект. |
slreportgen.finder.StateFinder | Поиск состояний в диаграмме Stateflow. |
slreportgen.finder.StateflowDiagramElementFinder | Поиск элементов диаграммы Stateflow. |
slreportgen.finder.SystemDiagramFinder | Поиск системных блок-схем в модели Simulink. |
| Класс API отчетов | Описание |
|---|---|
slreportgen.report.Bus | Отчеты о шинах, выбранных или созданных блоками Simulink. |
slreportgen.report.BusObject | Отчеты о Simulink.Bus объекты, используемые моделью. |
slreportgen.report.DataDictionary | Отчеты по словарю данных Simulink. |
slreportgen.report.Diagram | Создает снимок блок-схемы Simulink или диаграммы Stateflow. |
slreportgen.report.DocBlock | Отчеты по DocBlock Simulink. |
slreportgen.report.ElementDiagram | Отчеты о моментальном снимке схемы элементов и подписи |
slreportgen.report.ExecutionOrder | Отчеты о задачах модели или невиртуальной подсистемы и блоках в каждой задаче, отсортированные по порядку выполнения. |
slreportgen.report.LookupTable | Отчеты о точках останова и точках вывода блока таблицы поиска Simulink. |
slreportgen.report.MATLABFunction | Отчеты по |
slreportgen.report.ModelConfiguration | Отчеты об активном наборе конфигурации модели. |
slreportgen.report.ModelVariable | Отчеты по переменной модели. |
slreportgen.report.Notes | Отчеты по заметкам диаграммы Simulink или Stateflow. |
slreportgen.report.Signal | Сообщает о сигнале. |
slreportgen.report.SimulinkObjectProperties | Создание таблицы свойств объекта Simulink. |
slreportgen.report.StateflowObjectProperties | Создание таблицы свойств объекта Stateflow. |
slreportgen.report.SystemHierarchy | Создание вложенного списка подсистем модели или подсистемы Simulink. |
slreportgen.report.SystemIO | Отчеты по входным и выходным сигналам системы Simulink. |
slreportgen.report.TestSequence | Отчеты о блоке тестовой последовательности Simulink. |
slreportgen.report.TruthTable | Отчеты о блоке таблицы истинности Simulink или объекте таблицы истинности Stateflow. |
В этом примере показано, как найти все блоки Simulink в vdp модель с использованием BlockFinder класс. Полученный отчет HTML содержит информацию по умолчанию и использует форматирование по умолчанию для каждого блока.
Импортируйте пакет API Report, который позволяет использовать имена классов, не включая их имена. Например, можно использовать BlockFinder вместо slreportgen.finder.BlockFinder. Помимо импорта базовых классов API Simulink Report, импортируйте базовый класс API MATLAB Report. Типичный отчет включает титульную страницу, оглавление, главы и разделы, которые включаются как классы репортеров в API отчетов MATLAB.
import slreportgen.finder.* import slreportgen.report.* import mlreportgen.report.*
Загрузить vdp модель.
model_name = 'vdp'; load_system(model_name)
Создайте объект-контейнер для хранения отчета и откройте отчет. В этом случае выходной отчет сохраняется в архиве vdp_model.htmx HTML-отчет. Можно использовать любое имя вывода. Если генератор отчетов запускается несколько раз с одним и тем же именем выходного файла, выходной файл перезаписывается. Для использования в программе-генераторе отчетов средств поиска и отчетов Simulink Report API необходимо использовать полное имя для создания объекта-контейнера.
rpt = slreportgen.report.Report('vdp_model','html');
open(rpt)Добавьте главу и укажите ее название.
ch = Chapter('Blocks in Simulink vdp model');Используйте BlockFinder для создания поиска. В этом случае BlockFinder находит все блоки в модели. Используйте find для поиска блоков, указанных поисковиком.
finder = BlockFinder(model_name); results = find(finder);
Выполните цикл по результатам метода поиска и создайте раздел для каждого блока, а затем добавьте таблицу свойств блока в раздел. Затем добавьте каждый раздел в главу. После добавления всех блоков добавьте главу в отчет.
for result = results
sect = Section('Title',result.Name);
append(sect,result)
append(ch,sect)
end
append(rpt,ch);Закройте отчет и модель и просмотрите отчет.
close(rpt); close_system(model_name); rptview(rpt);
Полная программа:
import slreportgen.finder.*
import slreportgen.report.*
import mlreportgen.report.*
model_name = 'vdp';
load_system(model_name);
rpt = slreportgen.report.Report('vdp_model','html');
open(rpt)
ch = Chapter('Blocks in Simulink vdp model');
finder = BlockFinder(model_name);
results = find(finder);
for result = results
sect = Section('Title',result.Name);
append(sect,result)
append(ch,sect);
end
append(rpt,ch);
close(rpt)
close_system(model_name)
rptview(rpt)Показаны заголовок главы и заголовки разделов и таблицы свойств первых двух блоков итогового отчета.

Создание генератора отчетов PDF, который находит все блоки в sldemo_radar_eml модель.
Чтобы найти все блоки, используйте BlockFinder. if оператор показывает, как тестировать функциональные блоки MATLAB. Используйте MATLABFunction reporter, чтобы сообщить подробные данные функционального блока MATLAB. else оператор показывает, как блоки, отличные от функциональных блоков MATLAB, используют BlockFinder
find результаты способа.
blkfinder = BlockFinder(model_name);
blks = find(blkfinder);
if slreportgen.utils.isMATLABFunction(blks(i).Object)
rptr = MATLABFunction(blks(i).Object);
sec = Section(blks(i).Name);
append(sec,rptr)
append(ch,sec)
else
sec = Section(blks(i).Name);
append(sec,blks(i))
append(ch,sec)blkfinder = BlockFinder(model_name); blks = find(blkfinder);
Полная программа:
import slreportgen.report.*
import slreportgen.finder.*
import mlreportgen.report.*
model_name = 'sldemo_radar_eml';
load_system(model_name)
rpt = slreportgen.report.Report('radar','pdf');
open(rpt)
blkfinder = BlockFinder(model_name);
blks = find(blkfinder);
ch = Chapter('Blocks in sldemo_radar_eml Model');
for i=1:length(blks)
if slreportgen.utils.isMATLABFunction(blks(i).Object)
rptr = MATLABFunction(blks(i).Object);
sec = Section(blks(i).Name);
append(sec,rptr)
append(ch,sec)
else
sec = Section(blks(i).Name);
append(sec,blks(i))
append(ch,sec)
end
end
append(rpt,ch)
close(rpt)
close_system(model_name)
rptview(rpt)Пример информации, сообщаемой для функционального блока MATLAB посредством MATLABFunction репортер -

Пример информации, сообщенной find способ BlockFinder является

В этом примере описывается поиск состояний, переходов и соединений Stateflow и создание отчетов по ним. Он сообщает о control_logic график sldemo_fuelsys модель.
Эта часть кода использует StateFinder и его find метод поиска состояний в диаграмме и создания отчета о них. Он проходит через массив найденных состояний и добавляет каждое из них в главу.
stFinder = StateFinder(subsys); states = find(stFinder); for state = states append(chapter,state) end append(rpt,chapter)

Чтобы сообщить о переходах, используйте StateflowDiagramElementFinder и его find способ. Чтобы показать таблицу свойств с более узкой шириной, чем по умолчанию, настройте выходные данные. Сначала получите репортера для результата. Чтобы задать ширину, используйте TableWidth собственность репортера.
chapter = Chapter('Title','Transitions');
trFinder = StateflowDiagramElementFinder...
('Container',subsys,'Types','transition');
transitions = find(trFinder);
for transition = transitions
rptr = transition.getReporter;
rptr.PropertyTable.TableWidth = '3in';
append(chapter,rptr)
end
append(rpt,chapter)

Полная программа:
import mlreportgen.report.*
import slreportgen.report.*
import slreportgen.finder.*
model_name = 'sldemo_fuelsys';
load_system(model_name);
subsys = strcat(model_name,...
'/fuel_rate_control/control_logic');
rpt = slreportgen.report.Report('output','pdf');
open(rpt)
tp = TitlePage('Title',...
'Control Logic Chart of sldemo_fuelsys');
append(rpt,tp)
append(rpt,TableOfContents);
chapter = Chapter('Title','States');
stFinder = StateFinder(subsys);
states = find(stFinder);
for state = states
append(chapter,state)
end
append(rpt,chapter)
chapter = Chapter('Title','Transitions');
trFinder = StateflowDiagramElementFinder...
('Container',subsys,'Types','transition');
transitions = find(trFinder);
for transition = transitions
rptr = transition.getReporter;
rptr.PropertyTable.TableWidth = '3in';
append(chapter,rptr)
end
append(rpt,chapter)
close(rpt)
close_system(model_name)
rptview(rpt)