CAN总线负载率计算

CAN总线负载率计算

目录

    • CAN总线负载率计算
  • 1.单个数据帧负载率计算
    • 1.1计算CAN传输位时间
    • 1.2传输一次报文需要多长时间
      • 1.2.1报文传输时间计算公式
      • 1.2.2报文长度
        • 1.2.2.1传统CAN报文长度
        • 1.2.2.2CAN FD报文长度
    • 1.3总线负载率计算公式
    • 1.4计算单个固定周期报文的总线负载率
  • 2.多个数据帧负载率计算
  • 3.重要说明:
  • 4.CAN总线负载率为什么要保持在30%以内

1.单个数据帧负载率计算

1.1计算CAN传输位时间

位时间指的是传输1bit数据所需要的时间。
以CAN传输速率为500Kb举例,其表示1秒能传输500_000bit的数据。
那么传输1bit数据需要的时间为1/500_000=2us。所以CAN传输速率为500Kb时位时间为2us。

1.2传输一次报文需要多长时间

1.2.1报文传输时间计算公式

传输一次报文的时间T=(报文位数L)x(位时间t)

1.2.2报文长度

1.2.2.1传统CAN报文长度

(1)如果使用的是标准帧,则一顿报文的比特数为:47+dlc * 8
(2)如果使用的是扩展帧Q,则一帧报文的比特数为:67+dlc * 8

1.2.2.2CAN FD报文长度

(1)如果使用的是标准帧,则一报文的比特数为:
仲裁域: 17(SOF~BRS)+ 12(ACK~IFS);
数据域: 5(ESI~DLC) + dlc* 8 + 18(CRC~DEL) ;
(2)如果使用的是扩展帧,则一报文的比特数为:
仲裁域:36(SOF~BRS)+ 12(ACK~IFS) ;
数据域: 5(ESI~DLC) + dlc*8 + 18(CRC~DEL) ;
(3)如果数据域长度 dlc 大于16字节,则上面计算的数据域比特数还要再另加4bit ( 因为dlc大于16时,CRC由17bits变为21bits )
(4)如果使用的是变比特率,仲裁域位时间和数据位时间需要分开计算。[注:CAN FD报文里面,数据域从ESI(含ESI) 开始到ACK(不含ACK),数据域需要使用另一种比特率]

1.3总线负载率计算公式

总线负载率=(在单位时间内CAN总线上传输数据占用的总时间)/(单位时间)
因此,只要将单位时间内传输的所有数据占用的时间累加起来,即可计算出总线负载率了。

1.4计算单个固定周期报文的总线负载率

以传统CAN标准帧报文,500Kbps比特率,数据域长度DLC为8字节举例。
其报文长度L=( 47 + 8×8)=111bit。
位时间t=1/500k=2us
传输一次报文时间需要T=L×t=报文长度×位时间=111×2=222us。
假设报文周期为10ms,那么1s内该报文会传输100次。
报文传输100次需要的时间为T1=222×100=22.2ms=0.022s。
若总线上只有这一条报文在传输,则该总线负载率为0.022/1=2.2%。

2.多个数据帧负载率计算

假设先总线上有两个报文A和B。
A和B报文都是标准帧,传输速率500Kb。
A报文周期10ms,B报文周期20ms。
根据《1.4计算单个固定周期报文的总线负载率》计算A报文和B报文传输一次都需要222us的时间。
1s内A报文传输100次,A报文传输数据需要的时间为222×100=22.2ms=0.022s
1s内B报文传输50次,B报文传输数据需要的时间为222×50=11.11ms=0.011s
该总线负载率为(0.022+0.011)/1=3.3%。

3.重要说明:

上面的计算只是一个粗略的数据,因为在CAN帧比特数计算时,涉及到位填充,所以计算出来的比特数并不是实际比特数,计算结果会比实际比特数少。
位填充:每当发送器在要发送的比特流中检测到相同值的五个连续比特时,则自动在实际发送的比特流中插入一个相反的比特位。

4.CAN总线负载率为什么要保持在30%以内

CAN总线负载率定义:一般业内对负载率的定义为实际数据传输速率和理论上能达到的数据传输速率的比值

因为传输速率一般是按秒来计算,数据传输速率即为每秒钟传输了多少个BIT,负载率也默认为在一秒的时间范围内位资源的使用情况,理论上波特率为500K的总线上每秒钟能够传输500000个BIT,如果在某一秒中总线上只传输了100000个BIT,则总线负载率为20%。

如果按照空间上负载率的概念做简单类比,CAN总线上一般要求负载率不大于30%似乎不能被理解,毕竟物尽其用这个观念是被大家广为接受的。

要深入系统的理解为什么30%成为目前业内普遍遵守的负载率高压线,就不得的不引入CAN理论中另外几个重要的概念:ID仲裁、闲时发送和最大反应时间。

CAN总线本质上是一种串口通讯,靠在时间线上对每一位的电压值进行调制来搭载不同的信号。因为各节点共用总线介质,对总线的使用权界定就至关重要。

先说结论:只有在总线空闲时,发送节点才能向总线上发送帧起始及后续顿ID,只有在顿ID

结论1:只有在总线空闲时,发送节点才能向总线上发送帧起始及后续帧ID。
只有在ID赢得仲裁时,发送节点拥有总线控制权进而应总线发送报文剩余部分。在仲裁中失败的节点让出总线控制权等待下次总线空闲时继续尝试发送。

我们可以看到如果某一个节点需要发送一顿报文,它需要同时满足两个条件:
1、总线是空闲的,即目前没有任何节点在发送报文,在总线上表示为节点监测到11个连续的隐性位
2、所需发送的报文赢得ID仲裁,即报文优先级较高

一个报文在试图发送时,必须满足上述两个条件才能完成发送。
这里的问题就是:如果一个优先级相对较低的节点向外发报文时,会因为不断地在仲裁中失败而导致发送延迟。如果延迟过大会引起通讯失败。
负载率越高,代表需要发送的数据越多,相对来说低优先级节点发生通讯延迟的樱率越大
实际上30%的数据也只是一个经验数值,历史很悠久的一个经验数值。从本质上来看,限制负载率最终是要保证相对低优先级节点的通讯实时性,如果能通过网络及节点优化等手段满足每个节点的最大响应时间满足要求,负载率只是一个无关紧要的参数。
12年的时候菲亚特已经可以做到70%的负载率下仍然能够保证正常通讯,见链接。菲亚特利用时间分析软件Symtavision使CAN总线负载率达到70%

你可能感兴趣的:(CAN,汽车,网络)