劉洪鵬, 唐國強
(北京北方華德尼奧普蘭客車股份有限公司, 北京 100072)
CAN總線網絡是整車用來實現各系統(tǒng)通信調控以及控制等功能的重要部分。隨著汽車行業(yè)的快速發(fā)展,對整車的功能要求不斷增加,對總線的整體性能要求也在不斷增加。因此,在設計之初,通過總線負載率的計算了解總線的當前狀態(tài),提前對總線進行優(yōu)化設計,能夠提高總線的工作性能,提高設計效率。
CAN總線通信負載率為所有數據幀占用總線百分比之和,是總線網絡通信的重要指標之一。數據幀的類型在定義之初,制定了2個版本,分別為標準幀(CAN2.0A)和擴展幀(CAN2.0B)[1],在所接觸車型或者通訊協議的開發(fā)過程中,基本采用擴展幀的數據格式,所以下面詳細介紹在CAN總線通訊過程中,采用擴展幀作為主要通訊格式的總線負載率計算方法。
Ut=∑Li/(TV)
(1)
式中:Ut為總線負載率;Li為各周期報文長度之和;V為傳輸速度(波特率);T為傳送時間(周期)。
也可將式(1)中的1/V看成是每個位所占用的時間,從而該公式就變成了時間比[2]。
數據幀是CAN總線通訊過程中最常見的報文類型,主要由以下部分組成:
1)幀起始。表示數據幀的開始,由單個顯性位組成。
2)控制段??刂贫斡?個位構成,標準幀與擴展幀都有4位數據長度代碼DLC,且標準幀有IDE(數值為0)位和保留位R0,擴展幀則有2位保留位R0和R1。
3)仲裁字段。仲裁字段的主要作用是確定報文的優(yōu)先級,從而解決2個或者多個節(jié)點在總線空閑時的競爭問題。
4)數據字段。包含0到8字節(jié)的數據。
5)CRC字段。包含一個基于報文大部分數據計算得到的15位校驗和。該校驗和用于錯誤檢測。
6)ACK段。接收節(jié)點通過ACK段來判斷該信息是否接收正常。該段長度共2位,分別為應答間隙與應答界定符,任何能夠接收報文的CAN控制器都會在每條報文的末尾發(fā)送一個應答位。傳送節(jié)點檢查應答位是否存在,如果沒有檢測到應答位,會重新發(fā)送報文。
7)幀結束段。由7個隱形位構成,用于表示該數據幀結束[3]。
1)仲裁字段的區(qū)別。擴展幀相較標準幀在仲裁字段部分提供更多的地址分配位置。因為CAN總線的傳送機制是廣播形式,報文的發(fā)送不是采用與需要該內容的接收節(jié)點的點對點的傳送機制,而是直接在CAN總線上進行傳送,而CAN節(jié)點通過識別報文上的地址,也就是仲裁字段的部分內容來確定該段報文是否為自己所需要,所以擴展幀為CAN總線提供更多的可用節(jié)點來供前期的分配或者后期的增加。兩種幀結構的主要區(qū)別:標準幀(CAN2.0A),一個11位的標識符和一個支配數據幀的RTR位;擴展幀(CAN2.0B),一個29位的標識符(其中包含2個隱性位:SRR和IDE)和RTR位,如圖1所示。
2)在控制段部分雖然兩種類型的數據長度相同(DLC),但其保留位卻不同。標準幀:IDE、R0;擴展幀:R1、R0。因負載率的計算只與報文的長度相關,所以該區(qū)別不影響計算[1-3]。
CAN總線采用異步通信的方式來達到CAN節(jié)點與總線上的報文同步周期的目的,而此種同步方式沒有時鐘線,各節(jié)點按照自己內部的時鐘周期在CAN總線上進行發(fā)送或者采樣。這樣雖然整體減少了一根時鐘線,但是由于每個節(jié)點自己的時鐘會存在誤差,誤差的積累就會導致報文的失真,所以,如果在這種誤差累計導致報文失真之前,對所有節(jié)點上面的時鐘進行同步(比如所有時鐘歸零),就能避免這種誤差的產生[1]。
所以,CAN總線規(guī)定信號上邊的跳變沿即為同步信號,簡單來說就是如果信號發(fā)生變化,時鐘就會同步一次。但若是出現某些信號其連續(xù)的多個位上的數值不變(及信號沿沒有發(fā)生變化),那么此種情況時鐘是無法同步的,這樣就會有報文失真的風險。為避免此種風險,CAN總線規(guī)定時鐘同步的最大周期為5個位,若是出現以上情況,則會在信號的5個連續(xù)位后邊插入一位,強行觸發(fā)各節(jié)點的時鐘同步機制。另外,要說明一點,在數據幀中受位填充原理影響的部分是從幀起始(SOF)段到CRC段的部分(標準幀34+8i,擴展幀54+8i,i為數據字段字節(jié)數)[1]。
由以上內容便能推出CAN總線上的報文長度計算公式:
Lj=1(SOF)+32(仲裁段)+6(控制段)+8i(數據段)+
16(CRC段)+2(ACK段)+7(幀結束)+位填充
(2)
在實際報文的發(fā)送過程中存在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)平均負載率。在一個采樣周期(所有報文保證在該周期內能夠全部發(fā)送,采樣周期一般是所含周期類型的最小公倍數)之內,各周期報文實際使用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)。另外注意采樣周期內各周期報文的發(fā)送次數,T1周期10 s內發(fā)送1 000次,T2周期10 s內發(fā)送500次,T3周期10 s內發(fā)送100次。則Li=3×157×1 000+2×157×500+4×157×100=6.908×105bit,采樣周期支持發(fā)送最大數據量為:波特率V×周期T=250×103×10=2.5×106bit。則平均負載率Ut=27.632%。
假設各周期報文在0時刻同時發(fā)送,如圖2所示,當周期為T1時所需發(fā)送報文的數據量最大,所以CAN總線在此時段處于峰值狀態(tài),則峰值負載率為:
Ut=(3×157+2×157+4×157)/250×103×0.01=
56.52%
圖2 采樣周期示意圖
CAN總線負載率的計算,能夠在總線網絡設計之初更直觀地了解總線,以方便對總線的優(yōu)化設計,一般認為,總線的平均負載率要小于30%,CAN總線才能夠保證報文的實時傳輸。峰值負載率在0.3 有關總線的優(yōu)化,當發(fā)現總線的負載率過高時,可針對總線的報文數量、周期以及優(yōu)先級進行優(yōu)化: 1)更好地利用報文中的預留位以精簡報文數量。 2)合理設計報文的發(fā)送周期,避開發(fā)送高峰期(拉長報文周期)。 3)合理設計報文的優(yōu)先級,確定一些不重要報文的優(yōu)先級以及發(fā)送頻率等方式。 另外,隨著整車的發(fā)展,CAN總線網絡存在多路CAN總線,能夠更好地規(guī)劃節(jié)點的分布,并能減少單條總線的負載率[11-12]。 由圖3(a)和圖4(a)可知,該報文包含3種信號,分別位于為該報文所分配8個字節(jié)長度的第3、5、6字節(jié)位置。從圖中可知該報文為以后內容的擴展分配了過多的空余位置,并且信號位置分配不合理;使每個字節(jié)沒有被完全使用,導致該報文長度偏長。這種類型的報文,便可考慮進行優(yōu)化。將過多的空余字節(jié)去掉(若考慮今后的數據擴展問題可部分去掉),位置進行合理分配。如圖3(b)和圖4(b)所示,報文數據長度改為3個字節(jié),預留1個字節(jié),信號位置重新分配,保證每個字節(jié)的充分利用。 (a) 優(yōu)化前 (b) 優(yōu)化后 CAN總線網絡隨著整車的需求提高也變得越來越復雜。而負載率可反映總線網絡的使用情況,面對當前越來越復雜的總線網絡,參考負載率對總線進行優(yōu)化設計是設計過程中的常用手段。3 結束語