主要内容

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

使用报告资源管理器创建 Simulink 报告

此示例展示了如何使用“报告资源管理器”设计报告设置文件并生成以下报告:

  • 打开Simulink ®模型vdp,该模型对范德波尔方程进行建模。

  • 将 Mu 模块的 Gain 参数设置为五个不同的值。

  • 对参数 Gain 的每个值进行模型仿真。

  • 报告结果在指定范围内的报告。

创建报告设置文件

要设置报告,您需要创建一个设置文件,并添加 组件,这些组件是描述报告内容的 MATLAB®对象。例如,此示例中的完成报告使用组件创建了标题页、章节、文本和 vdp 模型快照。

Sample page of a report that contains a title page component, model loop chapter component, paragraph component, and system snapshot component.

提示:要打开此示例的已完成报告设置文件,在 MATLAB 命令行窗口中,输入:

setedit simulink-dynamic.rpt

要创建并配置报告设置文件:

1.打开报告管理器。从 MATLAB 或 Simulink 工具条中的 App 选项卡的仿真图形和报告部分,点击报告生成器

2.选择文件 > 新建以创建报告设置文件。

3.在“报告资源管理器”的右侧窗格中,为报告设置以下属性:

  • 要将报告保存到当前工作文件夹中,请将 目录 设置为 Present working directory

  • 要以 HTML 格式生成报告输出,请将文件格式设置为 HTML (from template)

  • 报告描述框中,输入以下文本:

Simulink Dynamic Report

This report tests the model vdp by setting a block 
parameter several times, simulating the model, and 
collecting the results. At the end of the report, a 
table displays the simulation results that fall in a 
specified range.

In the first "Eval" component in the report setup file, 
you can modify:
* the model
* the block
* the parameter
* the parameter values to test
* the expected range of simulation results

4.要保存报告,请选择文件 > 另存为,然后为报告设置文件命名 simulink_dynamic.rpt。在左侧窗格中,新文件名出现在 Report Generator 下。

Outline in left pane displaying the new file name simulink_dynamic.rpt.

指定报告变量和打开模型

要指定报告中出现的模型、模块和模块参数,请使用 Evaluate MATLAB Expression 组件,该组件会在 MATLAB 工作区中创建这些变量并打开模型:

  • expModel 指定模型的名称。

  • expBlock 指定模块的名称。

  • expParam 指定模块参数的名称。

  • expValue 指定用于实验的参数值。

  • testMintestMax 指定仿真输出信号的期望值范围。

要将组件添加到设置文件中:

1.在“报告资源管理器”的左侧窗格中,选择报告设置文件。

2.在中间窗格的 MATLAB 部分,选择 评估 MATLAB 表达式

3.在右侧窗格中,点击将组件添加到当前报告。左侧窗格使用缩写 Eval 显示 simulink_dynamic 报告下的新组件。

Outline in left pane displays the Evaluate MATLAB Expression component underneath the file name simulink_dynamic.rpt.

4.在右侧窗格中,为 Eval 组件指定以下属性:

  • 要从报告中排除 MATLAB 代码详细信息和输出,请清除在报告中插入 MATLAB 表达式在报告中显示命令行窗口输出复选框。

  • 要定义报告变量并打开模型,在在基础工作区中评估的表达式框中,输入以下代码 MATLAB:

% The name of the model
expModel="vdp";

% The name of the block
expBlock="vdp/Mu";

% The name of the block parameter
% to change
expParam="Gain";

% The parameter values to use
% during experimentation.
expValue=[-1 0 .5 1 2];

% expValue can be either a vector
% or a cell array

testMin=2;
testMax=3;

%---- do not change code below line ---

try
   open_system(expModel);
end

expOkValues=cell(0,2);
  • 如果上一步的命令执行失败,则显示错误。在如果出现错误,则评估此表达式框中,输入以下代码:

disp("Error during eval:"+evalException.message)

5.要测试您的 MATLAB 命令,请点击 立即评估

创建标题页

要创建报告的标题页,请使用 Title Page 组件:

1.在左侧窗格中,选择 Eval 组件。

2.在中间窗格的格式部分,选择标题页组件。然后,在右侧窗格中,点击将组件添加到当前报告

在左侧窗格中,图标 Icon for component that cannot have child components. 表示 Eval 组件不能有子组件,因此 Title Page 组件是 Eval 组件的同级组件。

Outline in left pane with Title Page selected.

3.在右侧窗格的选项卡中,为标题页组件指定以下属性:

  • 标题设置为 Dynamic Simulink Report

  • 子标题设置为 Document Changes in Output of van der Pol Equation

  • 选项下,选择 Custom author。然后,在右侧的框中输入您的姓名。

  • 清除包括报告创建日期复选框。

验证模型是否已打开

