潘文卿,李圣展,王夢(mèng),王琳琳
(濰柴動(dòng)力股份有限公司,山東 濰坊 261061)
隨著電控系統(tǒng)的功能越來(lái)越智能化,故障診斷系統(tǒng)也越來(lái)越強(qiáng)大,故障分類也越來(lái)越多。在傳統(tǒng)UDS協(xié)議的故障診斷中,數(shù)據(jù)傳輸?shù)拈L(zhǎng)度小于6字節(jié)時(shí),采用單幀即可傳輸完畢,大于6字節(jié)的數(shù)據(jù)傳輸就需要采用首幀、流控幀、連續(xù)幀的傳輸方式。在傳統(tǒng)J1939協(xié)議故障診斷系統(tǒng)中,基于J1939-73診斷部分實(shí)現(xiàn)故障碼在CAN總線網(wǎng)絡(luò)上的傳輸。本文基于CANFD協(xié)議可以提升數(shù)據(jù)段速率和數(shù)據(jù)長(zhǎng)度的兩大特性,主要講述在UDS診斷系統(tǒng)和J1939-73診斷協(xié)議中的應(yīng)用研究。
CANFD協(xié)議的數(shù)據(jù)段傳輸速率最高可達(dá)5Mb/s,仲裁段的最高時(shí)傳輸速率為1Mb/s,可以向下兼容CAN協(xié)議,數(shù)據(jù)段中的數(shù)據(jù)場(chǎng)最大可以支持64字節(jié)的數(shù)據(jù)。同時(shí)CRC校驗(yàn)在傳統(tǒng)CAN的基礎(chǔ)上進(jìn)行了軟件升級(jí),數(shù)據(jù)段長(zhǎng)度大于16字節(jié)時(shí),采用CRC_21多項(xiàng)式校驗(yàn)算法為X+X+X+X+X+X+X+1;數(shù)段長(zhǎng)度小于等于16字節(jié)時(shí),采用CRC_17多項(xiàng)式校驗(yàn)算法為X+X+X+X+X+X+X+X+X+1;根據(jù)數(shù)據(jù)長(zhǎng)度采用不同的校驗(yàn)算法,保證數(shù)據(jù)傳輸?shù)目煽啃浴ANFD協(xié)議相較于傳統(tǒng)CAN最大的優(yōu)勢(shì)是數(shù)據(jù)段長(zhǎng)度的增加以及傳輸速率的提升,可以很大程度上解決當(dāng)前CAN總線負(fù)載率高、數(shù)據(jù)帶寬受限的問(wèn)題。本文基于CANFD的兩大特性,結(jié)合傳統(tǒng)的故障診斷協(xié)議做了新的技術(shù)改進(jìn)。圖1為CANFD幀結(jié)構(gòu)。

圖1 CANFD幀結(jié)構(gòu)
基于J1939-73協(xié)議的故障診斷協(xié)議,規(guī)定了故障代碼數(shù)據(jù)在CAN總線網(wǎng)絡(luò)上的傳輸形式,故障碼以DTC的形式通過(guò)DMx報(bào)文發(fā)送到總線上。以當(dāng)前故障DM1報(bào)文為例,當(dāng)沒有故障或者只有一個(gè)故障時(shí),通過(guò)PGN為0xFECA的單幀報(bào)文發(fā)送到總線上,當(dāng)故障個(gè)數(shù)大于1個(gè)時(shí),會(huì)通過(guò)PGN為0xECFF和0xEBFF兩條報(bào)文通過(guò)多包的形式發(fā)送到總線上,控制器收到后,再按照多包報(bào)文的協(xié)議組合在一起,解析每一個(gè)故障碼。對(duì)于數(shù)據(jù)是大于8個(gè)字節(jié)的DMx報(bào)文,需要先對(duì)數(shù)據(jù)進(jìn)行拆包,用BAM和PACK兩條報(bào)文進(jìn)行傳輸,接收方收到后再進(jìn)行組包,BAM和PACK的傳輸機(jī)制見圖2和圖3。

圖2 BAM報(bào)文的結(jié)構(gòu)

圖3 PACK報(bào)文的結(jié)構(gòu)
例如0x18FECA00:0x00 0xFF 0xAC 0xF3 0xE1 0x01 0x30 0xF3 0xE3 0x01,消息大小是10個(gè)字節(jié),如果是傳統(tǒng)的CAN需要分成兩個(gè)數(shù)據(jù)包,參數(shù)群編號(hào)0x00FECA,所以BAM和PACK的數(shù)據(jù)傳輸如圖4所示。

