主要内容

基于诊断故障注入的AUTOSAR组件行为仿真与验证

本示例展示了如何模拟和验证在Simulink®中建模的AUTOSAR组件的行为,这些组件包含对AUTOSAR诊断事件管理器(Dem)的调用。金宝app您可以通过覆盖特定事件的诊断状态来获得快速测试覆盖率,或者通过注入瞬态事件故障来验证组件恢复。

覆盖AUTOSAR诊断状态以获得覆盖

组件模型经常调用AUTOSAR诊断事件管理器(Dem),将局部错误传达给系统的其余部分。它们还可以通过调用getEventStatus来查询其他系统的诊断状态。

为了展示如何通过覆盖事件状态来模拟和验证行为,给出了一个油门位置监视器组件示例。该组件包含对诊断事件管理器的四个调用,用于查询四个特定事件是否在最后一次评估中失败。这些事件的状态决定了主要和次要传感器输入是否可以传递到系统的其余部分。如果两个传感器都报告事件失败,则将一个默认值作为传感器输入传递,setEventStatus调用将一般故障报告给系统。

截图来自2021年11月12日-52-23.png

为了验证该组件按设计工作,下面显示了一个能够执行模型分支的测试集束模型。在测试套件中,值1和2区分两个传感器输入,诊断服务组件块为调用GetEventFailed和SetEventStatus提供模拟。然后添加Dem状态覆盖块,覆盖每个事件的UDS状态字节中的Test Failed位。

open_system (“autosar_bsw_override_test”);

截图来自2021年11月12日15-33-45.png

为了更直观地理解测试工具中示例组件的测试条件和覆盖率,可以从应用程序库中使用覆盖分析仪应用程序。

截图来自2021-11-12 13-54 .png

下面的视图显示了移除Dem Status Override块后组件模型的测试覆盖率。假设GetEventFailed调用在没有外部输入的情况下返回false,您无法在组件中的Switch块上实现完全的决策覆盖。

截图来自2021年11月12日15-29-06.png

当Dem状态覆盖块被使用在挽具中,你可以获得组件的全覆盖。

截图来自2021-11-12 15-29-54.png

这个例子展示了如何通过使用Dem Status Override块来获得测试覆盖率。虽然这个特定示例的范围很窄,而且它主要关注Test Failed位,但您可以使用Dem Status Override块来配置统一诊断服务(UDS)状态字节的每个位,以创建任何组合。

DemStatusDialog.png

一般情况下,您可以使用Dem Status Override块手动覆盖UDS状态字节的位,或者让位独立模拟。如果您选择对话框配置一个位,你就重写了那个位的状态。状态位对于setEventStatus调用的更改以及事件可用性和操作周期更改的影响非常健壮。此外,功能抑制(Function Inhibition, FiM)等下游服务会对覆盖状态做出相应的响应。如果您选择输入端口,您允许某些状态位根据连接的输入信号更新,其中值大于零则打开位。此功能使组件能够覆盖状态的某些位,同时允许其他组件继续独立地模拟。

注入瞬态事件以验证组件恢复

在AUTOSAR中,通常有一些组件管理系统也负责监控它们自己的状态。在这样的系统中,能够测试这样的组件是否可以从故障中恢复到可以再次报告成功的程度是很有用的。对于这种类型的测试,上面例子中使用的Dem Status Override块是不合适的,因为它阻止被测试的组件再次报告成功的状态。相反,可以使用Dem Status Inject块来创建这种类型的测试条件。

为了展示如何注入瞬态事件以验证组件恢复,本文展示了一个用于再生粒子过滤器的示例组件。在该组件中,过滤器的状态存储在Delay块的状态中。在模拟过程中,滤波器在20-80%的标称利用率范围内逐渐增加。这种使用情况将被监视并报告给诊断服务。并给出了一种具有代表性的再生模式。当启用再生时,过滤器利用率迅速下降。

DemInjectFilter.png

在这个组件中,诊断服务测试失败Bit也会被查询。当检测到上升边时,表明过滤器已达到其阈值利用率,组件将通过设置进入再生循环isRegenerating数据存储真正的

DemInjectMonitor.png

为了验证该组件的自我恢复,创建了所示的测试集束模型。具体来说,您希望验证过滤器是否保持在额定利用率范围内,并且在发生诊断事件时,它是否正确地进入和退出再生周期。当组件进行模拟时,预计它会根据需要触发自己的诊断事件,在再生周期和名义使用周期之间不断交替。您还希望测试如果组件从运行时环境(RTE)接收到诊断事件,它是否可以触发重新生成周期。

测试线束显示组件过滤器利用率,仪表显示其仪表板。诊断服务组件块为对诊断事件管理器的调用提供模拟。当线束模拟组件模型时,压力表显示过滤器逐渐增加到80%,然后快速降低到20%,因为过滤器在重复循环之前重新生成。

要验证RTE提供的诊断事件是否可以触发再生,可以使用Dem Status Inject块。已指定要使用的块EventId 1,它与诊断服务组件中定义的组件中的客户端端口匹配。故障类型已设置为事件失败设置测试失败当事件被注入时,位为true。在测试控制模型中,故障注入可以通过使用仪表板按钮来触发。或者,您可以通过一个自动测试配置的输入信号源来提供这个故障。测试束可以模拟组件,以显示其对故障注入的响应。通过使用仪表板按钮,您可以看到何时注入了故障,因为即使没有达到上阈值,您也可以看到仪表下降,以显示组件模型已进入再生周期。此示例模型被配置为无限期运行,因此您必须单击停止结束模拟。

open_system (“autosar_bsw_inject_test”);

DemInjectModel.png

这个例子展示了如何使用Dem状态注入块来测试组件恢复。虽然这个特定示例的范围很窄,而且它主要关注Test Failed位,但您可以使用Dem Status Inject块配置统一诊断服务(UDS)状态字节的每个位,以创建任何组合。

DemInjectDialog.png

一般情况下,您可以使用Dem Status Inject块手动覆盖UDS状态字节。然后,该块与模型中的其他块一起模拟并更新其状态,以显示恢复。功能抑制(FiM)等下游服务在整个模拟过程中相应地响应此状态。

另请参阅

|

相关的例子

更多关于