Сообщите о генерации для элементов Stateflow и Simulink

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

API Отчета Simulink также включает классы генератора отчетов, которые возвращают изображение контейнера. Это изображение является верхним уровнем модели.

Каждый объект результата, возвращенный средством поиска, имеет связанный объект генератора отчетов, который сообщает относительно тех результатов. Объект генератора отчетов содержит содержимое и форматирует содержимое, такое как таблицы свойств и графики данных. Вы добавляете, что генератор отчетов возражает против ваших отчетов. Используйте генераторы отчетов MATLAB® Report API, чтобы задать общие элементы отчета. Смотрите то, Что Генератор отчетов? (MATLAB Report Generator) для получения информации.

Все средства поиска и генераторы отчетов имеют эти функции:

  • Поведения по умолчанию и значения

  • Позвольте заменять и настраивать их вывод

Все средства поиска имеют 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.pdftx
Для подробного примера редактирования шаблона смотрите раздел "Customize a Report API Template" того, Что такое Генератор отчетов? (MATLAB Report Generator)

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

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

Средства поиска и классы результатов

Сообщите о классе APIОписаниеВозвращается
slreportgen.finder.AnnotationFinderНаходит аннотации Диаграммы SimulinkСредство поиска аннотации. Его связанный метод find возвращает список объектов DiagramElementResult.
slreportgen.finder.BlockFinderНаходит блоки в Диаграмме SimulinkБлокируйте средство поиска. Его связанный метод find возвращает список объектов BlockResult.
slreportgen.finder.BlockResultСоздайте объект результата средства поиска для блокаОбъект результата для блока
slreportgen.finder.ChartDiagramFinderНаходит диаграммы Stateflow в моделиСредство поиска схемы диаграммы Stateflow. Его связанный метод find возвращает список объектов DiagramResult.
slreportgen.finder.DiagramElementFinderНаходит элементы Диаграммы Simulink или диаграммы StateflowСредство поиска элемента диаграммы. Его связанный метод find возвращает список объектов DiagramElementResult.
slreportgen.finder.DiagramElementResultКонтейнер для элемента диаграммы найден DiagramElementFinderОбъект результата для элемента диаграммы
slreportgen.finder.DiagramFinderНаходит блок-схемы и графики в модели SimulinkСхематически изобразите средство поиска, Его связанный метод find возвращает список объектов DiagramResult.
slreportgen.finder.DiagramResultКонтейнер для элемента диаграммы найден DiagramElementFinderОбъект результата для схемы
slreportgen.finder.StateFinderНаходит состояния в диаграмме Stateflow Средство поиска состояния. Его связанный метод find возвращает список объектов DiagramElementResult.
slreportgen.finder.StateflowDiagramElementFinderНаходит элементы диаграммы StateflowСредство поиска схемы диаграммы Stateflow. Его связанный метод find возвращает список объектов DiagramElementResult.
slreportgen.finder.SystemDiagramFinderНаходит системные блок-схемы в модели SimulinkСредство поиска диаграммы Simulink. Его связанный метод find возвращает список объектов DiagramResult.

Классы генераторов отчетов

Сообщите о классе APIОписаниеВозвращается
slreportgen.report.DiagramСоздает снимок состояния Диаграммы Simulink или диаграммы StateflowВозвращает изображение и заголовок Диаграммы Simulink или диаграммы Stateflow
slreportgen.report.LookupTableТочки останова отчетов и выходные точки блока интерполяционной таблицы SimulinkВозвращает таблицу, и график Интерполяционной таблицы блокируют выходные значения по сравнению с точками останова и таблицу типов данных
slreportgen.report.MATLABreportgen

Скрипт отчетов используется блоком MATLABreportgen или Stateflow MATLAB reportgen

Возвращает таблицу MATLAB reportgen свойства блока, reportgen сводные данные аргумента ввода и вывода и код MATLAB, используемый блоком.
slreportgen.report.SimulinkObjectPropertiesСоставляет таблицу свойств объекта SimulinkВозвращает таблицу значения свойства заданного объекта Simulink
slreportgen.report.StateflowObjectPropertiesСоставляет таблицу свойств объекта StateflowВозвращает таблицу значения свойства заданного объекта Stateflow

Найдите и сообщите относительно блоков в модели

Этот пример показывает, как найти и сообщить относительно всех блоков Simulink в модели vdp с помощью класса BlockFinder. Получившийся отчет HTML включает информацию по умолчанию и использует форматирование значения по умолчанию для каждого блока.

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

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

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

    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);
         add(sect,result)
         add(ch,sect)
    end
    add (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);
     add(sect,result)
     add(ch,sect);
end
add (rpt,ch);

close(rpt)
close_system(model_name)
rptview(rpt)

Заголовок главы и заголовки раздела и таблицы свойства первых двух блоков получившегося отчета показывают.

Используйте определенные средства поиска и генераторы отчетов для различных типов блока

Создайте генератор отчетов PDF, который находит все блоки в модели sldemo_radar_eml.

Чтобы найти все блоки, используйте BlockFinder. Оператор if показывает, как протестировать на MATLAB reportgen блоки. Используйте генератор отчетов MATLABreportgen, чтобы сообщить о MATLAB reportgen детали блока. Оператор else показывает, как блоки кроме MATLAB reportgen блоки используют результаты метода find BlockFinder.

blkfinder = BlockFinder(model_name);
blks = find(blkfinder);

if slreportgen.utils.isMATLABreportgen(blks(i).Object)
     rptr = MATLABreportgen(blks(i).Object);
     sec = Section(blks(i).Name);
     add(sec,rptr)
     add(ch,sec)

else
     sec = Section(blks(i).Name);
     add(sec,blks(i)) 
     add(ch,sec)
blkfinder = BlockFinder(model_name);
blks = find(blkfinder);

Полная программа

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

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.isMATLABreportgen(blks(i).Object)
      rptr = MATLABreportgen(blks(i).Object);
      sec = Section(blks(i).Name);
      add(sec,rptr)
      add(ch,sec)
   else
      sec = Section(blks(i).Name);
      add(sec,blks(i)) 
      add(ch,sec)
   end
end
add(rpt,ch)

close(rpt)
close_system(model_name)
rptview(rpt)

Пример информации, сообщенной для MATLAB reportgen блок генератором отчетов MATLABreportgen,

Пример информации, сообщенной методом find BlockFinder,

Найдите и сообщите относительно элементов Stateflow

Этот пример описывает, как найти и сообщить относительно состояний Stateflow, переходов и соединений. Это сообщает относительно графика control_logic модели sldemo_fuelsys.

Этот фрагмент кода использует StateFinder и его метод find, чтобы найти и сообщить относительно состояний в графике. Это циклично выполняется через массив найденных состояний и добавляет каждого в главу.

stFinder = StateFinder(subsys);
states = find(stFinder);
for state = states
   add(chapter,state)
end
add(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'; 
   add(chapter,rptr)
end
add(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');
add(rpt,tp)
add(rpt,TableOfContents);
   
chapter = Chapter('Title','States');
stFinder = StateFinder(subsys);
states = find(stFinder);
for state = states
   add(chapter,state)
end
add(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'; 
   add(chapter,rptr)
end
add(rpt,chapter)

close(rpt)
close_system(model_name)
rptview(rpt)

Смотрите также

Похожие темы