主要内容

分析包含计数器和计时器的模型

如果您的模型包含 countertimer 模块,Simulink® Design Verifier™ 分析会搜索状态序列,以查找满足特定目标的输入值。该分析会优先考虑可以在较少时间步内实现的配置。较长的计时器和计数器会导致分析必须涵盖大量状态,尤其是在涉及时滞或倒计时的情况下。模型中存在计时器和计数器会显著影响使用 Simulink Design Verifier 进行模型分析的复杂度和持续时间。分析包含较长计数器和计时器的模型时面临的一些挑战:

  • 状态爆炸,当较长计时器或计数器大幅增加分析必须覆盖的状态数量时发生

  • 延迟响应,例如滤波或平均值计算,这会增加所需的计时器步数,并导致测试用例更长

  • 启用运行穷举分析参数后,当您的模型在 Stateflow® 图中包含计时器时,会导致死逻辑检测分析耗费大量的时间

建模模式及其对分析的影响

不同的建模模式会以不同的方式影响 Simulink Design Verifier。例如,在控制系统中,去抖等模式用于管理对特定条件的响应。控制器会等待指定的时间段,直到出现特定条件。

一个在 delay 模块的输出端连接了 scope 模块的计数器显示值如何增加直至变为 10,此时满足决策目标。从初始状态开始,当计数器进入计时器激活状态时,它会在计时器进度区域中暂停指定的持续时间,然后再执行新操作。

Timer state trajectory during simulation.

Simulink Design Verifier 会遍历一系列状态,以识别能使分析达到满足测试目标的状态的输入值。计时器模式在计时器进度区域中创建扩展的状态序列,因此会使这一过程变得复杂。这样一来,分析很难满足计时器进度区域之后发生的测试目标。您在分析过程中使用的建模风格会使检测此类模式变得复杂。

建模模式和描述对测试目标的影响
计数器:跟踪事件发生的次数或操作执行的次数。有关计数器的详细信息,请参阅Counter Free-Running

关系模块的决策目标 - 输出为 true。只有在对模型进行 10 步仿真后,才能满足此目标。

Counter block for decision objective.

积分器:随着时间的推移,值会不断累积。累积的值通常会饱和处理为阈值内的边界值。有关积分器的详细信息,请参阅Integrator

饱和界限的决策目标。为了满足积分器模块的决策目标(积分结果 > 饱和上限),可能需要完成一些步数,直到输入信号的值累积到界限为止。​

Integrator block with saturation limits.

上升沿或下降沿:检测从低状态到高状态的转换。持续时间会影响上升沿或下降沿。有关详细信息,请参阅Detect Change

检查子系统内的目标。上升沿触发器要求触发器的输入过零。因此,缓慢变化的输入可能需要更多的步数才能过零。​

Rising edge.

MATLAB® 函数中的计数器:在 MATLAB 函数中使用计数器,可通过在循环语句或条件语句中递增的简单变量来实现。

分支 u> 0 的决策。只有当 counter > 10 时才能检查此分支。这需要 MATLAB 函数至少运行 10 步。 ​

function y = fcn(u)
persistent counter;

 if isempty (counter)
     counter = 0;
 end

 counter = counter + 1;
 y = 0;
 if (counter > 10)
     counter = 0;
     if (u > 0)
         y = 1;
     end 
 end
end

Stateflow® 中的计时器模式:执行函数之前等待指定的时间。有关详细信息,请参阅使用去抖逻辑减少瞬变信号 (Stateflow)

决策目标达到状态 S5。该目标受时序条件 [after(0.8,sec)] 的约束,此条件只有在给定的持续时间之后才为 true。实际的持续时间步数取决于模型的采样时间。​

Timer patterns in Stateflow.

使用计时器和计数器优化对模型的 Simulink Design Verifier 分析

您可以使用一些解决方法来管理在模型中使用计时器和计数器进行 Simulink Design Verifier 分析所引发的复杂性。基本解决方法包括:

场景建议的操作分析行为

首次执行分析以获得覆盖率。

不适用

分析使用内部启发式方法自动检测并通过计时器进度区域。有关详细信息,请参阅对大型模型进行分析

检测在计时器进度区域之后可达的模型意外行为。

  • 使用为与原始模型有少量延迟的模型生成的测试用例。选择延迟值,以便逐步满足这些值。​

  • 选择较高的滤波器截止频率和较小的平均采样数,以最小化滤波延迟。

分析可以快速通过计时器进度区域,并分析设计中超出该区域的状态,以检查意外行为。​

注意

如果系统在时滞设为 2000 步时出现逻辑错误,则在时滞更改为 2 秒时也会出现相同的错误。

针对受计时器影响的目标。

将计数器和计时器的初始值设置为 Simulink Design Verifier 分析可以调整的参数,从而缩短测试用例。

分析会选择能使较短测试用例超过阈值的初始值。有关详细信息,请参阅应用参数配置后扩展现有测试用例

如果您有受计时器影响的未决目标并且想要重新运行分析,可使用这些解决方法。

建议的操作分析行为

执行 sldvtimer(model) 以检查是否可以对模型进行计时器优化。如果可以,请在 MATLAB 中执行 sldvtimer(1) 并重新运行分析。

分析会使用其他计时器检测启发式方法进行计时器检测。有关详细信息,请参阅sldvtimer

使用穷举计时器或计数器的现有测试用例,并对其进行扩展以形成一个全面的测试套件。

分析会使用现有的测试输入作为起点。它会直接跳转至仿真此输入后可达的状态序列。有关详细信息,请参阅扩展现有测试套件

添加自定义测试目标作为中间步,以满足未解决的目标。

满足这些自定义目标后,分析会达到可以满足未解决目标的状态。​

  • 根据所需的仿真步数设置计时器和计数器阈值。​

  • 对模型中定义的变量和常量使用 int 数据类型。

分析会选择能使较短测试用例超过阈值的初始值。有关详细信息,请参阅应用参数配置后扩展现有测试用例

另请参阅

| | |

主题