潘文卿,李圣展,王梦,王琳琳
(潍柴动力股份有限公司,山东 潍坊 261061)
随着电控系统的功能越来越智能化,故障诊断系统也越来越强大,故障分类也越来越多。在传统UDS协议的故障诊断中,数据传输的长度小于6字节时,采用单帧即可传输完毕,大于6字节的数据传输就需要采用首帧、流控帧、连续帧的传输方式。在传统J1939协议故障诊断系统中,基于J1939-73诊断部分实现故障码在CAN总线网络上的传输。本文基于CANFD协议可以提升数据段速率和数据长度的两大特性,主要讲述在UDS诊断系统和J1939-73诊断协议中的应用研究。
CANFD协议的数据段传输速率最高可达5Mb/s,仲裁段的最高时传输速率为1Mb/s,可以向下兼容CAN协议,数据段中的数据场最大可以支持64字节的数据。同时CRC校验在传统CAN的基础上进行了软件升级,数据段长度大于16字节时,采用CRC_21多项式校验算法为X+X+X+X+X+X+X+1;数段长度小于等于16字节时,采用CRC_17多项式校验算法为X+X+X+X+X+X+X+X+X+1;根据数据长度采用不同的校验算法,保证数据传输的可靠性。CANFD协议相较于传统CAN最大的优势是数据段长度的增加以及传输速率的提升,可以很大程度上解决当前CAN总线负载率高、数据带宽受限的问题。本文基于CANFD的两大特性,结合传统的故障诊断协议做了新的技术改进。图1为CANFD帧结构。
图1 CANFD帧结构
基于J1939-73协议的故障诊断协议,规定了故障代码数据在CAN总线网络上的传输形式,故障码以DTC的形式通过DMx报文发送到总线上。以当前故障DM1报文为例,当没有故障或者只有一个故障时,通过PGN为0xFECA的单帧报文发送到总线上,当故障个数大于1个时,会通过PGN为0xECFF和0xEBFF两条报文通过多包的形式发送到总线上,控制器收到后,再按照多包报文的协议组合在一起,解析每一个故障码。对于数据是大于8个字节的DMx报文,需要先对数据进行拆包,用BAM和PACK两条报文进行传输,接收方收到后再进行组包,BAM和PACK的传输机制见图2和图3。
图2 BAM报文的结构
图3 PACK报文的结构
例如0x18FECA00:0x00 0xFF 0xAC 0xF3 0xE1 0x01 0x30 0xF3 0xE3 0x01,消息大小是10个字节,如果是传统的CAN需要分成两个数据包,参数群编号0x00FECA,所以BAM和PACK的数据传输如图4所示。
图4 BAM和PACK报文的数据
当前故障诊断系统中同一时刻可以诊断20个故障,即20个故障码,一个故障码是4个字节,再加上第1个字节为灯的状态,第2个字节为预留,所以最多的时候可以传输82个字节,12包数据。按照当前的普遍性设定BAM与PACK,PACK与PACK的时间间隔为50ms,那传输完12包数据的时间为600ms。像DM1报文的周期是1ms,如果是只有一个DM1多包报文传输,没有问题,如果控制系统有多条多包报文,时序就会出问题,所以这是传统CAN的弊端。
如果采用CANFD报文的形式进行传输,在不改变原有协议架构的情况下最多可以通过两条PACK报文进行传输。例如传输82个字节的数据,BAM和PACK报文的数据如下:传输3帧CANFD报文的时间只需要100ms多一点的时间,大大缩短了时间,如图5所示,第1条CANFD报文的长度是64字节,可以搭载63个字节的数据,第1个字节是当前的包数序号,第2条CANFD报文的长度是24字节,第1个字节是包数序号,第2字节到第20字节是剩余19个有效字节数据,第21~24字节为填充字节。如果有多条多包报文,不会影响多包报文的时序,CANFD协议可以很好地规避传统CAN的弊端。
图5 传输3帧CANFD报文的数据
ISO 15765-2协议定义了单帧、首帧、连续帧、流控帧结构,图6是基于CAN和CANFD的不同定义方式,相较于传统 的CAN协 议 下 的 单 帧,CANFD协 议 下 将byte1定 为0,byte2是数据长度,后面的byte3-byte64是数据,一个CANFD协议的单帧最大可以传输62个数据,很好地规避了传统CAN只能传输6个数据的弊端,像通常用到的0x22服务的读数据流服务,一个单帧最多只可以传输一个4个字节长度的DID数据,超过4个字节就得用首帧、连续帧、流控帧。根据目前UDS诊断协议的定义,可以传输大部分的数据内容,大大减少了首帧、连续帧、流控帧的拆包和打包的过程。
图6 CAN和CANFD的网络层定义对比
在数据传输0x36服务进行大批量数据传输的时候会出现数据大于62字节的情况。CANFD协议下的首帧byte1的Bit3-1置0,byte2-5表 示 数 据 总 长 度,最 大 可 以 传 输0xFFFFFFFF个 数 据,相 较 于CAN协 议 的 数 据 长 度0xFFF,可传输数据大大增加。CANFD连续帧编号长度设置为0xFFF,与传统CAN的长度0xF相比,每次连续传输的帧数大大增加,不需要太多的流控帧,可以大大节约资源。
以CANFD协议为基础不改变ISO14229应用层定义的情况下,分析CANFD协议在故障诊断系统中应用优势。因为CANFD协议最大可以支持64字节,所以应用会非常灵活,以0x22读 数 据 流 为 例,DID号 码(十 六 进 制)分 别 为:0xF191和0xF192,维数分别 为23和27。传统 的CAN协议,是逐个发送读取请求,控制器通过判断数据长度如果大于4个字节,通过首帧、连续帧、流控帧进行响应。基于CANFD协议,数据长度如果大于4个字节并小于等于60个字节,可以通过一条CANFD的单帧报文进行响应,如果数据长度大于60个字节的通过CANFD协议的首帧、连续帧、流控帧进行响应。如果上位机只请求一个DID的数据,可以参考如图7和图8所示CAN和CANFD的报文流程。
图7 基于CAN读取0xF191报文
图8 基于CANFD读取0xF191报文
同是23字节的故障诊断数据的传输,传统CAN需要6条报文,CANFD只需要2条报文。如果同时申请2个DID,传统CAN需要使用0x22服务分别请求,如图9所示,需要分别使用单帧发送请求,数据字节大于4个字节,通过首帧、流控帧、连续帧完成数据传输。
图9 基于CAN读取2个DID的报文
基于CANFD的数据长度最大可以支持64字节的优势,基于CANFD的数据流读取可以进行优化,可以同时发送2个DID的请求命令,响应格式为DID+长度+数据,如图10所示,发送的请求报文为服务(0x22)+DID1(0xF191)+DID2(0xF192)共5个有效字节。响应报文的格式为正响应(0x62)+DID1(0xF191)+DID1长度(0x17)+DID1数据(0x01,0x02…0x17)+DID1(0xF192)+DID2长 度(0x1B)+DID2数 据(0x01,0x02…0x1B),后面的第60~64字节为填充字节。
图10 基于CANFD读取2个DID的报文
基于CANFD的数据长度优势可以一次读取多个DID,原则是尽量使用单帧,避免多帧的交互。如果CANFD的数据段波特率再提升,传输的效率非常明显。
基于CANFD协议可以提升数据段波特率和数据传输长度的两大优势,可以很好地提升故障系统的诊断效率,同时还可以降低负载率。故障码、冻结帧的诊断中会有大批量的故障数据需要传输,基于CANFD协议的故障诊断系统中可以大大减少连续帧和流控帧的交互,提升故障诊断数据的传输效率。