首页 > 行业资讯 > 从手写代码到AUTOSAR工具链-BswM应用篇

从手写代码到AUTOSAR工具链-BswM应用篇

时间:2023-06-03 来源: 浏览:

从手写代码到AUTOSAR工具链-BswM应用篇

李漠尘 汽车电子与软件
汽车电子与软件

aestech

每天分享一篇技术文章!

收录于合集

接前面两篇:

1、从手写代码到AUTOSAR工具链 - RTE入门篇

2、从手写代码到AUTOSAR工具链_EcuM应用篇

1 引言

AUTOSAR 规范中, BswM 是最基础也是最好玩的模块之一,相比 EcuM 实操的简单易学,我在学习 BswM 时经历了从不知如何下手到充分感受程序之美的奇妙过程。

本文依旧从传统的手工编程入手,讲述 BswM 所对应手写程序的代码段,重点突出其应用方法,对模块的内部机理仅做简单介绍,感兴趣的读者可参考相应 AUTOSAR 规范。

 

2 BswM 模块简介

下面介绍 BswM 的功用和设计步骤。

 

2.1 模块 概述

BswM 基本功能可以用 2 个不同的任务来描述:模式仲裁( Mode Arbitration )和模式控制( Mode Control )。

模式仲裁部分启动由基于规则的仲裁引发的模式切换,其中的模式请求和模式指示从 SWC 或其它 BSW 模块接收。

模式控制部分通过执行行为列表实现模式切换,行为列表中包含其它 BSW 模块的模式转换操作。

 

2.2 模式仲裁

BswM 执行基于规则的模式仲裁,这些规则由简单的布尔表达式组成。

 

2.2.1 仲裁规则

每个规则是 1 个包含一组模式请求条件的逻辑表达式。当输入模式请求和模式指示发生变化时,或在 BswM 主函数执行过程中,这些规则被评估。评估结果( TRUE FALSE )用于决定相应模式控制行为列表的执行。

 

2.2.2 模式条件和逻辑表达式

逻辑表达式由一个模式仲裁规则组成,该规则可以使用不同的运算符,如 AND OR XOR NOT NAND 。表达式中的每个条目对应 1 个模式请求条件:如果模式条件引用一个 BswM 模式请求端口( BswMModeRequestPort ),条件将确认该请求或指示的模式是否与某个特定的模式相等( EQUAL NOT_EQUAL );如果模式条件引用一个 BswM 事件请求端口( BswMEventRequestPort ),条件将确认该请求端口是置位还是清除( SET CLEAR )。

BswM 事件请求与模式请求的区别在于:在事件请求中,请求者不向 BswM 发送要请求的模式 / 值, BswM 无需评估模式条件,而只需判定接收的事件。当请求者发送 / 调用该事件时, BswM 事件请求端口在处在置位( SET )状态。 BswM 后续可以通过执行 BswM 清除事件请求( BswMClearEventRequest )行为重新使 BswM 事件请求端口处在清除( CLEAR )状态。

2-1 为包含 2 个条件的 BswM 规则示例。

   

2-1: 包含 2 个条件的 BswM 规则示例

 

2.3 模式控制

   BswM 的模式控制部分基于模式仲裁的结果执行所有需要的行为( Action ),这些行为的集合就是行为列表( Action Lists )。 1 个行为列表就是一组按顺序排列的行为,在模式仲裁触发时执行。

 

2. 4   设计步骤

BswM 设计主要在 ISOLAR-AB 环境下进行。

 

2.4.1 ARXML 创建

BswM 模块创建时同步进行。

 

2.4.2 模块配置

ISOLAR-B 中创建并配置 BswM 模块。

 

3 控制实例

   我们继续以应用在重卡主驾座椅上的ECAS 控制器”为例,说明 BswM 的实现过程。该控制器的核心功能是“将座椅高度始终保持在设定位置上”,通过控制进气阀和排气阀的开闭调节空气弹簧的充气量,从而实现加载在座椅的重量发生变化时(不坐人或坐不同重量的人)其高度始终不变。表 3-1 为与之相关的主要部件及其功用。

 

3-1: 座椅 ECAS 控制器相关主要部件及其功用

序号

部件名称

功用

1

高度传感器

实时采集座椅当前高度

2

进气阀和排气阀

1 )进气阀打开,排气阀关闭:空气弹簧充气,座椅高度上升

2 )进气阀关闭,排气阀打开:空气弹簧放气,座椅高度下降

3 )进气阀和排气阀都关闭:空气弹簧无动作,座椅高度不变

4 )进气阀和排气阀都打开:错误状态

 

4 手写代码实现方法

座椅 ECAS 控制器除“高度控制”的核心功能外,还包含以下主要模块:

1 )通信模块:与座椅舒适性模块、控制面板组成 CAN 网络,接收控制面板的高度调节指令,并实时反馈自身状态。

2 )数据存储模块:在 EEPROM 中存储座椅设定高度和部件故障状态等参数。

3 )休眠模块:当监测到 KL15 的状态由 ON 变为 OFF (用户关闭钥匙开关)后,延迟一段时间切断单片机电源(启用自杀电路)。

上述模块的部分或全部在 BswM 中实现,图 4-1 为手工编程方式的流程图。

 

4-1: 座椅 ECAS 控制器 BswM 手工编程流程图

 

5 AUTOSAR 工具链实现方法

本章介绍在 ISOLAR-AB 中创建和配置“座椅 ECAS 控制器” BswM 模块的步骤。

 

