美文网首页CAN总线
如何模拟CAN/CANFD总线的负载

如何模拟CAN/CANFD总线的负载

作者: Nmao | 来源:发表于2023-02-09 10:19 被阅读0次

转载:https://zhuanlan.zhihu.com/p/429067454
最近群里有人问如何计算CANFD总线负载,我自己用CANoe模拟了一下CAN总线的负载,大概的思路如下:

首先,我们拿最大通信速率为500kbps的CAN总线来说,500kbps就是500kbit/s,也就是1秒内总线上最大允许传输的bit数为500000个

我们模拟发送一条周期报文,计算1秒内它传输到总线上的bit数,然后再除以1秒内最大允许的bit数,不就得到总线的负载了嘛

计算方式如下

image.png
  • 1000是1秒,也就是1000ms
  • Tsendcycle是发送的周期报文的周期时间,这里以ms为单位
  • N是一条CAN报文发送到总线上的bit数

“ 我们以dlc为8个字节的标准帧为例,帧起始(1bit)+仲裁场(11bit)+控制场(6)+数据场(64bit)+CRC场(16bit)+ACK场(2bit)+帧结束(7bit)+ITM(3bit) = 111bit

  • 500000是CAN总线在1秒内的最大承载bit数

假设我们以1ms为周期往总线上循环发送CAN报文,先用上面的公式计算出负载率busload为22.2%

然后我们在CANoe上模拟发送这个周期报文,同时检测CAN总线的真实负载是否相同

代码很简单

variables
{
  msTimer tSendMsg1;
  message 0x001 message1 = {dlc = 8, byte(0) = 0x00, byte(1) = 0x11, byte(2) = 0x22, byte(3) = 0x33, byte(4) = 0x44, byte(5) = 0x55, byte(6) = 0x66, byte(7) = 0x77};
}

on timer tSendMsg1
{
  output(message1);
}

on key 'a'
{
  setTimerCyclic(tSendMsg1, 1);
}  

在点击按键a发送报文的同时,打开CANoe里的Statistics界面,监测CAN总线


image.png

“ Busload那一行的Avg是平均统计值,它会从0开始不断增大,最终趋向于最大值Max,由于开始时busload为0,增大到23%,然后一直稳定在23%(可以通过Current那一列看出),而Avg就是统计从0%开始到值的平均值,所以时间越久,它就越趋向于23%

由此看出,计算得出的理论值22.2%与实际的负载几乎相等

通过上面的公式,可以发现

“ 报文发送周期越短,1秒内往总线上发送的次数越多,往总线上发送的bit数就越多,负载也就越大

而以1ms为周期发送一条报文最大的负载也就23%,如果我想让负载率达成75%左右,甚至是90%以上呢,我总不能让发送周期比1ms还小

那要怎么办呢

既然不能继续缩短发送周期,可以在每个发送周期多发送几条此报文不就行了

variables
{
  msTimer tSendMsg1;
  message 0x001 message1 = {dlc = 8, byte(0) = 0x00, byte(1) = 0x11, byte(2) = 0x22, byte(3) = 0x33, byte(4) = 0x44, byte(5) = 0x55, byte(6) = 0x66, byte(7) = 0x77};
}

on timer tSendMsg1
{
  output(message1);
  output(message1);
  output(message1);
  output(message1);
}

on key 'a'
{
  setTimerCyclic(tSendMsg1, 1);
}  

这里我以每1ms发送4条相同的报文,那么负载也就是只发送一条报文的负载的4倍

看一下监测结果


image.png

“ 我们就可以用上面的公式,调整里面的变量,还有增加每个周期发送的次数,来达到我们想要的总线负载,当然最终还是需要用Statistics查看实际的负载是否能满足我们的要求

在测试中,模拟负载的报文,也有要求,不同的报文ID,优先级也不同,0x000优先级最高,0x7ff优先级最低,所以如果需要在高优先级下测试,就用0x000报文模拟负载,如果需要在低优先级下测试,就用ox7ff报文模拟负载,这样就可以模拟高负载高优先级、高负载低优先级、低负载高优先级、低负载低优先级这四种情况

学会了CAN总线的负载,那么CANFD的负载就简单了

相关文章

  • 如何模拟CAN/CANFD总线的负载

    转载:https://zhuanlan.zhihu.com/p/429067454[https://zhuanla...

  • CAN总线控制器如何进行验收滤波

    了解CAN总线的人都知道,CAN总线在的帧数据在总线上传送时,其它的CAN控制器是通过验收滤波来决定总线上的数据帧...

  • 电路识读39-车载网络(CAN)系统组成及电路图识读

    一、CAN总线的组成与功能 1.CAN 数据传输总线系统的组成 以马自达6 汽车为例介绍CAN总线系统结构与原理。...

  • 汽车控制系统

    介绍一下CAN总线 CAN(Controller Area Network, CAN)控制局域网总线网络,是汽车控...

  • Arduino CAN总线实验结果

    CAN总线实现方案 CAN总线节点框架主要由三部分组成: MCU,应用控制器; CAN控制器,总线控制器,往往通过...

  • CAN总线

    CAN(Contronller Area Network)控制器局域网,是一种能够实现分布式实时控制的串行通信网络...

  • CAN总线

    CAN是Controller Area Network 的缩写,是ISO国际标准化的串行通信协议。 CAN协议 C...

  • CAN总线

    1、什么是CAN总线 通俗的讲:CAN总线就是一种总线形式,通信用的,比如咱们用的网线,就是一种总线形式,网线就是...

  • 记录

    something about CAN/LIN总线 汽车的控制单元间通过CAN/LIN总线进行数据交换 LIN是主...

  • can的ACR和AMR

    can的ACR和AMR can总线中有ACR和AMR。他们是CAN总线实现点对点,一点对多点的重要寄存器。其中AM...

网友评论

    本文标题:如何模拟CAN/CANFD总线的负载

    本文链接:https://www.haomeiwen.com/subject/twickdtx.html