检测整数溢出和除以零错误
以下部分介绍如何分析 sldvdemo_cruise_control_fxp_fixed
模型中的整数溢出和除以零错误。
分析模型
打开并检查模型是否存在整数溢出和除以零的错误:
1.打开sldvdemo_cruise_control_fxp_fixed
模型。
open_system('sldvdemo_cruise_control_fxp_fixed');
2.在 Design Verifier 选项卡的准备部分中,从模式设置下拉菜单中点击设置。
3.在配置参数对话框中,选择Design Verifier > Design Error Detection。
4.在设计错误检测窗格中,选择:
整数溢出
除以零
5.在配置参数对话框的诊断 > 数据有效性窗格中,将信号 > 溢出时换行、信号 > 溢出时饱和和参数 > 检测溢出设置为错误。
6.单击“OK”保存这些设置并关闭“配置参数”对话框。
7.在模式部分中,选择设计错误检测。
8.单击检测设计错误。
分析完成后:
该软件通过分析结果突出显示模型。
Simulink® Design Verifier™ 结果对话框打开并显示分析摘要。
查看分析结果
查看模型结果
通过识别可能的信号值,得出的范围可以帮助您了解错误的来源,正如您可以通过以下步骤看到的那样:
1.在 sldvdemo_cruise_control_fxp_fixed
模型的顶层,点击定点控制器子系统。
Simulink® Design Verifier™ 结果窗口显示根据分析计算得出的输出端口可能信号值的范围:
输出端口 1(节流阀)的值范围从 -2.6101 到 2.6096。
输出端口 2(目标)的值范围是 0 至 255.9960。
2.单击sldvdemo_cruise_control_fxp_fixed
模型的Outport模块以查看相同的信号绑定值。
3.打开定点控制器子系统。
该子系统中的两个对象以红色勾勒出来。PI 控制器子系统以绿色轮廓表示。
4.单击红色轮廓的“Sum”模块,它为 PI 控制器子系统提供错误输入。
该 Sum模块可能会产生溢出错误。分析发现了一个测试用例,该用例可能导致 Sum模块的输出计算超出范围 [-128..127.9960]。
5.为了更全面地理解此错误,点击为 Sum模块提供输入的两个模块。在 Simulink® Design Verifier™ 结果窗口中,查看其派生范围:
总线模块的第三个输出端口的范围是 [0..256]。
Switch模块的输出端口范围是 [0..256]。
您可以看到,这些信号范围的总和运算可以计算出超出 Sum模块输出端口范围 [-128..128] 的值。
分析报告了 Sum模块上的溢出错误。分析不会传播这个错误,并假设 Sum模块的输出在任何后续计算的有效范围内。
6.单击绿色轮廓的 PI 控制器子系统。PI 控制器子系统中的任何模块都不能产生溢出或除以零的错误。当软件分析 PI 控制器子系统时,它会忽略来自 Sum模块的溢出错误并假定子系统的输入是有效的。
保持sldvdemo_cruise_control_fxp_fixed
模型开放。在下一部分中,您将创建框架模型来查看生成 Sum模块溢出错误的测试用例。
审核框架模型
要查看演示错误的测试用例,请从 Simulink® Design Verifier™ 结果窗口生成框架模型:
1.在 sldvdemo_cruise_control_fxp_fixed
模型中,打开定点控制器子系统。
2.单击红色轮廓的“Sum”模块,它为 PI 控制器子系统提供错误输入。
Simulink® Design Verifier™ 结果窗口显示发生溢出错误的信息。
3.在 Simulink® Design Verifier™ 结果窗口中,点击查看反例。
该软件创建一个包含测试用例的框架模型,该测试用例具有导致此溢出错误的信号值。
框架模型中,打开信号生成器对话框,并显示测试用例2。
4.点击开始仿真按钮,使用该测试用例对模型仿真。
正如预期的那样,由于定点控制器子系统中的 Sum模块出现溢出错误,仿真失败。
有关更多信息,请参阅 管理Simulink Design Verifier框架模型 。
查看分析报告
要查看包含有关 sldvdemo_cruise_control_fxp_fixed
模型的分析报告的详细信息的 HTML 报告:
1.在 Simulink® Design Verifier™ 结果窗口中,要重新显示结果摘要,点击返回摘要。
2.点击生成详细的分析报告。
该软件生成一份详细的分析报告,并在浏览器中打开。
对于 sldvdemo_cruise_control_fxp_fixed
模型,报告的设计错误检测目标状态章节提供了两类详细结果:
目标有效 — 未产生错误的模型对象
用反例证伪的目标 —测试用例产生错误的模型对象
具有决策或条件结果的模型对象会受到死逻辑检测。有关具有决策或条件目标的模型对象完整列表的更多信息,请参阅 接受覆盖的模型对象 (Simulink Coverage) 。
有关更多信息,请参阅 审查结果 。