5.1 设计目标

BswM 模块的设计目标是实现图 5-1 所示的状态机。

 

5-1: BswM 状态机

 

5. 2  BswM 模块创建和通用配置

首先需要在 ISOLAR-B 中创建 BswM 模块及其 ARXML 文件,再对其进行“通用配置”,这是后续一系列配置操作的基础。

 

5.2.1 BswM 模块创建

按照图 5-2 和图 5-3 所示的步骤创建 BswM 模块。

   

5-2: BswM 模块创建启动

5-3: BswM 模块创建操作

 

5.2.2 BswM 通用配置

按照图 5-4 所示进入 BswM 通用配置界面,表 5-1 和表 5-2 为其配置情况。

   

5-4: BswM 通用配置界面进入

 

5-1: BswM 通用参数配置

序号

配置项

配置值

说明

1

ShortName

BswMGeneral

配置箱名称

2

BswMCanSMEnabled

false

禁止 CanSM 模块与 BswM API 相关

3

BswMComMEnabled

true

使能 ComM 模块与 BswM API 相关

4

BswMDcmEnabled

true

使能 Dcm 模块与 BswM API 相关

5

BswMDevErrorDetect

true

错误检测和通知使能

6

BswMEcuMEnabled

true

使能 EcuM 模块与 BswM API 相关

7

BswMEthIfEnabled

false

禁止 EthIf 模块与 BswM API 相关

8

BswMEthSMEnabled

false

禁止 EthSM 模块与 BswM API 相关

9

BswMFrSMEnabled

false

禁止 FrSM 模块与 BswM API 相关

10

BswMGenericRequestEnable

true

使能通用请求与 BswM API 相关

11

BswMJ1939DcmEnabled

false

禁止 J1939Dcm 模块与 BswM API 相关

12

BswMJ1939NmEnabled

false

禁止 J1939Nm 模块与 BswM API 相关

13

BswMLinSMEnabled

false

禁止 LinSM 模块与 BswM API 相关

14

BswMLinTPEnabled

false

禁止 LinTP 模块与 BswM API 相关

15

BswMMainFunctionPeriod

0.01

BswM 主函数调用周期: 0.01s

16

BswMNmEnabled

false

禁止 Nm 模块与 BswM API 相关

17

BswMNvMEnabled

false

禁止 NvM 模块与 BswM API 相关

18

BswMRbMaxNumOfRules

30

指定 BswM 模块的每个变量能够被配置的最大规则数量

19

BswMSchMEnabled

true

使能 SchM 模块与 BswM API 相关

20

BswMSdEnabled

false

禁止 Sd 模块与 BswM API 相关

21

BswMVersionInfoApi

true

使能用 BswM_GetVersionInfo() 服务读取版本信息

22

BswMWdgMEnabled

false

使能 WdgM 模块与 BswM API 相关

23

BswMRbDebugEnable

false

如果模式请求被中断,不记录任何信息

24

BswMRbIntrptQueueMaxSize

5

队列中最大的 BswM 请求

 

5-2: BswM 用户包含文件

序号

配置项

配置值

说明

1

ShortName

BswMUserIncludeFiles

配置箱名称

2

BswMUserIncludeFile

Rte_main.h

CanIf.h

ComM.h

Com.h

PduR.h

EcuM.h

Dcm.h

calibrate.h

BswM 模块包含的头文件

 

5.3 模式配置

下面进行 BswM 模式创建和相关配置。

 

5.3.1 ARXML 创建

ISOLAR-AB 中创建 BswM_ModeMapping.arxml 及其AUTOSAR_BswM ”的 AR Package

 

5.3.2 打开 AUTOSAR 浏览器窗口

后续操作在AUTOSAR Explore ”窗口下进行,图 5-5 为显示该窗口的方式。

   

5-5: AUTOSAR Explore 窗口显示方式

 

5.3.3 元素创建

AUTOSAR_BswM 下创建名为“ ModeDeclarationGroups ”的子 AR Package ,再如图 5-6 所示为其建立元素( Elements ),元素类型和名称如表 5-3 所列。

5-6: AR Package 元素创建

 

5-3: AR Package 元素创建表

序号

元素类型

元素名称

1

Mode Declaration Group

MDG_ECUM_STATE

2

DataType Mapping Set

ECUM_STATE_Mapping

5-7: AR Package 元素创建执行效果

 

5.3.4 模式创建

5-8 BswM 模式的创建方法,表 5-4 为应创建的 BswM 模式。

 

5-8: BswM 模式操作方法

 

5-4: BswM 模式

模式值

模式名称

含义

1

ECUM_STATE_STARTUP_ONE

初始化模式 1 EEPROM 初始化和数据读取

2

ECUM_STATE_STARTUP_TWO

初始化模式 2 :通信初始化、 RTE 启动

3

ECUM_STATE_RUN

初始化模式 3 :通信启动、应用层初始化

4

ECUM_STATE_APP_RUN

运行模式:程序正常执行

5

ECUM_STATE_POST_RUN

预休眠模式:通信关闭、 EEPROM 数据写入

6

ECUM_STATE_PREP_SHUTDOWN

预下电模式: RTE 关闭

7

ECUM_STATE_SHUTDOWN

下电模式:控制器下电

 

5.3.5 参数配置

需要对 BswM 起始状态等参数进行配置。

 

5-9: BswM 模式参数配置界面

 

5-5: BswM 模式参数配置

序号

配置项

配置值

说明

1

ShortName

MDG_ECUM_STATE

