汽车电子AUTOSAR之Event

news2024/12/28 4:30:50

上文AUTOSAR基础篇之DTC中提到event是故障监控的基本单元,本文将从event的使能条件(Enable Condition)、上报方式、去抖动策略(Debouncing Strategy)、优先级(Priority)、Displacement、依赖关系图(Dependency Node)以及event Storage Condition等七个常见属性进行展开跟大家聊聊:

1.Event 使能条件


作为事件监控的基本单元,Event能否开启监控绝大部分情况下都需要满足一定条件,只有这样,才能够保证Event监控是否存在意义。

若不加以相关的限制条件,那么会导致增加诸多的信息干扰导致最终无法快速排查Root Cause,说的简单点,就是起到了Event过滤器的作用。通过该Event过滤器,可以得到你所允许上报或者抑制的Event上报。

比如典型实例就是当总线Busoff发生时,同时会发生很多报文丢失的故障,但是这些timeout故障只是sequential events,是顺理成章的事。

但我们不希望报出这些sequential events,就会为这些Event添加相应的Busoff的使能条件。即只有当总线没有发生Busoff时,才允许记录这些Timeout的events, 才显得更有意义!

比如上电经过特定时间之后才允许开启电压监控,因为ECU刚上电电压不稳定是一个正常过程,应当予以过滤掉,故而为电压监控的event添加上电初始化时间的使能条件。

即在上电特定时间内禁止电压相关事件监控,其余事件可以正常开启监控;

再比如有些event需要获取KL15状态信息或者其他的一些综合条件,才能够进行event上报,因此使能条件可以自由根据客户的需求进行添加,当然如果涉及到event之间的依赖关系,也可以利用Dependency Node来起到Event过滤器的作用,后面会继续讲到。

event的使能条件就相当于event过滤器,可以实现event在某种特定条件下event才被允许上报,为了更为清楚的了解到event上报的全部流程,如下图1所示:

在这里插入图片描述


图1 event上报处理流程图


在上图中可以看出,一个Event从上报到最终被存储需要经历种种千辛万苦的考验,才能最终落地生根,修成正果被你所看到。

 

  • S1:首先,需判断是否开启了Operation Cycle,如果是,则继续下面Enable Condition的判断,否则就直接结束;
  • S2:若Enable Condition Fulfilled,则进行85诊断服务的判断,若不满足,则直接结束;
  • S3:若此时使能了85服务,则直接结束,若没有,则可以继续往下进行Debouncing;
  • S4:经过Debouncing之后,若Event发生变化,则也会反映到DTC Status的变化,若没有变化或者没有结果,便可以直接结束;
  • S5:到此并没有结束,Event能否正确存储至NVM中,取决于是否满足Storage Condition, 同时,在满足存储条件之后,若event entry已满,能否最终存储还取决于event优先级以及event之间的依赖关系等。

2.Event 上报方式


当Event满足上述的使能条件之后,其触发的方式主要分为两种:循环上报型与Event触发型,两者的区别显而易见,前者Event一旦触发,就会循环不断地上报event状态,后者则是Event状态发生变化的时候,才会触发一次,并不会一直上报。

有小伙伴就问了,为啥要做这两种区别呢,故障一旦触发,一直上报不就行了吗?问的在理,这是因为从软件架构设计的层面考虑到,event上报来源于各个SW-C模块,经过RTE传输至故障处理模块,但是模块上报的Event数目非常多。

如果都采用Polling上报的方式,那么无疑会增加RTE传输数据的负担,而且对于故障处理模块而言,其实只需知道你的最新状态即可,所以在这种情况下,采用Event触发型无疑是更明智的选择,即仅当Event状态发生变化时才会触发一次上报。

如下图2所示,体现了两种不同上报方式的优缺点以及应用场合。

在这里插入图片描述

 

图2 Event触发方式的对比


从上图2可以看出,无论是采用循环上报还是Event触发方式上报,本质上都是调用相同的DEM API函数接口来实现Event进一步的处理,因此,在event上报选择方式上面,应当结合图中优缺点综合考虑,切不可一刀切,应当建立在软件架构的基础上去实现客户的需求,才能保证选择方式的合理性。

3.Event去抖动策略


当Event上报之后交由故障处理模块处理,在处理的过程中有一个非常重要的环节:去抖动策略,该策略就是为了防止所有故障误报应运而生 ,只有经历了去抖动算法之后,Event的最终状态才能够被确定,也就是PASS、FAIL, No Result这三类。

一般而言,去抖动策略也分为两种:TimeBase与Counterbase,TimeBase是通过计时来完成对Event的去抖动的过程,而CounterBase则是通过计数来完成对Event的去抖动,比如timeout类故障,可以直接采用TimeBase的策略来完成去抖动。

比如Event触发型可以采用Counterbase来完成去抖动。下面结合AUTOSAR Diagnostic Event Manager标准文档来针对这两类去抖动算法进行讲解:

3.1 TimeBase Debouncing


如下图3所示,将图划分为3个区域,区域1为Event上报状态区域,区域2为Event TimeBase的去抖动过程,区域3为Event去抖动之后的评估结果。

