Main Content

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

分析死逻辑分析的结果

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

工作流

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

  1. 子系统的条件执行

  2. 分析期间逻辑运算模块短路

  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. 图书馆

  5. CascadingDeadLogic

  6. 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模块的逻辑失效。

建议

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

a.使用 Model Slicer 创建 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中。您可以使用数据文件进一步分析结果。

相关话题