配置箱名称

2

Category

EXPLICIT_ORDER

3

ShortNamePattern

-

4

OnTransitionValue

-

5

InitialMode

ECUM_STATE_STARTUP_ONE

BswM 初始模式

 

5.3.6 映射创建

按照图 5-10 的方法进行。

 

5-10: 映射创建

 

5.4 行为配置

5-11 BswM 行为配置方法,表 5-6 列出了应创建的 BswM 行为。

   

5-11: BswM 行为配置

 

5-6: BswM 行为

序号

行为配置描述

含义

1

BswM_AI_BswMSwitchStartupTwo

ShortName BswMSchMSwitch

BswMSchMModeDeclarationGroupRef None

BswMSchMSwitchedMode ECUM_STATE_STARTUP_TWO

BswM 切换至初始化模式 2

2

BswM_AI_BswMSwitchRun

ShortName BswMSchMSwitch

BswMSchMModeDeclarationGroupRef None

BswMSchMSwitchedMode ECUM_STATE_RUN

BswM 切换至初始化模式 3

3

BswM_AI_BswMSwitchAppRun

ShortName BswMSchMSwitch

BswMSchMModeDeclarationGroupRef None

BswMSchMSwitchedMode ECUM_STATE_APP_RUN

BswM 切换至运行模式

4

BswM_AI_BswMSwitchPostRun

ShortName BswMSchMSwitch

BswMSchMModeDeclarationGroupRef None

BswMSchMSwitchedMode ECUM_STATE_POST_RUN

BswM 切换至预休眠模式

5

BswM_AI_BswMSwitchPrepShutdown

ShortName BswMSchMSwitch

BswMSchMModeDeclarationGroupRef None

BswMSchMSwitchedMode ECUM_STATE_PREP_SHUTDOWN

BswM 切换至预下电模式

6

BswM_AI_BswMSwitchShutdown

ShortName BswMSchMSwitch

BswMSchMModeDeclarationGroupRef None

BswMSchMSwitchedMode ECUM_STATE_SHUTDOWN

BswM 切换至下电模式

7

BswM_AI_GoDown

ShortName BswMUserCallout

BswMUserCalloutFunction EcuM_GoDown(42)

EcuM 关闭

8

BswM_AI_ComMReqFullComm_User0

ShortName BswMComMModeSwitch

BswMComMRequestedMode BSWM_FULL_COM

BswMComMUserRef

ComMUser_Can_Network_BCAN_Channel

BCAN 节点模式为全通信

9

BswM_AI_ComMReqNoComm_User0

ShortName BswMComMModeSwitch

BswMComMRequestedMode BSWM_NO_COM

BswMComMUserRef

ComMUser_Can_Network_BCAN_Channel

BCAN 节点模式为无通信

10

BswM_AI_ComMCommAllowed_Can1

ShortName BswMComMAllowCom

BswMComAllowed true

BswMComMAllowChannelRef

ComMChannel_Can_Network_BCAN_Channel

CAN1 节点通信允许

11

BswM_AI_ComMCommNotAllowed_Can1

ShortName BswMComMAllowCom

BswMComAllowed false

BswMComMAllowChannelRef

ComMChannel_Can_Network_BCAN_Channel

CAN1 节点通信禁止

12

BswM_AI_RteTimerStart

ShortName BswM_UserCallout

BswMUserCalloutFunction IC_RteTimerStart()

RTE 启动

13

BswM_AI_RteStop

ShortName BswMUserCallout

BswMUserCalloutFunction Rte_Stop()

RTE 停止

14

BswM_AI_CanIfInit

ShortName BswMUserCallout

BswMUserCalloutFunction CanIf_Init(NULL_PTR)

CanIf 初始化

15

BswM_AI_ComMInit

ShortName BswMUserCallout

BswMUserCalloutFunction ComM_Init(NULL_PTR)

ComM 初始化

16

BswM_AI_ComInit

ShortName BswMUserCallout

BswMUserCalloutFunction Com_Init(NULL_PTR)

Com 初始化

17

BswM_AI_PduRInit

ShortName BswMUserCallout

BswMUserCalloutFunction PduR_Init(&PduR_Config)

PduR 初始化

18

BswM_AI_EcuM_MainFunction

ShortName BswMUserCallout

BswMUserCalloutFunction Loop_EcuM_MainFunction()

调用 EcuM 主函数

19

BswM_AI_ComMDeInit

ShortName BswMUserCallout

BswMUserCalloutFunction ComM_DeInit()

ComM 反向初始化

20

BswM_AI_StartPdu

ShortName BswMPduGroupSwitch

BswMPduGroupSwitchReinit false

BswMDisabledPduGroupRef NONE

BswMEnabledPduGroupRef ComIPduGroup_Rx

ComIPduGroup_Tx

Pdu 启动

21

BswM_AI_StopPdu

ShortName BswMPduGroupSwitch

BswMPduGroupSwitchReinit false

BswMDisabledPduGroupRef ComIPduGroup_Rx

ComIPduGroup_Tx

BswMEnabledPduGroupRef NONE

Pdu 停止

22

BswM_AI_ PowerOff

ShortName BswMUserCallout

BswMUserCalloutFunction PowerControlOff()

系统下电

23

BswM_AI_ App _Init

ShortName BswMUserCallout

BswMUserCalloutFunction Controller_initialize ()

APP 初始化

24

BswM_AI_ Eeprom ReadAll

ShortName BswMUserCallout

