Autosar DEM模块

news2025/2/24 18:07:43

文章目录

  • 功能说明
  • 故障处理过程
  • DEM 功能模块关系图
  • 操作循环
  • 诊断事件
  • 故障上报
  • 事件优先级
  • 事件发生计数器
  • 诊断事件的分类
  • 事件故障内存
    • 1、主要故障内存
    • 2、用户自定义故障内存
    • 3、永久故障内存
    • 故障内存结构
  • 事件独立性
  • 故障码
  • 事件状态
  • 事件清除
  • 事件替换
  • Debounce 防抖机制
  • 故障数据存储
    • 1、冻结帧数据
    • 2、扩展数据
  • 故障恢复/老化
  • 使能/存储条件
    • 1、使能条件
    • 2、存储条件
  • 参考

功能说明

AUTOSAR 规范定义了 Dem(Diagnositic Event Manager, 诊断事件管理器) 模块来处理和存储故障信息, 并把存储的故障信息通过接口传递给 Dcm 模块, 以便诊断仪或者电脑能够通过 UDS 服务获取相关诊断信息。

Dem 模块是专门用来管理和存储由 SW-C(Software Components, 软件组件) 和 BSW(Basic Software,基础软件) 中的诊断监视器检测到的故障诊断事件及故障信息。

故障信息包括故障码(DTC)、 故障状态字节(UDS DTC Status Byte)、 故障发生计数器(Occurrence Counter)、 冻结帧数据(Freeze Frame Data Record) 和扩展数据(Extended Data Record) 等, 这些信息将被 Dem 模块存储到 NvM(Non volatile RAM Manager, 非易失内存管理器) 中以便后续读出用于车辆故障分析。

故障处理过程

Dem 对故障的处理可分为三个过程, 即故障报出、 故障恢复、 故障老化

  • 1.故障报出指因诊断监视器向 Dem 报告了故障测试失败的检测结果而导致 Dem 记录并存储该故障的过程, 此时通过 Dem 提供的接口函数可以查询到该故障的故障信息, 已报出的故障持续多个驾驶循环向 Dem 报告故障测试失败将请求点亮故障指示灯以警示驾驶员。
  • 2.故障恢复指由于连续多个驾驶循环中诊断监视器均未向 Dem 报告故障测试失败 Dem 请求熄灭故障指示灯的过程,此时仍可以通过 Dem 提供的接口函数查询到该故障的故障信息。
  • 3.故障老化指故障指示灯熄灭后连续多个驾驶循环中诊断监视器均未向 Dem 报告故障测试失败 Dem 删除该故障的过程,此时通过 Dem 提供的接口函数无法查询到该故障的故障信息。

Dem 提供了统一的故障管理和存储机制, SW-C 和 BSW 只需要向 Dem 实时报告故障的检测结果, 而无需关心故障的处理过程。 通过 Dcm 的诊断服务(UDS 服务) 读取 Dem 存储的故障状态及故障信息供故障分析使用。

DEM 功能模块关系图

在这里插入图片描述

操作循环

Dem 模块对诊断事件的处理是基于操作循环的状态来进行的。

UDS 操作循环

诊断事件

Dem模块以诊断事件作为故障处理的基本单元。Dem模块为每一个诊断事件分配一个唯一的诊断事件ID(配置项 DemEventId),用于区分不同的诊断事件。

DTC List为DEM模块开发输入,多个 event 可以 mapping 同一个DTC;而同一个 event 不能 mapping 多个DTC。(在项目中,通常一个DTC和一个诊断事件相对应)

故障上报

对于SWC,应该怎样上报Event状态呢?

  • 周期调用 Dem_SetEventStatus上报即为周期循环上报
  • 当Event状态变化时,调用Dem_SetEventStatus上报为触发上报
    在这里插入图片描述

事件优先级

事件优先级的定义是基于事件的重要程度来设定的。

当故障内存存满时, 低优先级的事件将被高优先级的事件替换掉。 事件优先级为 1 代表最高优先级, 事件优先级的数值越大优先级越低。

event 的优先级和 DTC 的优先级一样

事件发生计数器

Dem 模块为每一个事件提供一个事件发生计数器。 事件发生计数器在该事件进入故障内存时会被初始化为 1, 计数器的累加取决于配置项 DemOccurrenceCounterProcessing 的配置。

Event occurrence顾名思义就是故障事件发生计数器,故障上报次数越多,Event occurrence值越大,标志着该故障越“老”。

诊断事件的分类

诊断事件可以分为两种类型: BSW 和 SW-C, 由配置项 DemEventKind 进行配置。

