AUTOSAR——MBD应用之NM模块Stateflow实现
创始人
2025-05-28 02:01:29

目录

一、前言

二、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)

相关内容

热门资讯

轻松玩转开源大语言模型bloo... 前言 书接上文,我们已经可以通过简单的示例来使用bloom的文字生成功能,...
Redis7之事务(五) 五 Redis 事务 5.1 介绍 可以一次执行多个命令,本质是一组命令的集合。一个事...
某程序员辞职后,接6份兼职,月... 对于程序员来说,35岁真的是很关键。如果成为架构师或者是成为管理方面的人才࿰...
【产品经理】需求频繁变更,怎么... 产品经理在日常工作中经常会接收到各方来的需求,对于这些需求需要进行评估和取舍ÿ...
【独家】华为OD机试 - 斗地... 最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真...
恶补SQL中)牛客SQL题 SQL1 查询所有列 select * from user_profile; SQL2 查询多列  ...
华为OD机试 - 单词接龙(C... 最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真...
Redis分布式锁的坑 1. 非原子操作(setnx + expire) 一说到实现Re...
vue多行显示文字展开 这几天项目里面有一个需求,多行需要进行展开文字,类似实现这种效果 难点...
ContentProvider... 1权限的获取和调用 权限分为普通权限和危险权限,除了日历信息,电话&#x...
(字符串hash)(map)电... 目录 题目链接 一些话         切入点  流程 套路 ac代码 题目链接 给定大量手机用...
Verilog实现组合逻辑电路 在verilog 中可以实现的数字电路主要分为两类----组合逻辑电路和时序逻辑电路。组合逻辑电路比...
卷积神经网络的计算 计算卷积神经网络中的参数 填充 我们在使用多重卷积的时候,常常会丢失边缘像素。由于我们...
Linux 如何使用 git ...   文章目录 专栏导读  一、如何安装 git 二、注册码云账号 三、新建仓库  配置仓库信息 四、...
01-ECU和域控制器(摘) 1.什么是ECU?电子电路相对于机械控制的优点在于精细化和自动化,是智能...
2023-03-15 Elas... ElasticSearch 1.Docker安装ElasticSearch 1.1. es及kiba...
软件实施面试专业技能试题 注:关于项目实施方面的资料少之又少,分享一篇很不错的面试题供参考...
ElasticSearch 8... 感觉这些东西没必要认真学,了解一下,工作用到再学。 文章目录一、ES8...
可以单机运行的ChatGLM-... 清华技术成果转化的公司智谱 AI 开源了 GLM 系列模型 ChatGLM-6B,这是...
C和C++程序互相调用方案 C++程序调用C函数 项目实际开发需求需要在C++程序中调用c语言实...
信息系统分析与设计——信息系统... 🌟所属专栏:信息系统分析与设计🐔作者简介:...
线程学习贴 1. 线程相关概念 1.1 程序 1.2 进程 1.3 线程 1.4 并发和并行 如何...
中国人工智能企业CIMCAI全... 中国人工智能企业CIMCAI全球港航人工智能领军企业,成熟智慧港航产品行业顶尖...
前端必会vue面试题(必备) Vuex有哪几种属性? 有五种,分别是 State、 Getter、Mu...
为数据字典配置缓存(为需要的方... 为数据字典配置缓存 1.导入依赖: org.springf...
linux系统中多线程全面解析    目录   ​编辑 简介引入: 1.线程基础介绍: 2.概念...
Linux操作系统内存管理之磁... 前言:相信通过前面的虚拟文件系统VFS及一个具体的Ext2文件系统博文,...
xilinx GTX 时钟详解 一、用户接口信号的时钟(GTREFCLK_PAD_N_IN、DRP_CLK_IN_P、...
nodejs的简单复习 定时器 setTimeout( )是属于 window 的 method, 但我们都是略去 wind...
【项目实现典型案例】12.数据... 目录一:背景介绍二:索引失效复现四:索引实现的六种情况1、...