一、獲得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。