刘洪鹏, 唐国强
(北京北方华德尼奥普兰客车股份有限公司, 北京 100072)
CAN总线网络是整车用来实现各系统通信调控以及控制等功能的重要部分。随着汽车行业的快速发展,对整车的功能要求不断增加,对总线的整体性能要求也在不断增加。因此,在设计之初,通过总线负载率的计算了解总线的当前状态,提前对总线进行优化设计,能够提高总线的工作性能,提高设计效率。
CAN总线通信负载率为所有数据帧占用总线百分比之和,是总线网络通信的重要指标之一。数据帧的类型在定义之初,制定了2个版本,分别为标准帧(CAN2.0A)和扩展帧(CAN2.0B)[1],在所接触车型或者通讯协议的开发过程中,基本采用扩展帧的数据格式,所以下面详细介绍在CAN总线通讯过程中,采用扩展帧作为主要通讯格式的总线负载率计算方法。
Ut=∑Li/(TV)
(1)
式中:Ut为总线负载率;Li为各周期报文长度之和;V为传输速度(波特率);T为传送时间(周期)。
也可将式(1)中的1/V看成是每个位所占用的时间,从而该公式就变成了时间比[2]。
数据帧是CAN总线通讯过程中最常见的报文类型,主要由以下部分组成:
1)帧起始。表示数据帧的开始,由单个显性位组成。
2)控制段。控制段由6个位构成,标准帧与扩展帧都有4位数据长度代码DLC,且标准帧有IDE(数值为0)位和保留位R0,扩展帧则有2位保留位R0和R1。
3)仲裁字段。仲裁字段的主要作用是确定报文的优先级,从而解决2个或者多个节点在总线空闲时的竞争问题。
4)数据字段。包含0到8字节的数据。
5)CRC字段。包含一个基于报文大部分数据计算得到的15位校验和。该校验和用于错误检测。
6)ACK段。接收节点通过ACK段来判断该信息是否接收正常。该段长度共2位,分别为应答间隙与应答界定符,任何能够接收报文的CAN控制器都会在每条报文的末尾发送一个应答位。传送节点检查应答位是否存在,如果没有检测到应答位,会重新发送报文。
7)帧结束段。由7个隐形位构成,用于表示该数据帧结束[3]。
1)仲裁字段的区别。扩展帧相较标准帧在仲裁字段部分提供更多的地址分配位置。因为CAN总线的传送机制是广播形式,报文的发送不是采用与需要该内容的接收节点的点对点的传送机制,而是直接在CAN总线上进行传送,而CAN节点通过识别报文上的地址,也就是仲裁字段的部分内容来确定该段报文是否为自己所需要,所以扩展帧为CAN总线提供更多的可用节点来供前期的分配或者后期的增加。两种帧结构的主要区别:标准帧(CAN2.0A),一个11位的标识符和一个支配数据帧的RTR位;扩展帧(CAN2.0B),一个29位的标识符(其中包含2个隐性位:SRR和IDE)和RTR位,如图1所示。
2)在控制段部分虽然两种类型的数据长度相同(DLC),但其保留位却不同。标准帧:IDE、R0;扩展帧:R1、R0。因负载率的计算只与报文的长度相关,所以该区别不影响计算[1-3]。
CAN总线采用异步通信的方式来达到CAN节点与总线上的报文同步周期的目的,而此种同步方式没有时钟线,各节点按照自己内部的时钟周期在CAN总线上进行发送或者采样。这样虽然整体减少了一根时钟线,但是由于每个节点自己的时钟会存在误差,误差的积累就会导致报文的失真,所以,如果在这种误差累计导致报文失真之前,对所有节点上面的时钟进行同步(比如所有时钟归零),就能避免这种误差的产生[1]。
所以,CAN总线规定信号上边的跳变沿即为同步信号,简单来说就是如果信号发生变化,时钟就会同步一次。但若是出现某些信号其连续的多个位上的数值不变(及信号沿没有发生变化),那么此种情况时钟是无法同步的,这样就会有报文失真的风险。为避免此种风险,CAN总线规定时钟同步的最大周期为5个位,若是出现以上情况,则会在信号的5个连续位后边插入一位,强行触发各节点的时钟同步机制。另外,要说明一点,在数据帧中受位填充原理影响的部分是从帧起始(SOF)段到CRC段的部分(标准帧34+8i,扩展帧54+8i,i为数据字段字节数)[1]。
由以上内容便能推出CAN总线上的报文长度计算公式:
Lj=1(SOF)+32(仲裁段)+6(控制段)+8i(数据段)+
16(CRC段)+2(ACK段)+7(帧结束)+位填充
(2)
在实际报文的发送过程中存在2种位填充情况:
1)出现5位相同位填充1位相反电平,即每6位出现1位位填充(报文长度加1)。
2)当第一次出现5位相同位然后位填充后,该填充位与其后面的4位又组成5位相同位并填充。此种情况影响后面报文的填充,即除去第一次6位出现1次填充位后,其后面的报文存在4位填充一次的情况。
综上所述,最长报文的极端情况就是该报文全部适用上述第二种情况,得出式(3):
Lj=(54+8i-5)/4+1+64+8i
(3)
式中:54为CAN报文中控制位的总位数(受位填充机制影响部分),标准帧为34,扩展帧为54[2]。
负载率的概念分为2种:
1)平均负载率。在一个采样周期(所有报文保证在该周期内能够全部发送,采样周期一般是所含周期类型的最小公倍数)之内,各周期报文实际使用CAN总线的占比[4]。
2)峰值负载率。当CAN总线数据量在某时间段最大时,该时段所有周期数据帧对CAN总线所能容纳最大数据的占比[5-6]。
两种负载率是描述CAN总线传输情况的重要指标,且对应描述CAN总线的不同属性。
由式(1)可知,计算CAN总线负载率,首先要分别确定Li、V、T,此处V即为CAN总线传输速率,也可称为波特率。T在平均负载率的计算中代表采样周期,在峰值负载率的计算中代表出现最大数据量的时间段[6-7]。Li为该通讯网络中所存在的报文长度总和,需要将每种周期所含报文的报文长度全部相加。
例:CAN总线的波特率为250 kbit/s,总线报文周期包含3种,分别是:T1=10 ms,T2=20 ms,T3=100 ms,3种周期报文对应的报文数目分别是:m=3条,n=2条,k=4条,报文的长度按照扩展帧最长位数,且采样周期为10 s,此种情况的CAN总线平均负载率的计算方法如下:
首先,计算扩展帧最长报文157位(i=8)。另外注意采样周期内各周期报文的发送次数,T1周期10 s内发送1 000次,T2周期10 s内发送500次,T3周期10 s内发送100次。则Li=3×157×1 000+2×157×500+4×157×100=6.908×105bit,采样周期支持发送最大数据量为:波特率V×周期T=250×103×10=2.5×106bit。则平均负载率Ut=27.632%。
假设各周期报文在0时刻同时发送,如图2所示,当周期为T1时所需发送报文的数据量最大,所以CAN总线在此时段处于峰值状态,则峰值负载率为:
Ut=(3×157+2×157+4×157)/250×103×0.01=
56.52%
图2 采样周期示意图
CAN总线负载率的计算,能够在总线网络设计之初更直观地了解总线,以方便对总线的优化设计,一般认为,总线的平均负载率要小于30%,CAN总线才能够保证报文的实时传输。峰值负载率在0.3 有关总线的优化,当发现总线的负载率过高时,可针对总线的报文数量、周期以及优先级进行优化: 1)更好地利用报文中的预留位以精简报文数量。 2)合理设计报文的发送周期,避开发送高峰期(拉长报文周期)。 3)合理设计报文的优先级,确定一些不重要报文的优先级以及发送频率等方式。 另外,随着整车的发展,CAN总线网络存在多路CAN总线,能够更好地规划节点的分布,并能减少单条总线的负载率[11-12]。 由图3(a)和图4(a)可知,该报文包含3种信号,分别位于为该报文所分配8个字节长度的第3、5、6字节位置。从图中可知该报文为以后内容的扩展分配了过多的空余位置,并且信号位置分配不合理;使每个字节没有被完全使用,导致该报文长度偏长。这种类型的报文,便可考虑进行优化。将过多的空余字节去掉(若考虑今后的数据扩展问题可部分去掉),位置进行合理分配。如图3(b)和图4(b)所示,报文数据长度改为3个字节,预留1个字节,信号位置重新分配,保证每个字节的充分利用。 (a) 优化前 (b) 优化后 CAN总线网络随着整车的需求提高也变得越来越复杂。而负载率可反映总线网络的使用情况,面对当前越来越复杂的总线网络,参考负载率对总线进行优化设计是设计过程中的常用手段。3 结束语