Main Content

本页采用了机器翻译。点击此处可查看英文原文。

为 Simulink 和 Stateflow 元素创建报告生成器

查找器和报告器减少了编写代码查找和报告 Simulink® 模型元素(例如图和模块)以及 Stateflow® 图和转移等所需的时间和复杂性。Simulink Report Generator™ 报告 API 是 DOM API 之上的一层。其查找器和报告器基于 Simulink 和 Stateflow 查找基类。您可以指定用于查找特定元素的容器,例如子系统中的模块或图中的状态。查找器对象在相应的查找器结果对象数组中返回其结果。

Simulink 报告 API 还包括报告器类,它返回容器的图像。该图像是模型的顶层。

查找器返回的每个结果对象都有一个关联的报告器对象,用于报告这些结果。报告器对象保存内容并格式化内容,例如属性表和数据图。您将报告器对象添加到您的报告中。使用 MATLAB® 报告 API 报告器定义常见的报告元素。请参阅What Are Reporters?了解更多信息。

所有查找器和报告器均具有以下特点:

  • 默认行为和价值观

  • 允许覆盖和自定义其输出

所有查找器都有 findhasNextnext 方法。find 方法在结果对象数组中查找并返回每个找到的指定类型的元素的所有元素。hasNextnext 方法一次查找并返回一个元素,并用于遍历结果列表。hasNext 方法检查容器是否至少具有一个指定类型的元素。如果容器具有一个或多个元素,则 hasNext 方法将其排队,以便 next 方法查找并返回结果对象。

所有报告器都有预定义的模板。每个报告器的模板定义了其格式、布局和内容漏洞。除非您想要自定义报告,否则您不需要更改模板或指定任何格式、布局或孔。您可以通过复制和编辑报告的默认模板或使用新模板来自定义报告。编辑默认模板的副本为您提供了自定义模板所需的起点和结构体。使用新模板可以让您从空白文件开始完全定义您的模板。要更改报告内容的顺序,请重新排序模板中的孔。查找器不使用模板。自定义报告器类的另一种方法是将其子类化。

每种输出类型的默认报告器模板位于模板库中,位于

matlab\toolbox\shared\slreportgen\rpt\rpt\+slreportgen\
    +report\@<reporter>\resources\templates\<output>
例如,PDF 输出的 DiagramReporter 的默认模板路径为
matlab\toolbox\shared\slreportgen\rpt\rpt\+slreportgen\
    +report\@DiagramReporter\resources\templates\pdf\default.pdftx
有关编辑模板的详细示例,请参阅What Are Reporters?的“报告器元素”节

Simulink 报告 API 类

Simulink 报告 API 提供了这些查找器、结果和报告器类。要在报告生成器程序中使用这些类,您必须创建一个 slreportgen.report.Report 类型的容器来保存报告。

查找器和结果类

报告 API 类描述
slreportgen.finder.AnnotationFinder查找 Simulink 模块注释。
slreportgen.finder.BlockFinder在 Simulink 模块图中查找块。
slreportgen.finder.BlockResult包含由 BlockFinder 对象找到的模块。
slreportgen.finder.ChartDiagramFinder在模型中查找 Stateflow 图。
slreportgen.finder.DataDictionaryFinder查找 Simulink 数据字典。
slreportgen.finder.DataDictionaryResult包含由 DataDictionary 对象找到的数据字典。
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.SignalFinder查找模型或模块使用的信号。
slreportgen.finder.SignalResult包含由 SignalFinder 对象发现的信号。
slreportgen.finder.StateFinder在 Stateflow 图中查找状态。
slreportgen.finder.StateflowDiagramElementFinder查找 Stateflow 图的元素。
slreportgen.finder.SystemDiagramFinder在 Simulink 模型中查找系统模块。

报告器类

报告 API 类描述
slreportgen.report.Bus报告由 Simulink 模块选择或创建的总线。
slreportgen.report.BusObject报告模型使用的 Simulink.Bus 对象。
slgreportgen.report.CCaller报告 C Caller 模块。
slreportgen.report.CFunction报告 C Function 模块。
slreportgen.report.DataDictionary报告 Simulink 数据字典。
slreportgen.report.Diagram创建 Simulink 模块或 Stateflow 图的快照。
slreportgen.report.DocBlock

报告 Simulink DocBlock

slreportgen.report.ElementDiagram报告元素图快照和标题。
slreportgen.report.ExecutionOrder报告模型或非虚拟子系统的任务以及每个任务中的模块,按执行顺序排序。
slreportgen.report.LookupTable报告 Simulink 查找表模块的断点和输出点。
slreportgen.report.MATLABFunction

报告 MATLAB Function 模块或 Stateflow MATLAB 函数。

