目 录CONTENT

文章目录

AUTOSAR知识点 之 Dem (一):基础概念解析

moke
2024-07-27 / 0 评论 / 0 点赞 / 129 阅读 / 0 字

1、概述

        Dem(Diagnostic Event Manager,诊断事件管理), 用来记录和存储诊断事件的,将这些诊断事件及相关信息(冻结帧及扩展数据)记录到EEPROM。简单说其功能是故障事件确认前的故障debounce,故障事件确认时的故障数据存储,故障发生后的故障老化、故障替代(AUTOSAR的故障存储策略)

        DEM模块相关的标准主要包括两部分:ISO 14229(UDS,车身域诊断遵循的主要标准)和ISO 15031(OBD,该标准制定较早,主要针对排放相关的诊断)。

        主要诊断数据为:DTC、扩展数据、冻结帧。Dem只要牵涉两个服务:1、读取DTC(0x19);2、清除DTC(0x14)。

2、诊断故障码

        DTC(Diagnostic Trouble Code)顾名思义诊断故障码,一种用来记录当ECU发生或者检测到某种故障时呈现给大家的标识码。

        诊断故障码(DTC, Diagnostic Trouble Code) 用来指示故障类型的独特ID,用于汽车检修时对故障部位及原因的精确排查,它包含了故障所属系统(底盘域、动力域、者车身域或者网络)、故障定义类型(ISO、OEM)、故障具体部件(如车窗电机等)、故障错误类型(开路、短路或者信号错误等)。它包含两种定义方式包括3个字节长度(ISO 14229-1, ISO14229 1-7)或者2个字节长度(SAE J1979)。

        每个DTC对应一个或者多个Event。比如ECU检测到某个Sensor断线了,就可以通过DEM接口函数:Dem_SetEventStatus 改变DTC的状态。达到某个条件之后这个DTC关联的数据就可以以快照的方式存储起来,同时车身亮故障灯,维修人员就可以根据DTC码判断出是何处发生了故障。UDS可以通过19服务获取DTC是Status。

        故障码具体定义方式SAE J2012 OBD及SAE J2012 DA(没找到合适的版本)。

2.1、DTC High Byte(Bit7+Bit6): 表示所属系统

Byte3:High(6-7bits)

标准故障码的表示字符

所属系统

00

P

Powertrain:动力系统故障

01

C

Chassis:底盘故障

10

B

Body:车身故障

11

U

Network:网络故障

2.2、DTC High Byte(Bit5+Bit4): 表示故障定义者

Byte3:High(4-5bits)

标准故障码的表示字符

所属系统

00

0

SO/SAE标准定义的故障码

01

1

制造商自定义的故障码

10

2

ISO/SAE预留

11

3

ISO/SAE预留

2.3、DTC High Byte(Bit0-Bit3)+DTC Middle byte

DTC High Byte(Bit0-Bit3)+DTC Middle byte:

表示发生故障的目标系统,例如,属于车门域车窗模块升降电机,该部分由OEM定义(涉及到整车故障码分配)

2.4、DTC Low Byte

        表示故障的类型,bytes 1(high)用于表示错误类型(如信号、电路、存储等等),bytes 1(low)表示错误具体子类型(如开路、短路等),该部分主要由OEM定义(部分依据标准内容)

2.5、诊断故障码(DTC)的掩码及计数方式

诊断故障码掩码反应了该故障处于的状态,计数主要作用是对DTC进行滤波避免出现误诊断的情况。DTC状态掩码为一个字节数据:

  1. TestFailed (bit0):表示发生了TestFailed

请求时刻测试结果为失败

逻辑1表示一个故障被监测到,逻辑0表示最近的故障测试通过或已存在的故障的触发条件已不满足,ClearDiagnosticInformation命令可清除此状态位。

  1. TestFailedThisOperationCycle (bit1):表示当前Cycle发生了TestFailed

在当前点火循环至少失败过1次

逻辑表示当前操作周期或从上一次ClearDiagnosticlnformation命令清零后已经监测到一次故障,ClearDiagnosticInformation命令或新的操作周期都会清零此状态位。

  1. PendingDTC (bit2):在当前或者上一个点火循环测试结果不为失败

逻辑1成立条件与TestFailedThisOperationCycle相同,不同之处为清零条件,此位清零条件为一个完整的操作周期内未出现故障或ClearDiagnosticInformation命令。

  1. ConfirmedDTC (bit3):表示已经检测到多次testfailed,并且能确认故障发生,需要去存储相关的数据。

