Искатели и репортеры сокращают количество времени и сложности, необходимых для написания кода, чтобы найти и сообщить о Simulink® элементы модели, такие как схемы и блоки, и на Stateflow® графики и переходы и т.д. Simulink Report Generator™ Report API является слоем поверх DOM API. Его искатели и репортеры основаны на базовом классе Simulink и Stateflow. Вы задаете контейнер, в котором можно найти определенные элементы, такие как блоки в подсистеме или состояния на графике. Объекты Finder возвращают свои результаты в соответствующий массив объектов результатов Finder.
Simulink Report API также включает классы reporter, которые возвращают изображение контейнера. Это изображение является верхним уровнем модели.
Каждый объект результата, возвращенный поисковиком, имеет связанный объект reporter, который сообщает об этих результатах. Объект reporter содержит содержимое и форматирует содержимое, например таблицы свойств и графики данных. Вы добавляете объекты-репортеры к своим отчетам. Используйте MATLAB® Сообщите журналистам API, чтобы определить общие элементы отчета. Смотрите, что такое репортер? для получения информации.
Все искатели и репортеры имеют следующие функции:
Поведение и значения по умолчанию
Разрешить переопределение и настройку их выхода
Все искатели имеют find
, hasNext
, и next
методы. The find
метод находит и возвращает в массив объектов результата все элементы для каждого найденного элемента заданного типа. The hasNext
и next
методы находят и возвращают по одному элементу за раз и используются для итерации по списку результатов. The hasNext
метод проверяет, имеет ли контейнер хотя бы один из элементов заданного типа. Если контейнер имеет один или несколько элементов, то hasNext
метод ставит его в очередь к next
метод для поиска и возврата в результате объекта.
Все репортеры имеют предопределенные шаблоны. Шаблон для каждого репортера задает его форматирование, размещение и отверстия для содержимого. Вы не должны изменять шаблон или задавать какие-либо форматы, размещения или отверстия, если вам не нужен настраиваемый отчет. Можно настроить отчет путем копирования и редактирования его шаблона по умолчанию или с помощью нового шаблона. Изменение копии шаблона по умолчанию дает вам начальную точку и структуру для настройки шаблона. Использование нового шаблона позволяет вам полностью определить свой шаблон, начиная с пустого файла. Чтобы изменить порядок содержимого отчета, переупорядочите отверстия в шаблоне. Искатели не используют шаблоны. Другой способ настройки класса reporter - это подкласс.
Шаблоны репортеров по умолчанию для каждого выходного типа находятся в библиотеке шаблонов, которая находится в
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.pdftx
Simulink Report API предоставляет эти классы finder, result и reporter. Чтобы использовать эти классы в программе генератора отчетов, необходимо создать контейнер типа 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 | Сообщает о блоке Test Sequence Simulink. |
slreportgen.report.TruthTable | Отчеты по блоку таблицы истинности Simulink или объекту таблицы истинности Stateflow. |
В этом примере показано, как найти и сообщить обо всех блоках Simulink в vdp
модели с использованием BlockFinder
класс. Получившийся HTML включает информацию по умолчанию и использует форматирование по умолчанию для каждого блока.
Импортируйте пакет Report API, который позволяет использовать имена классов без включения их имен. Для примера можно использовать BlockFinder
вместо slreportgen.finder.BlockFinder
. В дополнение к импорту базовых классов API Simulink Report, импортируйте базовый класс API MATLAB Report. Типовой отчет включает заголовок страницу, таблицу содержимого, главы и разделы, которые вы включаете в качестве классов репортеров в MATLAB Report API.
import slreportgen.finder.* import slreportgen.report.* import mlreportgen.report.*
Загрузите vdp
модель.
model_name = 'vdp'; load_system(model_name)
Создайте объект контейнера, чтобы сохранить отчет и открыть отчет. В этом случае выходной отчет сохраняется в zipped vdp_model.htmx
HTML. Вы можете использовать любой выход. Если вы запускаете генератор отчетов более одного раза с тем же именем выходного файла, выходной файл перезаписывается. Чтобы использовать искатели API Simulink Report и репортеры в программе генератора отчетов, необходимо использовать полное имя для создания объекта контейнера.
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
. The if
оператор показывает, как тестировать блоки MATLAB Function. Используйте MATLABFunction
репортер, чтобы сообщить MATLAB Function заблокировать детали. The else
оператор показывает, как блоки, отличные от блоков MATLAB Function, используют 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 Function MATLABFunction
reporter есть
Пример информации, представленной 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)