【Mode Management】BswM模块概念详细介绍

目录

前言

正文

1.BswM简介

2.名称缩写

3.BswM与其他模块关系

4.BswM功能描述

4.1BswM模式仲裁

4.2BswM模式控制

4.3BswM接口端口

4.3.1 Mode Request Ports

4.3.2 Mode Switch Ports

4.3.3 Notifications of Mode Switches

4.3.4 组件类型和内部行为

5.小结


前言

BswM模块是实现位于BSW中的车辆模式管理和应用程序模式管理概念的组成部分的模块。它的职责是基于简单的规则仲裁来自应用层SWC或其他BSW模块的模式请求,并根据仲裁结果执行操作。如ECU关于通信的开关及ECU的休眠唤醒功能就是通过模式管理来实现的。BswM模块分享BswM模块概念详解、BswM模块配置及BswM模块和其他模块的交互,具体的项目实战请关注本号的后续文章,本篇为BswM模块概念详解篇

正文

1.BswM简介

BswM模块在AUTOSAR架构中,属于基础软件(BSW)中的系统服务层。

BswM即BSW Mode Manager,用一句概括BSW的功能就是接收其他模块的模式请求,判断请求,执行动作。

它实现两部分模式管理:

(1)BSW中的车辆模式管理(Vehicle Mode Management)

(2)ASW中应用程序模式管理(Application Mode Management)

2.名称缩写

BSW:基础软件层

BswM:模式管理模块

CDD:复杂驱动

Dem:诊断事件管理模块

ECU:微单元控制器

RTE:运行时环境

SWC:软件组件

3.BswM与其他模块关系

BswM模块与许多Bsw模块有接口连接,这些接口都是可以选择的。

RTE

BswM通过RTE接收来自SWC的模式请求。模式开关通知(Mode Switch Notifications)也通过RTE传播到SWC。

EcuM - Fixed

当使用EcuM-Fixed时,它将向BswM指示当前的ECU状态。

EcuM - Flex

当使用EcurM-Flex时,BswM将使用对RTE的标准RTE交换机调用来改变EcurM状态。EculM-Flex还可以向BswM指示其唤醒源的状态。当使用ECU模式处理时,BswM可以设置EccuM-Flex的状态,并根据RUN请求协议接收某些模式的状态。

WdgM

WdgM可以通过BswM_WdgM_RequestPartitionReset API从BswM请求与分区重置相关的操作。对WdgM分区重置请求的配置是通过BswMWdgMRequestPartitionReset模式请求源来完成的。

ComM

来自通信模块的模式开关指示(Mode Switch Indication)通过BswM进一步传播到SWC。BswM可以通过ComMUsers请求通信模式。

COM

COM中的I-PDU组的处理由BswM执行。作为I-PDU组启动/停止的一部分,可以将所包含的信号值重置为其相应的初始化值。BswM处理COM中的截止信号监控的启用和禁用。BswM还可以触发I-PDU的传输。

PduR

BswM可以启用和禁用PDU路由器中的IPDU路由组。

CanSM

CanSm的模式通过BswM可以通知到其他Swc模块。

LinSM

BswM协调LinSM中的LIN调度表的切换与COM中相应的I-PDU组的启动和停止。来自LinSM的模式开关指示通过BswM以进一步传播到SW-Cs。

LinTp

作为LinIf的一部分的LIN传输协议从BswM请求模式,以确保在LinTp操作期间,正确的LIN调度表处于活动状态。

FrSM

来自FrSM的模式开关指示通过BswM以进一步传播到SW-Cs。FlexRay上的“单插槽模式-“Single Slot Mode”的使用是由FrSM根据BswM的要求进行控制。FlexRay堆栈可以通过调用API FrSM_SetEcuPassive,由BswM通过FrSM来控制它的发送能力。

EthSM

来自EthSM的模式开关指示通过BswM进一步传播到SW-Cs。

DCM

DCM根据接收到的诊断请求,向BswM执行模式请求

比如:DCM需要关闭正常通讯,BswM模块将关闭相应的I-PDU组和NM PDU组。

NM Interface

BswM模块将根据当前的模式使用Nm_EnableCommunication 和Nm_DisableCommunication函数接口控制Nm模块的通讯。

比如:在:“关闭正常通讯模式”中,BswM需要禁止NM 通讯在相应的NM通道。

NvM

NvM模块通过集成模块中的回调函数向BswM模块通知当前状态。在控制器初始化和下电过程中,BswM可以使NvM模块读取或者写所有的NvM blocks。

OS

BswM所需要的操作系统的特性,都是特定于实现的。

4.BswM功能描述

BswM模块的功能可以分为两个部分,分别为:

