Simulink® Report Generator™ Report API включает набор объектов, разработанных, чтобы найти и отформатировать модель и данные моделирования. Можно использовать эти объекты с MATLAB® Report API, и ДОМ АПИ возражает, чтобы создать программы MATLAB, которые генерируют отчеты относительно моделей Simulink и симуляций. Следующий пример иллюстрирует использование Отчета Simulink АПИ и Отчет MATLAB АПИ, чтобы создать программу MATLAB. Эта программа генерирует отчет относительно содержимого модели Simulink. Отчет содержит эти разделы:
Титульный лист
Оглавление
Глава Корневой системы — Содержит корневую блок-схему и свойства каждого блока в корневой схеме
Глава подсистем - Содержит схему и свойства блока каждой подсистемы модели
Глава Графиков Stateflow® - Содержит графики и свойства объекта диаграммы каждого графика в модели
Импортируйте API-функции.
Чтобы избавить от необходимости использовать полностью определенные имена Отчета, Средство поиска и API-функции DOM, используют эти операторы. Например, вместо того, чтобы использовать slreportgen.finder.BlockFinder
, можно использовать BlockFinder
.
import slreportgen.report.* import slreportgen.finder.* import mlreportgen.report.*
Загрузите модель sf_car
.
model = load_system('sf_car');
Создайте объект отчета.
Используйте Simulink, сообщает конструктор (slreportgen.report.Report
) создавать объект отчета, чтобы содержать содержимое отчета. Необходимо полностью определить имя конструктора, чтобы различать, оно из MATLAB сообщает о конструкторе (mlreportgen.report.Report
). Определите имя отчета к sdd_
, сопровождаемому значением свойства Name
модели.
rpt = slreportgen.report.Report(['sdd_'... get_param('sf_car','Name')],'pdf');
Чтобы настроить свойства, которые применяются к целому отчету, смотрите slreportgen.report.Report
.
Добавьте титульный лист.
Используйте конструктора генератора отчетов титульного листа (mlreportgen.report.TitlePage
), чтобы создать генератор отчетов титульного листа. Этот генератор отчетов генерирует титульный лист на основе своих свойств. Установите Title
, Subtitle
и свойства Author
к символьным массивам, которые задают заголовок отчета, подзаголовок и автора, соответственно.
Используйте конструктора генератора отчетов схемы (slreportgen.report.Diagram
), чтобы создать генератор отчетов схемы для этой модели. Этот генератор отчетов генерирует изображение блок-схемы модели. Чтобы включать это изображение на титульном листе отчета, присвойте генератор отчетов схемы свойству Image
генератора отчетов титульного листа. Затем добавьте титульный лист в отчет.
tp = TitlePage; tp.Title = upper(get_param(model,'Name')); tp.Subtitle = 'System Design Description'; tp.Author = 'MathWorks'; tp.Image = Diagram(model); add(rpt,tp);
Чтобы настроить дополнительные свойства титульного листа, смотрите mlreportgen.report.TitlePage
.
Добавьте оглавление.
Используйте конструктора генератора отчетов оглавления (TOC), чтобы создать генератор отчетов TOC. Этот генератор отчетов генерирует TOC для отчета. Добавьте генератор отчетов TOC в отчет.
toc = TableOfContents; add(rpt,toc);
Чтобы настроить оглавление, смотрите mlreportgen.report.TableOfContents
.
Добавьте главу для корневой системы.
Используйте конструктора главы (mlreportgen.report.Chapter
), чтобы создать генератор отчетов главы. Этот генератор отчетов генерирует главу на основе своих свойств Title
и Content
. Генератор отчетов автоматически нумерует заголовок главы. Генератор отчетов главы также генерирует верхние колонтитулы страницы главы и нижние колонтитулы и ее номера страниц.
Добавьте генератор отчетов диаграммы модели в главу. Этот генератор отчетов возвращает изображение блок-схемы модели, которую вы добавляете в главу.
ch = Chapter("Title","RootSystem"); add(ch,Diagram(model));
Для получения информации о настройке глав смотрите mlreportgen.report.Chapter
.
Добавьте разделы главы для каждого блока корневой системы.
Используйте конструктора средства поиска блока (slreportgen.report.BlockFinder
), чтобы создать средство поиска блока для корневой схемы. Затем используйте функцию find
средства поиска блока. Функция find
возвращает массив объектов результата блока (slreportgen.report.BlockResult
), каждый из которых содержит блок.
Цикл через объекты результата блока. Для каждого результата создайте генератор отчетов раздела (mlreportgen.report.Section
). Этот генератор отчетов генерирует пронумерованный раздел отчета на основе своих свойств Title
и Content
. Установите свойство раздела Title
на имя блока, относительно которого это сообщает.
Добавьте текущий результат блока в генератор отчетов раздела. Добавление наборов результатов свойство Content
генератора отчетов раздела к генератору отчетов simulink.report.SimulinkObjectProperties
. Этот генератор отчетов SimulinkObjectProperties
генерирует таблицу свойств текущего блока, который затем добавляется к разделу. Добавьте каждый подраздел в родительскую главу. Затем добавьте главу в отчет.
blkFinder = BlockFinder(model); blocks = find(blkFinder); for block = blocks section = Section("Title", ... strrep(block.Name, newline,' ')); add(section,block); add(ch,section); end add(rpt,ch);
Для получения информации находя блоки и как настроить разделы, смотрите slreportgen.finder.BlockFinder
и mlreportgen.report.Section
, соответственно.
Добавьте главу для подсистем.
Создайте главу для подсистем модели и блоков в каждой подсистеме.
ch = Chapter("Title","Subsystems");
Найдите схемы подсистемы в модели.
Найдите все схемы подсистемы в модели. Средство поиска возвращает массив объектов DiagramResult
, каждый из которых содержит генератор отчетов Diagram
, который создает снимок состояния схемы подсистемы.
sysdiagFinder = SystemDiagramFinder(model); sysdiagFinder.IncludeRoot = false;
Для получения дополнительной информации смотрите slreportgen.finder.SystemDiagramFinder
и slreportgen.finder.DiagramResult
Добавьте результаты в разделы главы.
Используя циклы, создайте раздел главы для каждой подсистемы. Найдите блоки и элементы блока в каждой подсистеме. Добавьте, что таблица элементов блока к каждой главе разделяет и добавляет каждый раздел в главу. Затем добавьте главу в отчет.
while hasNext(sysdiagFinder) system = next(sysdiagFinder); section1 = Section("Title",system.Name); add(section1,system); blkFinder1 = BlockFinder(system); elems = find(blkFinder1); for elem = elems section2 = Section("Title",... strrep(elem.Name,newline,' ')); add(section2,elem); add(section1,section2); end add(ch,section1); end add(rpt,ch);
Средства поиска Simulink могут действовать или в массиве или в режиме итератора. В режиме массивов используйте средство поиска функция find
, чтобы возвратить результаты поиска как массив результатов. В режиме итератора используйте средство поиска hasNext
и функции next
, чтобы возвратить результаты поиска один за другим. Используйте режим итератора при поиске схем в моделях, которые имеют много моделей - ссылок. Режим Iterator закрывает модель после компиляции и поиска его, тогда как находят, что режим сохраняет все модели, которые это ищет открытый. Наличие многих открытых моделей может потенциально использовать всю системную память и замедлить генерацию отчета. Несмотря на то, что модель, используемая в этом примере, не содержит модели - ссылки, пример использует режим итератора, чтобы проиллюстрировать его синтаксис.
Добавьте главу для диаграмм Stateflow и объектов.
Найдите все диаграммы Stateflow в модели. Создайте главу. Используя циклы, добавьте подразделы для каждого графика. Найдите все элементы в каждом графике и добавьте их в подразделы. Затем добавьте раздел в главу и главу к отчету.
ch = Chapter("Title", "Stateflow Charts"); chdiagFinder = ChartDiagramFinder(model); while hasNext(chdiagFinder) chart = next(chdiagFinder); section = Section("Title",chart.Name); add(section,chart); objFinder = StateflowDiagramElementFinder(chart); sfObjects = find(objFinder); for sfObj = sfObjects title = sfObj.Name; if isempty(title) title = sfObj.Type; end objSection = Section("Title",title); add(objSection,sfObj); add(section,objSection); end add(ch,section); end add(rpt,ch);
Для получения информации об элементе диаграммы и средствах поиска элемента диаграммы, смотрите slreportgen.finder.ChartDiagramFinder
и slreportgen.finder.StateflowDiagramElementFinder
.
Закройте отчет, запустите отчет и закройте модель.
close(rpt); rptview(rpt); close_system(model);
Полный код:
import slreportgen.report.* import slreportgen.finder.* import mlreportgen.report.* model = load_system('sf_car'); rpt = slreportgen.report.Report(['sdd_'... get_param('sf_car','Name')],'pdf'); tp = TitlePage; tp.Title = upper(get_param(model,'Name')); tp.Subtitle = 'System Design Description'; tp.Author = 'MathWorks'; tp.Image = Diagram(model); add(rpt,tp); toc = TableOfContents; add(rpt,toc); ch = Chapter("Title","RootSystem"); add(ch,Diagram(model)); blkFinder = BlockFinder(model); blocks = find(blkFinder); for block = blocks section = Section("Title", ... strrep(block.Name, newline, ' ')); add(section,block); add(ch,section); end add(rpt,ch); ch = Chapter("Title","Subsystems"); sysdiagFinder = SystemDiagramFinder(model); sysdiagFinder.IncludeRoot = false; while hasNext(sysdiagFinder) system = next(sysdiagFinder); section1 = Section("Title",system.Name); add(section1,system); blkFinder1 = BlockFinder(system); elems = find(blkFinder1); for elem = elems section2 = Section("Title",... strrep(elem.Name, newline, ' ')); add(section2,elem); add(section1,section2); end add(ch,section1); end add(rpt,ch); ch = Chapter("Title", "Stateflow Charts"); chdiagFinder = ChartDiagramFinder(model); while hasNext(chdiagFinder) chart = next(chdiagFinder); section = Section("Title",chart.Name); add(section,chart); objFinder = StateflowDiagramElementFinder(chart); sfObjects = find(objFinder); for sfObj = sfObjects title = sfObj.Name; if isempty(title) title = sfObj.Type; end objSection = Section("Title",title); add(objSection,sfObj); add(section,objSection); end add(ch,section); end add(rpt,ch); close(rpt); rptview(rpt); close_system(model);