BswMUserCalloutFunction InitEepromParameter()

EEPROM 全部数据读取

25

BswM_AI_DcmInit

ShortName BswMUserCallout

BswMUserCalloutFunction Dcm_Init()

Dcm 初始化

26

BswM_AI_BswMSwitch Startup One

ShortName BswMSchMSwitch

BswMSchMModeDeclarationGroupRef None

BswMSchMSwitchedMode ECUM_STATE_STARTUP_ONE

BswM 切换至初始化模式 1

27

BswM_AI_ Eeprom WriteAll

ShortName BswMUserCallout

BswMUserCalloutFunction SaveParameterToEeprom()

EEPROM 全部数据写入

 

5.5 行为列表配置

5-12 和图 5-13 BswM 行为列表配置方法。

 

5-12: BswM 行为列表操作

 

5-13: BswM 行为列表条目参数配置

 

  下面逐一列出项目需要配置的行为列表。

 

5-7: BswM 行为列表

序号

行为列表名称

行为列表名称执行

功用

1

BswM_AL_BswMSwitchStartupTwo

BSWM_CONDITION

进入初始化模式 2 的行为序列

2

BswM_AL_BswMSwitchRun

BSWM_TRIGGER

进入初始化模式 3 的行为序列

3

BswM_AL_BswMSwitchAppRun

BSWM_TRIGGER

进入运行模式的行为序列

4

BswM_AL_BswMSwitchPrepShutdown

BSWM_TRIGGER

进入预下电模式的行为序列

5

BswM_AL_BswMSwitchShutdown

BSWM_TRIGGER

进入下电模式的行为序列

6

BswM_AL_BswMSwitchGoDown

BSWM_TRIGGER

控制器下电

7

BswM_AL_BswMSwitchOne

BSWM_TRIGGER

进入初始化模式 1 的行为序列

 

BSWM_CONDITION :规则每次被评估时行为列表都要执行; BSWM_TRIGGER :规则评估结果改变时行为列表才执行

 

5-8: BswM_AL_BswMSwitchStartupTwo 列表条目配置

序号

行为列表条目

失败时中止

索引

行为列表条目引用

1

BswM_ALI_ Eeprom Read All

FALSE

0

BswM_AI_ Eeprom ReadAll

2

BswM_ALI_BswMStartupTwo

FALSE

1

BswM_AI_BswMSwitchStartupTwo

 

5-9: BswM_AL_BswMSwitchRun 列表配置

序号

行为列表条目

失败时中止

索引

行为列表条目引用

1

BswM_ALI_CanIfInit

FALSE

0

BswM_AI_CanIfInit

2

BswM_ALI_PduRInit

FALSE

1

BswM_AI_PduRInit

3

BswM_ALI_ComInit

FALSE

2

BswM_AI_ComInit

4

BswM_ALI_DcmInit

FALSE

3

BswM_AI_DcmInit

5

BswM_ALI_ComMInit

FALSE

4

BswM_AI_ComMInit

6

BswM_ALI_RteTimerStart

FALSE

5

BswM_AI_RteTimerStart

7

BswM_ALI_BswMRun

FALSE

6

BswM_AI_BswMSwitchRun

 

5-10: BswM_AL_BswMSwitchAppRun 列表配置

序号

行为列表条目

失败时中止

索引

行为列表条目引用

1

BswM_ALI_StartPdu

FALSE

0

BswM_AI_StartPdu

2

BswM_ALI_AllowComm_Can0

FALSE

1

BswM_AI_ComMCommAllowed_Can1

3

BswM_ALI_ComMReqFullComm_User0

FALSE

2

BswM_AI_ComMReqFullComm_User0

4

BswM_ALI_ App_Init

FALSE

3

BswM_AI_ App _Init

5

BswM_ALI_BswMAppRun

FALSE

4

BswM_AI_BswMSwitchAppRun

 

5-11: BswM_AL_BswMSwitchPrepShutdown 列表配置

序号

行为列表条目

失败时中止

索引

行为列表条目引用

1

BswM_ALI_NotAllowComm_Can0

FALSE

0

BswM_AI_ComMCommNotAllowed_Can1

2

BswM_ALI_ComMReqNoComm_User0

FALSE

1

BswM_AI_ComMReqNoComm_User0

3

BswM_ALI_StopPdu

FALSE

2

BswM_AI_StopPdu

4

BswM_ALI_WriteAll

FALSE

3

BswM_AI_ Eeprom WriteAll

5

BswM_ALI_BswMPrepShutdown

FALSE

4

BswM_AI_BswMSwitchPrepShutdown

 

5-12: BswM_AL_BswMSwitchShutdown 列表配置

序号

行为列表条目

失败时中止

索引

行为列表条目引用

1

BswM_ALI_RteStop

FALSE

0

BswM_AI_RteStop

2

BswM_ALI_ComMDeInit

FALSE

1

BswM_AI_ComMDeInit

3

BswM_ALI_BswMShutdown

FALSE

2

BswM_AI_BswMSwitchShutdown

 

5-13: BswM_AL_BswMSwitchGoDown 列表配置

序号

行为列表条目

失败时中止

索引

行为列表条目引用

1

BswM_ALI_GoDown

FALSE

0

BswM_AI_GoDown

2

BswM_ALI_EcuM_MainFunction

FALSE

1

BswM_AI_EcuM_MainFunction

3

BswM_ALI_ PowerOff

FALSE

2

BswM_AI_ PowerOff

 

5-14: BswM_AL_BswMSwitchOne 列表配置

