9.AUTOSAR 诊断栈分析(二)

目录

1.DEM概述

 2.诊断事件

2.1 Event上报方式

2.2 Event状态定义

3.操作循环

4.诊断事件Memory 

5.小结


前一节,我们讲了诊断常见的错误分级分类、上报方式等,简单提了下DEM、FIM,那么接下来我们详细来描述下这几个模块,今天首先聊DEM。

1.DEM概述

DEM,全称Diagnostic Event Manager,是我们做诊断开发时很关键的一个模块,这个模块在AUTOSAR中所处位置如下图:

9.AUTOSAR 诊断栈分析(二)_第1张图片

很明显,它既要服务SWC,还要与BSW保持关联,在错误处理这个环节起到一个承上启下的作用。因此,DEM这个模块功能可以总结如下:

  • 处理来自SWC或者BSW上报的诊断事件(通常我们叫error)
  • 将诊断事件发生时的错误数据保存到NvM
  • 当有诊断事件发生时,根据用户定义通知FIM进行功能降级
  • 和DCM(UDS/OBD)交互,提供错误数据的访问
  • 此外,上图中EcuM用于管理DEM初始化或者pre-shutdown动作等
  • 目前,在R22-11上,还新增了IdsM模块用于入侵检测,也要与Dem交互

 2.诊断事件

这里我就不按照SWS上面的翻译了,还是给大家举个简单例子吧。

当SWC发现某个执行机构的温度超过了预设值、或者BSW发现某个报文接收超时,我们就可以把其定义为一个诊断事件(Diagnostic event),SWC\BSW通过DEM提供的标准接口把该事件的状态提交给DEM,DEM对其进行处理,因此诊断事件(下文称event)是DEM能够处理的原子单元。

每个event都有自己的event ID用于索引,因此SWC\BSW上报事件状态是也是通过这个ID。

2.1 Event上报方式

DEM分别提供了两种方式给BSW和SWC用于通知event,如下:

  • BSW相关event,调用API:Dem_SetEventStatus
  • SW-C相关event,通过调用RTE生成API:Rte_Call_DiagnosticMonitor_xxx_SetEventStatus

第一个API,我们底软工程师其实是最熟悉的,比如报文超时,Dem_SetEventStatus;比如SecOC校验错误,Dem_SetEventStatus;

第二个SWC相关的API,其实也是需要我们去做RTE配置时生成的,有些国产工具没有RTE的,Dem_SetEventStatus也可以直接用。

2.2 Event状态定义

我们知道,并不是所有的event一产生就要确认故障或者清除故障,比如出现了电平的跳变,我们还要对其进行滤波才能确认,当连续10次还是电压超出了阈值,我们这时候通知DEM,该事件发生并且没有通过测试(超过了阈值),如果10次检测发现了电压处于正常范围,那么通知DEM该事件发生了但通过了测试。

因此针对event的状态,DEM提出了如下五种:

STATUS_PASSED 0x00 monitor认为事件确认通过
STATUS_FAILED 0x01 monitor认为事件确认不通过
STATUS_PREPASSED 0x02 monitor认为事件的通过还需要进行滤波,DEM内部来滤波
STATUS_PREFAILED 0x03 monitor认为事件不通过还需要进行滤波,DEM内部来滤波
STATUS_FDC_THRESHOLD_REACHED 0x04

注意这里不要与UDS status bytes(8个bits位)搞混淆,虽然前者状态会影响后者bit状态,但后者是在14229-1中定义的,后续会讲。

3.操作循环

那么什么时候SWC或者BSW开始对诊断事件进行检查了,这里就引出了我们经常听到的操作循坏(Operation cycle)。

常见的操作循环定义如下:

  • 点火循环(KL15)
  • 上下电循环
  • OBD驾驶循环
  • ....

我们可以把每个event挂在不同的操作循环上,当某个操作循环开启后,对应的event就可以开始进行事件的状态处理,包括上报事件、当前操作循环的测试成功、当前操作循环的测试失败等等。

示例如下:

9.AUTOSAR 诊断栈分析(二)_第2张图片

在操作循环开启后,即上图的start -> end阶段,此时上报event的测试结果是能被DEM接收的,但一旦操作循坏关闭后,DEM会忽略掉上报结果。

那么如何来开启操作循环了,通常是调用 Dem_SetOperationCycleState(),如果是SWC来开启的,一般也是通过RTE生成接口,如下:

Rte_Call_OperationCycle_IgOn_SetOperationCycleState()

4.诊断事件Memory 

 在上面,我们知道当开启操作循环后,对应的event开始检测,一旦发生了检测失败,我们就需要把当时对应的事件以及状态存储到NvM中指定的地方。

所以,首先搞清楚event memory的layout是非常有必要的。

根据AUTSAR规范,event作为当时诊断事件的目击者,存放到memory的内容至少需要包括事件ID、事件关联的数据以及UDS状态,如果有用户自定义的内容,也需要增加。因此,举例如下:

9.AUTOSAR 诊断栈分析(二)_第3张图片

Fault Data主要包括扩展数据信息、冻结帧数据。

扩展数据通一般常用是 保存老化CNT和错误CNT。

冻结帧一般是记录发生故障事件的工况,通常有DID组成,包括车速、温度、电压等。

5.小结

上面,我们简单聊了DEM中比较关键的event、操作循环和存储到memory的事件信息,搞清楚这个对后续我们要继续讲的UDS status位、去抖、老化等至关重要。

你可能感兴趣的:(AUTOSAR专项训练,汽车,AUTOSAR,诊断,DEM)