0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

抠几个CanNM网络状态机的细节

冬至配饺子 来源:开心果 Need Car 作者:开心果 Need Car 2022-08-26 17:30 次阅读

先回答标题问题:“对我自己而言,没有”。有时我自己会有这样的感受,Autosar的某些规范即使看了很多遍,工程上也碰到了些问题,但是每次再去读,发现:依然有些东西是不清晰的。本文就CanNM的网络状态机,再和大家抠几个细节,希望对你有用!

1、CanNmPnHandleMultipleNetworkRequests 作用

如果项目中,网络管理不用PN(Partial Network)功能,可能不太会关注CanNmPnHandleMultipleNetworkRequests。先看一下Autosar规范给出的解释:Specifies if CanNm performs an additional transition from Network Mode to Repeat Message State (true) or not (false).

也就是说,该参数使能与否决定着节点网络状态是否可以切换到RMS(Repeat Message State)。从哪种状态切换到RMS状态呢?

pYYBAGMIkbWARvleAAFUb91givM875.png

由上图可以看出,使用CanNmPnHandleMultipleNetworkRequests参数时,均与CanNm_NetworkRequest()接口的调用相关,主要有两个地方会判断该参数的使能情况。

位置 1

如果节点的网络状态在RSS(Ready Sleep State),调用CanNm_NetworkRequest()接口请求网络时,能否进入NOS(Normal Operation State)取决于CanNmPnHandleMultipleNetworkRequests的使能情况:

CanNmPnHandleMultipleNetworkRequests = FALSE,节点网络状态由RSS切换到NOS;

CanNmPnHandleMultipleNetworkRequests = TRUE,节点网络状态由RSS切换到RMS。

为什么CanNmPnHandleMultipleNetworkRequests = TRUE,网络状态需要切换到RMS状态呢?先看Autosar规范给的解释:

poYBAGMIkcqAV8i4AADTjYNDxvc524.png

CanNmPnHandleMultipleNetworkRequests 的使能,我们需要先意识到一个前提:

PN的使能,即:CanNmPnEnabled == true。使用PN功能,意味着每个节点会关联对应的PNC,只有接收到的PNC和节点相关,节点网络才能唤醒。如下图,假设某CAN BUS上有ECU1、ECU2、ECU3三个节点,ECU1关联PNC 16和PNC17,ECU2关联PNC 16,ECU3关联PNC 17。

pYYBAGMIkdyAHrWoAABU0xyg8G4851.png

假设:

t0时刻,只有ECU1和ECU2在通信,即:NM Msg只包含PNC16,且ECU1进入RSS状态,ECU2在NOS状态,ECU3未有唤醒(处于BSM);

t1时刻,由于ECU1上层主动请求网络,ECU1需要唤醒ECU3参与通信,主动调用CanNm_NetworkRequest()接口请求网络(比如:对应的PNC17的VFC置位),同时发送的NM Msg中包含PNC 17。ECU3收到包含PNC17的NM Msg以后,网络状态由BSM进入RMS状态,为了保证三个节点在同一网络状态,因此,ECU1需要从RSS状态切换到RMS状态,同时,ECU1发送的NM Msg中,Repeat Message Request Bit = 1,将ECU2由NOS状态也拉回RMS状态,以此确保三个节点在相同的网络状态。不理解RMR Bit作用,可以参考前文勘误篇(一):Autosar网络管理:RepeatMessageRequestBit作用,你清楚吗?;

t2时刻,Repeat Message Timer超时,三者脱离RMS状态,ECU1、ECU2、ECU3进入NOS状态。上述过程如下所示:

poYBAGMIkfGAJugOAACGb5no9oc473.png

位置 2

此处说明,只要在NM(Network Mode)模式下调用

CanNm_NetworkRequest()接口,且CanNmPnHandleMultipleNetworkRequests ==TRUE,网络状态需要切换到RMS状态,且重启Repeat Message Timer。分析同上,此处不再赘述。举例说明PNC请求与Channel NM Status关系:

poYBAGMIkgaAVrYTAABzSQVQhIo759.png

t0时刻,PNC #n保持请求(PNC #n = 1),假设PNC #n映射的Channel网络状态为NOS;

t1时刻,PnResetTime(2.95s)内收到PNC #n = 0(或者没有收到),PNC #n释放;

t2时刻,PNC#n再次请求,PNC #n映射的Channel网络状态由NOS进入RMS;

t3时刻,PNC#n保持请求,Channel由RMS进入NOS状态;

t4时刻,2.95s时间内没有PNC#n请求,PNC#n释放,Channel保持NOS状态;

t5时刻,PNC#n再次请求,同t2时刻。

2、网络启动,第一帧是否应该是网络管理报文?

从网络状态机可以看出,CanNm_PassiveStartup()、CanNm_RxIndication()、CanNm_NetworkRequest()接口的调用均可将节点网络状态切换到RMS。

CanNm_NetworkRequest():调用此接口,说明节点需要主动唤醒网络,如果此节点由BSM、PBSM模式进入RMS状态,

第一帧报文需要是网络管理报文,快速将网段内其他节点唤醒;

CanNm_PassiveStartup()、CanNm_RxIndication():调用这两个接口,个人理解:

第一帧报文没有必要是网络管理报文,因为总线上已经有网络管理报文在发送,说明有主动网络节点发送了网络管理报文,承担着快速唤醒网络的“重任”,所以接收节点无需保证第一帧报文是网络管理报文,接收节点需要做的是把应用报文快速发出,保证功能的快速使能。