不同类型的诊断事件使用的事件报告接口函数不同:

  • BSW 事件使用接口 Dem_ReportErrorStatus
  • SW-C 事件使用接口 Dem_SetEventStatus

在这里插入图片描述

注:为什么要划分事件类型?
应用层事件是在初始化启动之后,诊断逻辑才运行;
bsw层是在初始化阶段,需要报故障的逻辑,dem(未初始化)内部有一个buffer专门用来存储上报的事件,在dem初始化时,会将故障重新导入

事件故障内存

Dem 模块提供多种故障内存空间用于存储诊断事件与相关数据。

支持的故障内存包括:

  • 主要故障内存(Primary Event Memory),Dem 中必须存在的故障内存
  • 用户自定义故障内存(User Defined Event Memory),配置的多个用户自定义故障内存
  • 永久故障内存(Permanent Fault Memory

主要故障内存 和 用户自定义故障内存 基本上没有区别。一般 主要故障内存 就够用。

每个诊断事件可通过配置项DemMemoryDestinationRef进行选择。

1、主要故障内存

  1. 操作循环状态、 故障状态字节、 事件测试失败计数值以及防抖计数值, 参考结构体变量Dem_EventMemoryStatus
  2. 故障内存中故障个数、 故障在故障内存中的顺序列表、第一次存储的事件和最近一次存储的事件,参考结构体变量 Dem_PrimaryEventMemoryInfo
  3. 各种计数器以及冻结帧 、扩展数据存储缓存等 ,参考结构体数组变量 Dem_PrimaryEventMemoryEntry

2、用户自定义故障内存

  1. 故障内存中故障个数、 故障在故障内存中的顺序列表、第一次存储的事件和最近一次存储的事件,参考结构体变量 Dem_User0EventMemoryInfo 或者 Dem_User1EventMemoryInfo
  2. 各 种 计 数 器 以 及 冻 结 帧 、 扩 展 数 据 存 储 缓 存 等 , 参 考 结 构 体 数 组 变 量Dem_User0EventMemoryEntry 或者 Dem_User1EventMemoryEntry

3、永久故障内存

  1. OBD 相关的驾驶循环计数、 暖机循环计数、 WWHOBD 相关的冻结帧数据、 IUMPR 计数器等。参考结构体变量 Dem_PermanentEventMemoryEntry。

故障内存结构

Autosar不会给出明确的标准怎么去做故障内存的管理,以下仅供参考:
在这里插入图片描述

在示例中,红色虚线中,每个方框代表一个NVM中的Block,并将 Block 主要分为3类:

  • status block:用来存储所有 event 的状态
  • entry block:用来存储该故障的相关信息(DEM不会为所有的DTC分配一个block,entry block的数量可以配置,存储超过配置的数量会根据事件优先级覆盖低优先级故障)
  • 时间顺序block:用来管理entry block,根据entry block中故障发生的时间顺序,在该block中列出

在这里插入图片描述
注:例如故障事件 3 已在故障内存中,当再次发送故障事件 3时,需要更改时间顺序block中的事件列表:3、2、5、1;该事件相关信息数据是否更新和配置项有关。

事件独立性

Dem 模块提供了监控组件(Monitored Components, 也称 DemComponent) 功能, 一个组件是若干个事件的集合, 用于有关联的事件。

在监控组件中, 需要区分连续故障和因果故障的概念: 当某个 Event 发生时, 由于优先级或依赖关系导致其他 Event 也会相继发生, 那么此时前者被称为因果故障(Causal Fault), 而后者则被称为连续故障(Consecutive Fault)。
因果故障和普通错误一样, 会正常执行事件处理, 进入故障内存, 但是对于连续故障则忽视, 不会进入故障内存。

同一组件节点内的诊断事件拥有不同的优先级。 一个组件内, 当一个最高优先级的事件报告 Failed,被视为因果故障时, 如果该组件内的其他更低优先级的事件报告 Failed 将被视为连续故障。 该组件下的子节点的所有事件, 如果报告了 Failed 也将被视为连续故障。

在这里插入图片描述

  • 若 Event_A 比 Event_B 先发生时,Event_A 则被视为 Causal Fault,而 Event_B 作为 Consecutive Fault直接忽略掉;
  • 若 Event_B 比 Event_A 先发生时, Event_B 和 Event_A 则被视为 Causal Fault;
  • 若 Event_B 已发生时, Event_E 就会当做 Consecutive Fault 被忽视掉, 因为 DemComponent1 即为Failed 状态, 其子节点 DemComponent2 下的 Event 都会被视为 Consecutive Fault 忽视;
  • 若 Event_E 和 Event_H 发生时, 两者都会被视为 Causal Fault 完成正常的事件处理, 因为两者并没有存在父子关系, Dem 模块会平等对待此类型的 DemComponent;
  • 若 DemCompopnent2 忽视自身优先级(DemComponentIgnoresPriority) 且 DemComponent1 处于Not Failed 状态时, 那么该 DemCompopnent2 下所有的 Event 都是平等关系, 按照正常 Causal Fault处理; 若此时 DemComponent1 为 Failed 状态时, 那么 DemComponent2 下的所有 Event 均会被视为 Consecutive Fault 来处理;

可通过 Dem_GetComponentFailed 接口获取指定监控组件是否为 Failed 状态。

故障码

故障码(DTC) 是关联某个诊断事件的独特标识符。

DTC 分为排放相关(OBD relevant) 和非排放相关(non OBD relevant)以及 J1939 三种类型,三种类型分别为:

  • OBD DTC(ISO 15031)
  • UDS DTC(ISO 14229)
  • J1939 DTC(SAE J1939-73)。

UDS DTC故障码格式

事件状态

主要故障内存中保存了所有事件的状态。 每个事件拥有各自独立的 UDS DTC 状态字节, 事件状态的定义符合 ISO-14229-1 中对 UDS DTC 状态字节的定义,详细参考:

UDS DTC状态掩码/DTC状态位

事件清除

Dem为不同的用户提供了单独的API:

  • Dem_ClearDTC
  • Dem_DcmClearDTC (for UDS to the Dcm)
  • Dem_SetClearDTC (for OBD to SW-Cs)

在这里插入图片描述

Dem 提供配置项 DemClearDTCBehavior 用以定义何时向 Dcm 返回清除完成。

配置值说明
DEM_CLRRESP_VOLATILE Dem清除掉RAM中的数据后返回清除完成
DEM_CLRRESP_NONVOLATILE_TRIGGER Dem清除掉RAM中的数据且触发Nvm更新后返回清除完成
DEM_CLRRESP_NONVOLATILE_FINISH Dem清除掉RAM中的数据且Nvm更新完成后返回清除完成

事件替换

故障内存的Entry个数可配置。

当诊断事件数量大于配置的Entry个数时,Dem 将根据事件的优先级、 主动/被动状态以及发生的先后顺序决定是否删除掉故障内存中的某个事件以存储新报告的事件。

Dem 模块提供两种替换策略, 由配置项 DemEventDisplacementStrategy 进行设定, 分别是:

配置值替换条件
DEM_DISPLACEMENT_FULL1.优先级:最低
2.Active/Passive状态:Passive
3.发生的时间先后:最早发生的
DEM_DISPLACEMENT_PRIO_OCC1.优先级:最低
2.发生的时间先后:最早发生的

替换策略两者的区别在于:

  • DEM_DISPLACEMENT_FULL 比 DEM_DISPLACEMENT_PRIO_OCC 仅多了被动状态的判断条件。
  • 处于被动状态表示 DTC 状态字节的 Bit0(TestFailed) 为 0 时。
  • 条件判断顺序:如对比的两个事件的 DTC 优先级相同, 再对比事件的被动状态, 如果还是相同, 再对比发生时间。

在这里插入图片描述

Debounce 防抖机制

Dem 模 块 支 持 两 种 事 件 防 抖 方 式 , 包 括 Dem 内 部 实 现 防 抖 逻 辑 的

  • 基 于 计 数 器(DemDebounceCounterBased)
  • 基于定时器的防抖方式(DemDebounceTimeBase)

Autosar DEM DTC的Debounce策略

故障数据存储

1、冻结帧数据

Dem 支持为每个故障配置一帧冻结帧数据(DemFreezeFrameClasss) 和 多个冻结帧数据记录号(DemFreezeFrameRecNumClasss) 用于记录故障发生或者故障状态变更时的环境数据。

DID(Data Identifier) 数据(DemDidClasss) 用于定义冻结帧数据的内容, 一帧冻结帧数据可以包含多个 DID 数据。

冻结帧数据记录用于定义冻结帧数据在不同时刻存储的值, 一帧冻结帧数据可以定义多个冻结帧数据记录号用于记录不同时刻的冻结帧数据。

配置项DemFreezeFrameRecordTrigger用于选择存储时刻。

配置值说明
DEM_TRIGGER_ON_FDC_THRESHOLD当FDC(故障检测计数器)计数值达到阈值时
DEM_TRIGGER_ON_TEST_FAILED当诊断事件测试失败时(bito由0变1)
DEM_TRIGGER_ON_PENDING当诊断事件为未确认故障时(bit2由0变1)
DEM_TRIGGER_ON_CONFIRMED当诊断事件为确认故障时(bit3由0变1)

配置项DemFreezeFrameRecordUpdate用于选择当存储条件多次满足时是否更新已存储的数据。

在这里插入图片描述

2、扩展数据

Dem 支持为每个故障配置扩展数据(配置项 DemExtendedDataClassRef) 用于记录故障发生或者故障状态变更时的环境数据。

扩展数据记录(配置项 DemExtendedDataRecordClasss) 用于定义扩展数据的内容及存储条件, 一个扩展数据可以包含多个扩展数据记录(配置项 DemExtendedDataClasss)。

扩展记录号用来记录不同时刻的扩展数据。配置项DemExtendedDataRecordUpdate用于选择存储时刻。

配置值说明
DEM_TRIGGER_ON_FDC_THRESHOLD当FDC计数值达到阈值时
DEM_TRIGGER_ON_TEST_FAILED当诊断事件测试失败时(bit0由0变1)
DEM_TRIGGER_ON_PENDING当诊断事件为未确认故障时(bit2由0变1)
DEM_TRIGGER_ON_CONFIRMED当诊断事件为确认故障时(bit3由0变1)
DEM_TRIGGER_ON_PASSED当诊断事件测试通过时(bit0由1变0)

配置项DemExtendedDataRecordUpdate用于选择当存储条件多次满足时是否更新已存储的数据。
在这里插入图片描述

故障恢复/老化

UDS DTC老化机制

使能/存储条件

1、使能条件

Dem 模块支持为每个事件单独配置事件使能条件(DemEnableConditions), 在使能条件未满足之前,事件监视器向 Dem 模块报告的事件状态将会被忽略。Dem 定义了使能条件组(DemEnableConditionGroups)作为使能条件的分组集合。 事件的使能条件以使能条件组的形式进行配置。

2、存储条件

Dem 模块支持为每个事件单独配置事件存储条件(DemStorageConditions)。 在存储条件未满足之前,事件监视器向 Dem 模块报告的事件将不会进入故障内存或更新故障内存。 Dem 定义了存储条件组(DemStorageConditionGroups)作为存储条件的分组集合。 事件的存储条件以存储条件组的形式进行配置。

参考

  • https://zhuanlan.zhihu.com/p/658315949

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1391502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全全栈培训笔记(53-WEB攻防-通用漏洞跨域CORS资源JSONP回调域名接管劫持)

第54天 WEB攻防-通用漏洞&跨域CORS资源&JSONP回调&域名接管劫持 知识点: 1、子域名接管检测&探针&利用 2、C0SP跨域资源检测&探针&利用 3、JSONP跨域回调-检侧&探针&利用 #前置知识点: 同源策路(SOP),“同源”包…

【CSDN博客系列】自定义模块

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

3、Numpy中的通用函数

目录 数学运算 三角函数 比较函数 位运算函数 统计函数 布尔/逻辑函数 浮点函数 排序、搜索和计数函数 在 NumPy 中,通用函数(通常称为ufunc)是一种对 ndarray 中的数据执行元素级运算的函数。这些函数是高度优化的、快速的向量化包装…

element中Table表格控件单选、多选功能进一步优化

目录 一、代码实现1、 父组件2、子组件&#xff08;弹框&#xff09; 二、效果图 一、代码实现 1、 父组件 <template><div><!-- 用户选择嵌套弹框 --><el-dialog :close-on-click-modal"false" :close-on-press-escape"false" tit…

史上最全的数据科学与艺术

1.背景介绍 数据分析是一种将数据转化为价值的艺术和科学。它涉及到大量的数学、统计、编程、数据库、机器学习等多个领域的知识。数据分析的目的是从数据中提取有用的信息&#xff0c;以便做出明智的决策。 数据分析的艺术体现在数据分析师需要具备丰富的经验和洞察力&#…

C语言第一弹---C语言基本概念(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 C语言基本概念 1、C语言是什么&#xff1f;2、C语言的历史和辉煌3、编译器的选择VS20223.1、编译和链接3.2、编译器对比3.3、VS2022优缺点 4、VS项目和源文件、头…

从零开始搭建个人代理IP池的全程实录

创建个人代理IP池是一项相对复杂的技术任务&#xff0c;涉及到网络爬虫、服务器运维、数据库管理等多个领域。下面我将提供一个简化的步骤指南&#xff0c;但请注意这需要一定的编程基础和网络知识&#xff1a; 1. 获取IP资源&#xff1a; - 从免费或付费的代理IP提供商处获取I…

【视觉SLAM十四讲学习笔记】第五讲——相机模型

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角 【视觉SLAM十四讲学习笔记】第三讲——四元…

Angular系列教程之zone.js和NgZone

文章目录 什么是zone.jsZone的工作原理Zone的常见用途NgZone&#xff1a;Angular中的zone.js使用NgZone使用NgZone执行代码使用NgZone外部检测 结论 什么是zone.js 在Angular中&#xff0c;zone.js是一个非常重要的库&#xff0c;它为我们提供了一种跟踪和管理异步操作的机制。…

将某个GitLab上的项目自动同步到另一个GitLab账户下的仓库

引言 我们在进行项目迁移&#xff0c;或者是给甲乙外包写项目&#xff0c;需要迁移代码或者同步更新时&#xff0c;所处于的GitLab地址是不一样的&#xff0c;那么我们如何进行同步呢&#xff1f;我们可能第一时间会想到&#xff0c;先拉A地址的代码到本地&#xff0c;然后覆盖…

【SpringCloud】这一次终于使用MQ解决了Eureka服务下线延迟感知问题

前言 其实&#xff0c;“通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题”是一种解&#xff0c;但不是最优解 1.痛点 上一篇文章的标题是&#xff1a; 通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题 当时在文章的末尾就…

【Flutter 开发实战】Dart 基础篇:List 详解

嗨&#xff0c;各位朋友们&#xff0c;欢迎来到这篇博客&#xff01;今天我们将一起踏入 Dart 语言的神奇世界&#xff0c;深入了解 Dart 中的 List 类型。不用担心&#xff0c;我会尽可能用最通俗易懂的语言&#xff0c;让你对 List 有一个更深刻的理解。 Dart 中的 List Li…

重学Java 7 数组Arr.1

我欲与君相知&#xff0c;长命无绝衰 ——24.1.16 一、数组的定义 1.概述&#xff1a;数组是一个容器&#xff0c;数组本身属于引用数据类型 2.作用&#xff1a;一次存储多个数据 3.特点&#xff1a; ①既可以存储基本类型的数据&#xff0c;也可以存储引用类型的数据 ②定长&a…

Redis 消息队列和发布订阅

文章目录 基本模式生产者消费者原理&模型redis实现java实现 发布者订阅者原理&模型redis实现java实现 stream模式原理&模型工作原理redis实现Java实现 选型外传 基本模式 采用redis 三种方案&#xff1a; ● 生产者消费者&#xff1a;一个消息只能有一个消费者 ●…

计算机毕业设计 基于SSM的历史/博物馆藏系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

一天吃透计算机网络面试八股文

目录&#xff1a; 网络分层结构三次握手两次握手可以吗&#xff1f;四次挥手第四次挥手为什么要等待2MSL&#xff1f;为什么是四次挥手&#xff1f;TCP有哪些特点&#xff1f;说说TCP报文首部有哪些字段&#xff0c;其作用又分别是什么&#xff1f;TCP和UDP的区别&#xff1f;…

DWM1000 MAC层

DWM1000 MAC层 MAC层 概述 MAC层&#xff0c;即媒体访问控制层&#xff0c;是数据通信协议栈中的一个重要部分&#xff0c;位于链路层的下半部分&#xff0c;紧邻物理层。在OSI模型中&#xff0c;它属于第二层&#xff0c;即数据链路层的一部分。MAC层的主要职责是控制如何在…

去中心化社交:Web3如何重新定义社交媒体

随着区块链技术的快速发展&#xff0c;Web3正在崭露头角&#xff0c;成为社交媒体领域的一股新潮流。去中心化社交的理念与技术创新正在重新定义用户的社交体验&#xff0c;颠覆传统社交媒体的中心化模式。本文将深入探讨Web3对社交媒体的影响&#xff0c;以及去中心化社交是如…

Ubuntu使用QtCreator + CMake 开发C/C++程序

平台 OS: Ubuntu 20.04 cmake: 3.16.3 IDE: Qt Creator 4.11.1 Based on Qt 5.14.1 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit) Built on Feb 5 2020 12:48:30 From revision b2ddeacfb5 Copyright 2008-2019 The Qt Company Ltd. All rights reserved. The program …

DC电源模块在新能源领域的应用前景

BOSHIDA DC电源模块在新能源领域的应用前景 DC电源模块在新能源领域有着广阔的应用前景。随着可再生能源技术的发展和普及&#xff0c;如太阳能和风能等的应用逐渐增多&#xff0c;DC电源模块在这些领域的应用越来越重要。 首先&#xff0c;DC电源模块可以用于太阳能发电系统…