主要内容

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

分析死逻辑分析的结果

此示例演示了如何使用 sldvexCommonCausesOfDeadLogic 模型隔离死逻辑的潜在原因。死逻辑检测可以发现模型中无法达到的目标,从而导致模型元素保持非活动。

工作流

sldvexCommonCausesOfDeadLogic 模型演示了一些经常导致模型中出现死逻辑的常见模式。模型中的六个子系统代表不同的模式。这些子系统包括:

  1. 子系统的条件执行

  2. 在分析过程中 Logical Operator 模块短路

  3. 参数值视为常量

  4. 库链接模块

  5. 上游模块

  6. 信号范围限制

第 1 部分:运行死逻辑分析

按照以下步骤运行死逻辑分析:

1:打开模型 sldvexCommonCausesOfDeadLogic

open_system('sldvexCommonCausesOfDeadLogic');

2:在 App 窗格中,打开 Design Verifier

3:在 Design Verifier 选项卡上,点击错误检测设置

4:在配置参数对话框中:

a.启用死逻辑(部分)选项。

b.如果已选择运行详尽分析选项,请清除该选项。

c.将需要分析的覆盖目标设置为条件决策选项。下拉菜单中可用的选项有决策条件决策MCDC

5:在 Design Verifier 选项卡中,点击检测设计错误

第 2 部分:分析并审查结果

该软件分析模型中的死逻辑并在结果摘要窗口中显示结果。结果表明,44 个目标中有 19 个是无效逻辑。

第 3 部分:在 Subsystem 模块中突出显示分析结果

本节解释了导致 sldvexCommonCausesOfDeadLogic 模型中死逻辑的常见模式。在“结果摘要”窗口中,点击突出显示模型上的分析结果。具有死逻辑的子系统以红色突出显示。这些子系统包括:

  1. ConditionallyExecuteInputs

  2. ShortCircuiting

  3. 参数

  4. CascadingDeadLogic

  5. ConditionGreaterThan0

sldvexCommonCausesOfDeadLogic 模型中的子系统解释了这些模式。每个以红色突出显示的子系统模块都有一个死逻辑红色。逐一考虑每个子系统以进行分析并突出结果。

1.子系统的条件执行

如果您的模型包含 SwitchMultiport Switch 块,并且条件输入分支执行参数设置为 On,则条件执行通常会导致意外的死逻辑。打开 ConditionallyExecuteInputs 子系统并点击以红色突出显示的 AND 模块。结果窗口总结了死逻辑。

在这个子系统中,条件输入分支执行参数设置为 On。AND Logical Operator 模块有条件地执行,这导致子系统的死逻辑。

2.在分析过程中 Logical Operator 模块短路

Simulink Design Verifier 在分析死逻辑时将逻辑模块视为短路。打开 ShortCircuiting 子系统,然后点击以红色突出显示的 AND 模块。结果窗口总结了死逻辑。

在这个模型中,如果 In3 为假,软件会因为短路而忽略第三个输入。这被认为是结果窗口中死逻辑的一个潜在解释。

3.参数值被视为常量

如果您的模型包含参数,Simulink Design Verifier 会默认将这些值视为常量,这可能会导致模型中的死逻辑。在这些情况下,请考虑配置这些参数以便在分析期间进行调整。打开 ShortCircuiting 子系统并点击以红色突出显示的 Switch 模块。结果窗口总结了死逻辑。

这里,所有参数都设置为零。这会导致 Less Than 模块的逻辑失效。

建议

您可以按照以下步骤使用模型切片器来查找可能对特定模块产生影响的参数:

a.使用模型切片器创建 SLSlicerAPI.ParameterDependence 对象。

slicerObj = slslicer('sldvexCommonCausesOfDeadLogic');
pd = slicerObj.parameterDependence;

b.找到影响 Product 模块的参数。

params = parametersAffectingBlock(pd, 'sldvexCommonCausesOfDeadLogic/Parameters/Product');

上图显示了函数 parametersAffectingBlock 返回的对 Product 模块有影响的参数。可以考虑根据函数返回的参数列表进行调整。

c.执行清理以退出模型的编译状态。

slicerObj.terminate;

4.库链接模块

ProtectedDivide 库子系统对除以零具有保护作用。模块可能写入了防御性条件,但这些条件在某些使用位置是多余的。在某些情况下,这可能会导致死逻辑。打开 Library 模块,然后点击以红色突出显示的 ProtectedDivide 子系统。在这种情况下,ProtectedDivide 库子系统的输入永远不会被零除。这导致守护逻辑失效。Equal 模块显示的是死逻辑。结果窗口总结了死逻辑。

考虑证明由这些库模块产生的死逻辑。

5.上游模块

当某个特定模块具有死逻辑时,这通常会导致级联效应,导致下游模块也具有死逻辑。打开 CascadingDeadLogic 子系统并点击以红色突出显示的 Less Than 模块。结果窗口总结了死逻辑。

Less Than 模块中的死逻辑导致相应下游模块中的死逻辑。因此,在检查任何下游死逻辑之前检查上游死逻辑通常会有所帮助。

6.信号范围限制

测试生成中以最小值和最大值作为约束的根级 Inport 模块和测试条件模块可能会导致死逻辑。例如,考虑 ConditionGreaterThan0 Switch 模块,其中第二个 Inport 模块的最小范围和最大范围分别为 1 和 100。这会导致该子系统中的 Switch 模块具有死逻辑,因为受限范围意味着信号将始终大于 0。

第 4 部分:查看分析报告

在结果摘要窗口中,点击 HTML 以查看详细的分析报告。该报告总结了模型中的所有死逻辑结果。

要对死逻辑进行详尽分析,请在配置参数窗口设计错误检测窗格中选择运行详尽分析。该软件将详细的分析结果存储在 Simulink Design Verifier 数据文件中的 DeadLogic field 中。您可以使用数据文件进一步分析结果。

注意:缺陷检查器自动调用死逻辑、越界数组访问、除以零、整数溢出以及指定的最小值和最大值违规检查。要指定检查,请将缺陷检查器设置为关闭。

相关话题