有些需求很难通过基于仿真的测试进行完全验证。
让我们使用简化飞机反推系统的四个要求进行演示。反推装置用于在着陆后使飞机在跑道上减速。
我们需要确保在某些不安全的情况下不会部署反推装置。因此,有四项安全要求规定了何时禁止反推装置展开。
注意到在每个要求中使用了“不得”?在要求中使用“不应”可能表明该要求难以完全验证。你如何确定你已经解释了异常情况?
使用基于仿真的测试,如果可能的话,我们需要创建很多测试用例来实现这个目标!
这就是财产证明可以提供帮助的地方。
Simulink Design Verifier的属性证明是一种静态分析技术,它使用形式化方法证明给定属性是否始终有效。此技术可以帮助您正式验证在设计中实现的特定需求是否始终得到满足。
本视频将带您通过一个示例,向您展示如何使用Simulink Design Verifier和SimulinkCheck中的Model Slicer功能正式验证这四个反推安全要求,并调试自动生成的反例。
该Simulink模型包含状态流状态图中定义的逻辑,用于确定飞机着陆后何时部署反推装置。
已定义四个属性以验证安全要求;每个要求一个属性。属性已在验证子系统中定义,该子系统不会生成代码。可以使用Simulink块、状态流状态图或MATLAB功能块中的MATLAB代码定义属性。
让我们以Weight-on-Wheels需求的属性为例。重量轮或“WOW”传感器用于确定飞机何时在地面上。
WOW安全要求的属性描述如验证子系统中的注释所示:“如果两个WOW传感器为假,则部署不能为真。”换句话说,如果飞机在空中,则不应部署反推器。
WOW属性定义使用Simulink Design Verifier库中的Implies块。Implies块允许您指定条件以生成给定响应。还使用了Simulink模型验证库中的断言块,它让SimulinkDesign Verifier知道已定义属性。
让我们在属性验证模式下运行Simulink Design Verifier,以验证设计是否满足所有四个安全要求。
Simulink设计验证程序能够使四个属性中的三个无效。
已自动生成每个属性冲突的反例测试向量以进行调试。
反例可能很难调试,因为Simulink Design Verifier将尝试在尽可能少的时间步长内找到违规,并且该工具对整个系统中的实际情况一无所知。
您需要提供工程洞察力。一种方法是使用证明假设来限制信号的范围、变化率或其他特征。Simulink Design Verifier在分析模型时将使用这些假设。
我们还不想添加假设,以免排除任何可能性。
相反,让我们使用Simulink Check中的模型切片器来调试反例。让我们从WOW属性开始。
这很简单,只需在WOW属性子系统中选择断言块,然后在Design Verifier结果窗口中单击“Debug”即可。
模型切片器是自动设置的,以帮助我们逐步完成WOW属性的反例。
模型切片器允许您单步执行模拟,以查看模型的哪些部分处于活动状态,以及在模拟的任何步骤中的信号值。
如果我们通过简短的反例模拟后退一步,然后前进一步,我们可以看到存在一种特定的瞬态条件,其中空速和轮速传感器值的突然变化可能违反WOW要求。这是一个不寻常的场景,但代表了在基于仿真的测试中难以定义的条件类型。
在分析了其他属性的反例之后,并利用我自己设计类似逻辑的工程经验,我可以看出,设计没有充分考虑着陆后信号值的突然变化。
我们有很多方法可以解决这个问题。我决定增加一个新的要求,在满足适当的条件后,增加一个短延迟,以启用反推装置。这种短暂的延迟不会影响反推装置的物理性能。
让我们打开固定模型并再次运行属性证明。
准备就绪!
这个例子展示了如何使用Simulink Check中的SimulinkDesign Verifier和Model Slicer来使用属性证明来分析安全需求并调试反例。
除了基于模拟的测试外,您还可以将验证目标链接到需求工具箱中的需求,以管理属性验证的验证结果。
访问Simulink Design Verifier产品页面或SimulinkCheck产品页面请求试用。