最近某个工作项目中需要计算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]

其中:

该秒内所发送的所有ID1报文的所有BIT总数A1 = ID1的每一个报文的BIT总数Z * ID1的发送次数K

由于ID1的发送次数K是明确的,比如按照50ms的间隔发送,那就意味着一秒钟内的发送次数是20次。所以,我们只需要计算出“ID1的每一个报文的BIT总数Z”即可;

ID1的每一个报文的BIT总数Z = 实际报文数据帧的BIT总数Zg + 帧间隔的BIT总数Zy

对于标准帧和扩展帧,上述的值是不一样的,如下:

  • 对于CAN标准帧:假设数据帧长度恒定为8个字节,可以得到每一个数据帧最大长度共计108bit,分别为:帧起始(1bit)、仲裁域(12bit)、控制域(6bit)、数据域(8×8bit)、循环冗余码域(15bit)、1bit分隔符、应答域(2bit)和帧结尾(7bit);
  • 对于CAN扩展帧:假设数据帧长度恒定为8个字节,可以得到每一个数据帧最大长度共计128bit,分别为:帧起始(1bit)、仲裁域(32bit)、控制域(6bit)、数据域(8×8bit)、循环冗余码域(15bit)、1bit分隔符、应答域(2bit)和帧结尾(7bit);

而帧间隔的BIT总数,根据CAN协议的规定,都是3个BIT。

所以,对单个数据帧来说,完成一帧标准帧的全套发送行为总共需要108 + 3 = 111个BIT,完成一帧扩展帧的全套发送行为总共需要128 + 3 = 131个BIT。

至此,所有的元素取值都已经计算清楚,接下来我们进行整合计算:

假设总线波特率为500kbps,工作于标准帧模式,共有5个ID,每个ID按照50ms的间隔进行发送,那么此时的总线负载率计算如下:

负载率R
=(A1 + A2 + A3 + A4 + A5)/ 500000
=(A * 5)/ 500000
=(Z * K)* 5 / 500000
=(111 * 20)* 5 / 500000
= 2.22%

为了方便起见,我将上述的过程整理成了一个excel表格,只需要手工修改几个参数便可完成所有过程的自动计算,如下图:

实际的表格,我上传到CSDN了【CAN总线负载率计算器】,有需要的可以自行下载。当然,考虑到下载需要积分(这里要澄清一下,本来我上传时是选择不需要积分下载的,但是CSDN会自动调整,这不是我能左右的),如果积分不多,也可以直接留言邮箱给我,我单独发给你。

最后说明一下:

负载率越高,代表需要发送的数据越多,相对来说低优先级节点发生通讯延迟的概率越大。一般情况下,为保证低优先级的报文传输延迟在可接受的时间范围内,总线利用率不应超过30%,当负载率大于38%~40%时,稳定性开始衰减,超过50%后存在影响驾驶性及安全性风险,大于70%时,稳定性衰减加剧,超过98%时,网络将不堪重负。

不过,实际上30%的数据也只是一个经验数值,历史很悠久的一个经验数值。从本质上来看,限制负载率最终是要保证相对低优先级节点的通讯实时性,如果能通过网络及节点优化等手段满足每个节点的最大响应时间满足要求,负载率只是一个无关紧要的参数。12年的时候菲亚特已经可以做到70%的负载率下仍然能够保证正常通讯。

