的万博1manbetx®报告生成器™报表API包括一组用于查找和格式化模型和仿真数据的对象。你可以用MATLAB来使用这些对象®报表API和DOM API对象用于创建MATLAB程序,这些程序可在Simulink模型和仿真上生成报表。万博1manbetx下面的示例说明了如何使用Simulink Report API和MATLAB Repor万博1manbetxt API来创建MATLAB程序。这个程序生成一个关于Simulink模型内容的报告。万博1manbetx该报告载有以下几节:
标题页
目录
根系统章节——包含根框图和根框图中每个块的属性
子系统章节——包含模型中每个子系统的图表和块属性
Stateflow®图表章节——包含模型中每个图表的图表和图表对象属性
导入API函数。
为了消除使用Report、Finder和DOM API函数的完全限定名的需要,可以使用这些语句。例如,而不是使用slreportgen.finder.BlockFinder
,你可以使用BlockFinder
.
进口slreportgen.report。*进口slreportgen.finder。*进口mlreportgen.report。*
加载slrgex_sf_car
模型。
Model = load_system(“slrgex_sf_car”);
创建报表对象。
使用Simu万博1manbetxlink报表构造函数(slreportgen.report.Report
),以创建一个报表对象以保存报表的内容。必须完全限定构造函数的名称,以将其与MATLAB报表构造函数(mlreportgen.report.Report
).设置报表的名称为sdd_
的值的名字
模型的属性。
rpt = slreportgen.report.Report([“sdd_”...get_param (“slrgex_sf_car”,“名字”)),“pdf”);
要自定义应用于整个报表的属性,请参见slreportgen.report.Report
.
添加一个标题页。
使用标题页报告器构造函数(mlreportgen.report.TitlePage
)以创建标题页报告器。该报告基于标题页的属性生成标题页。设置标题
,副标题
,作者
属性设置为分别指定报表标题、子标题和作者的字符数组。
使用图表报告构造函数(slreportgen.report.Diagram
)为这个模型创建一个图表报告器。该报告生成模型框图的图像。控件的图表报告器,可将此图像包含在报表标题页上图像
属性的标题页报表程序。然后,将标题页添加到报告中。
tp = TitlePage;tp。Title = upper(get_param(model)“名字”));tp。字幕=“系统设计说明”;tp。作者=“MathWorks”;tp。图像=图表(模型);追加(rpt, tp);
要自定义其他标题页属性,请参见mlreportgen.report.TitlePage
.
添加一个目录。
使用目录(TOC)报告构造函数创建TOC报告。该报告为报告生成TOC。将TOC报告器添加到报表中。
toc = TableOfContents;追加(rpt, toc);
要自定义目录,请参见mlreportgen.report.TableOfContents
.
为根系统添加一个章节。
使用章节构造函数(mlreportgen.report.Chapter
)来创建一个章节报告器。该报告基于它生成一个章节标题
而且内容
属性。报告人自动给章节标题编号。章节报告器还生成章节页眉和页脚及其页码。
向章节添加一个模型图报告器。该报告程序返回您添加到章节的模型框图的图像。
ch =章节(“标题”,“RootSystem”);追加(ch,图(模型));
有关自定义章节的信息,请参见mlreportgen.report.Chapter
.
为每个根系统块添加章节章节。
使用块查找器构造函数(slreportgen.report.BlockFinder
)来为根图创建一个块查找器。然后,使用找到
块查找器的功能。的找到
函数返回块结果对象数组(slreportgen.report.BlockResult
),每一个都包含一个区块。
循环遍历块结果对象。对于每个结果,构造一个区段报告器(mlreportgen.report.Section
).该报告基于其生成一个编号的报告节标题
而且内容
属性。设置section标题
属性设置为它所报告的块的名称。
将当前块结果添加到区段报告器。添加结果集部分报告器内容
属性。万博1manbetxsimulink.report.SimulinkObjectProperties
记者。这万博1manbetxSimulinkObjectProperties
报告器生成当前块的属性表,然后将其添加到节中。将每个小节添加到父章节。然后将该章节添加到报告中。
blkFinder = BlockFinder(模型);block = find(blkFinder);为block = blocks section = section (“标题”,...strrep(块。的名字,newline,' '));追加(部分,块);追加(ch,部分);结束追加(rpt, ch);
有关查找块的信息以及如何自定义节,请参见slreportgen.finder.BlockFinder
而且mlreportgen.report.Section
,分别。
为子系统添加一章。
为模型的子系统和每个子系统中的块创建一个章节。
ch =章节(“标题”,“子系统”);
在模型中找到子系统图。
找到模型中的所有子系统图。的数组DiagramResult
对象,每个对象都包含一个图
创建子系统图快照的报告器。
sysdiagFinder = SystemDiagramFinder(model);sysdiagFinder。incleroot = false;
有关更多信息,请参见slreportgen.finder.SystemDiagramFinder
而且slreportgen.finder.DiagramResult
在章节中添加结果。
使用循环,为每个子系统创建章节部分。找到每个子系统中的块和块元素。向每个章节小节添加一个块元素表,并将每个小节添加到章节中。然后,将该章节添加到报告中。
而hasNext(sysdiagFinder) system = next(sysdiagFinder);section1 = Section(“标题”, system.Name);追加(section1、系统);blkFinder1 = BlockFinder(系统);elems = find(blkFinder1);为elem = elems section2 = Section(“标题”,...strrep (elem。的名字,newline,' '));追加(section2, elem);追加(section1 section2);结束追加(ch, section1);结束追加(rpt, ch);
请注意
万博1manbetxSimulink查找器可以在数组或迭代器模式下操作。在数组模式下,使用查找器找到
函数以结果数组的形式返回搜索结果。在迭代器模式下,使用查找器hasNext
而且下一个
函数逐一返回搜索结果。在有许多模型引用的模型中搜索图时,使用迭代器模式。迭代器模式在编译和搜索模型后关闭模型,而查找模式则让它搜索的所有模型保持打开状态。拥有许多开放模型可能会潜在地消耗所有系统内存并减慢报告生成速度。尽管本例中使用的模型不包含模型引用,但该示例使用迭代器模式来说明其语法。
为状态流程图和对象添加一章。
找到模型中的所有状态流程图。创建一个章节。使用循环,为每个图表添加子部分。找到每个图表中的所有元素,并将它们添加到子部分中。然后,将该章节添加到章节中,并将该章节添加到报告中。
ch =章节(“标题”,“Stateflow图表”);chdiagFinder = ChartDiagramFinder(模型);而hasNext(chdiagFinder) chart = next(chdiagFinder);section = section (“标题”, chart.Name);追加(部分,图表);objFinder = StateflowDiagramElementFinder(图表);sfObjects = find(objFinder);为sfObj = sfObjects title = sfObj. name;如果isempty(title) title = sfObj.Type;结束objSection = Section(“标题”、标题);追加(objSection sfObj);追加(部分,objSection);结束追加(ch,部分);结束追加(rpt, ch);
有关图表和图表元素查找器的信息,请参见slreportgen.finder.ChartDiagramFinder
而且slreportgen.finder.StateflowDiagramElementFinder
.
关闭报表,运行报表,并关闭模型。
关闭(rpt);rptview (rpt);close_system(模型);
完整的代码是:
进口slreportgen.report。*导入slreportgen.finder。导入mlreportgen.report。* model = load_system('slrgex_sf_car');rpt = slreportgen.report.Report(['sdd_'…get_param(“slrgex_sf_car”、“名称”)],pdf);tp = TitlePage;tp。Title = upper(get_param(model,'Name'));tp。副标题=“系统设计说明”; tp.Author = 'MathWorks'; tp.Image = Diagram(model); append(rpt,tp); toc = TableOfContents; append(rpt,toc); ch = Chapter("Title","RootSystem"); append(ch,Diagram(model)); blkFinder = BlockFinder(model); blocks = find(blkFinder); for block = blocks section = Section("Title", ... strrep(block.Name, newline, ' ')); append(section,block); append(ch,section); end append(rpt,ch); ch = Chapter("Title","Subsystems"); sysdiagFinder = SystemDiagramFinder(model); sysdiagFinder.IncludeRoot = false; while hasNext(sysdiagFinder) system = next(sysdiagFinder); section1 = Section("Title",system.Name); append(section1,system); blkFinder1 = BlockFinder(system); elems = find(blkFinder1); for elem = elems section2 = Section("Title",... strrep(elem.Name, newline, ' ')); append(section2,elem); append(section1,section2); end append(ch,section1); end append(rpt,ch); ch = Chapter("Title", "Stateflow Charts"); chdiagFinder = ChartDiagramFinder(model); while hasNext(chdiagFinder) chart = next(chdiagFinder); section = Section("Title",chart.Name); append(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); append(objSection,sfObj); append(section,objSection); end append(ch,section); end append(rpt,ch); close(rpt); rptview(rpt); close_system(model);