要检查 Eval 组件中的 open_system 命令是否成功打开了模型,请添加 Logical IfLogical ThenLogical Else 组件。如果模型无法打开,请使用 Chapter/SubsectionParagraph Text 组件在报告中显示错误消息:

1.在左侧窗格中,选择 标题页 组件。

2.在中间窗格的逻辑和流控制部分,选择逻辑 If 组件。然后,在右侧窗格中,点击将组件添加到当前报告。左窗格显示 Eval标题页if 组件作为彼此的同级组件。

Outline in left pane with if component selected.

3.在右侧窗格中,将 测试表达式 设置为

strcmp(bdroot(gcs),expModel)

strcmp 函数比较打开的 Simulink 模型的名称和 expModel 的值,以测试模型是否成功打开。

4.在中间窗格的逻辑和流控制部分,添加一个逻辑 Then 组件。

5.在左侧窗格中,再次选择 if 组件。然后,在中间窗格的逻辑和流控制部分,添加一个逻辑 Else 组件。

在左侧窗格中,图标 Icon for component that can have child components 表示 if 组件可以有子组件,因此 elsethen 组件是 if 组件的子组件,else 组件出现在 then 组件上方。

Outline in left pane with else and then child components displayed beneath if component.

6.在工具栏上,使用“向下移动”按钮 Button with a down arrow icon.else 组件移动到 then 组件下方。

Outline in left pane with else component displayed beneath then component.

7.在中间窗格的格式部分,添加一个章节/小节组件。

8.在右侧窗格中,对于 标题,选择 Custom。然后,在右侧的框中输入 Load Model Failed

9.在中间窗格的格式部分,添加一个段落组件和一个文本组件。

10.在左侧窗格中,选择 文本 组件。然后,在右侧窗格中,指定以下属性:

  • 报告中包含的文本框中,输入:

Error: Unable to open model %<expModel>.
  • 样式中,选择斜体

分隔符 %<> 评估 MATLAB 代码并将结果插入报告中。在这种情况下,代码返回工作区变量 expModel 的值,即模型的名称。

左侧窗格显示 Chapter 组件作为 else 组件的子组件,Paragraph 组件作为 Chapter 组件的子组件,以及 Text 组件作为 Paragraph 组件的子组件。

Outline in left pane displaying Chapter, Paragraph, and Text components below else component.

插入模型图像

要将模型图像插入报告,请添加一个包含 System Snapshot 组件的 Model Loop 组件。然后添加一个 段落 组件来解释报告的目的:

1.在左侧窗格中,选择 然后 组件。

2.在中间窗格的 Simulink 部分,添加一个 模型循环 组件。然后,在右侧窗格中,指定以下属性:

  • 模型选项下,选中活动复选框。

  • 遍历模型设置为 Selected system(s) only

  • 启动系统设为 $top

  • 节选项下,选中为循环中的每个对象创建节在节标题中显示对象类型复选框,为每个模型创建一个章节或节,并在标题名称中包括对象类型。

  • 清除为循环中的每个对象创建链接锚点复选框。

3.在中间窗格的 Simulink 部分,添加一个 系统快照 组件。

4.在左侧窗格中,选择 模型循环章节 组件。然后,在中间窗格的格式部分中,添加一个段落组件。在左侧窗格中,段落组件出现在模型循环章节组件下方、系统快照组件上方。

Outline in left pane displaying Paragraph component below Model Loop Chapter component and above System Snapshot component.

5.在右侧窗格中,为 Paragraph 组件指定以下属性:

  • 段落文本中输入:

This report demonstrates how to use Simulink Report Generator to experiment 
with Simulink systems and document the results. Generating this report loads 
the model %<expModel> and tests it in %<length(expValue)> simulations. Each 
iteration of the test sets the %<expParam> parameter for the %<expBlock> 
block to a value in the array %<expValue>, simulates the model, and includes 
a snapshot of the Scope block in the report.
  • 样式下,取消勾选保留空白区域复选框。

为每次迭代创建一个部分

要多次更改 Mu 模块的 Gain 参数,请使用 For Loop 组件创建一个循环:

1.在左侧窗格中,选择 系统快照 组件。

2.在中间窗格的逻辑和流控制部分,添加一个 For 循环组件。然后,在右侧窗格中,指定以下属性:

  • End 设置为 length(expValue)。此表达式计算要测试的 Gain 参数值的数量。

  • 变量名称设为 expIteration。该变量用作循环索引。

3.在中间窗格的 MATLAB 部分,添加一个 评估 MATLAB 表达式。然后,在右侧窗格中,指定以下属性:

  • 清除在报告中插入 MATLAB 表达式在报告中显示命令行窗口输出复选框。

  • 在基础工作区中评估的表达式框中,输入此 MATLAB 代码,将下一个参数值保存为变量 Iteration_Value