圖4 BAM和PACK報(bào)文的數(shù)據(jù)
當(dāng)前故障診斷系統(tǒng)中同一時(shí)刻可以診斷20個(gè)故障,即20個(gè)故障碼,一個(gè)故障碼是4個(gè)字節(jié),再加上第1個(gè)字節(jié)為燈的狀態(tài),第2個(gè)字節(jié)為預(yù)留,所以最多的時(shí)候可以傳輸82個(gè)字節(jié),12包數(shù)據(jù)。按照當(dāng)前的普遍性設(shè)定BAM與PACK,PACK與PACK的時(shí)間間隔為50ms,那傳輸完12包數(shù)據(jù)的時(shí)間為600ms。像DM1報(bào)文的周期是1ms,如果是只有一個(gè)DM1多包報(bào)文傳輸,沒有問(wèn)題,如果控制系統(tǒng)有多條多包報(bào)文,時(shí)序就會(huì)出問(wèn)題,所以這是傳統(tǒng)CAN的弊端。
如果采用CANFD報(bào)文的形式進(jìn)行傳輸,在不改變?cè)袇f(xié)議架構(gòu)的情況下最多可以通過(guò)兩條PACK報(bào)文進(jìn)行傳輸。例如傳輸82個(gè)字節(jié)的數(shù)據(jù),BAM和PACK報(bào)文的數(shù)據(jù)如下:傳輸3幀CANFD報(bào)文的時(shí)間只需要100ms多一點(diǎn)的時(shí)間,大大縮短了時(shí)間,如圖5所示,第1條CANFD報(bào)文的長(zhǎng)度是64字節(jié),可以搭載63個(gè)字節(jié)的數(shù)據(jù),第1個(gè)字節(jié)是當(dāng)前的包數(shù)序號(hào),第2條CANFD報(bào)文的長(zhǎng)度是24字節(jié),第1個(gè)字節(jié)是包數(shù)序號(hào),第2字節(jié)到第20字節(jié)是剩余19個(gè)有效字節(jié)數(shù)據(jù),第21~24字節(jié)為填充字節(jié)。如果有多條多包報(bào)文,不會(huì)影響多包報(bào)文的時(shí)序,CANFD協(xié)議可以很好地規(guī)避傳統(tǒng)CAN的弊端。

圖5 傳輸3幀CANFD報(bào)文的數(shù)據(jù)
ISO 15765-2協(xié)議定義了單幀、首幀、連續(xù)幀、流控幀結(jié)構(gòu),圖6是基于CAN和CANFD的不同定義方式,相較于傳統(tǒng) 的CAN協(xié) 議 下 的 單 幀,CANFD協(xié) 議 下 將byte1定 為0,byte2是數(shù)據(jù)長(zhǎng)度,后面的byte3-byte64是數(shù)據(jù),一個(gè)CANFD協(xié)議的單幀最大可以傳輸62個(gè)數(shù)據(jù),很好地規(guī)避了傳統(tǒng)CAN只能傳輸6個(gè)數(shù)據(jù)的弊端,像通常用到的0x22服務(wù)的讀數(shù)據(jù)流服務(wù),一個(gè)單幀最多只可以傳輸一個(gè)4個(gè)字節(jié)長(zhǎng)度的DID數(shù)據(jù),超過(guò)4個(gè)字節(jié)就得用首幀、連續(xù)幀、流控幀。根據(jù)目前UDS診斷協(xié)議的定義,可以傳輸大部分的數(shù)據(jù)內(nèi)容,大大減少了首幀、連續(xù)幀、流控幀的拆包和打包的過(guò)程。