请求时刻DTC被确认,一般确认是在一个点火周期内发生错误1次

逻辑表示一个已经被确定的故障被监测到,被确定的条件有:在连续操作周期内都检测到故障(TestFailed),且检测到的计数(TripCounter)已经达到定义的次数值。可通过ClearDiagnosticInformation命令或当Aging Counter 达到Aging threshold满足时清零此位,此外,故障的记录信息被新故障记录覆盖时,也会清零此状态位。

注:ISO14229-1建议,非排放相关的ECU服务器TripCounter=1

Aging Counter:当一个操作周期完成且本周期内没有出现TestFailed,则Aging Counter加1.、

14229-1中规定了Debounce功能,只有当TripCounter达到一定数值时,才能确认故障发生,也就是BIT3置位。

TripCounter在默认状态下是为0,计数范围是-128 ~127。

  1. TestNotCompletedSinceLastClear (bit4):表示自执行14服务起,还没有完成完成测试,也就是没有testPass或者testFailed。

逻辑1表示从上次ClearDiagnosticInformation命令复位(置1)后,新的故障测试还未完成,逻辑0表示从上次清零后,新的故障测试已经完成(Failed or Passed)

  1. TestFailedSinceLastClear (bit5):表示自执行14服务起,发生了testFailed事件。

逻辑1表示从上次ClearDiagnosticInformation或其他条件清零后,已经监测到被确定的故障,逻辑0表示从上次清零后,测试未完成或测试已经Passed(而不是Failed)。

  1. TestNotCompletedThisOperationCycle (bit6):表示当前OperationCycle还未完成测试。

逻辑1表示从上次ClearDiagnosticInformation命令复位(置1)后,本操作周期内当前测试未运行完成,逻辑0表示从上次清零后,本操作周期内已经出现TestFailed或者TestPassed,操作周期切换也会复位(置1)此状态位。

  1. WarningIndicatorRequested (bit7):表示特定的DTC需要置告警,车身故障灯亮起。

逻辑1表示需要故障报警标识的故障已经处于ConfirmedDTC状态(bit3)和TestFailed状态(bit0),逻辑0表示无故障需要报警标识提示。无需报警标识故障存在或ClearDiagnosticInformation都可以清零此状态位。

3、概念术语

3.1、操作周期(Operation Cyle)

        定义要运行的检测的开始和结束条件,Operation Cycle开始时开始检测故障,结束时停止检测。车身与底盘域由OEM或者供应商自己确定(如上下电、休眠唤醒等),对于动力域会存在其它标准规定。

3.2、监控周期(Monitoring cycle)

         检测时会存在一系列条件,并不是操作周期开始就开始检测错误,可以是周期型(Period)、事件型(Event)。同时检测条件满足一定条件(依据实际情况而定),如灯负载(HSD)开路故障,只有在打开输出时才能检测电流判断是都开路

3.3、确认阈值(Confirmation Threshold) 

        确认此故障一直存在的Operation Clycle数,将其认定在历史DTC,在老化(aging)或手动清除前confirmed DTC状态位会一直存储在EEPOM

3.4、老化计数(Aging Counter)

 连续报告没有故障的Operation Cycle数

3.5、老化阈值(Aging Threshold)

        Aging Counter达到次数之后,DTC的Confirmed状态位将会被清除

        AgingCounter也就是处于老化中DTC的计数。当一个OpreationCycle没有检测到testFailed,AgingCounter就会自加1,同时DTC Status的BIT就会清0。当AgingCounter计数达到一定的阈值后,此故障已经完成了老化,可以自愈。同时DTC Status的BIT3清0。

AgedCounter,表示完成老化的DTC的数量。

3.6、错误计数(FDC, Fault Detection Counter)

        为错误计数,当然这个步长可以设定,向上(Step up)或者向下(Step down)均可以设置(计数值位-128-127,不同DTC需要的滤波次数不一致,通过设置此项值设置滤波次数)。同时还可以设置jump down(即在检测通过时是否跳转到0或者其它数,并从这个数开始向下减)

3.7、扩展数据(Extended)

        该数据在DTC的状态Pending置上后便会一同保存在非易失性存储单元(EEPROM),对两个常用数据进行说明(其余可以看标准或者依据OEM要求)

        由一系列DID组成,DID内容由BSW规定

        1)错误计数(Fault Detection Counter): 检测到错误的计数,具体可以查询上文定义

        2)老化计数(Aging Counter): 连续的Operation Cycle未检测到错误(DTC检测为passed,FDC为-128)的计数,当达到老化阈值时,会将DTC状态confirmed位置为0

