文章目录
- 简介
- 相关术语
- 1. 老化计数器 Ageing counter
- 2. 诊断故障代码已老去 DTC aged
- 3. 已老去计数器 Aged counter
- 4. 操作循环 Operation cycle
- 5. 诊断故障代码老化机制 DTC aging mechanism
- 总结
->返回总目录<-
简介
诊断故障代码(DTC)一旦生成,将会一直保留,直到通过发送诊断指令清除,或者诊断故障代码老化机制确定此故障不复存在。如果故障不复存在,则诊断故障代码的老化用于确保任何关联的诊断故障代码和除已老去计数器之外所有相关的信息都被清除,以确保不至于招致不必要的维护成本。
整个老化机制过程可参考下图
相关术语
1. 老化计数器 Ageing counter
老化计数器用于特定诊断故障代码的测试都没有失效的连续操作循环的计数。该数值应存储于非易失性存储器。
如果在一个操作循环(见后面的术语解释)中有任何已失效的测试结果出现, 则其将重置为“0”。
Such As:
1)操作循环:以KL15点火线上下电作为一个操作循环。
2)转向灯开关在第二次操作循环(如下截图位置)出现一次电路故障,ECU记录了DTC故障码:900112。 并同时存储故障发生时的快照数据,扩展数据至NVM(非易失性存储器)。最重要的点在: 故障发生后,测试失败(位0)置为1
3)在第三个操作循环检测,发现该故障已经恢复,变成了历史故障,即:测试失败(位0)置为0。此时,老化计数器会加1。
当此历史故障状态保持了40个操作循环,老化计数器会加到40。之后ECU会清除该故障信息(包含相应的快照数据等)。
~
2. 诊断故障代码已老去 DTC aged
诊断故障代码已老去用于表征诊断故障代码因已充分老去而从电控单元中移除的现象。
~
3. 已老去计数器 Aged counter
已老去计数器用于自上次清除诊断故障代码后,诊断故障代码已老去次数的计数。该数值应存储于非易失性存储器。 如果数值溢出,则其应保持在 255(十六进制0xFF)
~
4. 操作循环 Operation cycle
什么是Operation Cycle?关于Operation Cycle的定义,Autosar的DEM(Specifification of Diagnostic Event Manager)解释如下:
每个事件被分配到一个操作周期,例如点火周期。可以使用Dem_SetOperationCycleState()函数启动和停止操作周期。只有当相应的操作周期启动时,才可能向Dem报告事件,否则报告将被丢弃。在这方面,操作周期充当了无法规避的附加启用条件。
种类:标准中给了四个操作循环类型。一般常使用 IGNITION,POWER
1,IGNITION:就是KL15点火线上下电
2,OBD_DCY:OBD Driving cycle主要由Master ECU提供,Primary ECUs使用(一般没用过)
3,WARMUP:Warm up cycle,字面意思温升。可以理解成发动机启动水箱的温升。
4,POWER:可以理解为ECU从完全断电到供电的过程。与IGNITION有什么不同呢?点火循环中,ECU未必断电。
下面代码段是基于AutoSar开发中,运用的操作循环启动关闭方法:
/* Operation Cycle process */
(void)Rte_Read_PwrM_IgnPwrState(&AppDiagVal.IgnPwrSts);
if( AppDiagVal.IgnPwrSts != AppDiagVal.lstIgnPwrSts )
{
if( AppDiagVal.IgnPwrSts == PWRM_STATE_EN_IGN_ON)
{
/* Start Operation Cycle : Ign cycle */
(void)Dem_GetOperationCycleState(DemConf_DemOperationCycle_IgnitionCycle, &DemOperationCycleState);
if( DemOperationCycleState != DEM_CYCLE_STATE_START )
{
(void)Dem_SetOperationCycleState(DemConf_DemOperationCycle_IgnitionCycle, DEM_CYCLE_STATE_START);
}
}
else
{
/* End Operation Cycle : Ign cycle */
(void)Dem_GetOperationCycleState(DemConf_DemOperationCycle_IgnitionCycle, &DemOperationCycleState);
if( DemOperationCycleState != DEM_CYCLE_STATE_END )
{
(void)Dem_SetOperationCycleState(DemConf_DemOperationCycle_IgnitionCycle, DEM_CYCLE_STATE_END);
}
}
}
else
{
/* do nothing */
}
AppDiagVal.lstIgnPwrSts = AppDiagVal.IgnPwrSts;
5. 诊断故障代码老化机制 DTC aging mechanism
如果之前 40 个连续的操作循环期间, 每个操作循环的测试都没有失效,则允许相应的诊断故障代码老去。 具体参见简介中的图 。如果某操作循环的测试已完成且没有失效,则“未确认的诊断故障代码”位重置为“0”(简介中图关键点 a),故障待定计数器也重置为“0”,并且老化计数器加 1(简介中图 的关键点 b 和 c)。由于在连续的操作循环内,测试没有失效,故老化计数器持续增加(简介中图 的关键点 d)。如果老化计数器到达最大值(即 40)(简介中图 的关键点 f),则此时“已确认的诊断故障代码”位重置为“0”(简介中图 的关键点 e)。
~
总结
可能描述的还不够清晰,欢迎大佬前来指点下,共同学习哈~
->返回总目录<-