3、CanNmMsgCycleOffset的使用场景

网络唤醒时,各主动网络节点均发送各自的NM Msg,会增加总线负载,为了降低网络唤醒时的总线负载,会为每个主动网络节点设置一个Offset值,比如:CanNmMsgCycleOffset。CanNmMsgCycleOffset的使能需要注意:使能快发模式时,CanNmMsgCycleOffset不适用,需要注意的其他条件,Autosar也给出了其他解释,如下所示:

CASE 1:

pYYBAGMIkh2AYbFtAADYSWj5xLQ295.png

CASE 2:

poYBAGMIkjGAW3HoAADjR-vvyPw243.png

注意:

C

anNmMsgCycleOffset是发出第一帧网络管理报文时的偏移值,即满足NM Msg发送时,第一次发送NM Msg时的偏移。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RMS
    RMS
    +关注

    关注

    2

    文章

    134

    浏览量

    35373
  • 状态机
    +关注

    关注

    2

    文章

    486

    浏览量

    27161
  • Nos
    Nos
    +关注

    关注

    0

    文章

    3

    浏览量

    7281
收藏 人收藏

    评论

    相关推荐

    状态机编程

    状态机编程基于状态机的按键输入软件接口设计一般的教课书中给出的按键输入软件接口程序通常非常简单,在程序中一旦检测到按键输入口为低电平时(图9-2),便采用(调用)软件延时程序延时10ms。然后再
    发表于 07-10 18:00

    如何写好状态机

    一篇经典文献,详细讲解了一段、两段、三段式状态机的实现,效率、优缺点。看完后相信会对状态机有一个详细的了解。 状态机是逻辑设计的重要内容,状态机的设计水平直接反应工程师的逻辑功底,所以
    发表于 10-24 11:43

    状态机

    控制状态机控制状态机的初始化和状态转换的最佳方法是使用枚丽型输入控件。一般使用自定义类型的枚丽变量。使用子定义类型的枚丽变量可以是控件和实例乊间存在关联,使得添加或删除状态时所有的枚丽
    发表于 02-13 12:39

    状态机如何暂停

    程序一运行 就开始自动运行程序 状态机各种各种状态开始执行 我这里是布尔变量 每一秒点亮一个布尔按钮。我现在想在界面增加一个暂停按钮 当点暂停时候 此时暂停按钮文字成为继续 如果 状态机执行第二步
    发表于 04-09 09:23

    为什么PIC32的Harmony编写没有交互的状态机

    交互的状态机。离子状态机检查键盘接收的命令,并相应地向SPI发送不同的命令。特别地,SPI被配置为专门与GPIO扩展器MCP23017一起工作。定时器状态机独立工作,不与其他状态机交互
    发表于 08-12 08:36

    状态机是什么?什么是消息触发类型的状态机

    状态机可归纳为哪几个要素?状态机可分为哪几种?什么是消息触发类型的状态机
    发表于 04-19 06:02

    AUTOSAR CAN网络管理状态机介绍

    AUTOSAR CAN网络管理状态机为什么停发应用帧?有什么解决办法吗?
    发表于 09-24 07:47

    什么是状态机状态机是如何编程的?

    什么是状态机状态机是如何编程的?
    发表于 10-20 07:43

    什么是状态机

    一. 什么是状态机我们以生活中的小区的停车系统为例:停车杆一般没车的是不动的(初态),有车来的时候需要抬杆(状态1),车通过需要放杆(状态2),如果在放杆的过程中突然有车,又需要抬杆(状态
    发表于 01-06 08:01

    什么是状态机

    目录1 前言2 状态机2.1 什么是状态机2.2 状态机的概念2.3 使用状态机写键盘的思路3 代码实例3.1 使用软件3.2 protues电路图3.2
    发表于 01-24 06:23

    状态机概述 如何理解状态机

    本篇文章包括状态机的基本概述以及通过简单的实例理解状态机
    的头像 发表于 01-02 18:03 9993次阅读
    <b class='flag-5'>状态机</b>概述  如何理解<b class='flag-5'>状态机</b>

    FPGA:状态机简述

    本文目录 前言 状态机简介 状态机分类 Mealy 型状态机 Moore 型状态机 状态机描述 一段式
    的头像 发表于 11-05 17:58 6227次阅读
    FPGA:<b class='flag-5'>状态机</b>简述

    什么是状态机状态机5要素

    玩单片机还可以,各个外设也都会驱动,但是如果让你完整的写一套代码时,却无逻辑与框架可言。这说明编程还处于比较低的水平,你需要学会一种好的编程框架或者一种编程思想!比如模块化编程、状态机编程、分层思想
    的头像 发表于 07-27 11:23 1.9w次阅读
    什么是<b class='flag-5'>状态机</b>?<b class='flag-5'>状态机</b>5要素

    三段式,四段式状态机设计方法是什么(状态机设计注意事项)

    有限状态机,简称状态机,通俗的说,就是把全部的情况分成几个场景,这些场景的工作方式明显不同。简单来说就是如下所示的状态转移图
    发表于 08-31 15:30 679次阅读
    三段式,四段式<b class='flag-5'>状态机</b>设计方法是什么(<b class='flag-5'>状态机</b>设计注意事项)

    什么是状态机状态机的种类与实现

    状态机,又称有限状态机(Finite State Machine,FSM)或米利状态机(Mealy Machine),是一种描述系统状态变化的模型。在芯片设计中,
    的头像 发表于 10-19 10:27 4947次阅读