圖6 CAN和CANFD的網(wǎng)絡(luò)層定義對(duì)比
在數(shù)據(jù)傳輸0x36服務(wù)進(jìn)行大批量數(shù)據(jù)傳輸?shù)臅r(shí)候會(huì)出現(xiàn)數(shù)據(jù)大于62字節(jié)的情況。CANFD協(xié)議下的首幀byte1的Bit3-1置0,byte2-5表 示 數(shù) 據(jù) 總 長(zhǎng) 度,最 大 可 以 傳 輸0xFFFFFFFF個(gè) 數(shù) 據(jù),相 較 于CAN協(xié) 議 的 數(shù) 據(jù) 長(zhǎng) 度0xFFF,可傳輸數(shù)據(jù)大大增加。CANFD連續(xù)幀編號(hào)長(zhǎng)度設(shè)置為0xFFF,與傳統(tǒng)CAN的長(zhǎng)度0xF相比,每次連續(xù)傳輸?shù)膸瑪?shù)大大增加,不需要太多的流控幀,可以大大節(jié)約資源。
以CANFD協(xié)議為基礎(chǔ)不改變ISO14229應(yīng)用層定義的情況下,分析CANFD協(xié)議在故障診斷系統(tǒng)中應(yīng)用優(yōu)勢(shì)。因?yàn)镃ANFD協(xié)議最大可以支持64字節(jié),所以應(yīng)用會(huì)非常靈活,以0x22讀 數(shù) 據(jù) 流 為 例,DID號(hào) 碼(十 六 進(jìn) 制)分 別 為:0xF191和0xF192,維數(shù)分別 為23和27。傳統(tǒng) 的CAN協(xié)議,是逐個(gè)發(fā)送讀取請(qǐng)求,控制器通過(guò)判斷數(shù)據(jù)長(zhǎng)度如果大于4個(gè)字節(jié),通過(guò)首幀、連續(xù)幀、流控幀進(jìn)行響應(yīng)。基于CANFD協(xié)議,數(shù)據(jù)長(zhǎng)度如果大于4個(gè)字節(jié)并小于等于60個(gè)字節(jié),可以通過(guò)一條CANFD的單幀報(bào)文進(jìn)行響應(yīng),如果數(shù)據(jù)長(zhǎng)度大于60個(gè)字節(jié)的通過(guò)CANFD協(xié)議的首幀、連續(xù)幀、流控幀進(jìn)行響應(yīng)。如果上位機(jī)只請(qǐng)求一個(gè)DID的數(shù)據(jù),可以參考如圖7和圖8所示CAN和CANFD的報(bào)文流程。

圖7 基于CAN讀取0xF191報(bào)文

圖8 基于CANFD讀取0xF191報(bào)文
同是23字節(jié)的故障診斷數(shù)據(jù)的傳輸,傳統(tǒng)CAN需要6條報(bào)文,CANFD只需要2條報(bào)文。如果同時(shí)申請(qǐng)2個(gè)DID,傳統(tǒng)CAN需要使用0x22服務(wù)分別請(qǐng)求,如圖9所示,需要分別使用單幀發(fā)送請(qǐng)求,數(shù)據(jù)字節(jié)大于4個(gè)字節(jié),通過(guò)首幀、流控幀、連續(xù)幀完成數(shù)據(jù)傳輸。

圖9 基于CAN讀取2個(gè)DID的報(bào)文
基于CANFD的數(shù)據(jù)長(zhǎng)度最大可以支持64字節(jié)的優(yōu)勢(shì),基于CANFD的數(shù)據(jù)流讀取可以進(jìn)行優(yōu)化,可以同時(shí)發(fā)送2個(gè)DID的請(qǐng)求命令,響應(yīng)格式為DID+長(zhǎng)度+數(shù)據(jù),如圖10所示,發(fā)送的請(qǐng)求報(bào)文為服務(wù)(0x22)+DID1(0xF191)+DID2(0xF192)共5個(gè)有效字節(jié)。響應(yīng)報(bào)文的格式為正響應(yīng)(0x62)+DID1(0xF191)+DID1長(zhǎng)度(0x17)+DID1數(shù)據(jù)(0x01,0x02…0x17)+DID1(0xF192)+DID2長(zhǎng) 度(0x1B)+DID2數(shù) 據(jù)(0x01,0x02…0x1B),后面的第60~64字節(jié)為填充字節(jié)。

圖10 基于CANFD讀取2個(gè)DID的報(bào)文
基于CANFD的數(shù)據(jù)長(zhǎng)度優(yōu)勢(shì)可以一次讀取多個(gè)DID,原則是盡量使用單幀,避免多幀的交互。如果CANFD的數(shù)據(jù)段波特率再提升,傳輸?shù)男史浅C黠@。
基于CANFD協(xié)議可以提升數(shù)據(jù)段波特率和數(shù)據(jù)傳輸長(zhǎng)度的兩大優(yōu)勢(shì),可以很好地提升故障系統(tǒng)的診斷效率,同時(shí)還可以降低負(fù)載率。故障碼、凍結(jié)幀的診斷中會(huì)有大批量的故障數(shù)據(jù)需要傳輸,基于CANFD協(xié)議的故障診斷系統(tǒng)中可以大大減少連續(xù)幀和流控幀的交互,提升故障診斷數(shù)據(jù)的傳輸效率。