(1)模式仲裁:模式请求(Mode Request)、模式条件(Mode Condition)、模式表达式(Mode Logic Expression)。

(2)模式控制:模式动作(Mode ActionList)、模式通知(Mode Switch)

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

4.1BswM模式仲裁

Arbitration Rules

BswM 执行的Mode Arbitration是基于规则(rule-based)的而且很简单。所以模式规则中有两部分:模式表达式以及相应的模式动作。

为了知道模式控制中的哪些动作需要执行,需要BswM模块评判先前模式仲裁的结果与当前模式仲裁的结果的变化。

Mode Conditions and Logical Exressions

包含模式仲裁的逻辑表达式可以使用不同的操作符,比如AND,OR,XOR,NAND。每一个逻辑表达式(Logic Expression)对应一个模式请求条件。这请求或者指示的模式会被判断是EQUAL或者NOT_EQUAL特定的模式。上图中展示了有两个条件的模式Rule,

Rule和可用逻辑操作集被定义为ECU 配置的一部分。

Mode Request and Mode Indication

BswM模块接收来自SWC的模式请求(Mode Request)和来自于其他Bsw模块的模式指示(Mode indication)作为输入进入模式条件执行模式仲裁。一般来说,模式请求是来自于应用层SWC,但是也有可能来自于Bsw模块,比如DCM模块。模式指示总是由他BSW模块发出,比如不同的总线管理器,比如EcuM,WdgM等模块。

Immediate and Deferred Operation

处理模式仲裁有两种方式,一种是有模式需求或者是模式指示时,立即处理;另一种是有模式需求或者是模式指示时,使用main轮询处理。

如果是“Immediate”需求,是通过函数调用执行的。在软件系统集成时,应该保证动作列表在执行时不会影响到整个控制器的系统性能,适用于模式请求来源数据变化不大,较为稳定的场合。

如果是“轮询遍历”方式,BswM模块会在模块中MainFunction中主动查询模式请求和模式指示的状态,适用于模式请求和模式指示变化较快的情况,

这两种仲裁方式可以通过参数BswMRequestProcessing配置。

模式规则初始化

模式规则可以设置逻辑表达式的初始值为TRUE或者FASLE,以便执行默认的Action List。

模式仲裁在初始化后的运行是由配置参数BswMModeInitValue的值决定的。BswMRequestProcessing的参数在BswMModeRequestPort的配置中体现。

当BswMModeInitValue没有配置初始值时,BswM应该将相应的模式视为未定义,因此

意味着BswM在完成初始化后默认就会执行一次。

当BswMModeInitValue有配置初始值时,BswM模块应该使用初始值作为第一次模式仲裁时的状态。

4.2BswM模式控制

模式控制就是根据模式仲裁的结果执行相应的Action List,而操作列表(Action List)是BswM在模式仲裁后触发的序列动作。

模式控制可以分为三类,以SWC的模式控制为例:

(1)调用其他BSW模块或者RTE接口

(2)链接其他Action List从而调用其他Action List

(3)执行模式仲裁规则。当动作列表执行时,就会执行相应的模式规则。

BswM模块不需要存储或者响应其他任何Bsw模块的返回值,因此,不同的BSW模块需要将他们的当前状态发送给BswM模块,作为模式仲裁的输入(Mode Arbitration)。但当其他bsw模块返回E_NOT_OK,BswM模块可以调用DEM模块和/或取消当前执行的Acion List。

BswM能够包含多个Action List,一个Action List 包含多个Actions。为了减少Action Lists的数目,可以将他们级联。Action List的内容可以是具体的动作,或者是对其他Action List的引用,还可以是Mode Arbitration要执行的规则。Action需要有个标志位与Action List连接,说明其具体的类型(动作,引用,模式规则),带有具体动作的列表和带有引用或甚至是混合列表的列表的激活方式应该没有区别。

Mode Processing Cycle

下图解释了模式请求(Mode Request)的步骤。

(1)首先某个SWC作为模式请求者通过发送端接口发送模式请求,RTE将模式请求分发到BswM模块,然后BswM模块通过接收端接口接收模式请求。

(2)BswM模块接收模式请求并且进行模式仲裁,或者在BswM模块主函数循环执行期间执行规则。

(3)根据选择的执行方法执行相应的Action List

(4)在执行动作列表时,BswM模块可能多次调用RTE中的Switch API接口,通知发出模式请求的SWC模块关于模式仲裁的结果。

需要注意的是,BswM只处理来自于本ECU中的发出的模式请求或者模式指示,其他ECU发出的模式请求或者模式指示是不处理的。

Triggered and Conditional action lists

执行Action List的方式有两种:

(1)循环触发(Conditional):只要模式仲裁规则成立,就不断执行。