五分钟教会如何计算CAN总线负载率,包学包会相关推荐

  1. 授之以鱼不如授之以渔!五分钟教会您手工查杀***!

    授之以鱼不如授之以渔!五分钟教会您手工查杀***! 经常看到有人求助- 为什么我的主页被改了,死活改不回来呀? 这个进程是不是正常进程呀? 这个程序是什么程序呀?为什么死活杀不掉呢? ....... ...

  2. CAN测量模块总线负载率,你关注了吗?

    一 背景 随着新能源汽车的飞速发展,整车系统日趋复杂,整车性能的可靠性也越来越重要.在车辆测试过程中,为应对更加多样的试验需求,传感器的种类和数量会随着测量种类而增加,由此数据量变得越发庞大,使得海量 ...

  3. 用虹科Pico汽车示波器计算CAN总线负载率

    CAN总线负载率是指CAN总线上单位时间内实际传送的位数和可以传送的位数之比,也就是总线实际数据传输速率与理论上能达到的数据传输速率的比值.例如波特率为500kbps的CAN总线理论上每秒钟能够传输5 ...

  4. can总线报文是固定的吗_CAN总线负载率的计算方式

    今天这篇文章主要是介绍当前汽车中使用的总线的类型及负载率的计算方式,用于汽车电子工程师学习及应用在日常工作中:当前汽车中常见总线类型是CAN,CAN FD, FlexRay及LIN总线:今天我们先介绍 ...

  5. python代码怎么写出色_如何写出更具有Python风格的代码,五分钟教会你!

    我们都喜欢 Python,因为它让编程和理解变的更为简单.但是一不小心,我们就会忽略规则,以非 Pythonic 方式编写一堆垃圾代码,从而浪费 Python 这个出色的语言赋予我们的优雅.Pytho ...

  6. 五分钟教会你如何使用GitHub

    许多用户都想拥有自己的代码库,可惜很多都需要付费.而GitHub完美地化解这个尴尬. 一.注册GitHub 想要进入GitHub第一部肯定是要注册了. 1.打开网页版GitHub: 2.点击回车之后来 ...

  7. 五分钟教会你函数式编程与闭包

    函数式编程这个概念我们可能或多或少都听说过,刚听说的时候不明觉厉,觉得这是一个非常黑科技的概念.但是实际上它的含义很朴实,但是延伸出来许多丰富的用法. 在早期编程语言还不是很多的时候,我们会将语言分成 ...

  8. python云盘服务_Python无所不能?五分钟教会你用python打造个人云盘!

    1 简介 当我们想要从本地向云服务器上传文件时,比较常用的有pscp等工具,但避免不了每次上传都要写若干重复的代码. 而笔者最近发现的一个基于Python的工具updog,可以帮助我们在服务器上搭建类 ...

  9. 怎样保存python源程序_五分钟教会你如何编写、保存与运行 Python 程序

    第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...

  10. python 网盘搭建_Python无所不能?五分钟教会你用python打造个人云盘!

    1 简介 当我们想要从本地向云服务器上传文件时,比较常用的有pscp等工具,但避免不了每次上传都要写若干重复的代码. 而笔者最近发现的一个基于Python的工具updog,可以帮助我们在服务器上搭建类 ...

最新文章

  1. [Linux学习]Linux键盘布局设置
  2. 从零开始学PowerShell(4)数据的选择、排序与格式化
  3. 文件不能自动求和_Excel求和公式函数的使用方法教程
  4. ConcurrentHashMap是如何保证线程安全的,你知道么?
  5. 如何将网站前端如何添加登录密码访问_如何在Mac上查找保存的密码的所有信息...
  6. ubuntu crontab 不执行的解决方法
  7. 删除xcode中的描述文件的路径
  8. supermap 点云_SuperMap三维地理设计新技术满足新需求
  9. 软件开发工程师应该具备哪些证书_初级软件工程师证书简介
  10. 微盟WOS新商业操作系统正式公测
  11. 服务器空文件夹无法删除怎么办,空的文件夹无法删除怎么办 空的文件夹无法删除的原因【图文】...
  12. lc电路在计算机中应用,LC电路的基础知识介绍
  13. computer browser服务无法启动 错误1068 依存服务或组无法启动
  14. java字符串转换为拼音_JAVA实现汉字转换为拼音 pinyin4j/JPinyin
  15. 用Python写了一个水果忍者小游戏
  16. 发票、司法、扶贫,政务应用已成区块链率先落地领域?
  17. RSA加密与解密(Java实现)
  18. IP-Guard安全U盘使用说明书
  19. RedMonk最新编程语言排行榜出炉:JS霸榜,C++持续下跌
  20. python pandas series想赋予新的值_pandas Series对象创建及常用操作

热门文章

  1. jQuery视频播放器插件
  2. 前期交互流程(PTES的第一步)
  3. 海思Hi3716M高清广电平移和低端IPTV解决方案芯片产品简介
  4. 电脑系统没有自带的字体-楷体GB2312字体 免费版提供下载
  5. scipy求极值代码
  6. QT+VS开发界面入门(qt界面在VS2022实现自动生成槽函数)
  7. 代码重构-了解你的代码:cloc + simian
  8. Java代码审查工具 FindBugs下载、安装和使用(无需集成环境一键安装使用)
  9. 15 种最受欢迎的数据可视化流程图及模板
  10. 卡通漫画Photobacks Cartoon 2.0 PS扩展面板汉化版 支持CC2019