3.8、冻结帧(Freeze Frame)

记录发生故障时的工况(SnapShot:由一些列的DID组成),当DTC状态位Confirmed位由0置为1时将记录snapShot。

例如,可以环境温度、ECU供电电压等可能与故障相关的一些数据,用于后续的车辆故障分析

由一系列DID组成,用户可以自定义DID内容。

3.9、Debounce

        消抖,为了防止出现故障误报的现象,14229-1中规定了Debounce功能,只有当TripCounter达到一定数值时,才能确认故障发生,也就是BIT3置位。TripCounter在默认状态下是为0,计数范围是-128 ~127。在连续测试中一直处于testPassed状态,直到TripCounter达到-128,BIT4由1置位0,BIT6由1置位0。如果侦测到testFiled,那么TripCounter就直接从大于0开始计数,并且testFailed的计数比TestPassed快。当TripCounter计数到127时,BIT2与BIT3置位。

3.10、快照

        快照SnapShot是一群DID数据的集合,每个DTC在Confirm时可以生成快照,将当时的一些关键数据存储在NVM中。诊断仪可以通过19服务读取SnapShot的具体数据。

4、故障发生前后动作

Dem全称Diagnostic Event Manager,负责诊断故障事件的处理,存储诊断故障事件以及故障事件相关联的数据(故障发生时温度,车速等)。简而言之,Dem发挥了AUTOSAR架构中故障”中央处理器作用”,用户软件模块只需要将故障上报给DEM,所有故障信息的处理都由DEM执行:

**1.**故障确认前:用户模块上报故障的Debounce防抖处理,确保对应故障不为误报故障。

2. 故障确认时:故障事件确认时的故障数据存储至NVM,保证故障能长期保存。

3. 故障确认后:故障的老化,替代,实现故障修复后,故障能被清除的功能。例如,仪表上的发动机故障灯,在发动机修好后一段时间后就会熄灭。

5、Dem关联模块

5.1、NvM

        Nvm能够提供存储服务给Dem使用,即提供诊断故障存储所需的NVM BLOCK。需要注意的是,Nvm给Dem提供了两类存储服务接口,Nvm_WriteBlock()供DEM实时存储诊断故障,NvM_SetRamBlockStatus()供Dem下电存储诊断故障,上述存储模式可以在DTC配置属性中体现。

5.2、DCM

DCM在接收到诊断仪的19服务(get Dtc),14服务(Clear Dtc)时,需要实时通过Dem获取DTC数据以及对DTC进行清除操作。

DCM和DEM之前有着密切关系,因为DCM中有ReadDTCInformation和ClearDiagnosticInformation这两个服务都是都是要从DEM中读取信息或者传递命令,还有PID01请求当前动力诊断数据等服务。比如根据DTC读冻结帧(也叫快照)(19 04 xx xx xx yy),在19服务的自服务的处理函数里面,首先就要调用。

Dem_ReturnGetStatusOfDTCType Dem_DcmGetStatusOfDTC(

uint32 DTC,

Dem_DTCOriginType DTCOrigin,

uint8* DTCStatus)

给DEM传递DTC和该DTC所属的memory类型,来获得DTCStatus;然后调用

Dem_ReturnGetSizeOfDataByDTCType Dem_DcmGetSizeOfFreezeFrameByDTC(

uint32 DTC,

Dem_DTCOriginType DTCOrigin,

uint8 RecordNumber,

uint16* SizeOfFreezeFrame)

获得冻结帧(快照)的数据大小,因为数据大小和数据内容是提前配置好的,也可标定。最后调用

Dem_ReturnGetFreezeFrameDataByDTCType Dem_DcmGetFreezeFrameDataByDTC(

uint32 DTC,

Dem_DTCOriginType DTCOrigin,

uint8 RecordNumber,

uint8* DestBuffer,

uint16* BufSize)

获取冻结帧。但是DCM和DEM是两个不同的任务,所以以上几个函数一般是异步执行,DCM只负责把请求命令和写入目标给到DEM,在DEM任务中轮询DCM的任务请求,并实现数据的填充,后通知DCM任务完成。DCM再通过肯定相应回复数据。

5.3、ECUM

对Dem模块执行初始化以及ShutDown操作。

5.4、SWC

        监控诊断故障事件Event,通过使用Dem_SetEventStatus()函数,将Event状态上报给Dem。使用Dem_SetOperationCycleState()对操作循环状态进行控制。

