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

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

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

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

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

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

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

Все средства поиска имеют findhasnext, и 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.
slreportgen.finder.BlockFinderНаходит блоки в Диаграмме Simulink.
slreportgen.finder.BlockResultСодержит блок, найденный BlockFinder объект.
slreportgen.finder.ChartDiagramFinderНаходит диаграммы Stateflow в модели.
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.StateFinderНаходит состояния в диаграмме Stateflow.
slreportgen.finder.StateflowDiagramElementFinderНаходит элементы диаграммы Stateflow.
slreportgen.finder.SystemDiagramFinderНаходит системные блок-схемы в модели Simulink.

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

Сообщите о классе APIОписание
slreportgen.report.BusObjectОтчеты относительно Simulink.Bus объекты используют моделью.
slreportgen.report.DiagramСоздает снимок состояния Диаграммы Simulink или диаграммы Stateflow.
slreportgen.report.DocBlock

Отчеты относительно DocBlock Simulink.

slreportgen.report.LookupTableОтчеты относительно точек останова и выходных точек блока интерполяционной таблицы Simulink.
slreportgen.report.MATLABFunction

Отчеты относительно MATLAB Function блокируйтесь или функция MATLAB Stateflow.

slreportgen.report.ModelVariableОтчеты относительно переменной модели.
slreportgen.report.SimulinkObjectPropertiesСоставляет таблицу свойств объекта Simulink.
slreportgen.report.StateflowObjectPropertiesСоставляет таблицу свойств объекта Stateflow.
slreportgen.report.SystemHierarchyСоздает вложенный список подсистем модели Simulink или подсистемы.
slreportgen.report.TruthTableОтчеты относительно таблицы истинности Simulink блокируются или объект таблицы истинности 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. Создайте контейнерный объект, чтобы содержать отчет и открыть отчет. В этом случае выходной отчет сохранен в заархивированном vdp_model.htmx Отчет HTML. Можно использовать любое выходное имя, которое вы хотите. Если при запуске генератор отчетов несколько раз с помощью того же имени выходного файла, выходной файл перезаписывается. Чтобы использовать средства поиска 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 Function. Используйте MATLABFunction генератор отчетов, чтобы сообщить о деталях блока MATLAB Function. 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);
     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.*
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);
      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 Function MATLABFunction генератор отчетов

О примере информации сообщает 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)

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

Похожие темы