CAN总线负载率要如何计算

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

Classic CAN Standard Frame标准帧(不考虑位填充)共:108Bit+帧间隔3Bit=111bit
帧起始(1bit)、仲裁段(12bit)、控制段(6bit)、数据段(8×8bit)、循环冗余码段(16bit)、应答段(2bit)和帧结束(7bit)

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

Classic CAN Extended Frame扩展帧(不考虑位填充)共:128Bit+帧间隔3Bit=131bit
帧起始(1bit)、仲裁段(32bit)、控制段(6bit)、数据段(8×8bit)、循环冗余码段(16bit)、应答段(2bit)和帧结束(7bit)

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计算单个帧负载率

对Classic CAN Standard Frame标准帧来说,发送一帧实际长度(不考虑位填充;帧间隔3Bit;DLC = 8):

108+3=111Bit;
CAN总线负载率要如何计算_第1张图片
对Classic CAN Extended Frame扩展帧来说,发送一帧实际长度(不考虑位填充;帧间隔3Bit;DLC = 8):

128+3=131Bit;
CAN总线负载率要如何计算_第2张图片

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

如果已知一个CAN总线网络所有CAN ID的DBC/Arxml,并且知道它们的发送方式,我们可以粗略地估算出CANFD总线网络的“负载率”:CANFD总线负载率是各个帧占用总线带宽百分比之和。

下面以比特率/波特率:仲裁段500kbps,数据段2Mbps为例(不考虑位填充;帧间隔3Bit):
CAN总线负载率要如何计算_第3张图片

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%。

或者这么理解
通信速率为500kbps的CAN总线来说,500kbps就是500kbit/s,也就是1秒内总线上最大允许传输的bit数为500000个我们模拟发送一条周期报文,计算1秒内它传输到总线上的bit数,然后再除以1秒内最大允许的bit数,不就得到总线的负载了嘛

CAN总线负载率要如何计算_第4张图片

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%
报文发送周期越短,1秒内往总线上发送的次数越多,往总线上发送的bit数就越多,负载也就越大

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.代码

https://download.csdn.net/download/weixin_44057803/88416679

你可能感兴趣的:(网络)