目录
一、总线降负载机制Bus Load Reduction
网络管理Pdu的发送周期通常由CanNmMsgCycleTime参数决定(CanNm->CanNmGlobalConfig->CanNmChannelConfigs->CanNmChannelConfig->CanNmMsgCycleTime)。对于同一个网络管理簇之下的所有NM节点,该参数应保持一致。若不另外配置,总线负载将完全取决于该网络簇之下的NM节点数量。CanNmMsgCycleOffset参数可以一定程度上阻止负载的突然增大,如多个节点在0ms时刻收到一帧网管报文,若CanNmMsgCycleTime为50ms,则在50ms时刻点,多个节点会同时发出自身的网管报文,造成此时刻点总线负载的突然暴增;但通过配置CanNmMsgCycleOffset,可以使多个节点在一个CanNmMsgCycleTime内错峰发送,一定程度上缓解总线负载,但该机制在节点数目众多时,降载能力有限。因此,我们仍然需要一种降低负载的机制,使负载可以独立于网络簇下的节点数目。
为了达到独立降载,需考虑以下两点:
1. 若节点收到一帧网管报文,CanNm报文周期计时器会使用CanNmMsgReducedTime重载。该参数为每个节点特有参数,各节点该参数的配置可能不同,该参数大小应介于[1/2 * CanNmMsgCycleTime,CanNmMsgCycleTime]之间。
2. 若某节点发送出一帧网管报文,CanNm报文周期计时器会使用CanNmMsgCycleTime重载。
以上设定会导致:
在网络中,只有拥有最小CanNmMsgReducedTime的两个节点在交替发送网管报文,若此二者中有一个节点停止传输,则拥有第三小CanNmMsgReducedTime的节点会开始发送网管报文。若网络中只有一个节点需要进行总线通信,则该节点会按照CanNmMsgCycleTime的周期发送网管报文。
该算法机制保证了在一个CanNmMsgCycleTime周期内,总线负载最多只会有2帧网管报文存在。
二、总线降负载机制的相关配置说明
- CanNmBusLoadReductionEnabled参数需被配置为True,才可启用该机制;
- 若节点由BusSleep / Prepare Bus-Sleep / Normal Operation模式 / Ready Sleep状态,进入到Repeat Message State状态,CanNm模块会关闭总线降负载机制;
- 若CanNmBusLoadReductionEnabled参数为True,且节点由Repeat Message State状态 / Ready Sleep状态进入到Normal Operation状态,则CanNm模块会激活总线降负载机制;
- 若总线降负载机制被全局范围内使能(CanNmBusLoadReductionEnabled参数被配置为True),一个激活的网络会具备网管报文的发送能力,且该网络可调用CanNm_RxIndication()函数,CanNm模块也会使用CanNmMsgReducedTime重载CanNm报文周期计时器。
三、举例
总线上接入了3个节点且都工作在Normal Operation模式。节点1与2拥有最小的两个CanNmMsgReducedTime,它俩交互向总线上发送网管报文。一段时间后,节点1进入Ready Sleep状态。此时节点2与3开始交替向总线发送网管报文。一段时间后,节点2夜进入到Ready Sleep状态。此时节点3是网络中唯一正常工作的节点,故此时节点3按照CanNmMsgCycleTime为周期,向总线发送网管报文。
节点1休眠
Node 1: ↓
~40ms~ ↓
----|--------------|-----------------------------------------------------------------------
Node 2: 节点2休眠
↓
~~50ms~~ ~~50ms~~ ~~50ms~~ ↓
-------------|--------------|-------------------|------------------------------------------
Node 3:
~~~~60ms~~~ ~~~~60ms~~~ ~~~~70ms~~~~ ~~~~70ms~~~~
----------------------------------------|-------------------|------------|------------|----
注:
| :网管报文的发送时刻
CANNM_MSG_CYCLE_TIME : 70ms
CANNM_MSG_REDUCED_TIME NODE 1 : 40ms
CANNM_MSG_REDUCED_TIME NODE 2 : 50ms
CANNM_MSG_REDUCED_TIME NODE 3 : 60ms
图像解读:
节点1率先发出一帧网管报文;
节点2收到1的报文,等待CanNmMsgReducedTime2=50ms;节点3也收到1的报文,等待CanNmMsgReducedTime3=60ms;但因为CanNmMsgReducedTime2先倒计时结束,故50ms后2节点率先发出网管报文;
节点1与3收到,分别等待CanNmMsgReducedTime1=40ms,CanNmMsgReducedTime3=60ms;但因为CanNmMsgReducedTime1先倒计时结束,故40ms后1节点率先发出网管报文;
节点2收到1的报文,等待CanNmMsgReducedTime2=50ms;在等待过程中节点1进入Ready Sleep状态,50ms后节点2发出网管报文;
节点1已休眠,此时只有节点3会收到2发出的报文,等待60ms后3发出自己的网管报文;
节点2收到3的报文,等待50ms,发出自己的报文;
节点3收到2的报文,等待60ms,该等待过程中2也进入Ready Sleep状态,等待结束后3发出网管报文;
此时网络中只剩节点3正常工作,此后只有节点3发送网管报文,发送周期变为CanNmMsgCycleTime=70ms。
四、Reference
《AUTOSAR_SWS_CANNetworkManagement.pdf》