if iscell(expValue)
   Iteration_Value = expValue{expIteration};
else
   Iteration_Value = num2str(expValue(expIteration));
end
  • 清除在出现错误时计算此表达式复选框。

4.在中间窗格的格式部分,添加一个章节/小节组件。然后,在右侧窗格中,对于 标题,选择 Automatic

5.在中间窗格的 MATLAB 部分,将 插入变量 组件添加到报告中。然后,在右侧窗格中,指定以下属性:

  • 变量名称设置为 Iteration_Value

  • 显示为设置为 Inline text

左侧窗格显示 for 组件作为 ParagraphSystem Snapshot 组件的同级组件,EvalSection 1 组件作为 for 组件的子组件,以及 Variable 组件作为 Section 1 组件的子组件。

Outline in left pane showing the for, Eval, Section, and Variable components below the System Snapshot component.

设置模块参数值

对于每次迭代,使用计算 MATLAB 表达式组件设置增益参数的值:

1.在左侧窗格中,选择 变量 组件。

2.在中间窗格的 MATLAB 部分,添加一个 评估 MATLAB 表达式。然后,在右侧窗格中,指定以下属性:

  • 清除在报告中插入 MATLAB 表达式在报告中显示命令行窗口输出复选框。

  • 要在基础工作区中计算的表达式框中,输入以下 MATLAB 代码,将 Mu 模块的 Gain 参数的值设为 Iteration_Value

set_param(expBlock,expParam,Iteration_Value);
okSetValue = true;
  • 在出现错误时计算此表达式框中,输入以下代码,如果上一步的命令失败,则将 okSetValue 的值设为 false

okSetValue = false;

3.在中间窗格的逻辑和流控制部分,添加一个逻辑 If 组件,以检查 okSetValue 的值。然后,在右侧窗格中,将 测试表达式 设置为 okSetValue

4.在中间窗格的逻辑和流控制部分,添加一个逻辑 Else 组件。

5.在左侧窗格中,再次选择 if 组件。然后,在中间窗格的逻辑和流控制部分,添加一个逻辑 Then 组件。在左侧窗格中,then 组件出现在 else 组件上方。

6.在左侧窗格中,选择 else 组件。

7.在中间窗格的格式化部分,添加一个段落组件,以在 okSetValuefalse 时在报告中显示错误。然后,在右侧窗格中,指定以下属性:

  • 标题选项下,选择 Custom title。然后,在右侧的框中输入 Error

  • 段落文本中输入:

Unable to set %<expBlock> "%<expParam>" to value %<Iteration_Value>.
  • 样式下,取消勾选保留空白区域复选框。

左窗格显示 Evalif 组件作为 Variable 组件的同级组件,thenelse 组件作为 if 组件的子组件,以及 Paragraph 组件作为 else 组件的子组件。

Outline in left pane showing the Eval, if, then, else, and Paragraph components under the Variable component.

仿真模型和测试信号数据

要使用更新的参数值对模型进行仿真,请添加一个 Model Simulation 组件。然后,为了测试信号数据是否在指定范围内,添加另一个逻辑 If 组件:

1.在左侧窗格中,选择 然后 组件。

2.在中间窗格的 Simulink 部分,添加一个 模型仿真 组件。然后,在右侧窗格中,指定以下属性:

  • 清除使用模型的工作区 I/O 变量名复选框。

  • 时间设置为 dynamicT

  • 状态设置为 dynamicX

  • 输出设置为 dynamicY

3.在中间窗格的 Simulink 模块 部分,添加一个 范围快照 组件,以捕获每个迭代的仿真输出。然后,在右侧窗格中,指定以下属性:

  • 纸张方向设为 Portrait

  • 图像大小设置为 [5 4]

  • 缩放设置为 Use image size

4.在中间窗格的逻辑和流控制部分,添加一个逻辑 If 组件来测试信号数据。然后,在右侧窗格中,将 测试表达式 设置为

max(dynamicX{2}.Values.Data)>testMin & max(dynamicX{2}.Values.Data)<testMax

5.在中间窗格的格式化部分,添加一个段落组件,以报告通过测试的信号数据。然后,在右侧窗格中,指定以下属性:

  • 标题选项下,选择 Custom title。然后,在右侧的框中输入 Success

  • 段落文本中输入:

The conditioned signal has a maximum value
of %<max(dynamicX{2}.Values.Data)>, which lies 
in the desired range between %<testMin> and
%<testMax>.
  • 样式下,取消勾选保留空白区域复选框。

6.在中间窗格的 MATLAB 部分,添加一个 评估 MATLAB 表达式。在左侧窗格中,Eval 组件作为 Paragraph 组件的子组件显示。

7.在工具栏上,使用“向左移动”按钮 Button with a left arrow icon.Eval 组件移动到与 Paragraph 组件同级的位置。

