對CAN signal 的一點理解


 

首先每個 ECU是一個網絡節點,每個網絡節點可收發一些 Message,每個Message 由CAN signals構成。每個 CAN signal利用一個或多個連續的2進制位來表示承載的信息。下面就來舉個列子簡要介紹如何理解 CAN signal的定義。

以節點 IPC中ESP_STATUS 這個CAN message 中的 ESP_VehicleSpeed這個CAN signal 為例,查看 DBC中的定義如下圖:

Image

Image(1)

Image(2)

可以看到這個 signal由13 個bit構成,字節序是 Motorola,單位是KPH ,Factor是 0.05625,

無效值是 0x1FFF,最大值是460.69 KPH 。

怎么來理解這個 13bit以及Factor 和最大值呢?

首先可以看 Layout,這個signal 占了2個字節,其中一個占了 8位,另一個占了5位,合在一起正好是 13位,而13 個bit可以表示的無符號范圍正好是 0 – 0x1FFF,因此一般把最大的那個范圍定做 Invalid Value,如果CAN signal 是這個值,那么此時獲取的 CAN signal就是無效的。

那么怎么理解 factor呢?可以把它理解為精度,即每一個 CAN signal的整數值所代表的有單位的數值,即 0表示0 KPH , 1表示 1*0.05625即0.05625KPH ,2表示 2*0.05625即0.1125 KPH ,n表示 n*0.05625 KPH,注意這里的n是十進制數值。因此可以把收到的 CAN signal整數值對應轉換為實際數值,自然的可以理解最大值是怎么來的,即 0x1FFF即十進制8191 ,與0.05625相乘得到的 460.69。

如何根據 layout獲得相應的CAN signal 數值呢,寫代碼獲取該 CAN signal的數值應該是這樣:

(Msg.ESP_VehicleSpeed_0 << 0) + (Msg.ESP_VehicleSpeed_1 << 5)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM