獲取CAN報文並解析


一、獲得CAN報文的過程

准備軟硬件環境,硬件周立功CAN卡,軟件使用ZLGCANTest,安裝在電腦上;通過CAN卡連接整車CAN或者調試端口,通過軟件交互界面獲取CAN報文。

二、CAN2.0B報文基本格式

接收到的報文,是一串十六進制的字符,而報文格式定義和位數是按照二進制定義的。29位擴展標識符,報文幀格式如下圖所示。表格中,上面一行為字段代號,下面一行表示字段的位數。SA為報文的源地址,有8位。

三、報文基本組成

初始能夠獲得的是幀ID的一串字符,就是前面的29位擴展標識符,通過幀ID找到目標所在行,進而找到數據段。數據段包含的信息,是我們需要的部分。

IDENTIFIER 11BITS

SRR

IDE

IDENTIFIER EXTENSION 18BITS

 

R

DP

PDU

FORMAT(PF)

SRR

IDE

PF

PDU

SPECIFIC(PS)

SOURCE

ADDRESS(SA)

3

2

1

1

1

8

7

6

5

4

3

 

 

2

1

8

7

6

5

4

3

2

1

8

7

6

5

4

3

2

1

8

7

6

5

4

3

2

1

0

9

8

 

 

7

6

5

4

3

2

1

0

9

8

7

6

5

4

3

2

1

0

以上為29 標識符的分配表: 

其中,優先級為3 位,可以有8 個優先級;R 一般固定為0;DP 現固定為0;8 位的PF 為報文的代碼;8 位的PS 為目標地址或組擴展;8 位的SA 為發送此報文的源地址。

四、數據段的組成

數據段由8個字節組成,對應通信協議中約定的含義。每個字節有2個字符,前邊字符代表高4位,后邊字符代表低4位。

例如,一串報文1818D0F3 ce 0d 00 7d 00 6d 1100(ID是1818D0F3)。第1個字節ce中的c為高4位,e為低4位。如果通訊協議規定,第1、2字節表示總電壓,而且注明Byte1為低字節,Byte2為高字節,那么解析時就應該為:0dce。

例如 :

OUT

IN

ID

周期

BMS

儀表/車載終端

0x18B1D0F4

200ms

位置

數據名

備注

BYTE1

電池總電壓低字節

0.1V/bit

數據范圍:0-10000(0-1000V)

BYTE2

電池總電壓高字節

BYTE3

電池系統電流低字節

0.1A/bit, 偏移:-400

數據范圍:0-8000(-400~400A)

BYTE4

電池系統電流高字節

BYTE5

最高電池溫度

1℃/bit,偏移-40℃

數據范圍:0-250(-40℃-210℃)

BYTE6

最低電池溫度

BYTE7

電池系統剩余電量

1%/bit, 數據范圍:0-100(0-100%)

BYTE8

電池系統故障

見附表4-1

 五、具體CAN報文解析過程

收到的報文為:1818D0F3 ce 0d 00 7d 00 6d 11 00。

第一、二字節,協議中規定了,1818D0F3  ID幀內,第一、二字節表示電壓,並且,高字節表示高字節表示電壓數值的高位,低字節表示電壓數值的低位,比例因子0.1V。

數據中0dce代表總電壓,轉為十進制為3534,乘以0.1 V的單位,則得到總電壓值為353.4 V。

第三、四字節,協議中規定報文的第三、四字節表示總電流,又總電流的單位為0.1 A,偏移量為32000。數據中7d00轉為十進制為32000,乘以0.1再減去3200的偏移量0,則說明此時電池組沒有被充電或放電,電流為0。

第六、七字節,協議中規定報文的第六、七字節表示最高單體電池電壓及位置。單體電池電壓單位為0.01 V,最高4位代表箱號。數據中116d,其中1代表箱號,即最高電池電壓在第1箱。16d代表最高電池電壓,轉為十進制為365,乘以0.01 A的單位,則得到最高電池電壓為3.65 V。

 十六進制轉換成十進制數的方法,從最低位開始,16的0次方加第一位+16的1次方加第二位數……比如前文中的116d,最高4位代表箱體編號,16^0+1=1,因此箱體號為1;后面的12位代表單體電壓,計算方式(16^0+13)+(16^1+6)+(16^2+1)=365,算式中的13是報文中的d。


免責聲明!

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



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