当前位置: 首页 > news >正文

【图解CAN总线】-7-Classic CAN 2.0总线网络“负载率”计算(方法二)

目录

1 Classic CAN帧长度

2 Interframe space帧间空间的介绍

2.1 Intermission间歇

2.2 Bus idle总线空闲

2.3 Suspend transmission

3 Classic CAN 2.0总线网络“负载率”计算

3.1 单个帧的“负载率”

3.2 通过CAN DBC/Arxml来计算一个CAN网络的理论“负载率”

4 拓展

END


推荐阅读(单击下方文字即可跳转至对应博文):

【图解CAN总线】-1-CANFD和经典CAN2.0帧结构对比

【图解CAN总线】-2-详述CAN总线电平

【图解CAN总线】-3-详述波特率(Raud Rate)和比特率(Bit Rate)二者的差异

【图解CAN总线】-4-详述CANFD和Classic CAN的Frame帧结构差异

【图解CAN总线】-5-详述Bit Stuffing位填充在CANFD和Classic CAN中的差异

【图解CAN总线】-6-classic CAN 2.0总线网络“负载率”计算

1 Classic CAN帧长度

不管是Classic CAN Standard Frame还是Classic CAN Extended Frame,其帧结构都由以下7个段组成:

—   SOF帧起始;

—   arbitration field仲裁段;

—   control field控制段;

—   data field数据段;

—   CRC field;

—   ACK field;

—   EOF.

Classic CAN Standard Frame标准帧不考虑位填充)共:108Bit

帧起始(1bit)、仲裁段(12bit)、控制段(6bit)、数据段(8×8bit)、循环冗余码段(16bit)、应答段(2bit)和帧结束(7bit)

Classic CAN Extended Frame扩展帧不考虑位填充)共:128Bit

帧起始(1bit)、仲裁段(32bit)、控制段(6bit)、数据段(8×8bit)、循环冗余码段(16bit)、应答段(2bit)和帧结束(7bit)

2 Interframe space帧间空间的介绍

Data frame数据帧remote frame远程帧应通过一个称为interframe space帧间空间的bit field与前面的帧分开,不管是什么类型的帧(data frame数据帧remote frame远程帧error frame错误帧overload frame过载帧)。

注意:

  • overload frame过载帧error frame错误帧的前面不应有interframe space帧间空间;
  • 多个overload frame过载帧之间也不应有interframe space帧间空间

interframe space帧间空间应包含bit field:intermission和bus idle,并对作为前一帧的发送方的error-passive node暂停发送(见图2-1和图2-2)。

图2-1 非前一帧的error-passive或receiver的节点的帧间空间

图2-2 作为前一帧发送方的error-passive node的Interframe space

2.1 Intermission间歇

intermission field应包括三个隐性位。在intermission期间,任何节点不得开始发送data frame数据帧remote frame远程帧。只允许发出overload条件的信号。

在intermission期间的第三位检测到总线上的显性位应解释为SOF。

2.2 Bus idle总线空闲

bus idle总线空闲期间的长度可以是任意的。总线应识别bus idle总线空闲,任何节点都可以进入总线进行发送。在发送另一帧的过程中,等待发送的帧,应在intermission后的第一Bit开始。

bus idle总线空闲期间,对总线上一个显性位的检测应被解释为SOF。

2.3 Suspend transmission

一个error-passive node,如果是前一帧的发送方,在开始发送另一帧之前,应在intermission后发送8个隐性位后。

3 Classic CAN 2.0总线网络“负载率”计算

通过第2章我们可以知悉,CAN总线网络正常的发送过程中,帧与帧之间至少有3个隐性位

根据这些信息,来介绍一种不同于“【图解CAN总线】-6-classic CAN 2.0总线网络“负载率”计算icon-default.png?t=M85Bhttps://blog.csdn.net/qfmzhu/article/details/104294910”的方法。

3.1 单个帧的“负载率”

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

108+3=111Bit;

比特率/波特率

一个Bit的位时间

单个帧的“负载率”

250 Kbps

4000纳秒

((111 * 4000纳秒) / 1秒) *100%= 0.0444 %

500 Kbps

2000纳秒

((111 * 2000纳秒) / 1秒) *100%= 0.0222 %

1 Mbps

1000纳秒

((111 * 1000纳秒) / 1秒) *100%= 0.0111 %

Classic CAN Extended Frame扩展帧来说,发送一帧实际长度(不考虑位填充;帧间隔3BitDLC = 8):

128+3=131Bit;

比特率/波特率

一个Bit的位时间

单个帧的“负载率”

250 Kbps

4000纳秒

((131 * 4000纳秒) / 1秒) *100%= 0.0524 %

500 Kbps

2000纳秒

((131 * 2000纳秒) / 1秒) *100%= 0.0262 %

1 Mbps

1000纳秒

((131 * 1000纳秒) / 1秒) *100%= 0.0131 %

3.2 通过CAN DBC/Arxml来计算一个CAN网络的理论“负载率”

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

下面以比特率/波特率:500kbps为例(不考虑位填充;帧间隔3BitDLC = 8):

Num

CAN ID

发送周期

帧类型

DLC

对应帧一秒内的负载率

1

0x115

10ms

标准帧

8

((1000ms / 10ms)* (111 * 2000纳秒) / 1秒) *100% = 2.22%

2

0x217

20ms

扩展帧

8

((1000ms / 20ms)* (131 * 2000纳秒) / 1秒) *100% = 1.31%

3

0x3B4

50ms

扩展帧

8

((1000ms / 50ms)* (131 * 2000纳秒) / 1秒) *100% = 0.524%

4

0x475

500ms

标准帧

8

((1000ms / 500ms)* (111 * 2000纳秒) / 1秒) *100% = 0.0444%

CAN总线网络的理论“负载率”

4.0984 % +…

4 拓展

如果有一个已知的CAN Trace Log,我们也可以按照上述的方法,统计1秒以内发送的帧数,来粗略计算该1秒以内的Classic CAN负载率。

推荐阅读(单击下方文字即可跳转至对应博文):

《Autosar从入门到精通-实战篇》总目录_培训教程持续更新中...

《Autosar_BSW高阶配置》总目录_培训教程持续更新中...

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

END

获取更多“汽车电子资讯”和“工具链使用”,

请关注“汽车电子助手”,做您的好助手。

相关文章:

  • 3.线性神经网络----动手学深度学习
  • 搭建zabbix4.4.6以及企业微信告警功能实现
  • 文件输入与输出io
  • SpringBoot整合Docker实现一次构建到处运行
  • 程序员眼中的Linux操作系统——初识指令
  • process.env.NODE_ENV与@vue/cli-service及其.env.*默认外部环境配置文件之跨域部署
  • MySQL:用户权限和语言接口
  • 2022年广西壮族自治区中职网络安全技能竞赛“Linux操作系统渗透测试详解”
  • 沉睡者 - 抖音中视频计划横版16:9视频制作教程
  • 强大的包管理器Poetry
  • MFC Windows 程序设计[304]之文件夹的枚举(附源码)
  • 【ArcGIS微课1000例】0033:地图点状标记符号设计教程
  • 神经网络中的算法-BN算法
  • SpringBoot接收参数的几种常用方式
  • Linux--权限
  • SegmentFault for Android 3.0 发布
  • @angular/forms 源码解析之双向绑定
  • 08.Android之View事件问题
  • Android 架构优化~MVP 架构改造
  • Apache Zeppelin在Apache Trafodion上的可视化
  • CSS实用技巧
  • Golang-长连接-状态推送
  • input的行数自动增减
  • JavaScript设计模式系列一:工厂模式
  • JSDuck 与 AngularJS 融合技巧
  • JS数组方法汇总
  • JS题目及答案整理
  • Laravel 实践之路: 数据库迁移与数据填充
  • learning koa2.x
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • python_bomb----数据类型总结
  • vuex 学习笔记 01
  • 从0到1:PostCSS 插件开发最佳实践
  • 反思总结然后整装待发
  • 分布式任务队列Celery
  • 七牛云假注销小指南
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​Spring Boot 分片上传文件
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (windows2012共享文件夹和防火墙设置
  • (第27天)Oracle 数据泵转换分区表
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (一)Neo4j下载安装以及初次使用
  • (转)德国人的记事本
  • (转)一些感悟
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .FileZilla的使用和主动模式被动模式介绍
  • .net MVC中使用angularJs刷新页面数据列表
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET4.0并行计算技术基础(1)
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)