大家开车看导航时最烦心的恐怕就是前方路段上的红色标记了。它表示前道路车辆比较多,有可能堵车。而总线负载率bus load就是表征在CAN总线上通信数据量的一个参数。总线负载率与通信速率的关系为:
总线负载率=每秒中总收发位数/总线波特率
工程上平均负载率一般不超过30%, 那么这个总线负载率该如何计算呢。要解决这个问题,首先就要看看CAN通信的帧定义。
经典CAN通信总线负载率计算
CAN 通信数据位计算
根据CAN 标识符的位数不同,可以有标准数据帧和扩展数据帧两种。
对于标准数据帧,它的帧结构为:
图上的N代表数据段传输数据的字节数。此外,除了过载帧和错误帧之外,帧与帧之间需要有3个1表示的帧空间,也就是上图中的IFS。这样在实际传输一个真正有意义的帧时,理想情况下的总位数就是:
理想情况下传输一帧的总位数= 44+8N+3=47+8N
注意这是说的理想状态下,实际通信时,这种情况无异于买彩票中大奖。这个原因就是,CAN通信规定当发送方连续发出5个一样的位时,必须在第5个位后插入一个不同的位,这就是CAN通信的位填充机制。这种位填充机制在上图黄色部分有效。因此实际CAN通信时,需要考虑这个位填充带来的CAN数据位数量的变化。这里还有一种买彩票中大奖的情况,就是最恶劣情况。这个最恶劣情况下相当于CAN帧上从帧起始开始出现连续5个0,而后位插入了一个1,不巧后面4个要传输的位都是1,于是后面发送完4个原定要发送的数据1后又要填充0 ,而后原定要发送的数据又偏巧都是0,于是再填充1;如此每4个原定发送位都必须再填充一位。这就是最恶劣情况下的CAN传输。它的总位数为:
最恶劣情况下传输一帧的总位数=理想情况下传输一帧的总位数+位填充数量。
位填充数量=(位填充区长度-5)/4+1=(44-10-5+8N)/4+1=(29+8N)/4+1
所以
最恶劣情况下传输一帧的总位数=47+8N+(29+8N)/4+1=48+8N+(29+8N)/4
因此标准数据帧的总位数介于以下两个值之间:
最优情况:47+8N
最差情况:48+8N+(29+8N)/4
对于扩展数据帧CAN而言,帧结构如下:
按上面的计算方法可以计算出最优和最差两种情况的数据位数:
最优情况:67+8N
最差情况:68+8N+(49+8N)/4
1.2 计算实例
设:标准数据帧,500kbps波特率,所有报文发送的数据长度为N=8,其中共有5条周期为10mS的消息,3条周期为50mS的消息,2条100mS的消息。按上面的方法计算。
消息类型 | 1秒内此类消息最小位长 | 1秒内此类消息最大位长 |
---|---|---|
10ms | 55500 | 67500 |
50ms | 6660 | 8100 |
100ms | 2220 | 2700 |
总计 | 64380 | 78300 |
因此,最优情况下负载率为=64380/(500x1000)=12.876%
最差情况下负载率为=78300/(500x1000)=15.66%
以上只是理论计算,下面用实际测试一下。使用IG模块模拟上述CAN通信。为了简便期间,各个消息Data内容全部填充0,以模拟较差情况下的CAN总线情况。结果如下:
可以看到Busload一项下的当前值为14.52%。
为了模拟较好的通信情况,各个消息数据位按最大可能避免数据段种出现位填充的方式,将各个数据内容按0x55(二进制:0101 0101 可避免在数据段种出现位填充)填写。结果为:13.13%
由于上述实例只是控制了数据段的位填充,所以实际测试结果都应在理论计算的最优和最差结果之间。实际测试确实如此,因此理论计算验证通过,可以作为评估总线负载率的方法。
2 CAN FD通信总线负载率计算
CAN FD的情况有些特殊,它在帧结构和通信速率上都与CAN的通信有些区别。CAN FD的帧结构如下:
(图片来源:Vector https://cdn.vector.com/cms/content/know-how/can/Slides/CAN_FD_Introduction_EN.pdf )
从上面的图中可以看到CAN FD在数据段,CRC段及一些控制位上与CAN存在较大不同。其中当数据段字节超过16时,CRC长度也就扩展到21位。此外CAN FD还存在低速传输速率传输部分(黄色区)和高速传输区(蓝色区)。因此CAN FD的总线负载率计算需要按速度分区结构来分别计算如下表所示
消息类型 | 最优与最差 | 低速区位数 | 高速区位数(N<16) | 高速区位数(N>=16) |
---|---|---|---|---|
标准数据帧 | 最优 | 29 | 8N+27 | 8N+31 |
标准数据帧 | 最差 | 36 | 10N+34 | 12N+40 |
扩展数据帧 | 最优 | 48 | 8N+27 | 8N+31 |
扩展数据帧 | 最差 | 60 | 10N+34 | 12N+40 |
而后分别各种消息计算低速区和高速区在1秒内的总位数而后分别除以不同段的波特率即可得到CAN FD的总线负载率。
例如
设:低速区波特率为500kps,高速区为1Mbps。所有报文都是非扩展帧。其中8字节有10mS周期的报文有5条,16字节50ms报文有3条,8字节100ms消息由2条。则按上面的方法分别计算得到
总的低速区最好情况下位数为:1450+1740+580=16820
总的高速区最差情况下位数为:45500+9540+1820=56860
所以总的最优情况下的总线负载率为:
16820/500000+56860/1000000=9.05%
同理可计算得到最差情况的总线负载率:11.496%
后记
本文于2024.2.4 日首发于“车灯电子扫地僧”。 如果你喜欢我的文章,也可以“车灯电子扫地僧”搜索微信订阅号。更多文章等待您的发掘.