CAN总线负载率

作者:王文举 链接:https://www.zhihu.com/question/60156866/answer/175096002

 

首先,需要理解什么是CAN线的负载率。一般业内的对负载率的定义为实际数据传输速率理论上能达到的数据传输速率的比值。

可以类比景区的负载率,每个景区都有一个负荷上限,比如说10000人,如果此时景区内只有1000人,那么这时的景区负载率是10%。景区负载率是一个在空间上定义的概念,它说明了在空间上资源的被使用情况,而总线负载率则不然,其是在时间上定义的一个概念,说明了在时间上资源被使用的情况。因为传输速率一般是按秒来计算,数据传输速率既为每秒钟传输了多少个BIT,负载率也默认为在一秒的时间范围内位资源的使用情况。理论上波特率为500K的总线上每秒钟能够传输500000个BIT,如果在某一秒中总线上只传输了100000个BIT,则总线负载率为20%。如果按照空间上负载率的概念做简单类比,CAN总线上一般要求负载率不大于30%似乎不能被理解,毕竟物尽其用这个观念是被大家广为接受的。要深入系统的理解为什么30%成为目前业内普遍遵守的负载率高压线,就不得的不引入CAN理论中另外几个重要的概念:ID仲裁、闲时发送和最大反应时间。

CAN总线本质上是一种串口通讯,靠在时间线上对每一位的电压值进行调制来搭载不同的信号。因为各节点共用总线介质,对总线的使用权界定就至关重要。先说结论:只有在总线空闲时,发送节点才能向总线上发送帧起始及后续帧ID,只有在帧ID赢得仲裁时,发送节点拥有总线控制权进而向总线发送报文剩余部分,在仲裁中失败的节点让出总线控制权等待下次总线空闲时继续尝试发送。我们可以看到如果某一个节点需要发送一帧报文,它需要同时满足两个条件:1、总线是空闲的,即目前没有任何节点在发送报文,在总线上表示为节点监测到11个连续的隐性位;2、所需发送的报文赢得ID仲裁,即报文优先级较高。

一个报文在试图发送时,必须满足上述两个条件才能完成发送。这里的问题就是:如果一个优先级相对较低的节点向外发报文时,会因为不断地在仲裁中失败而导致发送延迟。如果延迟过大会引起通讯失败。

负载率越高,代表需要发送的数据越多,相对来说低优先级节点发生通讯延迟的概率越大。

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

posted on 2017-10-23 13:49  如凤中奇缘  阅读(4976)  评论(0编辑  收藏  举报