5.5、    注意概念 – Event

DTC只是展示给诊断仪使用者,Event才是DTC状态实际操控者,同时Event也是诊断NVM数据存储实际控制者。

DTC是系统层面对于故障的描述,而Event是软件层面对故障监控的最小单元。

例子:某个电机故障会由电压过高造成,但软件是无法直接识别该故障,软件只能监控是否产生了电压过高的时间Event,从而计算出是否产生DTC.

多个event可以mapping 同一个DTC;而同一个event不能mapping 多个DTC;

DTC可以直接可见,但Event需通过进一步手段才能看到,有时仅对ECU供应商可见;

1.DTC代表某类event集中表现,而event则是某个DTC的具体实例;2.event的优先级决定了DTC的优先级;3.event之间的依赖关系决定了DTC的依赖关系;

EVENT上报方式:

周期调用Dem_SetEventStatus上报即为周期循环上报;当Event状态变化时,调用Dem_SetEventStatus上报为触发上报。

其中BSW与ASW的上报方式是不同的

BSW:标准C接口,     Dem_ReportErrorStatus

ASW:RTE接口,   SetEventStatus(RTE)

1)诊断事件优先级数值越小,优先级越高,数值为1优先级最大。

2)Event优先级仅在诊断事件已经存满情况下发挥作用,其余情况根据FIFO原则存储。

Event occurrence

Event occurrence顾名思义就是故障事件上报计数器,故障上报次数越多,Event occurrence值越大,标志着该故障越“老”。“新”‘老’故障标签在后续新的故障事件如何存储的仲裁机制上也会发挥重要作用。

Event occurrence存在以下特点,如下所示:

1.每一个event memory entry都有对应的Event occurrence。

2.Event occurrence最大值为255。

3.Event occurrence的计数方式有如下两种配置选择:

DEM_PROCESS_OCCCTR_TF

Bit0(TestFail)由0跳变至1,Event  occurrence +1

DEM_PROCESS_OCCCTR_CDTC

Bit0(TestFail)由0跳变至1和Bit3由0跳变至1,Event  occurrence +1

Event Memory****存储内容

DEM提供了Event Memory概念,将Event,冻结帧,扩展数据全部归纳起来做了统一管理。

Event Memory分类:

DemPrimaryMemory

存储EventId,故障状态,冻结帧,扩展数据

DemMirrorMemory

 

Permanent Event Memory

用于存储OBD相关的DTC

S1:Dem模块必须支持Primary Memory,Mirror和Permanent memory可根据用户需要具体选择,一般用不上。

S2: Primary Memory是一个大小为DemMaxNumberEventEntryPrimary用于存储故障数据的非易失性存储空间。也就是Primary Memory由DemMaxNumberEventEntryPrimary个Event Memory Entry组成。

本质上,DemMaxNumberEventEntryPrimary设置为多少,NVM就会提供多少个NVM Block用于存储Primary Memory,就只能存储多少个Event信息。

S3:每个Event Memory Entry存储的内容有:EventId,Occurance Counter,冻结帧,扩展数据,老化周期等。

5.6、存DTC的条件

        当DTC状态完成更新后,Dem将开始进行Retention条件检测。Dem给用户提供多种策略用以判断是否需要分配Event Memory Entry。分配策略由配置DemEventMemoryEntryStorageTrigger决定,具体如下面表格所示:

S1:在Event Mmeory所有Event Mmeory Entry中搜索,检查该Event及相关数据是否已经存入Event Memory中,如果已经存在,则进入Event Memory Entry Storage。如果不存在,则在Event Memory中寻找空间用于存储Event内容,如果Event Memory中空间已满,则需要使用Replacement机制。

S2:当进入Event memory Storage,Occurance Counter需要加1,判断是否需要更新冻结帧,扩展数据。

Event Memory存储了数量为DemMaxNumberEventEntryPrimary的Event Memory Entry,当Event Memory Entry已满,需要进行Replacement,即根据一定的策略决定新增的Event如何存储。Dem模块提供了一套完善的机制用于Replacement,该机制有三个核心原则:

1.Event Priority(数字越小存储优先级越高)2.Event Active或者Event Passive状态(Active优先级高于Passive优先级)3.Event Occurance Counter(最近发生的存储优先级高于之前发生的)被替换的Event对应DTC中Bit2,Bit3 ,Bit5会被设置为0。

博主关闭了所有页面的评论