汽车电子AUTOSAR之BswM模块

news2024/11/25 12:37:57

目录

前言

正文

总体设计框架

模式仲裁过程

模式控制过程

模式仲裁

模式请求来源(ModeRequestPorts)

模式条件(ModeCondition)

逻辑表达式(LogicExpressions)

模式规则(ModeRules)

模式规则的初始化

模式控制

模式控制基本流程

模式行为

常用函数接口


前言


首先,请问大家几个小小问题,你清楚:

  • 你知道BswM是做甚的吗?
  • 常说的APP Mode或者System状态机与BswM关系又是如何的呢?
  • BswM模块作为AUTOSAR的一个标准模块,内部工作机制如何实现?
  • BswM与各SW-C以及各个BSW模块又是如何交互的呢?

。。。

今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:

在这里插入图片描述

正文


总体设计框架


顾名思义,BswM全称为基础软件管理模块(即Bsw Management)。该模块根据来自BSW或者SW-C特定的输入,在满足一定的规则条件下执行直接对各个BSW模块的序列化操作。从我刚刚总结的话语中不难得出BswM具有以下三个显著的特点:

  • 输入来源于各SW-C或者各BSW模块;
  • 执行时需要满足一定的规则条件;
  • 实现对各BSW模块的序列化操作;


按照AUTOSAR规范,我们可以将前两者叫做模式仲裁过程,而最后的步骤称为模式控制过程。

为了便于大家理解,首先分别针对上述模式仲裁过程与模式控制过程做总体性介绍。

模式仲裁过程


如下图1所示,BswM模块将会接收来自SW-C或者BSW模块的Mode Request或者Mode Indication作为模式仲裁的两种输入方式。通常Mode Request来源于SW-C模块,当然也不排除BSW模块,比如DCM请求ComM进行full communication的时候。Mode Indication则总是来源于BSW模块,比如CANSM,EcuM,WdgM等。

在图中也可以看到定义了模式请求的一些规则条件,如只有Normal_Mode为TRUE且IFC1_Bus_Off为False时,条件成立为TRUE,其他情况则为False。由此可见,模式仲裁过程中的规则条件也就是真值表达式,而真值表达式的结果就是模式仲裁之后的结果,并作为下一环节模式控制过程的输入。

在这里插入图片描述


图1 模式仲裁过程


上述过程中提到的Mode Indication 与 Mode Request都是以同等的地位在BswM中接收仲裁,且这两种类型都可以在AUTOSAR标准配置项BswMModeRequestSource得以体现。

同时BswM模块会通过调用其他BSW模块如EcuM,COM,ComM,SM,PduR的标准接口来获取每个模块的当前状态作为模式仲裁的输入。但需要注意的是如果在调用这些标准接口之后返回的结果为错误(E_NOT_OK),那么BswM模块可以设置DTC来告知上层这一错误或者取消当前正在执行的Action List。

模式控制过程


模式控制指的是基于上述上述模式仲裁的结果(TRUE or FALSE)执行相应的行为序列。这些行为序列通常称为“Action List”,且这些Action List都是有序的,也就意味着可根据项目需要自由配置各类Action的执行顺序。

在这里插入图片描述

图2 模式控制过程


如上图2所示, 每一个Action List可以对应1个或者多个行为,AUTOSAR支持实现不同行为的自由组合与复用。每一种行为都可以分为以下三种方式来实现:

  • 直接调用其他BSW模块或者RTE模块的标准接口来实现一系列的控制(即BSWM_ATOMIC);

  • ComM:设置对应通信接口的通信模式或允许在对应的通道上通信;
  • COM:实现IPDU报文的切换;(带有初始值或者不带有初始值);
  • COM: 使能或者关闭信号的deadline timeout monitoring;
  • NM:开启或者关闭NM通信;
  • 链接其他Action List中的内容(即BSWM_LIST);
  • 执行某些仲裁规则(即BSWM_RULE);