序号

行为列表条目

失败时中止

索引

行为列表条目引用

1

BswM_ALI_BswMStartupOne

FALSE

0

BswM_AI_BswMSwitch Startup One

 

5.6 请求端口配置

BswMModeRequestPort ”配置箱的每个实例定义 1 个模式请求接口,用于向 BswM 请求或指示模式。这些接口用端口或 C 函数实现,基于该请求源是 SWC 还是 BSW 模块。

共有 3 种不同的模式请求类型。

1 )来自 SWC 的模式请求;

2 )来自其它 BSW 模块的模式请求,如 DCM

3 )来自 RTE 或其它 BSW 模块的状态 / 模式指示,如总线特定状态管理器。

 

5 . 6.1   请求端口创建

5-14 BswM 请求端口配置方法,表 5-15 列出了创建的请求端口。

 

5-14: BswM 请求端口配置

 

5-15: BswM 请求端口列表

序号

BswM 模式请求端口

BswM 请求处理

功用

1

BswM_MRP_BswM_MDG

BSWM_DEFERRED

2

BswM_MRP_SwcModeRequest

BSWM_DEFERRED

 

BSWM_DEFERRED :当接收到模式请求时,模式仲裁处理延后到 BswM 主函数中进行; BSWM_IMMEDIATE :当接收到模式请求时,模式仲裁处理立即执行

 

5.6.2   模式请求源 配置

BswMModeRequestSource ”配置箱指定模式请求源或状态 / 模式指示。模式请求者可以是 SWC 或其它 BSW 模块,如总线特定状态管理器。

 

5-16: 模式请求源配置子箱说明

序号

配置子箱名称

说明

1

BswMBswModeNotification

模式请求源来自另一个 BSW 模块

2

BswMSwcModeRequest

模式请求源来自 SWC

 

5-17: BswM_MRP_BswM_MDG 端口参数配置

序号

配置项

配置值

说明

1

ShortName

BswMBswModeNotification

配置箱名称

2

BswMRbBswModeDeclarationGroup

/AUTOSAR_BswM/ModeDeclarationGroups/MDG_ECUM_STATE

模式声明组的引用

 

5-18: BswM_MRP_SwcModeRequest 端口参数配置

序号

配置项

配置值

说明

1

ShortName

BswMSwcModeRequest

配置箱名称

2

BswMRbModeRequestQueueSize

0

模式通信无队列

3

BswMSwcModeRequestVariableDataPrototypeRef

VDP_uint16

S/R 接口请求模式数据元素的引用: uint16

 

5.7 模式条件 配置

BswMModeCondition ”配置箱描述 BswM 模式条件,这些条件既可以用于生成 1 个规则,也可以作为逻辑表达式的一部分。

 

5.7 .1 模式条件创建

5-15 和图 5-16 BswM 模式条件配置方法,表 5-19 列出应创建的模式条件。

 

5-15: BswM 模式条件配置

 

5-16: BswM 模式条件参数配置

 

5-19: BswM 模式条件列表

序号

名称

功用

1

BswM_MC_BswM_StartupOne

判定程序处在初始化模式 1 的条件

2

BswM_MC_BswM_StartupTwo

判定程序处在初始化模式 2 的条件

3

BswM_MC_BswM_Run

判定程序处在初始化模式 3 的条件

4

BswM_MC_BswM_PostRun

判定程序处在预休眠模式的条件

5

BswM_MC_BswM_PrepShutdown

判定程序处在预下电模式的条件

6

BswM_MC_BswM_Shutdown

判定程序处在下电模式的条件

 

5 . 7.2   模式条件 值参数 配置

BswMConditionValue ”配置箱包含用于模式请求比较的模式类型和值的参数和引用,它由 2 个子箱组成,如表 5-20 所列。

 

5-20: 模式条件值配置子箱

序号

名称

功用

1

BswMBswMode

定义 BSW 中的值和模式类型

2

BswMModeDeclaration

当模式对应一个模式请求或模式指示的接口,则需要配置这个子箱。模式声明定义在 SWC 的模板中,故需要使用与模式声明对应的外部引用

 

5-21: BswM_MC_BswM_StartupOne 模式条件配置

序号

配置项

配置值

说明

1

ShortName

BswM_MC_BswM_StartupOne

模式条件名称

2

BswMConditionType

BSWM_EQUALS

指定模式条件评估的比较类型

3

BswMConditionMode

BswM_MRP_BswM_MDG

模式请求端口或事件请求端口的引用

4

ShortName

BswMConditionValue

配置箱名称

5

ShortName

BswMModeDeclaration

配置箱名称

6

BswMModeValueRef

ECUM_STATE_STARTUP_ONE

与该条件相对应模式请求的模式声明的外部引用

 

①BSWM_EQUALS |BSWM_EQUALS_NOT :被 BswMConditionMode 引用的 BswM 模式请求端口与在 BswMConditionValue 中配置的值相比较,相等或不等;

BSWM_EVENT_IS_SET | BSWM_EVENT_IS_CLEARED :被 BswMConditionMode 引用的 BswM 事件请求端口被检查为“置位”或“清除”

BswM_MRP_BswM_MDG MDG_ECUM_STATE ==ECUM_STATE_STARTUP_ONE ,条件成立;否则条件不成立

 

5-22: BswM_MC_BswM_StartupTwo 模式条件配置

序号

配置项

配置值

说明

1

ShortName

BswM_MC_BswM_StartupTwo

模式条件名称

