欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

AUTOSAR——MBD应用之NM模块Stateflow实现

发布时间:2024/3/13 编程问答 130 豆豆
生活随笔 收集整理的这篇文章主要介绍了 AUTOSAR——MBD应用之NM模块Stateflow实现 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

一、前言

二、Autosar NM概括

2.1 术语

2.2  PDU

2.3 文件结构

2.4 NM结构体

2.5 状态机

三、Stateflow实现

3.1 NM接口定义

3.2 NM功能实现

3.3 NM模块测试

3.4 NM模块部署


一、前言

        基于MBD的应用开发已经非常常见,在开发过程中以简明,高效的优点被诸多ECU开发人员青睐,有的主机厂可能也会直接要求供应商采用这种方式开发。一个功能或者模块只要设计好外部接口,也可以独立开发然后嵌入工程中。Autosar的nm状态机UML与stateflow画图如出一辙,做起来快速简洁。

二、Autosar NM概括

2.1 术语

 NM (NetWork Management) Message:网络激活,发送本节点网络报文及应用报文 一般定义NM ID(0x503)第一个字节05是网段ID,03表示该节点在该网段编号

App Message:客户定义的Rx\Tx报文;收到非网络报文一般ECU需保持一定时间后休眠,在该时间内收到NMM,网络激活正常通信

PN(Partial Network):该功能是必须是该节点 指定的NM报文才能唤醒节点网络。

Passive Mode:唤醒后只收不外发NM PDU(SWS_CanNm_00072),对于一个节点所在的网络只能同时使能或禁用PassiveMode

Active Mode:唤醒后外发NM PDU

Active Wakeup:上层主动调用CanNm_NetworkRequest()接口唤醒网络。常见唤醒源:KL15信号,定时器、传感器等,主动唤醒一般发送立即帧报文5帧,然后进入RMS状态。

Passive Wakeup:收到其他节点的有效网络管理报文被动唤醒,调用CanNm_PassiveStartup()接口唤醒网络

Remote Wakeup:与总线信号相关的唤醒方式,如收到网络报文、指定诊断报文、KL15信号的应用报文

Local Wakeup:与硬线相关的唤醒方式,KL15线,硬件传感器如脚踢门;注意KL30是蓄电池供电

2.2  PDU

Byte0 表示源节点地址,一般是 帧ID - 基地址

Byte1表示CBV控制位,具体定义看下图7-2

其余字节一般主机厂自定义,若无特殊说明默认为0

Bit0: Repeat报文请求, 0表示为请求,1表示请求;当收到该位置1,应当进入RMS状态

Bit3:NM 控制休眠位,0表示未被NM控制器请求,1表示请求;该功能需要使能CanNmCoordinatorSyncSupport

Bit4: Active Wakeup Bit , 0表示节点没有唤醒网络(属于被动唤醒),1表示节点唤醒网络(属于主动唤醒)

Bit6: partial network information Bit(PNI) 0表示NM PDU包含没有PN请求信息,1表示包含PN请求信息。

为什么需要PN(Partial Network)功能呢?实质还是为了节能。没有PN功能时,一个网段内的所有ECU同醒同睡。有时,在一个网段内,可能只需要某些ECU正常工作即可,不相关的ECU没必要唤醒(费电)。所以,增加PN功能是节能的一个优选项。

Bit 1 , 2 , 5, 7功能扩展的预留位,0不使用/保留

2.3 文件结构

 ComStack_Types.h应当包含Std_Types.h(AUTOSAR 标准类型) Platform_Types.h(平台特定类型), Compiler.h编译特定语言的扩展文件;

Nm_Cbk.h一般NM接口的回调函数声明

Det.h默认错误Tracer定义的接口

NmStack_Types.h 公共的网络管理类型

CanIf.h CanIf的接口包括发送、接收函数等

PduR_CanNm.h如果用户数据使能包含改头文件(COM User Data Support)

2.4 NM结构体

NM结构体也叫做配置结构体CanNmGlobalConfig,这种配置类型可以使工程实现根据不同的客户可配置化,使用UML一目了然。

具体的结构体成员含义需参考标准。

 在state flow中需要引入改配置头文件 CanNm_Cfg.h:

