创建一个金宝app报告生成器报告

金宝app®报告生成器™报告API包含了一系列旨在发现和格式模型和仿真数据对象。您可以使用MATLAB这些对象®报告API和DOM API对象来创建生成Simulink的模型和仿真报告MATLAB程序。金宝app下面的示例说明如何使用Simulink的报告API和MATLAB报告API来创建一个MA金宝appTLAB程序。该程序产生一个Simulink模型的内容的报告。金宝app该报告包含以下部分:

  • 标题页

  • 目录

  • 根系统第 - 包含根图中的根框图和每个块的属性

  • 子系统章 - 包含该模型的各子系统的框图和块属性

  • Stateflow®图表章 - 包含模型中每个图表的图表和图表对象的属性

  1. 导入API函数。

    为了消除需要使用的报告,搜索,和DOM API函数完全合格的名称,使用这些语句。例如,而不是使用slreportgen.finder.BlockFinder, 您可以使用BlockFinder

    进口slreportgen.report。*进口slreportgen.finder。*进口mlreportgen.report。*
  2. 加载sf_car模型。

    模型= load_system('sf_car');
  3. 创建报表对象。

    使用Simu金宝applink报表构造函数(slreportgen.report.Report)来创建一个报告对象来保存报告的内容。您必须完全限定构造函数的名称,以将其与MATLAB报表构造函数(mlreportgen.report.Report)。将报告的名称sdd_随后的值名称模型的属性。

    rpt = slreportgen.report.Report ([“sdd_”get_param('sf_car',“名字”)],“pdf”);

    要自定义适用于整个报告属性,请参阅slreportgen.report.Report

  4. 添加标题页。

    使用标题页报告器构造函数(mlreportgen.report.TitlePage)创建一个标题页记者。记者基于其属性标题页。设置标题,字幕作者属性分别指定报告标题,副标题和作者,字符数组。

    使用关系图报告器构造函数(slreportgen.report.Diagram)来创建此模型的关系图报告程序。此报告程序生成模型的框图图像。若要在报表标题页中包含此图像,请将关系图报告程序分配给图片扉页记者的财产。然后,添加标题页的报告。

    tp = TitlePage;tp.Title =上(get_param(型号,“名字”));tp.Subtitle =“系统设计说明”;tp。作者=“MathWorks公司的;tp。形象=图(模型);add (rpt, tp);

    要定制额外的标题页面属性,看mlreportgen.report.TitlePage

  5. 添加一个目录。

    使用目录(TOC)记者构造的表中创建TOC记者。记者生成报表的TOC。TOC的记者添加到报表。

    toc = TableOfContents;add (rpt, toc);

    要自定义表的内容,请参阅mlreportgen.report.TableOfContents

  6. 为根系统添加一章。

    使用章节构造函数(mlreportgen.report.Chapter)创建一个章节记者。记者根据生成的章节标题内容属性。记者自动给章节标题编上序号。章节报告器还生成章节页眉和页脚及其页码。

    模型图记者加入的章节。记者返回您添加到章模型的框图的图像。

    ch =章(“标题”,“RootSystem”);添加(ch,图(模型));

    有关自定义的章节信息,请参阅mlreportgen.report.Chapter

  7. 为每个根系统块添加章节章节。

    使用块查找构造函数(slreportgen.report.BlockFinder)为根关系图创建块查找程序。然后,使用块查找器的功能。的函数返回块结果对象的数组(slreportgen.report.BlockResult),其中的每一个包含一个块。

    环穿过块结果对象。对于每一个结果,构造一个部分记者(mlreportgen.report.Section)。记者根据生成编号的报告部分的标题内容属性。将部分标题性能上,它报告块的名称。

    将当前块结果添加到节报告程序。将结果集添加到节报告器内容属性添加到金宝appsimulink.report.SimulinkObjectProperties记者。这金宝appSimulinkObjectProperties报告程序生成当前块的属性表,然后将其添加到节中。将每个小节添加到父章。然后将该章节添加到报告中。

    blkFinder = BlockFinder(模型);块=查找(blkFinder);对于块=块部=科(“标题”,strrep(block.Name,换行,' '));添加(部分,块);添加(ch,部分);结束add (rpt, ch);

    有关信息查找块和如何自定义节,请参阅slreportgen.finder.BlockFindermlreportgen.report.Section,分别。

  8. 为子系统添加一章。

    为模型创建的每个子系统的子系统和模块的一章。

    ch =章(“标题”,“子系统”);
  9. 发现在模型子系统图。

    找到模型中的所有子系统图。查找程序返回一个数组DiagramResult对象,每个对象包含一个创建子系统关系图快照的报告程序。

    sysdiagFinder = SystemDiagramFinder(模型);sysdiagFinder.IncludeRoot = FALSE;

    欲了解更多信息,请参阅slreportgen.finder.SystemDiagramFinderslreportgen.finder.DiagramResult

  10. 加入结果章节部分。

    使用循环,为每个子系统的段部分。查找每个子系统的块和块元件。块元素表添加到每个段部分,并且每个部分添加到章节。然后,添加章的报告。

    hasNext(sysdiagFinder)系统=下(sysdiagFinder);SECTION1 =科(“标题”,system.Name);添加(section1、系统);blkFinder1 = BlockFinder(系统);elems的=寻找(blkFinder1);对于elem = elems section2 = Section(“标题”,strrep (elem.Name换行,' '));添加(section2, elem);添加(SECTION1,第2节);结束添加(CH,SECTION1);结束add (rpt, ch);

    请注意

    金宝appSimulink查找器可以在数组或迭代器模式下操作。在阵列模式下,使用finder函数返回的搜索结果作为结果的数组。在迭代器模式,使用取景器hasNext下一个函数逐个返回搜索结果。当在有许多模型引用的模型中搜索图时,使用迭代器模式。迭代器模式在编译和搜索一个模型之后关闭它,而find模式保持它搜索的所有模型都是打开的。拥有许多开放的模型可能会消耗所有的系统内存并降低报告生成速度。虽然本例中使用的模型不包含模型引用,但是本例使用迭代器模式来说明其语法。

  11. 添加章节Stateflow图和对象。

    查找模型中的所有Stateflow图。创建一个章节。使用循环,增加小节为每个图表。找到每个图表中的所有元素,并将它们添加到小节。然后,添加部分章节和章节报告。

    ch =章(“标题”,“Stateflow图”);chdiagFinder = ChartDiagramFinder(模型);hasNext(chdiagFinder)图表=下一个(chdiagFinder);节=科(“标题”,chart.Name);添加(部分,图表);objFinder = StateflowDiagramElementFinder(图);sfObjects =找到(objFinder);对于sfObj = sfObjects标题= sfObj.Name;如果的isEmpty(标题)标题= sfObj.Type;结束objSection =科(“标题”、标题);add (objSection sfObj);添加(部分,objSection);结束添加(ch,部分);结束add (rpt, ch);

    有关图表和图元素发现者信息,请参见slreportgen.finder.ChartDiagramFinderslreportgen.finder.StateflowDiagramElementFinder

  12. 关闭报告,运行报告,并关闭模型。

    关闭(rpt);rptview (rpt);close_system(模型);

完整的代码是:

进口slreportgen.report。*进口slreportgen.finder。*进口mlreportgen.report。* model = load_system('sf_car');rpt = slreportgen.report.Report ([' sdd_ '……get_param (“sf_car”、“名称”)],pdf);tp = TitlePage;tp.Title =上(get_param(型号,“名字”));tp.Subtitle =“系统设计说明”;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);

也可以看看