2

BswMConditionType

BSWM_EQUALS

指定模式条件评估的比较类型

3

BswMConditionMode

BswM_MRP_BswM_MDG

模式请求端口或事件请求端口的引用

4

ShortName

BswMConditionValue

配置箱名称

5

ShortName

BswMModeDeclaration

配置箱名称

6

BswMModeValueRef

ECUM_STATE_STARTUP_TWO

与该条件相对应模式请求的模式声明的外部引用

 

5-23: BswM_MC_BswM_Run 模式条件配置

序号

配置项

配置值

说明

1

ShortName

BswM_MC_BswM_Run

模式条件名称

2

BswMConditionType

BSWM_EQUALS

指定模式条件评估的比较类型

3

BswMConditionMode

BswM_MRP_BswM_MDG

模式请求端口或事件请求端口的引用

4

ShortName

BswMConditionValue

配置箱名称

5

ShortName

BswMModeDeclaration

配置箱名称

6

BswMModeValueRef

ECUM_STATE_RUN

与该条件相对应模式请求的模式声明的外部引用

 

5-24: BswM_MC_BswM_PostRun 模式条件配置

序号

配置项

配置值

说明

1

ShortName

BswM_MC_BswM_PostRun

模式条件名称

2

BswMConditionType

BSWM_EQUALS

指定模式条件评估的比较类型

3

BswMConditionMode

BswM_MRP_SwcModeRequest

模式请求端口或事件请求端口的引用

4

ShortName

BswMConditionValue

配置箱名称

5

ShortName

BswMModeDeclaration

配置箱名称

6

BswMModeValueRef

ECUM_STATE_POST_RUN

与该条件相对应模式请求的模式声明的外部引用

 

SWC 中的请求 == ECUM_STATE_POST_RUN ,条件成立;否则条件不成立

 

5-25: BswM_MC_BswM_PrepShutdown 模式条件配置

序号

配置项

配置值

说明

1

ShortName

BswM_MC_BswM_PrepShutdown

模式条件名称

2

BswMConditionType

BSWM_EQUALS

指定模式条件评估的比较类型

3

BswMConditionMode

BswM_MRP_BswM_MDG

模式请求端口或事件请求端口的引用

4

ShortName

BswMConditionValue

配置箱名称

5

ShortName

BswMModeDeclaration

配置箱名称

6

BswMModeValueRef

ECUM_STATE_PREP_SHUTDOWN

与该条件相对应模式请求的模式声明的外部引用

 

5-26: BswM_MC_BswM_Shutdown 模式条件配置

序号

配置项

配置值

说明

1

ShortName

BswM_MC_BswM_Shutdown

模式条件名称

2

BswMConditionType

BSWM_EQUALS

指定模式条件评估的比较类型

3

BswMConditionMode

BswM_MRP_BswM_MDG

模式请求端口或事件请求端口的引用

4

ShortName

BswMConditionValue

配置箱名称

5

ShortName

BswMModeDeclaration

配置箱名称

6

BswMModeValueRef

ECUM_STATE_SHUTDOWN

与该条件相对应模式请求的模式声明的外部引用

 

5.8 逻辑表达式配置

BswMLogicalExpression ”配置箱包含用于模式仲裁的逻辑表达式,其由一组参数和一个逻辑运算符组成。

每一个参数既可以是模式条件,又可以是子表达式,用以定义更加复杂的逻辑表达式。

 

5.8 .1 逻辑表达式创建

   5-17 BswM 逻辑表达式的配置方法,表 5-27 列出应创建的逻辑表达式。

 

5-17: BswM 逻辑表达式配置

 

5-27: BswM 逻辑表达式列表

序号

名称

功用

1

BswM_LE_StartupOne

判定当前模式是否为初始化模式 1

2

BswM_LE_StartupTwo

判定当前模式是否为初始化模式 2

3

BswM_LE_Run

判定当前模式是否为初始化模式 3

4

BswM_LE_PostRun

判定当前模式是否为预休眠模式

5

BswM_LE_PrepShutdown

判定当前模式是否为预下电模式

6

BswM_LE_Shutdown

判定当前模式是否为下电模式

 

5 . 8. 2 逻辑表达式 参数 配置

按照下面一组表格配置 6 个逻辑表达式的参数。

 

5-28: BswM_LE_StartupOne 逻辑表达式配置

序号

配置项

配置值

说明

1

ShortName

BswM_LE_StartupOne

逻辑表达式名称

2

BswMLogicalOperator

-

指定用于逻辑表达式的运算符,如果表达式仅包含单一条件,则此配置项不起作用

3

BswMArgumentRef

BswM_MC_BswM_StartupOne

选择模式条件或子表达式的引用

 

5-29: BswM_LE_StartupTwo 逻辑表达式配置

序号

配置项

配置值

说明

1

ShortName

BswM_LE_StartupTwo

逻辑表达式名称

2

BswMLogicalOperator

-

指定用于逻辑表达式的运算符,如果表达式仅包含单一条件,则此配置项不起作用

3

BswMArgumentRef

BswM_MC_BswM_StartupTwo

选择模式条件或子表达式的引用

 

5-30: BswM_LE_Run 逻辑表达式配置

序号

配置项

配置值

说明

1

ShortName

BswM_LE_Run

逻辑表达式名称

2

BswMLogicalOperator

-

指定用于逻辑表达式的运算符,如果表达式仅包含单一条件,则此配置项不起作用

3

BswMArgumentRef

BswM_MC_BswM_Run

