网站首页 > 技术文章 正文
在前面6篇文章:
CAN通讯系列3-CAN通讯如何传递信号
CAN通讯系列4- CAN数据帧及其仲裁
CAN通讯系列5- CAN总线定义
CAN通讯系列6- 波特率是什么?
CAN通讯系列7- 如何准确接收数据?
CAN通讯系列8- 揭开波特率的神秘面纱
我们已经解决了一个控制器的多个信号通过怎样的形式传递给另一个控制器,即通过CAN数据帧,包含报文ID,数据长度和数据等信息,并在物理层面以怎样的电压形式进行传递。
也解决了一个控制器的CAN报文数据以多快的速度传递给另一个控制器。而在实际开发过程,针对CAN报文传递通常还需要考虑一个问题:负载率。
通俗地讲,就好比一条报文就是CAN总线上一辆辆飞驰的汽车,如果发送的报文太快太频繁,可能会出现拥挤,而导致传输阻塞,信息延迟或丢失等问题,因此,在设计一条CAN总线有多少报文,报文多快频率发送时,就用负载率来衡量。在给定时间内,CAN总线所采用的通信参数与总线容量之比,大白话就是CAN总线具备1s传递1000bit数据的能力,而目前设计如果要求1s传递500bit数据,那么负载率就是50%,如果要求1s传递1000bit数据,那么负载率就是100%。接下来就开始负载率的计算:
1 负载率的计算
针对负载率如何计算,首先要明确目标的CAN总线波特率是多少;然后明确该总线有哪些CAN帧,每种类型的CAN帧有多少条,送周期是多少;再考虑帧间隔;最后前面的信息计算负载率。
假设有一条CAN总线的波特率是500Kbps,该总线有10ms发送周期的标准数据帧报文20条,20ms发送周期的扩展数据帧报文20条,那么总线的负载率大概是多少?
1 )CAN总线波特率为500Kbps,则意味着1s能传递500,000bit数据。
2) CAN帧的位数,这里只考虑数据帧,包括其标准格式和扩展格式。
对于标准格式的数据帧和扩展格式的数据帧,其帧结构都由7个段组成,如下所示:
两者差别在仲裁段,标准格式的仲裁段有12bit,而扩展格式的仲裁段有32bit。因此,在不考虑位填充的情况下,标准格式的数据帧有108 bit,即SOR(1bit)、仲裁段(12bit)、控制段(6bit)、数据段(64bit)、CRC段(16bit)、ACK段(2bit)和EOF(7bit);扩展格式的数据帧有128 bit,即SOR(1bit)、仲裁段(32bit)、控制段(6bit)、数据段(64bit)、CRC段(16bit)、ACK段(2bit)和EOF(7bit)。
3) 帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。CAN总线正常的发送过程中,帧间隔有3个隐性位。
4)负载率计算,
因此考虑到帧间隔的3bit后,标准格式的数据帧有111 bit,扩展格式的数据帧有131 bit,那么发送一条数据帧,负载率是多少,如下所示:
这里CAN总线有10ms发送周期的标准数据帧报文20条,20ms发送周期的标准数据帧报文20条,那么有:
条数 | 报文ID | 发送周期 | 数据帧格式 | 数据长度/字节 | 每条帧的负载率 |
1 | Ox110 | 10 | 标准 | 8 | (1000ms/10ms)*0.0222% = 2.22% |
… | … | … | … | … | … |
20 | 0x129 | 10 | 标准 | 8 | (1000ms/10ms)*0.0222% = 2.22% |
21 | 0x600 | 20 | 扩展 | 8 | (1000ms/20ms)*0.0216% = 1.31% |
… | … | … | … | … | … |
40 | 0x619 | 20 | 扩展 | 8 | (1000ms/20ms)*0.0216% = 1.31% |
负载率= 20*2.22% + 20*1.31% = 70.6% |
Ok! 以上就是一个例子粗略地计算了一个CAN总线的负载率的示例。
2负载率多少合理
对于上面这个例子,我们计算得到CAN总线负载率大于了70%,这在我目前工作的所有公司都不允许的,我见过的CAN总线负载率通常都不超过50%,具体的数值需要通过计算和实验来确定。如果CAN总线负载率过高,将可能导致系统性能下降,增加错误率并导致总线冲突
因此在CAN总线的设计过程中,必须精确计算CAN总线的负载率,也通过一些措施来降低负载率。比如:
- 针对CAN报文的设计,尽可能提高CAN报文数据段的利用率,尽可能精准报文发送周期,能用更长周期就不用更短周期发送;
- 针对报文传输,可以通过使用定时器中断进行数据传输。在这种情况下,设备可以在空余的时间间隔中进行数据传输。
- 针对数据长度,可数据长度无法一帧报文发送,在这种情况下,可对对数据进行分帧传输,以避免超过CAN总线的限制。
3 小结
本文就计算了一个经典CAN总线的负载率,以此为例,触类旁通,不难计算更多报文类型的CAN总线负载率,比如CAN FD。
更多例子可参考: CAN FD总线网络“负载率”计算。
猜你喜欢
- 2024-12-24 CAN通讯系列10- 经典CAN VS. CAN FD
- 2024-12-24 干货分享:CAN总线详解 整车的控制只需要一条线
- 2024-12-24 以太网can转换器的波特率怎么设置?
- 2024-12-24 CAN报文解析 can报文解析代码
- 2024-12-24 说说stm32开发板波特率如何用can分析仪来判断?
- 2024-12-24 来可电子元器件CAN FD实战之可变波特率
- 2024-12-24 说说如何修改can总线分析仪的波特率
- 2024-12-24 说说canopen io中的节点号以及波特率如何设置
- 2024-12-24 掌握 CAN 转 PN 网关连接 can 设备的配置要领
- 2024-12-24 继续说说不同波特率的can总线设备通信的具体方法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)