(2)事件触发(Triggered):仅仅在模式仲裁规则发生变化时,才会去执行相应的Action Lists

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

1.当Action List的初始状态配置为TRUE,并且执行规则配置为TRIGGER,因此当模式仲裁规则结果由TRUE变为FALSE时,才会执行Action Lists。并且执行“False” Action List。

2.当Action List的初始状态配置为FALSE,并且在执行规则为TRIGGER,因此当模式仲裁规则结果由FALSE变为TRUE时,才会执行Action Lists。并且执行“TRUE” Action List。

3.当Action List的初始状态配置为TRUE,并且执行规则配置为Condition,因此当模式仲裁规则结果为TRUE时,就会执行“TRUE”Action List;当模式仲裁规则结果为FALSE时,就会执行“FALSE”Action List。

4.当Action List的初始状态配置为FALSE,并且执行规则配置为Condition,因此当模式仲裁规则结果为TRUE时,就会执行“TRUE”Action List;当模式仲裁规则结果为FALSE时,就会执行“FALSE”Action List。

5.如果BswM模块在执行过程Action List过程中,如果收到返回值为E_NOT_OK,BswM应该停止Action List的执行。如果需要实现该功能,那么参数“BswMAbortOnFail”应该设置为"true"

4.3BswM接口端口

如下图所示,对于SWC与BswM之间的模式服务,SWC与BswM都需要定义RTE中的接口,并且这些Port的Interface都是一样的。并且SWC与BswM之间的Port需要连接,以便RTE适当的ID和符号。

SWC想BswM模块请求模式。SWC提供一个模式请求的P-port,这个port具有一个特殊的Interface(Mode request port,只有一个Data element)。对应的,BswM模块有一个R-port。数据元素(Data element)的类型与对应模式的模式声明组(Mode declarations group)中的模式声明具有相同的值(因为数据元素的实现数据类型已映射到模式声明组)。

请求模式的相同的SW-C也可能是模式用户,因为它可能还需要知道BSW模式管理器的仲裁结果。SWC有一个Mode Switch port,这是一个带有一个数据元素的Mode Switch Interface的R-port。此数据元素的类型则是模式声明组本身。此外,其他不请求模式但依赖于这些模式的SWC也有这样的模式交换端口。请注意,如果BSW模式管理器除了在决策中请求的模式外,还需要知道当前模式,那么它还需要一个Mode Switch R-port。

当模式管理器切换相应的模式时,RTE会发送模式通知。为此,BSW模式管理器有一个Mode Switch Port类型的P-port,SWC可以连接到这个port。

在请求SW-C的上下文中,定义了一个模式请求端口(Sender/Receiver)。BswM的配置引用了此端口定义。假设SW-C定义了一个应用模式 AppModeType,一个相应的 AppModeRequestType和一个将这两种类型相互映射的 AppModeTypeMap:

ModeDeclarationGroup AppModeType {

 { APP_MODE_A, APP_MODE_B, APP_MODE_C }

 initialMode = APP_MODE_A;

};

ImplementationDataType AppModeRequestType {

 lowerLimit = 0;

 upperLimit = 2;

};

ModeRequestTypeMap AppModeTypeMap {

 modeGroup = AppModeType;

 implementationDataType = AppModeRequestType;

};

在SW-C上下文中,定义了两个接口:SW-C为发送方的发送/接收接口(AppModeRequestInterface of Sender/Receiver type),以及模式开关接口(AppModeInterface of Mode Switch type),具体取决于使用情况:

如下图所示的是SWC的端口如何连接到BSW模式管理器的服务端口。应用程序模式管理器SW-C有一个模式请求端口(Mode request port)和一个模式交换R-port。MRP用来请求改变应用模式,Mode Switch Port用来接收BswM执行模式切换的通知。SWC的MRP(modeRequestPort0)连接到BswM对应的MRP。

为了切换应用程序模式,BSW模式管理器有一个由本地RTE实现的模式交换机端口(modeSwitchPort_{Name})。

当RTE执行模式开关时,它会通知通过模式开关R-port连接到提供端口的所有连接实体(BSW模块或SWC)。下面的示例展示了应用程序模式管理器、另一个依赖于模式的应用程序部分和BSW模式管理器本身(请注意,它被命名为modeNotificationPort_{Name},但端口类型是模式交换机端口)的所有这些连接也都是本地的。

如上图所示,基于SW-C的应用程序模式管理器直接切换应用程序模式,而不从BSW模式管理器请求它。因此,它们可以直接将一个模式交换机端口连接到本地RTE。这意味着应用程序模式需要是该ECU的本地模式,并且在BSW模式管理器中不可能进行仲裁。然而,BSW模式管理器可能使用当前应用程序模式作为其规则的输入,因为它可以具有此应用程序模式的模式交换机R-port(图中命名为modeNotificationPort0)。

