分析死逻辑分析的结果
此示例演示了如何使用 sldvexCommonCausesOfDeadLogic
模型隔离死逻辑的潜在原因。死逻辑检测可以发现模型中无法达到的目标,从而导致模型元素保持非活动。
工作流
sldvexCommonCausesOfDeadLogic
模型演示了一些经常导致模型中出现死逻辑的常见模式。模型中的六个子系统代表不同的模式。这些子系统包括:
子系统的条件执行
分析期间逻辑运算模块短路
参数值视为常量
库链接模块
上游模块
信号范围限制
第 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
模型中死逻辑的常见模式。在“结果摘要”窗口中,点击突出显示模型上的分析结果。具有死逻辑的子系统以红色突出显示。这些子系统包括:
ConditionallyExecuteInputs
ShortCircuiting
参数
图书馆
CascadingDeadLogic
ConditionGreaterThan0
sldvexCommonCausesOfDeadLogic
模型中的子系统解释了这些模式。每个以红色突出显示的子系统模块都有一个死逻辑红色。逐一考虑每个子系统以进行分析并突出结果。
1.子系统的条件执行
如果您的模型包含 Switch 或 Multiport 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
中。您可以使用数据文件进一步分析结果。