选择模式条件或子表达式的引用

 

5-31: BswM_LE_PostRun 逻辑表达式配置

序号

配置项

配置值

说明

1

ShortName

BswM_LE_PostRun

逻辑表达式名称

2

BswMLogicalOperator

-

指定用于逻辑表达式的运算符,如果表达式仅包含单一条件,则此配置项不起作用

3

BswMArgumentRef

BswM_MC_BswM_PostRun

选择模式条件或子表达式的引用

 

5-32: BswM_LE_PrepShutdown 逻辑表达式配置

序号

配置项

配置值

说明

1

ShortName

BswM_LE_PrepShutdown

逻辑表达式名称

2

BswMLogicalOperator

-

指定用于逻辑表达式的运算符,如果表达式仅包含单一条件,则此配置项不起作用

3

BswMArgumentRef

BswM_MC_BswM_PrepShutdown

选择模式条件或子表达式的引用

 

5-33: BswM_LE_Shutdown 逻辑表达式配置

序号

配置项

配置值

说明

1

ShortName

BswM_LE_Shutdown

逻辑表达式名称

2

BswMLogicalOperator

-

指定用于逻辑表达式的运算符,如果表达式仅包含单一条件,则此配置项不起作用

3

BswMArgumentRef

BswM_MC_BswM_Shutdown

选择模式条件或子表达式的引用

 

5.9 规则配置

BswMRule ”配置箱的每个实例描述一条 BswM 仲裁规则,该规则由一个简单的模式条件或较复杂的逻辑表达式组成。这个配置箱同时引用对应规则判定为 TRUE FALSE 时激活的行为列表。

 

5.9 .1 规则创建

5-18 BswM 规则的配置方法,表 5-34 列出应创建的规则。

 

5-18: BswM 规则配置

 

5-34: BswM 规则列表

序号

名称

功用

1

BswM_AR_StartupOne

初始化模式 1 的程序执行规则

2

BswM_AR_StartupTwo

初始化模式 2 的程序执行规则

3

BswM_AR_Run

初始化模式 3 的程序执行规则

4

BswM_AR_PostRun

预休眠模式的程序执行规则

5

BswM_AR_Shutdown

预下电模式的程序执行规则

6

BswM_AR_Godown

下电模式的程序执行规则

 

5.9 .2 规则参数配置

按照下面一组表格配置 6 个规则的参数。

 

5-35: BswM_AR_StartupOne 逻辑表达式配置

序号

配置项

配置值

说明

1

ShortName

BswM_AR_StartupOne

规则名称

2

BswMNestedExecutionOnly

false

独立规则,每次适用时都要进行评估

3

BswMRuleInitState

BSWM_FALSE

这个参数作为 BswM 复位 / 初始化行为的一部分。行为列表将在规则评估结果与前次相比发生变化时执行,该参数定义规则“前次评估结果”的初始值

4

BswMRuleExpressionRef

BswM_LE_StartupOne

用于评估规则的逻辑表达式的引用

5

BswMRuleFalseActionList

-

逻辑表达式判定结果为 FALSE 时执行的行为列表

6

BswMRuleTrueActionList

BswM_AL_BswMSwitchStartupTwo

逻辑表达式判定结果为 TRUE 时执行的行为列表

 

5-36: BswM_AR_StartupTwo 逻辑表达式配置

序号

配置项

配置值

说明

1

ShortName

BswM_AR_StartupTwo

规则名称

2

BswMNestedExecutionOnly

false

独立规则,每次适用时都要进行评估

3

BswMRuleInitState

BSWM_FALSE

这个参数作为 BswM 复位 / 初始化行为的一部分。行为列表将在规则评估结果与前次相比发生变化时执行,该参数定义规则“前次评估结果”的初始值

4

BswMRuleExpressionRef

BswM_LE_StartupTwo

用于评估规则的逻辑表达式的引用

5

BswMRuleFalseActionList

-

逻辑表达式判定结果为 FALSE 时执行的行为列表

6

BswMRuleTrueActionList

BswM_AL_BswMSwitchRun

逻辑表达式判定结果为 TRUE 时执行的行为列表

 

5-37: BswM_AR_Run 逻辑表达式配置

序号

配置项

配置值

说明

1

ShortName

BswM_AR_Run

规则名称

2

BswMNestedExecutionOnly

false

独立规则,每次适用时都要进行评估

3

BswMRuleInitState

BSWM_FALSE

这个参数作为 BswM 复位 / 初始化行为的一部分。行为列表将在规则评估结果与前次相比发生变化时执行,该参数定义规则“前次评估结果”的初始值

4

BswMRuleExpressionRef

BswM_LE_Run

用于评估规则的逻辑表达式的引用

5

BswMRuleFalseActionList

-

逻辑表达式判定结果为 FALSE 时执行的行为列表

6

BswMRuleTrueActionList

BswM_AL_BswMSwitchAppRun

逻辑表达式判定结果为 TRUE 时执行的行为列表

 

5-38: BswM_AR_PostRun 逻辑表达式配置

序号

配置项

配置值

说明

1

ShortName

BswM_AR_PostRun

规则名称

2

BswMNestedExecutionOnly

false

独立规则,每次适用时都要进行评估

3

BswMRuleInitState

BSWM_FALSE

这个参数作为 BswM 复位 / 初始化行为的一部分。行为列表将在规则评估结果与前次相比发生变化时执行,该参数定义规则“前次评估结果”的初始值

4

BswMRuleExpressionRef