注意:要配置BswM,需要了解特定ECU需要/可用的模式请求端口和ECU资源。因此,BswM的SW-C描述只能在ECU配置期间完成。

从现在开始,以下所有的接口定义都被解释为在中:ARPackage AUTOSAR_BswM/BswModuleDescription

在模式管理中一共存在三种port.

4.3.1 Mode Request Ports

如上图所示,SWC与BswM都有ModeRequestPort,ModeRequestPort是用来发送和接收模式请求的接口。ModeRequestPort是定义在SWC中。

RequirePort AppModeRequestInterface modeRequestPort_{ArbName}_{ReqName};

要读取当前请求的模式,

Rte_Read_modeRequestPort_{ArbName}_{ReqName}_requestedMode( &<variable> );

4.3.2 Mode Switch Ports

当某个SWC作为模式请求者,必然有其他SWC作为模式使用者,这些也需要知道BswM中的模式仲裁结果,BswM通过Mode Switch接口通知模式仲裁结果。

ProvidePort AppModeInterface modeSwitchPort_{ModConName}_{SwitchName};

配置参数BswMModeSwitchInterfaceRef引用模式切换接口(Mode Switch Interface)。

要切换当前激活模式,BSW Mode Manager实现必须将以下调用之一插入其操作列表:

Rte_Switch_modeSwitchPort_{ModConName}_{SwitchName}_currentMode( <new_mode>

);

SchM_Switch_modeSwitchPort_{ModConName}_{SwitchName}_currentMode(

<new_mode> );

4.3.3 Notifications of Mode Switches

除了模式请求(Mode Request),当前激活的模式也可以作为Mode Arbitration的输入。在这种情况中,BswM模块应该视为模式使用者(Mode User),它通过Mode Switch Port接收有关模式更改的通知。

为了更容易区分ModeSwitchPort中提供端口和需求端口,在下面的例子中需求端口被命名为notification port。

RequirePort AppModeInterface modeNotificationPort_{ArbName}_{ModeName};

为了获取当前的激活模式,BswM模块必须调用下面的函数。

Rte_Mode_modeNotificationPort_{ArbName}_{ModeName}_currentMode( &<variable>

);

SchM_Mode_modeNotificationPort_{ArbName}_{ModeName}_currentMode(

&<variable> );

如果配置了增强型的Rte_Mode或者SchM_Mode,BswM模块必须调用下面函数之一:

Rte_Mode_modeNotificationPort_{ArbName}_{ModeName}_currentMode(

&<variable>, &<previousmode>, &<nextmode> );

SchM_Mode_modeNotificationPort_{ArbName}_{ModeName}_currentMode(

&<variable>, &<previosmode>, &<nextmode> );

4.3.4 组件类型和内部行为

BSW模式管理器是一个服务组件,它为ECU提供模式请求的本地服务。BSW模式管理器的服务组件类型声明了上述所有端口,以及一些内部行为。 

ServiceComponentType BswM {

 …

 InternalBehavior {

 …

 };

};

内部行为取决于相应的模式请求端口的参数BswMRequestProcessing。对于BSWM_DEFERRED,RTE不能执行任何特殊操作,因为BSWM模式管理器会在其BswM_MainFunction中循环读取请求。相反,对于BSWM_IMMEDIATE,RTE必须立即触发模式仲裁。因此,BSW模式管理器需要注册一个触发模式仲裁的触发函数。对于上面的例子,对模式请求的即时处理需要在BSW模式管理器的内部行为中进行以下声明:

RunnableEntity ModeArbitrationRunnable {

 symbol = <mode_arbitration_function>;

 canBeInvokedConcurrently = TRUE;

};

DataReceiveEvent AppModeRequestEvent {

 port = modeRequestPort0;

 dataElement = requestedMode;

 startOnEvent = ModeArbitrationRunnable;

};

5.小结

BswM概念本身并不复杂,就是模式总裁后执行模式控制的动作。但是实际项目中要利用BswM模块来实现ECU控制的关键的整车上下电/休眠唤醒、报文开关、切换调度表等关键需求,而实现这些需求的时候,我们就要熟练的掌握ComM、CanSm、LinSM、EthSM、Com、LinTrcv、CanTrcv等AUTOSAR标准模块提供的服务及其和BswM的端口接口连接。也就是说,在实际项目中要想正真的设计好BswM的功能,就需要我们对整个BswM底层及ECU控制器本身的特定功能十分熟练,这才是BswM设计的难点所在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车电子嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值