最近某个工作项目中需要计算CAN总线上的负载率,这个东西从字面上来理解是很简单的,就是指总线上所有节点在单位时间内发送的所有数据占整个总线理论带宽的比值,或者说,总线实际数据传输速率与理论上能达到的数据传输速率的比值。
当然,想要真正的计算出实际项目中的负载率,肯定是有一个公式可以套用的。本想偷懒一下去找现成的,但是在网上一番搜寻之后却发现,没有任何一篇文章把这个事情简单而精准的解释清楚的。算了,自己来。
开始之前先给一个简单的例子,比如在一个波特率为500Kbps的总线上,理论上每秒钟能够传输500000个BIT,而如实际上只传输了100000个BIT,那么就可以得到此刻的总线负载率为100000/500000=20%。当然,这只是一个非常粗糙的示例,真正的计算过程肯定要复杂一点。好,下面就开始实际的推导过程:
首先给出核心公式:
负载率R = 每秒钟实际上传输的所有数据的BIT总数A / 每秒钟理论上所能传输的BIT总数T
很简单的,对于指定了波特率的某个CAN总线,上述公式的分母T是恒定的。就比如上述示例中,波特率为500kbps的总线上,理论上每秒钟能够传输500000个BIT。而如果波特率为250kbps,那么就能传输250000个BIT。所以,我们只要计算上述公式中的分子A即可。
每秒钟实际上传输的所有数据的BIT总数A =
[该秒内所发送的所有ID1报文的所有BIT总数A1] +
[该秒内所发送的所有ID2报文的所有BIT总数A2] +
…… +
[该秒内所发送的所有IDn报文的所有BIT总数An]