8.在右侧窗格中,为 Eval 组件指定以下属性:

  • 清除在报告中插入 MATLAB 表达式在报告中显示命令行窗口输出复选框。

  • 要在基础工作区中计算的表达式框中,输入以下 MATLAB 代码,将信号值保存在 expOkValues 数组中:

expOkValues = [expOkValues; ...
    {Iteration_Value,max(dynamicX{2}.Values.Data)}];
  • 如果出现错误,请评估此表达式框中,输入以下代码,如果上一步的命令失败,则会显示错误:

disp("Error during eval:"+evalException.message)

左侧窗格显示了 仿真模型范围快照if 组件作为 then 组件的子组件,以及 段落评估 组件作为 if 组件的子组件。

Outline in left pane showing the Simulate model, Scope Snapshot, if, Paragraph, and Eval components under the then component.

创建考后分析部分

要报告通过测试的参数值,请在 Chapter/Subsection 组件内添加一个 Array-Based Table 组件:

1.在左侧窗格中,选择 模型循环章节 组件。

2.在中间窗格的格式部分,添加一个章节/小节组件。新部分出现在章节的开头。

3.在工具栏上,点击“下移”按钮 Button with a down arrow icon. 三次,将第 1 节组件移动到 模型循环章节 组件的末尾。

Outline in left panel showing Section 1 at the end of the Model Loop Chapter Component.

4.在右侧窗格中,对于 标题,选择 Custom。然后,在右侧的框中输入 Post-Test Analysis

5.在中间窗格的格式部分,添加一个段落组件。然后,在右侧窗格的样式下,清除保留空白复选框。

6.在中间窗格的逻辑和流控制部分,添加一个逻辑 If 组件,以检查是否有任何信号值在所需范围内。然后,在右侧窗格中,将 测试表达式 设置为

~isempty(expOkValues)

7.在中间窗格的逻辑和流控制部分,添加一个逻辑 Else 组件。该组件处理没有信号值落在指定范围内的情况。

8.在中间窗格的格式部分,添加一个文本组件。然后,在右侧窗格中,指定以下属性:

  • 报告中包含的文本框中,输入:

None of the selected parameter values produced a maximum signal value 
between %<testMin> and %<testMax>.
  • 样式下,取消勾选保留空白区域复选框。

左窗格显示段落组件作为第 1 节组件的子组件,if 组件作为段落组件的子组件,else 组件作为 if 组件的子组件,文本组件作为 else 组件的子组件。

Outline in left pane showing the Paragraph, if, else, and Text components under the Section 1 component.

9.在左侧窗格中,再次选择 if 组件。然后,在中间窗格的逻辑和流控制部分,向报告添加一个逻辑 Then 组件。在左侧窗格中,then 组件出现在 else 组件上方。

10.在中间窗格的格式部分,添加一个文本组件。然后,在右侧窗格中,指定以下属性:

  • 报告中包含的文本框中,输入:

There were %<size(expOkValues,1)> parameter values that produced 
a maximum signal value between %<testMin> and %<testMax>.
  • 样式下,取消勾选保留空白区域复选框。

11.在中间窗格的 MATLAB 部分,添加一个 Evaluate MATLAB Expression 组件。然后,在右侧窗格中,指定以下属性:

  • 清除在报告中插入 MATLAB 表达式在报告中显示命令行窗口输出复选框。

  • 要在基础工作区中计算的表达式框中,输入以下 MATLAB 代码,该代码将创建一个带有表头 "Mu Value""Signal Maximum" 的数组:

expOkValues = [{"Mu Value","Signal Maximum"}; expOkValues];
  • 如果出现错误,请评估此表达式框中,输入以下代码,如果上一步的命令失败,则会显示错误:

disp("Error during eval:"+evalException.message)

12.在中间窗格的格式部分,添加一个基于数组的表格组件。然后,在右侧窗格中,指定以下属性:

  • 工作区变量名称 设置为 expOkValues

  • 表格标题设置为 Valid Iteration Values

左窗格显示 then 组件作为 if 组件的子组件,以及 TextEvalArray-Based Table 组件作为 then 组件的子组件。

Outline in left pane showing the then, Text, Eval, and Array-Based Table components under the if component.

生成报告

要生成报告,请在工具栏上点击“报告”按钮 Button with a lightning bolt icon.。报告会生成以下内容:

  • 报告资源管理器左侧窗格在执行时突出显示报告设置文件的每个组件。

  • 消息列表窗口显示报告生成的进度。要指定“消息列表”窗口显示的详细程度,请使用窗口顶部的下拉列表。

处理完成后,MATLAB Web 浏览器将打开并显示 HTML 文件。

Generated report displaying title, subtitle, author, table of contents, and the beginning of the first chapter.