除此以外,模式控制在可控制多个行为的同时,也可以通过ID号来保证各个Action的执行顺序,所以说Action List是有序行为列表。某些仲裁规则可以作为从属规则成为某个主规则的Action List的一员。

从整体上介绍了模式仲裁与模式控制的过程之后,相信大家对BswM模块的控制流有了基本的了解。接下来,将针对模式仲裁与模式控制过程中的具体细节信息展开讲述,以便大家对BswM模块的配置过程能够更为清晰。

模式仲裁


模式请求来源(ModeRequestPorts)


模式请求来源指的是模式仲裁过程中需要判断的数据源是什么,而这些数据源的获取都是已定义好的标准接口,你只需要进行相应配置就能完成针对其他Bsw模块数据获取,即BswM会提供并生成相应的函数接口来获取对应Bsw模块的数据输入,举例说明常见的数据请求来源如下表1所示:

在这里插入图片描述

表1 模式请求来源举例


针对上述的模式请求来源,BswM存在以下两种方式去查询这些请求来源的状态:

  • 事件触发型

在该模式下,只有接收到Mode Indication或者Mode Request才会执行,适用于模式请求来源数据变化不大较为稳定的场合;

  • 轮询遍历型

在该模式下,BswM会在自身Mainfunction函数中主动查询Mode Indication以及Mode Reqest的状态,适用于Indication或者Request变化较为频繁的场合,一般情况下,都可以直接采用该模式去查询请求数据来源的状态;
上述两种状态可通过配置参数BswMRequestProcessing来进行选择。

模式条件(ModeCondition)


模式条件指的是根据上述模式请求来源与设定的值相比较的单一表达式。比如若模式请求来源为X,N为设定的常量状态,那么模式条件就是配置X ==N或者X !=N的表达式。

逻辑表达式(LogicExpressions)


逻辑表达式是相比模式条件而言,它可以实现多个模式条件的逻辑组合。举例说明如下:

若Logic Expression仅需要两个Mode Indication 1与Mode Indication 2的逻辑组合,当然理论上可支持n个单一表达式的逻辑组合,取决于实际情况的需要。

Mode Condition 1: X == 3;

Mode Condition 2: Y == 4;

Logic Expression A = (Mode Condition 1 (OR或AND或XOR或NAND)Mode Condition 2 );

模式规则(ModeRules)


模式规则指的是根据上述逻辑表达式的结果(TRUE or FALSE)来执行相应的Action List。也就意味着模式规则是为了实现逻辑表达式与相应Action List 的Mapping关系。

为了对模式仲裁过程中的三大构件(模式请求来源、模式条件、逻辑表达式)的相互reference关系及执行对应关系有个更好的理解,如下图3所示则较为清晰地表示了彼此之间的关联关系。

在这里插入图片描述

图3 模式仲裁三大构件的组织关系


模式规则的初始化


模式规则可以设定其Map的逻辑表达式的结果初始值为TRUE或者FALSE,以便默认执行相应的Action List。

该初始值可通过参数BswMModeInitValue来进行配置,同时该参数属于BswMRules的子参数。如果没有配置初始值,则模式仲裁的初始值处于undefined的状态,在该状态下意味着BswM在完成其初始化之后默认就会执行一次。绝大多数情况下,模式规则的初始值为FALSE。

模式控制


模式控制基本流程


模式控制基本流程就是根据模式仲裁的结果去执行相应的Action List。如下图4所示,以SW-C组件模式请求为例:

  • S1:SW-C通过sender port经由RTE向BswM模块发送模式请求信息;
  • S2:BswM模块通过receive port接收请求并根据已配置好的模式仲裁规则得出相应的仲裁结果;
  • S3:执行相应的Bsw相关的Action List及RTE状态切换;
  • S4:经过RTE传输的状态将会传递给到需要使用该模式的SW-C以及返回请求该模式的SW-C;

在这里插入图片描述


图4 模式控制基本过程


模式行为


模式行为作为模式控制的基本执行单元,在执行Action List的过程中也存在着以下两种方式:

  • 循环执行(BswM_Condition),只要模式仲裁规则成立,一直连续不断的执行;
  • 事件触发(BswM_Trigger),仅在模式规则变化的情况下,才会去执行相应的Action List;

