• 396查看
  • 0回复

[Autosar] AUTOSAR 诊断栈分析(二):DEM

[复制链接]


该用户从未签到

发表于 21-1-2024 10:24:27 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


目录
01.DEM概述

02.诊断事件

    2.1 Event上报方式

    2.2 Event状态定义

03.操作循环

04.诊断事件Memory

05.小结

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

01.DEM概述

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

AUTOSAR 诊断栈分析(二):DEMw1.jpg

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



    处理来自SWC或者BSW上报的诊断事件

    将诊断事件发生时的错误数据保存到NvM

    当有诊断事件发生时,根据用户定义通知FIM进行功能降级

    和DCM(UDS/OBD)交互,提供错误数据的访问

    此外,上图中EcuM用于管理DEM初始化或者pre-shutdown动作等

    目前,还新增了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_PASSED0x00monitor认为事件确认通过
STATUS_FAILED0x01monitor认为事件确认不通过
STATUS_PREPASSED0x02monitor认为事件的通过还需要进行滤波,DEM内部来滤波
STATUS_PREFAILED0x03monitor认为事件不通过还需要进行滤波,DEM内部来滤波
STATUS_FDC_THRESHOLD_REACHED0x04

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

03.操作循环

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

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



    点火循环(KL15)

    上下电循环

    OBD驾驶循环

    ....

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

示例如下:

AUTOSAR 诊断栈分析(二):DEMw2.jpg

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

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

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

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

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

AUTOSAR 诊断栈分析(二):DEMw3.jpg

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

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

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

05.小结

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

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 5-3-2025 01:01 , Processed in 0.455981 second(s), 37 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.