BswM_LE_PostRun

用于评估规则的逻辑表达式的引用

5

BswMRuleFalseActionList

-

逻辑表达式判定结果为 FALSE 时执行的行为列表

6

BswMRuleTrueActionList

BswM_AL_BswMSwitchPrepShutdown

逻辑表达式判定结果为 TRUE 时执行的行为列表

 

5-39: BswM_AR_Shutdown 逻辑表达式配置

序号

配置项

配置值

说明

1

ShortName

BswM_AR_Shutdown

规则名称

2

BswMNestedExecutionOnly

false

独立规则,每次适用时都要进行评估

3

BswMRuleInitState

BSWM_FALSE

这个参数作为 BswM 复位 / 初始化行为的一部分。行为列表将在规则评估结果与前次相比发生变化时执行,该参数定义规则“前次评估结果”的初始值

4

BswMRuleExpressionRef

BswM_LE_PrepShutdown

用于评估规则的逻辑表达式的引用

5

BswMRuleFalseActionList

-

逻辑表达式判定结果为 FALSE 时执行的行为列表

6

BswMRuleTrueActionList

BswM_AL_BswMSwitchShutdown

逻辑表达式判定结果为 TRUE 时执行的行为列表

 

5-40: BswM_AR_Godown 逻辑表达式配置

序号

配置项

配置值

说明

1

ShortName

BswM_AR_Godown

规则名称

2

BswMNestedExecutionOnly

false

独立规则,每次适用时都要进行评估

3

BswMRuleInitState

BSWM_FALSE

这个参数作为 BswM 复位 / 初始化行为的一部分。行为列表将在规则评估结果与前次相比发生变化时执行,该参数定义规则“前次评估结果”的初始值

4

BswMRuleExpressionRef

BswM_LE_Shutdown

用于评估规则的逻辑表达式的引用

5

BswMRuleFalseActionList

-

逻辑表达式判定结果为 FALSE 时执行的行为列表

6

BswMRuleTrueActionList

BswM_AL_BswMSwitchGoDown

逻辑表达式判定结果为 TRUE 时执行的行为列表

 

5.10 数据类型映射集配置

该箱包含数据类型映射集的引用,图 5-19 为其配置方法,表 5-41 列出配置项。

 

5-19: 数据类型映射集配置

 

5-41: 数据类型映射集参数 配置

序号

配置项

配置值

说明

1

ShortName

BswMDataTypeMappingSets

配置箱名称

2

BswMDataTypeMappingSetRef

ECUM_STATE_Mapping

数据类型映射集的引用

 

5.11 RTE 设计

由上文的设计过程可以看出,ECAS 控制器”软件共有 7 个模式,单片机上电后程序自动进入初始化模式 1 、随后无条件进入初始化模式 2 、初始化模式 3 、运行模式,并在 KL15 ON 时保持在运行模式。一旦检测到 KL15 ON 变为 OFF ,再依次进入预休眠模式、预下电模式和下电模式。这就意味着只有从运行模式到预休眠模式的切换需要程序手动进行,其它模式切换均在 BswM 模块内自动完成。

RTE 设计过程中,需要在某 SWC 中创建一个 uint16 类型的 PPort 并与 BswM 模块的 RP_BswMArbitration_BswM_MRP_SwcModeRequest 端口连接,之后在相应运行实体内完成 KL15 状态监测和切换到预休眠模式的代码, SWC 操作非本文的重点内容,这里不再详细描述,感兴趣的读者可参照《从手写代码到 AUTOSAR 工具链 _RTE 入门篇》。

 

5.12 BswM 模块设计总结

不知道大家赏完前文的设计步骤后,有没有 “很复杂、很混乱”的感觉,反正我在最初接触到这个模块时,内心是崩溃的。配置箱中行为、行为列表、端口、条件、逻辑表达式、规则 ...... 不但不知道是做什么用的,连搞懂它们的配置次序似乎都是件挺困难的事情。

现在我从手写代码老工程师的角度来阐述 BswM 模块:整个嵌入式程序中有若干个模式, BswM 模块的任务就是按照一定规则来实现这些模式间的切换,即实现与下文类似的伪代码段。

......

/* 程序处在某个运行模式 */

if((a==1) && (b==2))

{

     执行代码段 A;

}

else

{

     执行代码段 B;

}

......

BswM 的设计过程就是对代码段中元素进行配置的过程。

1 )请求端口: a b 相当于 BswM 中的请求端口;

2 )模式条件: a==1 b==2 相当于 BswM 中的模式条件;

3 )逻辑表达式: (a==1) && (b==2) 相当于 BswM 中的逻辑表达式;

4 )规则:整个代码段相当于 BswM 中的规则;

5 )行为和行为列表:代码段 A 和代码段 B 相当于 BswM 中的 2 个行为列表;每个行为列表可由一个或多个行为组成。

这样讲解,是不是感觉明白多了?

 

6 下期预告

从去年 8 月至今,我连续承接了 2 个自动驾驶项目 VCU 基础软件的开发工作,在此过程中首次尝试了在 ISOLAR_AB 环境中“创建工程并逐一添加模块”的开发方式。在下期中,我想和大家探讨下如何“从无到有”的开发一个完整的 AUTOSAR 项目,与之前讲述的 RTE EcuM BswM 模块相结合,希望能达到“以点带面、以面促点、点面结合、全面发展”的学习效果。

—END—

添加下方信加入汽专业交流群

(仅限专业人士,添加备注单位+姓名)

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