AUTOSRA架构下通信的开启和关闭


通信的开启和关闭一般需要BswM和网络管理以及ComM协同配合,前一篇博文讲了AUTOSAR架构的网络管理,这里着重介绍BswM对通信的控制。

关于BswM

BswM(Basic software Management)即基础软件管理模块,BswM的基本功能有两类:模式仲裁(Mode Arbitration)以及模式控制(Mode Control)。

  1. 模式仲裁主要执行模式切换,模式切换主要是由底层模块或者SWC请求相应模式导致的;
  2. 模式控制主要执行由于模式切换导致的一些动作或者动作队列

模式控制

在这里插入图片描述
模式控制部实际上是定义了一些BswM可以进行的Action,Action需要组合成为ActionList才能被模式仲裁使用,Action的类型有三种:

  1. 调用BSW其他模块或者RTE相应接口函数,支持的接口如下图
    在这里插入图片描述
  2. 链接到其他的ActionList上,这使得ActionList可以嵌套;
  3. 模式仲裁规则(ArbitrationRule,下文会详细介绍)

模式仲裁

在这里插入图片描述

  1. ModeRequestPorts,模式请求来源指的是模式仲裁过程中需要判断的数据源是什么,而这些数据源的获取都是已定义好的标准接口,你只需要进行相应配置就能完成针对其他Bsw模块数据获取,即BswM会提供并生成相应的函数接口来获取对应Bsw模块的数据输入,BswM模块支持的请求来源如下图:
    在这里插入图片描述
    模式请求的执行分为立即(Immeditate)和循环调度(Deffered)的。所谓立即的,代表模式请求过来后,将马上进行规则判断;而循环调度的,是通过BswM MainFunction来周期去循环判断结果的。

  2. ModeCondition ,模式条件指的是根据模式请求来源与设定的常量相做对比(EQUALS/EQUALS_NOT)。举个例子:配置了一个名为BswM_MC_BswM_WakeUp的模式条件,其中模式请求来源为BswM_MRP_BswM_MDG,ECUM_STATE_WAKEUP为设定的常量,配置的ConditionType为EQUALS,那么这个模式条件实际上就是BswM_MRP_BswM_MDG==ECUM_STATE_POSTRUN的一个表达式;
    在这里插入图片描述

  3. Logical Expresstions,逻辑表达式可以使用很多种逻辑运算符:与,或,异或等等。而逻辑运算符的对象就是模式请求条件,举例:
    在这里插入图片描述配置了一个名为BswM_LE_PostRunToShutDown的逻辑表达式,他的模式条件为BswM_MC_BswM_PostRun和BswM_MC_WriteAllComplete,其中BswM_MC_BswM_PostRun配置为BswM_MRP_BswM_MDGECUM_STATE_POSTRUN,BswM_MC_WriteAllComplete配置为BswM_MRP_NvmWriteAllComplete != NVM_REQ_PENDING,逻辑运算符配置为与(AND),那么这个逻辑表达式实际上就代表了(BswM_MRP_BswM_MDGECUM_STATE_POSTRUN && BswM_MRP_NvmWriteAllComplete != NVM_REQ_PENDING);

  4. ArbitrationRule,仲裁规则的构成要素包括LogicalExpressions、TrueActionList、FalseActionList和RuleInitState。LogicalExpressions用于条件判断,根据判断结果决定执行TrueActionList还是FalseActionList。举例:
    在这里插入图片描述

这里配置了一个名为BswM_AR_PostRunToShutDown的仲裁规则,关联的逻辑表达式为BswM_LE_PostRunToShutDown,TrueActionList为BswM_AL_BswModules_ShutDown,也就是当BswM_LE_PostRunToShutDown判断为真时,执行BswM_AL_BswModules_ShutDown的动作。伪码就是
if((BswM_MRP_BswM_MDG==ECUM_STATE_POSTRUN)&&(BswM_MRP_NvmWriteAllComplete != NVM_REQ_PENDING))
{
do BswM_AL_BswModules_ShutDown;
}

BswM对通信的控制

BswM的模式控制支持的通信的接口有:

  1. ComMAllowCom
  2. ComMModeLimitation
  3. ComMModeSwitch
  4. BswMPduGroupSwitch
  5. BswMPduRouterControl
  6. BswMNMControl

BswM的模式仲裁支持的通信(只针对Can)相关的模式请求来源有:

  1. CanSMIndication
  2. ComMIndication
  3. ComMInitiateReset
  4. ComMPncRequest
  5. NmIfCarWakeUpIndication

通信(只针对CAN)控制实现

应用报文的打开需要满足:

  1. CommunicationAllowed为TRUE
  2. 通信模式切换到COMM_FULL_COMMUNICATION
  3. 相关的PduGroup打开

CommunicationAllow

一般配置在BswM,当运行状态从WAKEUP跳转到RUN的Rule的True ActionList中的一个Action)。配置如下:
Rule:
在这里插入图片描述
ActionList:在这里插入图片描述
Action:
在这里插入图片描述

通信状态切换

通信状态在上电之后为COMM_NO_COMMUNICATION,跳转到COMM_FULL_COMMUNICATION有2个途径,分别是本地唤醒和远程唤醒,对于Mcu来说本地唤醒通常有KL15上电等,Mcu检测到本地唤醒之后可以直接调度ComM_RequestComMode来请求COMM_FULL_COMMUNICATION,也可以通过BswM来请求ComM进入COMM_FULL_COMMUNICATION;远程唤醒为Can报文唤醒,唤醒序列可以参考网络管理篇博文。进入COMM_FULL_COMMUNICATION之后诊断报文,XCP报文等可以开始通信,应用报文则还需要打开关联的PDU Group才能通信。
通信的下电也是一个协同的过程,需要本地唤醒和远程唤醒都释放网络之后网络才能进入到COMM_NO_COMMUNICATION,对应用报文来说,关闭只要满足[1]进入到COMM_NO_COMMUNICATION,[2]CommunicationAllowed为NOT Allowed,[3]相关的PDU Group处于Stop状态这三个条件中的任意一个就会停止通信。

PduGroup的打开/关闭

应用报文必须要分配到至少一个PDU Group里面,应用报文需要打开相关的PduGroup才能被发送接收,通常对不带PN网络管理的节点,简单的做法是,将某一路的Rx关联到一个PduGroup,Tx关联到一个Group,通过BswM控制,当BswM接收到的CanSM的modeIndication指示该Channel的状态不在CANSM_BSWM_NO_COMMUNICATION时打开,否则关闭;当BswM接收到的CanSM的modeIndication指示PropulsionCan的状态在CANSM_BSWM_FULL_COMMUNICATION时打开,否则关闭。
以Rx的group为例配置截图如下:
配置Action和ActionList
Action:打开
在这里插入图片描述
Action:关闭
在这里插入图片描述
ActionList:
打开和关闭的ActionList截在了一起

  • 配置MRP:
    在这里插入图片描述
    配置:ModeCondition
    当CanSMIndication当前状态不在CANSM_BSWM_NO_COMMUNICATION下
    在这里插入图片描述
    配置Logical Expression:
    在这里插入图片描述
    配置Rule
    在这里插入图片描述
    Tx的Group的配置过程相同,把ModeCondiction配置成EQUAL CANSM_BSWM_FULL_COMMUNICATION即可。
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值