#ifndef CANNM_CFG_H #define CANNM_CFG_H 1 #include "StdTypes.h" /*chapter 10.3.4*/ typedef struct {/**********10.3.3 CanNmGlobalConfig *************/u8_t CanNmBusLoadReductionEnabled;u8_t CanNmBusSynchronizationEnabled;u8_t CanNmComControlEnabled;u8_t CanNmComUserDataSupport;u8_t CanNmCoordinatorSyncSupport;u8_t CanNmDevErrorDetect;u8_t CanNmGlobalPnSupport;u8_t CanNmImmediateRestartEnabled;u8_t CanNmImmediateTxconfEnabled;u8_t CanNmMainFunctionPeriod;u8_t CanNmNodeDetectionEnabled;u8_t CanNmNodeIdEnabled;u8_t CanNmPassiveModeEnabled;u8_t CanNmPduRxIndicationEnabled;u8_t CanNmPnEiraCalcEnabled;u8_t CanNmPnResetTime;u8_t CanNmRemoteSleepIndEnabled;u8_t CanNmRepeatMsgIndEnabled;u8_t CanNmStateChangeIndEnabled;u8_t CanNmUserDataEnabled;u8_t CanNmVersionInfoApi;u8_t CanNmPnEiraRxNSduRef;/**********10.3.4 CanNm Channel Configuration Overview********///CanNmTxPduu16_t CanNmTxConfirmationPduId;//CanNmRxPduu16_t CanNmRxPduBeginId;u16_t CanNmRxPduEndId;//CanNmUserDataTxPduu16_t CanNmTxUserDataPduId;u8_t ComMChannel;/**********10.3.5 CanNmChannelConfig *************/u8_t CanNmActiveWakeupBitEnabled;u8_t CanNmAllNmMessagesKeepAwake;u8_t CanNmBusLoadReductionActive;u8_t CanNmCarWakeUpBitPosition;u8_t CanNmCarWakeUpBytePosition;u8_t CanNmCarWakeUpFilterEnabled;u8_t CanNmCarWakeUpFilterNodeId;u8_t CanNmCarWakeUpRxEnabled;u16_t CanNmImmediateNmCycleTime;u8_t CanNmImmediateNmTransmissions;u8_t CanNmMsgCycleOffset;u16_t CanNmMsgCycleTime;u8_t CanNmMsgReducedTime;u8_t CanNmMsgTimeoutTime;u8_t CanNmNodeId;u8_t CanNmPduCbvPosition;u8_t CanNmPduNidPosition;u8_t CanNmPnEnabled;u8_t CanNmPnEraCalcEnabled;u8_t CanNmPnHandleMultipleNetworkRequests;u32_t CanNmRemoteSleepIndTime;u16_t CanNmRepeatMessageTime;u16_t CanNmTimeoutTime;u16_t CanNmWaitBusSleepTime;}CanNm_ConfigType;#endif

2.5 状态机

NetWorkMode

包含3个子状态Repeat Message State(重复报文状态,RMS),Normal Operation State(NOS,正常模式状态),Ready Sleep State(准备睡眠状态,RSS)。

1.网络模式从BusSleep进入NetWorkMode首先进入RMS,条件为主动或被动唤醒

2.进入Network Mode,成功接收或成功发送NM PDU应当重启NM-Timeout计时器,应当开启APP报文、使能DTC

3.进入RMS,应当重发NM PDU; 在RMS中如果NM计时器超时,重启该计时器;如果收到PDU的CBV中RMS位置为1,应当进入RMS状态

4.进入NOS状态,应当启动PDU周期发送;当网络释放(一般指电源信号OFF)应当进入RSS状态;RSS状态中如果网络请求(电源信号ON),应当进入NOS状态;NOS状态如果收到诊断28服务使能或禁止发送NM,应当打开或者关闭NM PDU

5.在RSS状态中禁止发送NM PDU,发送APP报文;如果NM-timeOut, 则离开RSS,进入PBS状态;

6.在RBS中开启CanNmWaitBusSleepTime定时器,如果超时进入BSS中休眠;如果主动或被动唤醒则重新进入网络模式RMS状态;

三、Stateflow实现

3.1 NM接口定义

根据NM模块功能设计输入、输出、API函数

输入:NM PDU信息, 诊断28是否使能发送或接收NM PDU,电源信号

输出:NM PDU,使能DTC,使能APP,NM状态

API:CAN发送接收,发送接收确认,CAN初始化;定时器函数;NetworkRequest,NetworkRelease函数

3.2 NM功能实现

定义好接口后,根据2.5小节状态间转换的条件就可以在State flow中实现该功能。

被动模式

 主动模式

3.3 NM模块测试

首先了解一下在环测试的概念。MIL(model in the loop)模型在环是在matlab中纯软件仿真。  SIL(software in the loop)软件在环 将模型转换为以C/C++嵌入式软件形式的软件,也可以封装成库的形式进行仿真验证。 PIL(processer in the loop)处理器在环 在真实的控制器ECU中进行仿真验证。 HIL(Hardware in the loop)硬件在环 使用真实被控对象,比如电机进行测试验证。

3.3.1 测试用例

对模型建立testHarness,输入时序列test sequence

 对test sequence 进行编程

 在模型设置中使能模型覆盖度:

 建立testManager 管理test file,对每一个 状态建立一个test suit, 进行设置覆盖度,点击运行即可

test case 测试结果:

3.4 NM模块部署

3.4.1 生成C/C++代码

在配置文件中设置外部文件头文件和源文件位置

 

设置生成C或者C++语言的程序

点击Build即可生成代码,存于 ert_rtw中

 3.4.2 嵌入APP工程

剪出主要源文件及其对应的各种头文件,查看mk文件进行路径修改等设置成单独可编译mk文件

 将剪切的代码文件嵌入工程中,并将mk文件链起来,或者在工程mk文件中直接INC_DIR,CSRC_DIR加入相关文件路径即可完成部署 

参考:

Autosar网络管理:Partial Network基础 - 知乎 (zhihu.com)

为什么需要PN(Partial Network)功能呢?-电子发烧友网 (elecfans.com)

总结

以上是生活随笔为你收集整理的AUTOSAR——MBD应用之NM模块Stateflow实现的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。