这两种执行方式可以通过模式控制过程中的参数BswMActionListExecution来进行配置。

在这里插入图片描述

图5 模式行为的触发方式


如上图5展示了BswMruleInitValue与模式行为的触发方式在不同组合情况下执行Action List的结果,以便我们在配置过程中能够注意到它们之间的关联。

需要注意的是如果在执行Action List的过程中返回结果为E_NOT_OK,那么BswM模块应当终止Action List的执行,如果需要实现,那么需要设置配置参数BswMAbortOnFail结果为TRUE。

在模式控制的配置选项中,一般会存在BswMAction与BswMActionList两类选项,解释如下:

  • BswMAction: 则用来配置各种各样标准的行为;(如Com模块报文切换等)
  • BswMActionList: 用来定义action的集合(即从BswMAction中取任意个自由组合);

常用函数接口


为了更好的使用该模块函数以及遇到问题时方便调试该模块,特将BswM模块中较为重要的常用函数列举如下表2所示。

在这里插入图片描述


表2 Bsw模块常用函数列表

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

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

相关文章

Dependency not found解决方案(Springboot,绝对有效)

目录 问题描述解决方案systemPathmvn install 问题描述 今天在弄一个项目的依赖的时候,easyexcel 的依赖就是下载不了,虽然我的 Maven 配置没问题。 依赖:    Maven 配置:    我切换了几个版本,也无法从镜像下…

git diff去除^M的方法

一,简介 本文主要介绍在git修改的时候,修改文件后,git diff查看修改内容时,发现修改的地方每行结束的地方都会有“^M”,很影响查看。故今天分享一种去除“ ^M”显示的方法,供参考。 二,问题原…

案例29:基于Springboot医疗挂号系统开题报告设计

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

最新版本Portraiture4.1中文版ps磨皮滤镜插件安装包

在Portraiture有非常强大的手动功能,可以为用户进行手动调整照片中的皮肤区域以达到更加完美的效果,软件还支持同时导入上千张照片,用户可以通过自动识别照片中的人脸从而依照自己的风格进行批量处理十分的方便快捷。 最新版本Portraiture 4…

空气污染气象学期末复习笔记

空气污染气象学 (一)研究什么 运用气象学方法研究空气污染物自排放源进入大气层后的散布规律,核心是研究大气输送和扩散 (二)大气污染 大气污染是指由于人类活动或自然过程引起某种物质进入大气中,呈现出足…

Mysql数据库入门基础篇--mysql 多表查询

【Mysql数据库入门基础篇--mysql 多表查询 🔻一、mysql 多表查询1.1 🍃 7种sql joins 的实现1.2 🍃 错误写法---笛卡尔积错误1.3 🍃 正确的多表select写法 🔻二、内连接( inner) join🔻三、 外连接&#xf…

【LeetCode】23. 合并 K 个升序链表

