什么是CAN通信矩陣 CAN通信矩陣(CAN Communication Matrix)通常由整車廠完成定義,車輛網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)需要遵循該通訊矩陣才能完成信息的交互和共享。 我們知道CAN總線是一種通信形式,ISO 11898協(xié)議僅僅規(guī)定了數(shù)據(jù)鏈路層和物理層,也就是說傳什么ID、傳什么數(shù)據(jù)是沒有定義的,這留給了大家很多遐想空間。對(duì)于乘用車來說,滿足UDS和尾氣排放協(xié)議之后,還剩余了絕大部分的ID段。這些ID段由主機(jī)廠自主來進(jìn)行分配,分配好之后會(huì)形成一個(gè).xls格式的表格。有了CAN通信矩陣,開發(fā)人員就知道他設(shè)計(jì)的零部件應(yīng)該接收什么ID的數(shù)據(jù),需要發(fā)出什么ID的數(shù)據(jù)。 如何閱讀CAN通信矩陣下面我們?cè)敿?xì)介紹下怎么閱讀一份通信矩陣。 信號(hào)名稱:一般是以發(fā)送節(jié)點(diǎn)的名字開頭,“_”后面是具體指代的內(nèi)容。如BMS_GeneralStatus。 信號(hào)長度:該信號(hào)的長度,單位是bit,位。 精度/偏移量:描述信號(hào)值如何轉(zhuǎn)變成信號(hào)物理值。比如精度是2,偏移量是5,那么信號(hào)的真實(shí)物理值 = 信號(hào)值 * 2 + 5。 物理值范圍:經(jīng)過物理值轉(zhuǎn)換后的最大最小值。 其他的一些矩陣中還會(huì)有這樣的表述。 起始字節(jié):起始位所在的字節(jié)序號(hào)。Byte0-Byte7。 起始位:信號(hào)LSB(least significant bit)所在的位置。通常這個(gè)位置是按照下面這個(gè)圖來說明的。 CAN矩陣的核心圖 信號(hào)類型:Boolean 還是 Unsigned。 以上是CAN數(shù)據(jù)矩陣的基本內(nèi)容。可以看出來,如何通過起始字節(jié)、起始位、數(shù)據(jù)長度,將數(shù)據(jù)矩陣中的內(nèi)容對(duì)應(yīng)到這64個(gè)小格子中是理解CAN數(shù)據(jù)矩陣的關(guān)鍵。 如何填格子我們可以用Vector的CAN db++打開ZLG送的j1939.dbc文件。我們?cè)赟ignals和Layout面板中看到,對(duì)于EEC1這個(gè)Message來說,它有8個(gè)Signal,填充時(shí)是從右向左填充的,比方說EngStarterMode這個(gè)信號(hào),初始是第48位,長度是4,它的LSB自然就應(yīng)該在Byte6的第48個(gè)位,之后向左填充,MSB是第51位。大家自行填充一下。 j1939.dbc j1939.dbc矩陣中的EEC1信號(hào) 下面說下EngSpeed這個(gè)奇葩信號(hào),它跨行了,即跨字節(jié)了,這就產(chǎn)生了先后的問題。 注意我們填格子的方式分為Intel和Motorola兩種。如果你的Signals都沒有跨字節(jié)的問題,那么Intel和Motorola格式出來的效果是一樣的。當(dāng)然這不可能,你無法確保不跨字節(jié)。 Intel格式也即小端,MSB存放在高字節(jié)單元,反映到矩陣圖中就是以起始位為原點(diǎn),自上而下填充。 Intel格式,MSB在LSB下面 Motorola格式也即大端,MSB存放在低字節(jié)單元,反映到矩陣圖中就是以起始位為原點(diǎn),自下而上填充。 Motorola格式,MSB在LSB上面 New_Signal_5自下而上填充,Motorola 具體采用哪種格式,聽主機(jī)廠的,這個(gè)無絕對(duì),兩種格式都需要理解。但從經(jīng)驗(yàn)上來看以Motorola格式為主。我們回看下EngSpeed這個(gè)信號(hào),起始位是24bit,先填充Byte3,之后向下填充Byte4,MSB在39bit上。因此是Intel格式。 EEC1中的EngSpeed是Intel格式,Byte3是低有效,Byte4是高有效 名詞解釋:什么是信號(hào)的高位?什么是信號(hào)的低位?什么是信號(hào)的起始位? 信號(hào)的高位(most significant bit),即最能表達(dá)信號(hào)特性的因子。比如轉(zhuǎn)速2000rpm,0x7D0,即011111010000b。最左側(cè)的位,數(shù)量級(jí)最大,牽一發(fā)動(dòng)全身,即高位。 信號(hào)的低位(least significant bit),即最不能表達(dá)信號(hào)特性的因子。剛才轉(zhuǎn)速中,最右側(cè)的0,即低位。就好像老板說給你每個(gè)月漲薪5元,你毫不在乎。 信號(hào)的起始位其實(shí)就是信號(hào)的最低位。主機(jī)廠在定義整車CAN總線通信矩陣時(shí),每一個(gè)信號(hào)都從其最低位開始填寫。 報(bào)文封裝原則1.同一個(gè)報(bào)文的所有信號(hào)須由同一個(gè)節(jié)點(diǎn)提供。 2.同一個(gè)報(bào)文所有信號(hào)的發(fā)送時(shí)機(jī)盡可能相同。 3.小于或等于8位的信號(hào),不應(yīng)跨越字節(jié)邊界。 不大于8位,不應(yīng)跨越字節(jié)邊界 4.小于或等于16位的信號(hào),不應(yīng)跨越字邊界。 5.信號(hào)從每個(gè)字節(jié)的起始位開始排列。 要從每個(gè)字節(jié)的起始位開始排列 6.信號(hào)排列應(yīng)當(dāng)緊湊。 |
|