特定于不同BSW的错误在相应的BSW模块规范中会指定。
下面的部分是这方面的基础。最重要的是,它指定了一个包含5种错误类型的分类方案,这些错误类型可能以不同的生命周期出现在BSW模块中。
错误的分类
所有可能被BSW模块检测和/或报告的错误都被分类
六种不同的类型:
1、 开发错误
2、 运行时错误
3、 暂态故障
4、 生产错误
5、 扩展生产错误
6、 安全事件
本章分为6部分:
1、开发错误
2、运行时错误
3、暂态故障
4、扩展生产错误和生产错误
5、安全事件
6、特殊话题
制作概要错误
生产错误是由任何硬件问题引起的,例如,老化、变质、全部硬件故障、生产质量差、装配错误等。如果至少满足下列条件之一,这些硬件问题就符合生产错误的条件:
- 导致了排放量的增加的错误,必须检测到,以满足适用的法规。
- 限制了任何其他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调用实现的回调服务
在回调服务'
应该在诊断事件管理器的“预弹跳”库中提供计时器函数(在本例中)。
安全事件由与安全相关的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的返回值。
错误状态信息可以通过状态更改报告,也可以根据错误事件的配置在检查状态时报告(事件或循环)。
检查不需要是循环的。
实现特定的错误:
如果BSW模块实现定义了额外的错误,那么这些错误应该在BSW模块文档中描述。错误分类表应通过实现特定的错误进行扩展。
符号名称值:
符号名值应该通过提供该值的BSW模块的标题导入。
实现中的符号名值使用ECUC中容器的短名称,前缀为
例如:对于Dem提供的并在Dem的ECUC中配置为DemEventParameter的生产错误,通过Dem.h提供的#define为DemConf_DemEventParameter_
下面两个代码集成示例展示了生产代码事件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);