使用报告资源管理器创建 Simulink 报告
此示例展示了如何使用“报告资源管理器”设计报告设置文件并生成以下报告:
打开Simulink ®模型
vdp
,该模型对范德波尔方程进行建模。将 Mu 模块的 Gain 参数设置为五个不同的值。
对参数 Gain 的每个值进行模型仿真。
报告结果在指定范围内的报告。
创建报告设置文件
要设置报告,您需要创建一个设置文件,并添加 组件,这些组件是描述报告内容的 MATLAB®对象。例如,此示例中的完成报告使用组件创建了标题页、章节、文本和 vdp
模型快照。
提示:要打开此示例的已完成报告设置文件,在 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
下。
指定报告变量和打开模型
要指定报告中出现的模型、模块和模块参数,请使用 Evaluate MATLAB Expression
组件,该组件会在 MATLAB 工作区中创建这些变量并打开模型:
expModel
指定模型的名称。expBlock
指定模块的名称。expParam
指定模块参数的名称。expValue
指定用于实验的参数值。testMin
和testMax
指定仿真输出信号的期望值范围。
要将组件添加到设置文件中:
1.在“报告资源管理器”的左侧窗格中,选择报告设置文件。
2.在中间窗格的 MATLAB 部分,选择 评估 MATLAB 表达式。
3.在右侧窗格中,点击将组件添加到当前报告。左侧窗格使用缩写 Eval 显示 simulink_dynamic
报告下的新组件。
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.在中间窗格的格式部分,选择标题页组件。然后,在右侧窗格中,点击将组件添加到当前报告。
在左侧窗格中,图标 表示 Eval 组件不能有子组件,因此 Title Page 组件是 Eval 组件的同级组件。
3.在右侧窗格的主选项卡中,为标题页组件指定以下属性:
将标题设置为
Dynamic Simulink Report
。将子标题设置为
Document Changes in Output of van der Pol Equation
。在选项下,选择
Custom author
。然后,在右侧的框中输入您的姓名。清除包括报告创建日期复选框。
验证模型是否已打开
要检查 Eval 组件中的 open_system
命令是否成功打开了模型,请添加 Logical If
、Logical Then
和 Logical Else
组件。如果模型无法打开,请使用 Chapter/Subsection
、Paragraph
和 Text
组件在报告中显示错误消息:
1.在左侧窗格中,选择 标题页 组件。
2.在中间窗格的逻辑和流控制部分,选择逻辑 If 组件。然后,在右侧窗格中,点击将组件添加到当前报告。左窗格显示 Eval、标题页和if 组件作为彼此的同级组件。
3.在右侧窗格中,将 测试表达式 设置为
strcmp(bdroot(gcs),expModel)
strcmp
函数比较打开的 Simulink 模型的名称和 expModel
的值,以测试模型是否成功打开。
4.在中间窗格的逻辑和流控制部分,添加一个逻辑 Then 组件。
5.在左侧窗格中,再次选择 if 组件。然后,在中间窗格的逻辑和流控制部分,添加一个逻辑 Else 组件。
在左侧窗格中,图标 表示 if 组件可以有子组件,因此 else 和 then 组件是 if 组件的子组件,else 组件出现在 then 组件上方。
6.在工具栏上,使用“向下移动”按钮 将 else 组件移动到 then 组件下方。
7.在中间窗格的格式部分,添加一个章节/小节组件。
8.在右侧窗格中,对于 标题,选择 Custom
。然后,在右侧的框中输入 Load Model Failed
。
9.在中间窗格的格式部分,添加一个段落组件和一个文本组件。
10.在左侧窗格中,选择 文本 组件。然后,在右侧窗格中,指定以下属性:
在报告中包含的文本框中,输入:
Error: Unable to open model %<expModel>.
在样式中,选择斜体。
分隔符 %<
和 >
评估 MATLAB 代码并将结果插入报告中。在这种情况下,代码返回工作区变量 expModel
的值,即模型的名称。
左侧窗格显示 Chapter 组件作为 else 组件的子组件,Paragraph 组件作为 Chapter 组件的子组件,以及 Text 组件作为 Paragraph 组件的子组件。
插入模型图像
要将模型图像插入报告,请添加一个包含 System Snapshot
组件的 Model Loop
组件。然后添加一个 段落 组件来解释报告的目的:
1.在左侧窗格中,选择 然后 组件。
2.在中间窗格的 Simulink 部分,添加一个 模型循环 组件。然后,在右侧窗格中,指定以下属性:
在模型选项下,选中活动复选框。
将遍历模型设置为
Selected system(s) only
。将启动系统设为
$top
。在节选项下,选中为循环中的每个对象创建节和在节标题中显示对象类型复选框,为每个模型创建一个章节或节,并在标题名称中包括对象类型。
清除为循环中的每个对象创建链接锚点复选框。
3.在中间窗格的 Simulink 部分,添加一个 系统快照 组件。
4.在左侧窗格中,选择 模型循环章节 组件。然后,在中间窗格的格式部分中,添加一个段落组件。在左侧窗格中,段落组件出现在模型循环章节组件下方、系统快照组件上方。
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 组件作为 Paragraph 和 System Snapshot 组件的同级组件,Eval 和 Section 1 组件作为 for 组件的子组件,以及 Variable 组件作为 Section 1 组件的子组件。
设置模块参数值
对于每次迭代,使用计算 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.在中间窗格的格式化部分,添加一个段落组件,以在 okSetValue
为 false
时在报告中显示错误。然后,在右侧窗格中,指定以下属性:
在标题选项下,选择
Custom title
。然后,在右侧的框中输入Error
。在段落文本中输入:
Unable to set %<expBlock> "%<expParam>" to value %<Iteration_Value>.
在样式下,取消勾选保留空白区域复选框。
左窗格显示 Eval 和 if 组件作为 Variable 组件的同级组件,then 和 else 组件作为 if 组件的子组件,以及 Paragraph 组件作为 else 组件的子组件。
仿真模型和测试信号数据
要使用更新的参数值对模型进行仿真,请添加一个 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.在工具栏上,使用“向左移动”按钮 将 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 组件的子组件。
创建考后分析部分
要报告通过测试的参数值,请在 Chapter/Subsection 组件内添加一个 Array-Based Table
组件:
1.在左侧窗格中,选择 模型循环章节 组件。
2.在中间窗格的格式部分,添加一个章节/小节组件。新部分出现在章节的开头。
3.在工具栏上,点击“下移”按钮 三次,将第 1 节组件移动到 模型循环章节 组件的末尾。
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 组件的子组件。
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 组件的子组件,以及 Text、Eval 和 Array-Based Table 组件作为 then 组件的子组件。
生成报告
要生成报告,请在工具栏上点击“报告”按钮 。报告会生成以下内容:
报告资源管理器左侧窗格在执行时突出显示报告设置文件的每个组件。
消息列表窗口显示报告生成的进度。要指定“消息列表”窗口显示的详细程度,请使用窗口顶部的下拉列表。
处理完成后,MATLAB Web 浏览器将打开并显示 HTML 文件。