autosar网管应用开发--CAN 网络节点运行模式 笔记1

CAN 网络节点运行模式

(1)Network Mode(网络模式)

处于网络模式中的节点,网络通信是处于开启或工作模式(包含了开始工作时和结束工作时的准备阶段)。网络模式又细分为以下三个阶段:

① Repeat Message State(报文重复阶段-RMS)

当节点从其他模式进入Network Mode时,默认进入Repeat Message State,该阶段是网络正式开始工作前的准备阶段,用来等待网络中所有相关节点进行网络准备,开启通信。

② Normal Operation State(常规运行阶段-NOS)

节点由Repeat Message State进入Normal Operation State,该状态为节点通信正常工作状态。

③ Ready Sleep State(准备睡眠阶段-RSS)

节点工作完成后,由Normal Operation State状态进入Ready Sleep State,准备进入睡眠状态。该阶段用来等待网络中所有节点工作完成,之后统一进入睡眠状态。

(2)Prepare Bus-Sleep Mode(预睡眠模式-PBM)

节点从网络模式的准备睡眠阶段进入预睡眠模式,该模式与Ready Sleep State的作用类似,但它已经不再属于网络模式了,是正式进入睡眠阶段前更进一步的准备阶段。

(3)Bus-Sleep Mode(睡眠模式-BSM)

睡眠模式就是节点停止工作的模式,可以节省能量消耗,是整个网络管理的最终目的。网络管理工作就是管理各个节点如何有序进入睡眠模式和恢复工作状态。节点上电或复位后应默认进入睡眠模式。

网络管理报文的格式

网络管理报文的格式

Byte0-Source Node Identifier(节点源地址)和Byte1-Control Bit Vector(控制字节)。这两个字节在NM PDU中的位置是可以配置的.

Control Bit Vector的定义如下,在节点初始化的时候被置为0x00

Bit 0: Repeat Message Request   1时候要跳转重复消息状态 检测总线当前存在的网络节点

0:未请求重复消息状态  

1:请求重复消息状态(当前节点请求所有节点进入报文重复阶段)  

Bit 3: NM Coordinator Sleep Bit

0:主协调器未请求启动同步关机

1:主协调器请求启动同步关机

Bit 4 Active Wakeup Bit  

0:节点尚未唤醒网络(被动唤醒)

1:节点已经唤醒网络(主动唤醒)

Bit 6 Partial Network Information Bit (PNI)

0:表示不包含部分网络请求信息

1: NM PDU中包含部分网络请求信息

Bit 1, 2, 5, 7为拓展位

诊断请求相当于主动请求,但不能从总线睡眠状态唤醒 :准备休眠状态---->正常工作状态

流程

1.初始化

节点上电或复位后,经初始化函数CanNm_Init()默认进入总线睡眠状态,在总线睡眠状态下应停发所有应用报文和网络管理报文,但要可以接收网络管理报文,以使得其它节点能够唤醒当前节点。

2.进入网络模式

唤醒后直接进入重复消息状态,开启两个定时器。

当节点收到了网络管理报文时,不是直接进入网络模式,而是上报应用层,应用层判断当前状态,允许的话会调用CanNm_PassiveStartup()函数,使节点进入网络模式。当节点自身想要进行网络通讯时,调用CanNm_NetworkRequest()使节点进入网络模式。前者是被动,后者是主动。后者发送的网络管理报文中CBV的Active Wakeup Bit位为1。

节点进入网络模式后,默认进入重复报文状态(网络管理报文一直发),启动定时器NM-Timeout,NM-Timeout用来记录网络管理报文是否超时,其超时时间为CanNmTimeoutTime,每收到或成功发送一帧网络管理报文,都应重启NM-Timeout。节点要开始周期发送网络管理报文。常规情况下,节点要先等待一个时间偏移量(CanNmMsgCycleOffset)后再发送第一帧网络管理报文,发送周期为CanNmMsgCycleTime,发送次数为CanNmRepeatMessageTime。

网络中所有节点的报文发送周期CanNmMsgCycleTime和CanNmTimeoutTime都是相同的,且CanNmTimeoutTime必须大于CanNmMsgCycleTime;所有节点的CanNmMsgCycleOffset都是不同的,以防止网络中所有节点同时发送网络管理报文造成网络拥塞。

3.正常工作状态

当节点在重复报文状态发送了CanNmRepeatMessageTime次网络管理报文后,需要退出重复报文状态,退出时判断网络当前处于释放状态还是请求状态,如果处于请求状态,则进入常规运行状态,如果处于释放状态,则进入准备睡眠状态。

在常规运行状态中,节点要周期发送网络管理报文,发送周期为CanNmMsgCycleTime。节点网络此时处于正常工作状态。

在常规运行状态中,定时器NM-Timeout如果超时了要被重启。

 4.常规运行状态返回重复报文状态

