Генерация отчетов для элементов Simulink и Stateflow

Искатели и репортеры сокращают количество времени и сложности, необходимых для написания кода, чтобы найти и сообщить о 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
Подробный пример редактирования шаблона см. в разделе «Настройка шаблона API отчета» раздела «Что такое репортер?»

Классы API отчета Simulink

Simulink Report API предоставляет эти классы finder, result и reporter. Чтобы использовать эти классы в программе генератора отчетов, необходимо создать контейнер типа slreportgen.report.Report чтобы сохранить отчет.

Классы Finder и результаты

Отчет о классе 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

Отчеты по MATLAB Function блок или функция Stateflow MATLAB.

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 включает информацию по умолчанию и использует форматирование по умолчанию для каждого блока.

  1. Импортируйте пакет Report API, который позволяет использовать имена классов без включения их имен. Для примера можно использовать BlockFinder вместо slreportgen.finder.BlockFinder. В дополнение к импорту базовых классов API Simulink Report, импортируйте базовый класс API MATLAB Report. Типовой отчет включает заголовок страницу, таблицу содержимого, главы и разделы, которые вы включаете в качестве классов репортеров в MATLAB Report API.

    import slreportgen.finder.*
    import slreportgen.report.*
    import mlreportgen.report.*
  2. Загрузите vdp модель.

    model_name = 'vdp';
    load_system(model_name)
  3. Создайте объект контейнера, чтобы сохранить отчет и открыть отчет. В этом случае выходной отчет сохраняется в zipped vdp_model.htmx HTML. Вы можете использовать любой выход. Если вы запускаете генератор отчетов более одного раза с тем же именем выходного файла, выходной файл перезаписывается. Чтобы использовать искатели API Simulink Report и репортеры в программе генератора отчетов, необходимо использовать полное имя для создания объекта контейнера.

    rpt = slreportgen.report.Report('vdp_model','html');
    open(rpt)
  4. Добавить главу и указать ее заголовок.

    ch = Chapter('Blocks in Simulink vdp model');
  5. Используйте BlockFinder Класс, чтобы создать поисковик. В этом случае BlockFinder находит все блоки в модели. Используйте find метод для поиска блоков, заданных поисковиком.

    finder = BlockFinder(model_name); 
    results = find(finder);
    
  6. Циклически просмотрите результаты метода поиска и создайте раздел для каждого блока, и добавьте таблицу свойств блоков к разделу. Затем добавьте каждый раздел в главу. После добавления всех блоков добавьте главу в отчет.

    for result = results
         sect = Section('Title',result.Name);
         append(sect,result)
         append(ch,sect)
    end
    append(rpt,ch);
  7. Закройте отчет и модель и просмотрите отчет.

    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

Этот пример описывает, как найти и сообщить о состояниях 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)

См. также

Похожие темы