Autosar知识:BSW生成规范要点-错误处理(下)

​特定于不同BSW的错误在相应的BSW模块规范中会指定。

Autosar版权声明


 

 

下面的部分是这方面的基础。最重要的是,它指定了一个包含5种错误类型的分类方案,这些错误类型可能以不同的生命周期出现在BSW模块中。

错误的分类

所有可能被BSW模块检测和/或报告的错误都被分类

六种不同的类型:

1、 开发错误

2、 运行时错误

3、 暂态故障

4、 生产错误

5、 扩展生产错误

6、 安全事件

 

本章分为6部分:

1、开发错误

2、运行时错误

3、暂态故障

4、扩展生产错误和生产错误

5、安全事件

6、特殊话题

 

 

 

4、扩展生产错误和生产错误

制作概要错误

生产错误是由任何硬件问题引起的,例如,老化、变质、全部硬件故障、生产质量差、装配错误等。如果至少满足下列条件之一,这些硬件问题就符合生产错误的条件:

- 导致了排放量的增加的错误,必须检测到,以满足适用的法规。

- 限制了任何其他OBD相关诊断监视器的能力的错误。

- 出现limp-home反应的错误,例如,防止对硬件或客户可感知的属性的进一步损坏。

- 车库应指向故障部件进行维修。

 

需要避免重复的生产错误,因为它们的根本原因与失败相同。这意味着首先,特定生产错误的规范需要比特定BSW模块的规范更广泛的范围。

一个特定的生产错误被报告给模块Dem,并可能利用它的所有可用功能。一般情况下,相应错误监控器的任何“失败”都会导致主事件内存中的一个条目,“通过”可能会取消该条目。

对于单个生产错误,通常可以组合不同的Dem选项。因此,一个特定的生产错误可能导致主事件内存中的一个条目,并可能同时触发一个专用的callout例程,该例程利用其状态来执行推断的操作。

扩展生产误差概述

扩展生产错误指示,如生产错误、硬件问题或环境的错误行为。

但是,与生产错误不同,扩展生产错误不满足关于生产错误任何标准,或者错误指向与已定义的生产错误相同的根本原因。

可以利用扩展生产误差:

- 以获得有关相应生产错误的真正原因的更多信息

- 将代表某一特定ECU状态的各种信息组合起来,得到“事件记忆的演绎项”

 

但是,特定扩展生产错误的“失败”状态的出现一定不能导致立即进入主事件内存。因此,扩展的生产错误可能会利用Dem的所有特性,除了将错误直接绑定到主事件内存项的特性。

将扩展的生产错误附加到回调例程可能是一个很好的实践。因此,ECU集成商的责任是提供合理的实现。

在这方面,整合器仍然有完全的自由,甚至可以触发进入主事件内存的条目。

 

(扩展)生产错误的记录:

对于每个生产错误和扩展生产错误,应根据AUTOSAR SWS模板提供适当的文档。

(扩展)生产误差检测:

生产代码错误和扩展生产错误的检测无法关闭,除非模块SWS描述配置参数或其他条件,这些参数或条件定义了某些(扩展)生产错误的激活。

(扩展的)生产错误的事件id通过Dem.h作为符号名值提供。生产错误的EventId符号是BSW模块的SericeNeeds的短名称(通过Dem ECUC),前缀为DemConf_DemEventParameter

见(AUTOSAR_TPS_ECUConfiguration.pdf“3.4.5.2符号名称的表示”)。

导入生产错误和扩展生产错误的事件id值:

(扩展的)生产错误的事件id值是由Dem模块的配置从外部分配的。

对于报告生产错误和扩展生产错误,使用Dem接口Dem_SetEventStatus:

向Dem报告生产误差和扩展生产误差:

如果此特定的生产错误或扩展生产错误已配置到此BSW模块,则BSW模块应使用服务Dem_SetEventStatus将所有检测到的生产错误和扩展生产错误报告给诊断事件管理器(Dem)。

注意,在BSW模块的ECU配置中,生产错误和扩展生产错误的配置是可选的。

向Dem报告事件状态:

若要报告(扩展的)生产错误状态,应调用以下DEM的BSW特定接口:

Std_ReturnTypeDem_SetEventStatus ( Dem_EventIdType EventId, Dem_EventStatusType EventStatus)

如果发生了错误事件,则EventStatus应等于:

“DEM_EVENT_STATUS_FAILED”。

如果一个错误事件没有被足够的精度检测到,并且需要通过预先否认EventStatus来成熟,则应等于:

“DEM_EVENT_STATUS_PREFAILED”。

如果BSW模块已显式检测到错误不存在:

EventStatus应该等于:' DEM_EVENT_STATUS_PASSED '。

如果无故障检测不可能有足够的精度,并且需要通过预先否认EventStatus进一步成熟,则应等于:

“DEM_EVENT_STATUS_PREPASSED”。

如果无法进行检查(例如,需要特定的操作模式),则不应报告结果。

注意:Dem_SetEventStatus的返回值将被BSW模块忽略。

错误状态信息可以通过状态更改报告,也可以根据错误事件的配置在检查状态时报告(事件或循环)。

检查不需要是循环的。

使用AUTOSAR预定义的通用信号“去跳”算法在诊断事件管理器中处理“预去跳”。

只有基于事件的错误监视器才能实现回调服务

< Mip > _InitMonitorForEvent < EventName >。

[注]

BSW模块Dem调用实现的回调服务<Mip>_InitMonitorForEvent<EventName>,根据EnableConditions或ControlDTCSettings触发基于事件的错误监控器的重新初始化。重新初始化的原因由参数InitMonitorReason传递。