在区域1中,纵坐标表示Event上报的状态类型,有FAILED、PREFAILED、PREPASSED、PASSED四种基本状态,该状态通过DEM提供的函数接口来体现,具体细节可以参考之前的文章AUTOSAR-DEM模块几点思考!在这里不做过多赘述。

在该区域中,每上报一次不同的event状态,区域2中的FDC(Fault Detection Counter)都会发生相应的变化;在区域2中,当区域1上报一次PREFAILED时,FDC会基于tFailed的时间阈值换算为线性关系上升至阈值(127),若没有event 状态更新的上报,将保持至阈值不变;

当区域1上报一次与上次Event状态不同的状态如PREPASSED时, FDC无论如何首先会回归至0,然后基于tPassed的时间换算成对应的线性关系下降至阈值(-128);
如果在下降或者上升的过程中发生状态的变化,如下图从PREPASSED变为PREFAILED,那么在下降的某个时刻会首先回归至0,然后再继续以一定斜率上升至阈值(127);

如果上报的Event状态直接就是PASS或者FAIL,那么FDC会直接到达至相应阈值-128(Passed)或者127(Failed)。

在区域3中,纵坐标是event经过去抖动算法之后的最终评估结果,亦称为故障成熟结果,分为PASS,FAIL两种结果。
当FDC == 127(Failed)时,Event Status == FAIL;
当FDC == -128(Passed)时,Event Status == PASS;

在这里插入图片描述


图3 TimeBase 去抖动算法


通过上述场景的分析可以得出:对于TimeBased的去抖动算法,主要适用于在满足连续时间内故障便可以成熟的event,如timeout类事件或者其他跟时间密切相关的Event。

 

当然,一般而言,如果能够用timebased的时间也可以转化为Counterbase的算法来实现,因为两者本质就是基于时间来实现去抖动算法。

3.2 CounterBase Debouncing


如下图4所示,相比上图3,除了区域2有所区别以外,区域1与3含义与上图一致。在讲解下图之前,需要解释几个专有名词如下所示:

Internal Debouncing Counter(IDC): 表示用户自定义的debouncing counter,该IDC与FDC会在软件内部转化为一种线性比例关系;
DemDebounceCounterFailedThreshold: 表示事件Fail时的IDC阈值(event active);

DemDebounceCounterPassedThreshold: 表示事件Pass时的IDC阈值(event passive);

DemDebounceCounterIncrementStepSize: 表示事件每上报一次Prefail时IDC上升的步距;

DemDebounceCounterDecrementStepSize: 表示事件每上报一次PrePass时IDC下降的步距;

DemDebounceCounterJumpDownValue: 表示如果Jump-Down行为使能,在当前的IDC大于此值时,IDC就会首先跳转到该值处,然后才进行接下来的Debouncing行为;

DemDebounceCounterJumpUpValue:表示如果Jump-Up行为使能,当前的IDC小于此值时,FDC就会首先跳转到该值处,然后才进行接下来的Debouncing行为;

如图中所示,每当Event以PreFailed上报一次,IDC就会上升一次步距,该步距长度为DemDebounceCounterIncrementStepSize,直至到达DemDebounceCounterFailedThreshold,Event判定结果为FAIL;

同理,每当Event以PrePassed上报一次,IDC就会下降一个步距,该步距长度为DemDebounceCounterDecrementStepSize,直至到达DemDebounceCounterPassedThreshold,Event判定结果为PASS;

若Event直接以Failed或者Passed上报,那么IDC就会直接到相应的Pass或者Fail阈值;
如没有新的Event 状态上报,那么就会IDC就会保持当前的IDC值不变;

如果使能了Jump-Down或者Jump-Up行为,那么就会根据上述DemDebounceCounterJumpDownValue或者DemDebounceCounterJumpUpValue的解释跳转到相应的位置,然后进行Debouncing行为;

在这里插入图片描述

 

图4 CounterBased 去抖动算法


该CounterBased的算法主要适用于Event上报型的故障,基于次数来决定Event是否成熟,因此,无论使用上述哪种Debouncing算法,只要合理并正确使用,将能够大大减少故障的误触发,提高整个系统的稳定性与鲁棒性!
 

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

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

相关文章

解决SpringBoot配置文件项目重启出现乱码的情况

近日,在创建了SpringBoot项目后往配置文件中写了相关的系统配置,并且在上面加了中文注释,但是在重启项目或开机重启后遇到了注释乱码的情况,查询了各种相关资料,得以解决 发现问题 首先看到我在这个application.prope…

Golang每日一练(leetDay0089) 滑动窗口最大值、中位数

目录 239. 滑动窗口最大值 Sliding Window Maximum 🌟🌟🌟 480. 滑动窗口中位数 Sliding Window Median 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专…

chatgpt赋能python:Python安装FBProphet:绝佳的时间序列预测工具

Python安装FBProphet:绝佳的时间序列预测工具 随着时间序列数据应用场景的不断增加,越来越多的数据科学家和工程师开始使用FBProphet进行时间序列预测。FBProphet是由Facebook开发的一种开源预测工具,它使用先进的统计方法进行时间序列分析&…

