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<len)
{
  nextbit=((uint)(bitbuf[i++])) << 14;
  crcreg=nextbit^crcreg;
  crcreg<<=1;
  if(crcreg&0x8000)crcreg^=0x4599;
}   
return (crcreg&0x7fff);
}

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值