23. 合并 K 个升序链表(困难) 方法一:顺序合并 思路 ListNode* mergeTwoLists(ListNode *a, ListNode *b) {if ((!a) || (!b)) return a ? a : b;ListNode head, *tail &head, *aPtr a, *bPtr b;while (aPtr && bPtr) {if (…

【第十期】Apache DolphinScheduler 每周 FAQ 集锦

点击蓝字 关注我们 摘要 为了让 Apache DolphinScheduler 的广大用户和爱好者对于此项目的疑问得到及时快速的解答,社区特发起此次【每周 FAQ】栏目,希望可以解决大家的实际问题。 关于本栏目的要点: 本栏目每周将通过腾讯文档(每…

卡尔曼滤波与组合导航原理(十二)扩展卡尔曼滤波:EKF、二阶EKF、迭代EKF

文章目录 一、多元向量的泰勒级数展开二、扩展Kalman滤波三、二阶滤波四、迭代EKF滤波 一、多元向量的泰勒级数展开 { y 1 f 1 ( X ) f 1 ( x 1 , x 2 , ⋯ x n ) y 2 f 2 ( X ) f 2 ( x 1 , x 2 , ⋯ x n ) ⋮ y m f m ( X ) f m ( x 1 , x 2 , ⋯ x n ) \left\{\begin{…

大家都说Java有三种创建线程的方式,并发编程中的惊天骗局

在Java中,创建线程是一项非常重要的任务。线程是一种轻量级的子进程,可以并行执行,使得程序的执行效率得到提高。Java提供了多种方式来创建线程,但许多人都认为Java有三种创建线程的方式,它们分别是继承Thread类、实现…

论文浅尝 | Dually Distilling KGE for Faster and Cheaper Reasoning

笔记整理:张津瑞,天津大学硕士,研究方向为知识图谱 链接:https://dl.acm.org/doi/10.1145/3488560.3498437 动机 知识图谱已被证明可用于各种 AI 任务,如语义搜索,信息提取和问答等。然而众所周知&#xff…

【C++】C++11常用新特性

✍作者:阿润菜菜 📖专栏:C 目录 一、统一的列表初始化二、 简化声明2.1 auto2.2 decltype2.3 nullptr 三、右值引用和移动语义 -- 重要3.1 区分左值引用和右值引用3.2 对比左值引用看看右值引用使用价值3.3 万能引用和完美转发(st…

基于word文档,使用Python输出关键词和词频,并将关键词的词性也标注出来

点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 移船相近邀相见,添酒回灯重开宴。 大家好,我是Python进阶者。 一、前言 前几天在有个粉丝问了个问题,大概意思是这样…

一道北大强基题背后的故事(三)——什么样的题是好题?

早点关注我,精彩不错过! 上回我们针对这道北大强基题[((1 sqrt(5)) / 2) ^ 12]在答案的基础上给出了出题的可能思路,想一探究竟,相关内容请戳: 一道北大强基题背后的故事(二)——出题者怎么想的…

【Kubernetes入门】Service四层代理入门实战详解

文章目录 一、Service四层代理概念、原理1、Service四层代理概念2、Service工作原理3、Service原理解读4、Service四种类型 二、Service四层代理三种类型案例1、创建ClusterIP类型Service2、创建NodePort类型Service3、创建ExternalName类型Service 三、拓展1、Service域名解析…

Latex中图片排版(多个子图、横排、竖排、添加小标题)

1、两个子图横排 \begin{figure}[!t] \centering %\includegraphics[width3in]{fig5} \subfloat[subfig figure title]{\includegraphics[scale0.5]{superd2}} \subfloat[subfig figure title]{\includegraphics[scale0.5]{superd2}} \caption{title} \label{fig_6} \end{figu…

阿里发布的百亿级高并发系统(全彩版小册),涵盖了所有的高并发操作

高并发 提到“高并发”相信你们应该都不会感到陌生!此时你脑中应该会浮现好多有关高并发的:业务急剧增长、电商购物、电商秒杀、12306抢票、淘宝天猫各种活动等;都是需要用到高并发的,那么如何去设计一个高并发系统抵挡这些冲击呢…

Django的app里面的视图函数

我之前说过需要重点去了解view和model,下面是我的总结。 视图函数是存在view.py里面的,视图函数的主要功能是接收请求、返回响应。在建立应用程序后,先在URL配置文件中加一条配置项指明URL与视图函数的对应关系。然后按照实际需求在视图函数…

三次握手四次挥手过程剖析

【一】预备知识: 1.三次握手并不一定非得成功,最担心得其实就是最后一个akc(应答)丢失,但是还是有配套得解决方案,比如超时重传机制。 2.连接是需要被保存下来得,是需要被os管理起来得&#xf…

被一个gpio口搞死的一天

今天是新项目调试的第一天。 我起的很早,起早的原因很简单,我家楠哥要我送他上学,他说爸爸没有起到一个当爸爸的责任,他也想让爸爸送他上学,然后我就送了。 7点30起来,8点出发,然后回来看了一下…