CAN总线负载率原理及计算

CAN总线负载率
概念
负载率计算
负载率宜控制在30%以内
概念
CAN总线负载率是指在CAN总线上单位时间内实际传送的位数和可以传送的位数之比。

负载率计算
假设报文以定周期发送,总线上的报文只有数据帧一种类型,不存在远程帧、错误帧和过载帧这三种类型。因此每帧报文包括:帧起始(1bit)、仲裁域(29bit)、控制域(6bit)、数据域(8×8bit)、循环冗余码域(15bit)、应答域(2bit)和帧结尾(7bit),共124位。

假设每秒发送的数据帧数为185帧:

对于高速CAN总线(500kbps)的负载率=185∗124500∗1000∗100%=4.58% 对于高速CAN总线(500kbps)的负载率 = \frac{185*124}{500*1000}*100\% = 4.58\%
对于高速CAN总线(500kbps)的负载率= 
500∗1000
185∗124
​    
 ∗100%=4.58%

对于低速CAN总线(250kbps)的负载率=185∗124250∗1000∗100%=9.16% 对于低速CAN总线(250kbps)的负载率 = \frac{185*124}{250*1000}*100\% = 9.16\%
对于低速CAN总线(250kbps)的负载率= 
250∗1000
185∗124
​    
 ∗100%=9.16%

负载率宜控制在30%以内
业界普遍认为30%为CAN总线负载率的高压线,相关解释可参考知乎上的回答link.

该回答中提到:

CAN总线本质上是一种串口通讯,靠在时间线上对每一位的电压值进行调制来搭载不同的信号。因为各节点共用总线介质,对总线的使用权界定就至关重要。先说结论:只有在总线空闲时,发送节点才能向总线上发送帧起始及后续帧ID,只有在帧ID赢得仲裁时,发送节点拥有总线控制权进而向总线发送报文剩余部分,在仲裁中失败的节点让出总线控制权等待下次总线空闲时继续尝试发送。我们可以看到如果某一个节点需要发送一帧报文,它需要同时满足两个条件:1、总线是空闲的,即目前没有任何节点在发送报文,在总线上表示为节点监测到11个连续的隐性位;2、所需发送的报文赢得ID仲裁,即报文优先级较高。

一个报文在试图发送时,必须满足上述两个条件才能完成发送。这里的问题就是:如果一个优先级相对较低的节点向外发报文时,会因为不断地在仲裁中失败而导致发送延迟。如果延迟过大会引起通讯失败。

负载率越高,代表需要发送的数据越多,相对来说低优先级节点发生通讯延迟的概率越大。

所以500kbps的高速CAN按照之前负载率计算的假设,每秒发送的帧数宜控制在:

500∗1000∗30%124=1209帧

A. CAN标准帧格式


B.CAN扩展帧格式


C.帧间间隔


假设

Ui:各个信息帧占用总线百分比

L:为报文的总长度

C:为报文的总线占用时间      

N:为填充的位数

t:为毛速率 ( 亦称波特率 )下的位时间

则有:

L = N  + 8d + g + 13

C =  L * t

Ui = C / T

然而总线负载率是各个信息帧占用总线百分比之和。

U = U1 + U2 + U3 + .....

g 为 CAN 报文中控制位的总位数 ( 标准帧 g =34 , 扩展帧 g = 54 )

g的取值是只取位填充部分除去数据段;

13:无位填充段 + 帧间间隔

网络负载率算法例子:

网络负载率是 1s 内网络总线传输数据所占带宽的百分率。以上图网络矩阵表为例,假设总线速度为500Kbps,网络中有多帧信号,把每个信号帧所占的负载率算出来,相加即得到总的网络负载率。FBCM_1/FBCM_2这两帧的所占的负载率算法如下:

       负载率1 = (1000ms / 20ms)  * 111 / 500000 = 0.0111 = 1.11%

      负载率2 = (1000ms / 10ms)  * 111 / 500000 = 0.0222 = 2.22%

         公式中111为 8字节的数据帧在不考虑填充位的情况下的所含位数。

        111 = 34 + 13 + (8 byte  X  8bit) = 47 + 64 


下面我们看 TTCAN中有这么一个公式:


按照CAN协议,相同电平持续5位,在下一位要插入1位与前5位反型的电平。

可知:(34 + 8s)/5 得到的填充位数,所以对于一帧完整的位数,我们可以假设包含上间隔位,

则:填充位:(34 + 8s)/5

     数据位:8s

     报文格式位:34 + 10 + 3 = 47

你可能感兴趣的:(CAN总线,CAN总线)