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);