CAN总线负载率原理及计算【转】

CAN总线负载率原理及计算【转】

 

 

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

 

 

 

 

uint crccale(uchar *bitbuf,uchar len)
{
uint crcreg,nextbit;    //crc计算
// bit crcnext;
uchar i=0;
crcreg=0;
while(i {
  nextbit=((uint)(bitbuf[i++])) << 14;
  crcreg=nextbit^crcreg;
  crcreg<<=1;
  if(crcreg&0x8000)crcreg^=0x4599;
}   
return (crcreg&0x7fff);
}

你可能感兴趣的:(CAN)