当节点处于常规运行状态时,如果收到了Repeat Message Request置为1的网络管理报文,则会强制重新进入重复报文状态。

5.进入准备睡眠状态

当节点不再需要进行网络通讯时,应用层会调用CanNm_NetworkRelease()函数,释放网络,节点进入准备睡眠状态,停发网络管理报文,但要保持应用报文的发送。

6.重新返回常规运行状态

节点处于准备睡眠状态时,如果应用层重新需要使用网络,可以调用CanNm_NetworkRequest()函数使节点重新回到常规运行状态。

7.准备睡眠状态返回重复报文状态

当节点处于准备睡眠状态时,如果收到了Repeat Message Request置为1的网络管理报文,也会强制重新进入重复报文状态。进入重复报文状态后的逻辑同上。

8.由重复报文状态进入准备睡眠状态

重复报文状态退出时如果节点网络处于释放状态,则节点直接进入准备睡眠状态。

9.进入预睡眠模式

当节点在准备睡眠状态NM-Timeout超时,即网络中所有节点都已进入准备睡眠状态(或不处于网络模式),网络中没有网络管理报文,节点将会进入预睡眠模式,同时启动定时器Wait Bus-Sleep Timer,其超时时间为CanNmWaitBusSleepTime,所有节点的CanNmWaitBusSleepTime都应配置为相同的,以保证所有节点同时进入睡眠模式。

节点在预睡眠模式中同样不发送网络管理报文,同时还要停止应用报文的发送。

10.由预睡眠模式进入网络模式

接收到网络管理报文

11.进入睡眠模式

预睡眠模式中定时器Wait Bus-Sleep Timer超时,进入睡眠模式,睡眠模式中网络管理报文和应用报文都不发送,节点正式进入休眠状态,应尽可能地关闭功能,降低消耗。

机制

1.快发

主动唤醒网络的时候当节点进入重复报文阶段时,在时间<CanNmImmediateNmCycleTime,共发送CanNmImmediateNmTransmissions次,然后进入常规运行阶段,之后网络管理报文的发送周期恢复CanNmMsgCycleTime。

2.总线负载降低策略(Bus Load Reduction Mechanism)

节点处于重复报文阶段和常规运行阶段的时候,都会周期性发送网络管理报文,这对总线负载是一种消耗,且网络中节点越多,总线负载占用越大。标准中制定了一种策略来降低总线负载。

只要有一个节点在发送报文,网络中所有节点就都可以保持在网络模式,多发的网络管理报文是对总线负载的浪费。

当配置参数与CanNmBusLoadReductionEnabled为有效,且节点处于常规运行阶段时,进入总线负载降低模式,此时:

节点如果接收到了一帧网络管理报文,则应将定时器CanNm Message Cycle Timer重置为CanNmMsgReducedTime,而不是CanNmMsgCycleTime,CanNmMsgReducedTime 参数是一个小于 CanNmMsgCycleTime 且大于CanNmMsgCycleTime的一半( ½ CanNmMsgCycleTime)的时间值,且每个节点的CanNmMsgReducedTime 值不同。

节点如果发送了一帧网络管理报文,则还是将定时器CanNm Message Cycle Timer重置为CanNmMsgCycleTime。

这种策略的结果是:网络中只有CanNmMsgReducedTime 值最小的两个节点交替发送网络管理报文。

当网络中只有一个节点处于常规运行阶段时,网络管理报文的周期为CanNmMsgCycleTime

3.远程睡眠指示

当配置参数CanNmRemoteSleepIndEnabled为有效的时候,如果节点在CanNmRemoteSleepIndTime时间后仍没有收到其他节点发送的网络管理报文,说明其它节点都已经进入休眠或准备休眠,此时应调用Nm_RemoteSleepIndication()函数通知应用层网络中所有节点都进入了休眠。如果此时节点又收到了其他节点发送的网络管理报文,应该再调用Nm_RemoteSleepCancellation()函数通知应

用层取消之前的指示。该策略称为远程睡眠指示。

代码

检测主动唤醒状态接口

1.COMM_NO_COMMUNICATION 

2.COMM_FULL_COMMUNICATION