案例40:基于Springboot疫苗预约系统开题报告设计

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

Day_41顺序查找与折半查找

目录 一. 顺序查找和折半查找的实现 1. 顺序查找 1.1 一般线性表的顺序查找 1.2 有序表的顺序查找 2. 折半查找 二. 代码实现 1. 内部节点 2. 类的构造函数 3. 顺序查找 4. 折半查找 三. 代码展示 四. 数据测试 五. 小结 一. 顺序查找和折半查找的实现 1. 顺序查找…

chatgpt赋能python:Python定义错误:什么是Python定义错误

Python定义错误:什么是Python定义错误 Python是一种强大的编程语言,被广泛用于各种领域,例如Web开发,数据分析,机器学习等。然而,即使是最有经验的Python开发人员也会犯一些常见的错误,其中之一…

在线教育机构的视频如何做防下载和防盗录?

在线教育平台付费课程、企业内训的培训课程,这类视频课程内容是如何做防下载和防盗录的? 1.AI隐形溯源水印 这个功能能够将水印隐藏在视频中,不会影响观看体验,但却能够帮助企业很好的视频版权保护。更重要的是,对于盗…

【ArcGIS Pro二次开发】(34):从字符串中提取中文、英文、数字与特殊符号

这是一个基于字段计算的工具。 有时候我们会遇到一些混杂着各种中文、英文、数字、特殊符号的文字,这个工具的目的是从这些复杂文字中提取出想要的特定文字。 比如说从CAD测绘图中可以读取到类似【混3】、【砖2】的文字,如果想要从中提取出层数或结构&…

chatgpt赋能python:Python宏变量——简介

Python宏变量——简介 Python是一种高级编程语言,具有易学易用、简洁清晰等优点。但我们在编写代码的时候,有时需要用到常量或者宏定义,这就需要用到宏变量。在Python中,宏变量是一种常见的编程方法,本文将详细介绍Py…

chatgpt赋能python:Python安装后怎么使用?

Python安装后怎么使用? Python是一种高级编程语言,被广泛用于Web开发、数据分析、人工智能和自动化等领域。下面我们将介绍安装Python后如何使用它。 步骤1 - 安装Python 首先,从官方网站下载并安装Python。在安装过程中,您可以…

chatgpt赋能python:Python中的构造方法是什么?

Python中的构造方法是什么? 当你开始学习 Python 编程时,你可能经常听到 “构造方法” 这个词。那么,什么是构造方法?为什么它在 Python 中很重要?本文将为您揭示构造方法的概念以及它们在 Python 中的作用。 什么是…

案例36:基于Springboot药店管理系统开题报告设计

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

chatgpt赋能python:Python程序员必知的Geany配置技巧

Python程序员必知的Geany配置技巧 如果你是一名Python程序员,并且正在寻找一个简单易用的代码编辑器,那么Geany是一个非常不错的选择。Geany是一款轻量级的集成开发环境(IDE),除了Python,还支持许多其他编…

chatgpt赋能python:Python安装完后如何打开

Python安装完后如何打开 Python是一种高级的、解释性、交互式的编程语言,已经成为了广泛的编程应用领域中不可或缺的一部分,如网络编程、数据科学和人工智能等。Python的安装对于学习、开发和应用Python技术非常重要,但安装了Python后如何打…

案例38:基于Springboot电影评论网站开题报告设计

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

chatgpt赋能python:Python中的Gevent:安装和使用

Python 中的 Gevent: 安装和使用 Gevent 是 Python 生态系统中的一个流行的高性能网络库,它是基于 libev 的 Python 网络库,提供了非阻塞IO、协程和并发编程等方面的特性。Gevent 使得开发高性能的网络应用程序变得简单而易行。本文将介绍如何在 Python…

【Leetcode】78 子集 | 保存遍历路径上的所有节点 // 46 排列 | 使用辅助数组记录元素是否使用

78 子集 与组合问题相比,需要保存路上经过的所有节点。 写法1 分为选择第 i i i个元素和不选择第 i i i个元素两种情况递归。 每push进一个元素,代表进入了一个新的节点,就保存当前的路径。 import java.util.ArrayList; import java.uti…

JUC基础-0606

9.ReentrantReadWriteLock读写锁 9.1 锁的基本概念 悲观锁:不支持并发,效率低,但是可以解决所有并发安全问题 乐观锁:支持并发读,维护一个版本号,写的时候比较版本号进行控制,先提交的版本号…

chatgpt赋能python:Python配置指南:提高SEO效果的关键

Python配置指南:提高SEO效果的关键 Python作为一种高效、易学易用的编程语言,在数据科学、机器学习、网络编程等领域得到了广泛应用。作为一个网站管理员,如何让Python支持的应用程序尽可能地符合搜索引擎优化(SEO)的…

UI自动化测试之Jenkins配置

团队下半年的目标之一是实现自动化测试,这里要吐槽一下,之前开发的测试平台了,最初的目的是用来做接口自动化测试和性能测试,但由于各种原因,接口自动化测试那部分功能整个废弃掉了,其中和易用性有很大关系…