在回调服务' <Mip>_InitMonitorForEvent '的每个触发器上,特定的BSW模块应重新初始化监视器功能,并立即向BSW模块Dem报告新的错误状态,如果错误状态可以在任何时候进行评估,否则在下一次机会。

 

检测并通知错误示例

应该在诊断事件管理器的“预弹跳”库中提供计时器函数(在本例中)。

5、安全事件

安全事件由与安全相关的BSW模块或SWCs触发,并应记录在安全事件内存(SEM)中。

这些事件符合安全事件的条件,如果至少满足下列条件之一:

- 安全相关功能的成功执行,该功能将被捕获到SEM中以供以后分析。此类事件的一个例子是证书的成功安装。

- 安全检查失败,将在SEM中捕获该检查,以便稍后进行分析。此类事件的一个例子是安全PDU的MAC验证失败。

一个特定的安全事件被报告给模块Dem,并且可以利用它的所有可用特性。通常,相应错误监控器的任何“失败”都将导致进入用户定义的专用于SEM的内存。“通过”不能撤销此条目。

安全事件的记录:

对于每个安全事件,应根据AUTOSAR SWS模板提供适当的文档。

安全事件的事件id通过Dem.h作为符号名值提供。

安全事件的EventId符号是前缀为的BSW模块的ServiceNeeds的短名称(通过Dem ECUC)

DemConf_DemEventParameter_

参见 (AUTOSAR_TPS_ECUConfiguration.pdf“2.4.5.2符号名称的表示”)。

安全事件的事件id值被导入:

安全事件的事件id值是通过Dem模块的配置在外部分配的。

为了报告安全事件,使用了Dem接口' Dem_SetEventStatusWithMonitorData ':

向Dem报告安全事件:

如果为该BSW模块配置了特定的安全事件,则BSW模块应使用服务Dem_SetEventStatusWithMonitorData将所有检测到的安全事件报告给诊断事件管理器(Dem)。

注意,安全事件的配置在BSW模块的ECU配置中是可选的。

向Dem报告事件状态

为了报告安全事件状态,需要调

用以下DEM的BSW特定接口:

Std_ReturnType Dem_SetEventStatusWithMonitorData (
Dem_EventIdType EventId,
Dem_EventStatusType EventStatus,
Dem_MonitorDataType monitorData0,
Dem_MonitorDataType monitorData1
)

如果发生了安全事件,则EventStatus应等于:

“DEM_EVENT_STATUS_FAILED”。

如果一个安全事件没有被足够精确地检测到,并且需要通过“预解约”来成熟,则EventStatus应等于:

“DEM_EVENT_STATUS_PREFAILED”。

如果无法进行检查(例如,需要特定的操作模式),则不应报告结果。

注意:BSW模块应该忽略Dem_SetEventStatusWithMonitorData的返回值。

错误状态信息可以通过状态更改报告,也可以根据错误事件的配置在检查状态时报告(事件或循环)。

检查不需要是循环的。

 

6、特定的主题

实现特定的错误:

如果BSW模块实现定义了额外的错误,那么这些错误应该在BSW模块文档中描述。错误分类表应通过实现特定的错误进行扩展。

符号名称值:

符号名值应该通过提供该值的BSW模块的标题导入。

实现中的符号名值使用ECUC中容器的短名称,前缀为<ModuleAbbreviation>Conf_(产生模块的名称)和EcucParamConfContainerDef容器的短名称。

例如:对于Dem提供的并在Dem的ECUC中配置为DemEventParameter的生产错误,通过Dem.h提供的#define为DemConf_DemEventParameter_<short-name>。

下面两个代码集成示例展示了生产代码事件ID及其符号(DemConf_DemEventParameter_EEP_21_LDEXT_E_COM_FAILURE)在Eep模块中的使用情况:

1. 源代码集成的例子:

/* File: Dem_Cfg.h */
…
/* DEM specifies the production code error ID: */
#define
DemConf_DemEventParameter_EEP_21_LDEXT_E_COM_FAILURE \
((Dem_EventIdType) 14u)
…
/* File: Eep_21_LDExt.c */
#include “Dem.h”
…
(void)Dem_ SetEventStatus
(DemConf_DemEventParameter_EEP_21_LDEXT_E_COM_FAILURE, DEM_EVENT_STATUS_PREFAILED);

2. 对象代码集成的例子:

/* File: Dem_Cfg.h */
…
/* DEM specifies the production code error ID: */
#define DemConf_DemEventParameter_EEP_21_LDEXT_E_COM_FAILURE \
((Dem_EventIdType) 14u)
/* File: Eep_21_LDExt_Lcfg.c
Link-time configuration source
This file needs to be compiled and linked with the
object code delivery: */
#include “Dem.h”
#include “Eep_21_LDExt_Lcfg.h”
…
const Dem_EventIdType Eep_21_LDExt_E_Com_Failure =
DemConf_DemEventParameter_EEP_21_LDEXT_E_COM_FAILURE;
…
/* File: Eep_21_LDExt_Lcfg.h
This file needs to be compiled and linked with the
object code delivery: */
…
extern const Dem_EventIdType Eep_21_LDExt_E_Com_Failure;
…
/* File: Eep_21_LDExt.c
This file is delivered as object file. */
#include “Dem.h”
#include “Eep_21_LDExt_Lcfg.h”
…
(void)Dem_SetEventStatus ( Eep_21_LDExt_E_Com_Failure,
DEM_EVENT_STATUS_PREFAILED);

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值