网关状态机代码

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这里的NM主要是针对Can协议的网路管理。 AUTOSAR CanNM的核心思想主要归纳为以下两条: 1.  如果节点需要保持通信,则节点需要周期的NMPDUs,否则停止NMPDUs 2.     如果总线上的所有节点不需要使用总线,那么总线上过了一段时间没有NMPDUs时,则会进入Bus-Sleep Mode。   工作模式状态   CanNm一共有三个工作模式 1.  Network Mode 2.  PrepareBus-Sleep Mode 3.  Bus-Sleep Mode 模式的改变应该通过回调函数通知上层。 下面单独说每种模式   (1)Network Mode Network Mode又包括三个内部状态 1. Repeat Message State 2. Normal Operation State 3. Ready Sleep State ①Repeat Message State 这个模式被用来确保从Bus-Sleep or Prepare Bus-Sleep到Network Mode的节点被总线上面其他节点现。这个状态可以用来检测总线上的节点。 当进入Repeat Message State时,节点应该开始传送NMPDUs。 在Repeat Message State时,当NM-Timeout Timer溢出,CanNm模块应该重载Timer。 CanNm模块应该在Repeat Message State 下保持一段时间,这段时间可以通过CANNM_REPEAT_MESSAGE_TIME来进行配置。 当离开Repeat Message State的时候,如果节点需要通信,则进入Normal Operation State;如果节点不需要通信,则进入Ready Sleep State。并且清空Repeat Message Bit。   ②Normal Operation State 这个状态可以保持总线处于唤醒状态。从Ready sleep state进入这个状态的时候应该NMPDUs。 在Normal Operation State当NM-Timeout Timer溢出,CanNm模块应该重载Timer。 如果节点不需要使用通信,则网络应该被释放,节点应该进入Ready Sleep State。 如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。   ③ReadySleep State 这个状态是为了如果本节点已经准备释放总线,而其他节点还需要使用总线的时候,在这个状态下等待其他总线上的节点进入Perpere Bus-Sleep Mode。进入这个状态之后,CanNm模块应该停止NMPDUs的传送。 如果NM-Timeout Timer溢出,节点将会进入Prepare Bus-Sleep Mode。 如果该节点需要使用总线,则节点进入Nomal Operation State。 如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。 (2)PrepareBus-Sleep Mode   这个状态是为了等待总线上的所有节点能够在进入Bus-Sleep Mode之前,有时间停止节点的active状态如清空队列中为送的报文。在Prepare Bus –Sleep Mode下,所有节点都静默下来。 当节点进入PrepareBus Mode时,应该通知上层应用。通过配置CANNM_WAIT_BUS_SLEEP_TIME参数,可以改变节点在PrepareBus-Sleep Mode停留的时间,在这段时间之后节点将会进入其他状态。 在Prepare Bus-Sleep Mode下面接收到NMPDU或者被上层应用请求通信时,节点将进入Network Mode中的Normal operation State。   (3)Bus-SleepMode   Bus-Sleep Mode的目的是当没有消息被传送的时候可以减少能量的消耗。在Bus-Sleep Mode下面,节点可以被唤醒(如本地唤醒源和CAN线唤醒源)。CANNM_TIMEOUT_TIME+CANNM_WAIT_BUS_SLEEP_TIME两个参数在整个总线上面的节点都应该时一样的配置,保证了总线上的节点能够统一的进行休眠。 当进入Bus-Sleep Mode时候,应该通知上层应用。 在Bus-Sleep Mode下,如果成功接收到NMPDU,CAN NM模块应该调用Nm_NetworkStartIndication。 如果CanNm_PassiveStartUp被调用,则CAN NM模块进入Network Mode 中的Repeat Message State。 ———————————————— 版权声明:本文为CSDN博主「cococenstar」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/cococenstar/article/details/84096689
Autosar-CAN NM是一种用于网络管理的通信协议,旨在实现CAN总线系统的高效管理和控制。Autosar-CAN NM支持多个节点共享相同的CAN总线,通过提供网络管理功能来确保节点之间的通信可靠性和稳定性。 Autosar-CAN NM的主要功能包括节点的电源管理、通信总线状态的监控和管理、节点之间的网络通信和报文的传输。首先,节点的电源管理功能包括监测节点的供电状态和能力,并根据需要进行电源管理,以确保节点之间的正常通信。其次,通过监控和管理CAN总线的状态Autosar-CAN NM可以检测并处理潜在的通信故障,如总线冲突和错误帧。此外,还可以对总线负载进行监控和管理,以避免总线过载和通信延迟。 在节点之间的网络通信方面,Autosar-CAN NM通过提供网络管理帧(用于节点之间的通信)和网络管理报文(用于各个节点之间传输数据)来实现。网络管理帧用于在节点之间传递通信状态和配置信息,并支持节点之间的网络拓扑管理。网络管理报文是主要用于节点之间的数据传输和通信,通过CAN总线进行传输。这样可以确保节点之间的数据通信具有高可靠性和实时性。 总的来说,Autosar-CAN NM提供了一种有效的方法来管理和控制CAN总线系统中节点之间的通信。它通过电源管理、总线监控和状态管理、网络通信和报文传输等功能,实现了节点之间的可靠通信。这不仅提高了CAN总线系统的性能和稳定性,还为制造商和开人员提供了一种有效的方法来设计和管理CAN网络

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YELL.DOLL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值