中矩陣怎麼編寫 如何理解CAN通訊矩陣

2021-10-14 18:29:37 字數 2816 閱讀 5397

我們知道can匯流排是一種通訊形式,iso 11898協議僅僅規定了資料鏈路層和物理層,也就是說傳什麼id、傳什麼資料是沒有定義的,這留給了大家很多遐想空間。對於乘用車來說,滿足uds和尾氣排放協議之後,還剩餘了絕大部分的id段。這些id段由主機廠自主來進行分配,分配好之後會形成乙個.xls格式的**。有了can通訊矩陣,開發人員就知道他設計的零部件應該接收什麼id的資料,需要發出什麼id的資料。

下面我們詳細介紹下怎麼閱讀乙份通訊矩陣。

訊號名稱:一般是以傳送節點的名字開頭,「_」後面是具體指代的內容。如bms_generalstatus。

訊號長度:該訊號的長度,單位是bit,位。

精度/偏移量:描述訊號值如何轉變成訊號物理值。比如精度是2,偏移量是5,那麼訊號的真實物理值 = 訊號值 * 2 + 5。

物理值範圍:經過物理值轉換後的最大最小值。

其他的一些矩陣中還會有這樣的表述。

起始位元組:起始位所在的位元組序號。byte0-byte7。

起始位:訊號lsb(least significant bit)所在的位置。通常這個位置是按照下面這個圖來說明的。

can矩陣的核心圖

訊號型別:boolean 還是 unsigned。

以上是can資料矩陣的基本內容。可以看出來,如何通過起始位元組、起始位、資料長度,將資料矩陣中的內容對應到這64個小格仔中是理解can資料矩陣的關鍵。

我們可以用vector的can db++開啟zlg送的j1939.dbc檔案。我們在signals和layout面板中看到,對於eec1這個message來說,它有8個signal,填充時是從右向左填充的,比方說engstartermode這個訊號,初始是第48位,長度是4,它的lsb自然就應該在byte6的第48個位,之後向左填充,msb是第51位。大家自行填充一下。

j1939.dbc矩陣中的eec1訊號

下面說下engspeed這個奇葩訊號,它跨行了,即跨位元組了,這就產生了先後的問題。

注意我們填格仔的方式分為intel和motorola兩種。如果你的signals都沒有跨位元組的問題,那麼intel和motorola格式出來的效果是一樣的。當然這不可能,你無法確保不跨位元組。

intel格式也即小端,msb存放在高位元組單元,反映到矩陣圖中就是以起始位為原點,自上而下填充。

intel格式,msb在lsb下面

motorola格式也即大端,msb存放在低位元組單元,反映到矩陣圖中就是以起始位為原點,自下而上填充。

motorola格式,msb在lsb上面

new_signal_5自下而上填充,motorola

具體採用哪種格式,聽主機廠的,這個無絕對,兩種格式都需要理解。但從經驗上來看以motorola格式為主。我們回看下engspeed這個訊號,起始位是24bit,先填充byte3,之後向下填充byte4,msb在39bit上。因此是intel格式。

eec1中的engspeed是intel格式,byte3是低有效,byte4是高有效

名詞解釋:什麼是訊號的高位?什麼是訊號的低位?什麼是訊號的起始位?

訊號的高位(most significant bit),即最能表達訊號特性的因子。比如轉速2000rpm,0x7d0,即011111010000b。最左側的位,數量級最大,牽一發動全身,即高位。

訊號的低位(least significant bit),即最不能表達訊號特性的因子。剛才轉速中,最右側的0,即低位。就好像老闆說給你每個月漲薪5元,你毫不在乎。

訊號的起始位其實就是訊號的最低位。主機廠在定義整車can匯流排通訊矩陣時,每乙個訊號都從其最低位開始填寫。

1.同乙個報文的所有訊號須由同乙個節點提供。

2.同乙個報文所有訊號的傳送時機盡可能相同。

3.小於或等於8位的訊號,不應跨越位元組邊界。

不大於8位,不應跨越位元組邊界

4.小於或等於16位的訊號,不應跨越字邊界。

5.訊號從每個位元組的起始位開始排列。

要從每個位元組的起始位開始排列

6.訊號排列應當緊湊。

2.如何進行汽車 can 匯流排開發?(柏老師)

4.

python物件怎麼理解 如何理解python物件

類 class 抽象的概念,比如說人類 鳥類 水果 是乙個總的稱呼,沒有具體到某個物體 物件 object,指具體例項,instance 給物件增加乙個例項變數 增加乙個skills例項變數 p.skills programming writing print p.skills 刪除p物件的name...

latex矩陣a怎麼打 latex中的矩陣輸入

內容摘要 小結latex中矩陣輸入方法。amsmath提供matrix,pmatrix,bmatrix,bmatrix,vmatrix,vmatrix環境輸入矩陣,但是它們沒有對齊方式引數。例如 begin a b c d end quad begin a b c d end quad begin ...

selenium 中如何run已失敗的case

reports testng failed.xml失敗則存在,成功則不生成,我的隊友在做這個run failed需求的時候,只是想著如何把testng failed.xml裡面的case抽取出來,這導致最後各種問題的不能解決。ok 主要問題一下子解決了,大家可以看到我在乙個引數的設計上做了乙個變化。...