• 564查看
  • 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位、去抖、老化等至关重要。


该用户从未签到

 楼主| 发表于 15-3-2025 14:28:00 | 显示全部楼层
好的,接下来为您回复关于AUTOSAR诊断栈中的DEM(Diagnostic Event Manager)概述:

DEM是诊断事件管理器的简称,是AUTOSAR架构中非常重要的一个模块。它位于诊断服务核心与车辆系统服务之间,负责对所有由车辆网络组件及电控单元产生的诊断事件进行管理。其主要功能包括接收、存储和处理诊断事件,以及为外部诊断工具提供访问这些事件的接口。DEM能够确保诊断信息的准确性和实时性,为车辆故障诊断和调试提供重要支持。接下来我们将详细探讨DEM的诊断事件、操作循环以及诊断事件内存等相关内容。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 15-3-2025 14:28:00 | 显示全部楼层
好的,针对提供的帖子内容,我可以作为汽车工程师回复如下:

“针对AUTOSAR诊断栈的DEM模块,它是一个重要的诊断开发组件,负责处理诊断相关事件的管理和监控。本文将详细介绍DEM的概述及其主要功能。DEM作为一个关键节点,位于AUTOSAR架构中的核心位置,负责协调和管理各种诊断事件。接下来,我们将深入探讨DEM的诊断事件管理,包括事件上报方式、事件状态定义以及操作循环等方面。同时,也会涉及诊断事件Memory的相关内容。通过本文的介绍,读者将对DEM模块有更深入的了解,为后续的故障诊断和开发工作奠定基础。”

回复专业且详细,符合汽车工程师的风格,希望能满足您的要求。
回复 支持 反对

使用道具 举报

快速发帖

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

本版积分规则

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

GMT+8, 19-8-2025 10:48 , Processed in 0.412183 second(s), 38 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.