slreportgen.report.ModelConfiguration报告模型的活动配置集。
slreportgen.report.ModelVariable报告模型变量。
slreportgen.report.Notes报告 Simulink 或 Stateflow 图注释。
slreportgen.report.Signal报告信号。
slreportgen.report.SimulinkObjectProperties创建 Simulink 对象的属性表。
slreportgen.report.StateflowObjectProperties创建 Stateflow 对象的属性表。
slreportgen.report.SystemHierarchy创建 Simulink 模型或子系统的子系统的嵌套列表。
slreportgen.report.SystemIO报告 Simulink 系统输入和输出信号。
slreportgen.report.TestSequence

报告 Simulink Test Sequence 模块。

slreportgen.report.TruthTable报告 Simulink 真值表模块或 Stateflow 真值表对象。

查找并报告模型中的模块

此示例显示如何使用 BlockFinder 类查找并报告 slrgex_vdp 模型中的所有 Simulink 模块。生成的 HTML 报告包含默认信息并使用每个模块的默认格式。

导入报告 API 包,这样您就可以使用类名而不包含其包名。例如,您可以使用 BlockFinder 代替 slreportgen.finder.BlockFinder。除了导入 Simulink 报告 API 基类之外,还要导入 MATLAB 报告 API 基类。典型的报告包括标题页、目录、章节和节,您可以将其作为报告器类包含在 MATLAB 报告 API 中。

import slreportgen.finder.*
import slreportgen.report.*
import mlreportgen.report.*

加载 slrgex_vdp 模型。

model_name = 'slrgex_vdp';
load_system(model_name)

创建容器对象来保存报告并打开报告。在这种情况下,输出报告保存在压缩的 slrgex_vdp_model.htmx HTML 报告中。您可以使用任何您想要的输出名称。如果使用相同的输出文件名多次运行报告生成器,则会覆盖输出文件。要在报告生成器程序中使用 Simulink 报告 API 查找器和报告器,您必须使用完全限定名称来创建容器对象。

rpt = slreportgen.report.Report('slrgex_vdp_model','html');
open(rpt)

添加章节并指定其标题。

ch = Chapter('Blocks in slrgex_vdp model');

使用 BlockFinder 类创建一个查找器。在这种情况下,BlockFinder 会找到模型中的所有模块。使用 find 方法查找查找器指定的模块。

finder = BlockFinder(model_name); 
results = find(finder);

循环查找 find 方法的结果并为每个模块创建一个 section,并将模块属性表添加到 section 中。然后,将每个部分添加到章节中。添加所有模块后,将章节添加到报告中。

for result = results
     sect = Section('Title',result.Name);
     append(sect,result)
     append(ch,sect)
end
append(rpt,ch);

关闭报告和模型,然后查看报告。

close(rpt);
close_system(model_name);
rptview(rpt);

对不同的模块类型使用特定的查找器和报告器

创建一个 PDF 报告生成器,查找 slrgex_radar_eml 模型中的所有模块。

要查找所有模块,请使用 BlockFinderif 语句显示如何测试 MATLAB Function 模块。使用 MATLABFunction 报告器报告 MATLAB Function 模块详细信息。else 语句显示了除 MATLAB Function 模块之外的模块如何使用 BlockFinder find 方法结果。

import slreportgen.report.*
import slreportgen.finder.*
import mlreportgen.report.*

model_name = 'slrgex_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 slrgex_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);
      append(sec,rptr)
      append(ch,sec)
   else
      sec = Section(blks(i).Name);
      append(sec,blks(i)) 
      append(ch,sec)
   end
end
append(rpt,ch)

close(rpt)
close_system(model_name)
rptview(rpt)

MATLABFunction 报告器针对 MATLAB Function 模块报告的信息示例如下:

finders_topic_ex2a.png

BlockFinderfind 方法报告的信息示例如下:

finders_topic_ex2b.png

查找并报告 Stateflow 元素

此示例描述了如何查找和报告 Stateflow 状态、转移和结点。它报告了 slrgex_fuelsys_fuel_rate_control 模型的 control_logic 图。

首先,设置报告。

import mlreportgen.report.*
import slreportgen.report.*
import slreportgen.finder.*

model_name = "slrgex_fuelsys_fuel_rate_control";
load_system(model_name);
subsys = "slrgex_fuelsys_fuel_rate_control/control_logic";

rpt = slreportgen.report.Report("output","pdf");
open(rpt)

tp = TitlePage("Title",...
   "Control Logic Chart of slrgex_fuelsys_fuel_rate_control");
append(rpt,tp)
append(rpt,TableOfContents);

接下来,使用 StateFinder 对象及其 find 方法来查找并报告图中的状态。循环遍历找到的状态数组并将每个状态添加到章节中。

chapter = Chapter("Title","States");
stFinder = StateFinder(subsys);
states = find(stFinder);
for state = states
   append(chapter,state)
end
append(rpt,chapter)

finders_topic_ex3a.png

要报告转换移,请使用 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"; 
   append(chapter,rptr)
end
append(rpt,chapter)

finders_topic_ex3b.png

关闭报告和模型,然后查看报告。

close(rpt)
close_system(model_name)
rptview(rpt)

另请参阅

相关主题