汽车故障诊断仪在安卓平台上的设计与实现
2014-04-03
(重庆邮电大学自动化学院,重庆 400065)
0 引言
随着电控单元(electronic control unit,ECU)在汽车电子中的应用,ECU都提供在板诊断功能(on board diagnostic,OBD)[1]。汽车故障诊断仪是一种检测汽车故障和运行状态的离线诊断装置,与OBD配套使用。诊断仪通过与汽车中的ECU通信,读取ECU工作状态和故障信息,帮助维修人员检测和确定故障,从而提高汽车故障诊断的可靠性[2]。
当前诊断仪设计方案主要有:基于PC机的故障诊断仪[3]和基于单片机/FPGA的手持式故障诊断仪[4]。在分析了上述方案的结构和优缺点之后,提出了在安卓平台开发汽车故障诊断仪的方案。采用在手机/平板上开发诊断仪软件,配合蓝牙转CAN设备,使手机/平板利用蓝牙与汽车ECU进行间接通信,从而完成对汽车的故障诊断。该方案具有成本低、外出携带方便和软件升级容易等优点。
1 汽车故障诊断仪研究现状
1.1 基于PC机的诊断仪
基于PC机的故障诊断仪的工作原理是:在PC机上开发一套上位机诊断仪软件,PC机通过USB-CAN采集板卡接入到汽车的CAN网络,从而实现PC机与汽车内的各个ECU的通信,完成故障诊断功能。此方案的系统结构如图1所示。
图1 基于PC机诊断仪系统框图
基于PC机方案的优点为PC机的数据处理能力强,上位机软件的开发流程方便且软件升级较容易;缺点为PC机的携带方便性较差,即使采用笔记本电脑,汽车上一般也无法提供笔记本电脑的供电电源。
1.2 基于单片机/FPGA的诊断仪
基于单片机/FPGA的手持式故障诊断仪的结构一般包括:单片机/FPGA主控制器、液晶屏、SD卡和CAN通信模块。其工作原理是:将诊断仪的CAN通信模块与汽车CAN网络进行相连;诊断仪主控制器通过CAN通信实现与汽车内各ECU的通信,从而完成故障诊断功能。此方案的系统结构如图2所示。
图2 基于单片机/FPGA诊断仪系统框图
基于单片机/FPGA方案的优点为手持式故障诊断仪具有外出作业携带方便,可利用汽车OBD接口进行供电,人机交互界面简洁;缺点为需要设计专门的系统硬件电路,且软件的升级需要通过特定的程序烧录下载器与下载软件配合使用才能更新诊断仪程序,使得诊断仪生产和维护成本较高。
2 安卓平台汽车诊断仪设计与实现
2.1 汽车诊断协议
随着CAN总线成为国际上车用网络总线的主流,当前设计的汽车故障诊断仪主要是基于ISO 15765标准而开发的。本文设计的故障诊断仪也是基于此诊断协议而开发。ISO 15765是一种以CAN总线为基础的汽车故障诊断协议标准,共定义了以下四部分内容:ISO 15765-1(概述)、ISO 15765-2(网络层内容)、ISO 15765-3(Keyword 2000应用层内容)和ISO 15765- 4(排放相关系统要求)[5]。
汽车诊断功能的实现主要需要研究ISO 15765对于应用层和网络层的相关规定与设计。应用层是与诊断相关的应用,它规定了25种诊断服务,每种服务又定义了具体的子服务来实现不同的功能。汽车故障诊断仪主要是针对这25个诊断服务的调用来完成对汽车ECU的故障诊断。网络层主要负责将数据从发送方传送给接收方,并保证数据传输的可靠性,包括对数据进行打包、解包,实现应用层数据与CAN数据帧之间的转换。网络层最高可发送/接收4 095 B的数据[6]。
通过研究诊断协议应用层规定的25个统一诊断服务(unified diagnostic services,UDS)和网络层规定的数据传输规则,诊断仪可以在与汽车ECU进行通信的基础上,实现汽车的故障诊断功能[7]。
2.2 故障诊断功能的实现
诊断仪主要实现的功能有:读取故障码、清除故障码、读取动态数据流、读取版本信息以及写入VIN码的功能。
诊断仪对汽车ECU的故障诊断过程为:诊断仪通过诊断服务向汽车内部ECU发送诊断服务请求报文,汽车内部ECU在接收到请求报文后,响应诊断请求并向诊断仪发送响应报文;诊断仪接收到响应报文后,解析响应报文中的数据并显示在人机交互界面上,从而指导维修人员确定故障产生的原因及位置。
诊断功能与诊断服务之间的关系如下。
读取故障码需要使用0x19服务:读取故障码(diagnostic trouble code,DTC)信息诊断服务(ReadDTCInformation)。客户端通过该诊断服务读取车辆内所有服务器或一组服务器存储的DTC信息。对于读取全部故障码,可以使用该诊断服务的0x0a子服务来实现。0x0a子功能用于获得服务器支持的所有DTC的状态信息。响应报文包含DTC有效状态掩码、DTC和对应的状态记录。
清除故障码需要使用0x14服务,即清除诊断信息诊断服务(ClearDiagnosticInformation)。该诊断服务简称CDTCI诊断服务。客户端通过该诊断服务清除服务器中存储的诊断信息。清除故障码的功能可以使用该诊断服务来实现。
读取版本信息和读取动态数据流需要使用0x22服务,即读取数据诊断服务(ReadDataByIdentifier)。该诊断服务简称RDBI诊断服务。客户端通过该诊断服务可以读取服务器中指定数据标志符对应的数据,数据标志符及对应的记录数据由供应商自定义。版本信息所包含的DID通常有:0xf188(ECU软件编号)、0xf189(ECU软件版本编号)、0xf18B(ECU生产日期)、0xf18c(ECU序列号)、0xf190(车辆识别码)和0xf191(ECU硬件编号)。诊断仪通过依次读取上述DID对应的数据,即可解析汽车某个ECU的版本信息,并将信息显示在人机交互界面上。
写入VIN码需要使用0x2e服务,即写入数据诊断服务(WriteDataByIdentifier)。该诊断服务简称WDBI诊断服务。客户端通过该诊断服务可以改写服务器中指定数据标志符对应的数据。写入VIN码可以使用该诊断服务来实现。UDS诊断服务规定,在使用该诊断服务之前,需要先将汽车ECU的诊断会话模式切换到扩展模式(对应SID=0x10),并对ECU进行解锁(对应SID=0x27)。
2.3 安卓平台诊断仪设计方案
2.3.1 系统方案
本文设计的基于安卓平台的汽车故障诊断仪的方案主要包括:一台安卓手机/平板、一个与手机/平板进行无线通信并将手机/平板发送的数据转换成CAN报文的转接设备(本文选用蓝牙转CAN转接设备)。系统结构如图3所示。
图3 基于安卓平台诊断仪系统框图
在对汽车进行诊断时,需将蓝牙转CAN设备的CAN接口接入到汽车的CAN网络上。蓝牙转CAN设备的工作流程为:转接设备利用蓝牙模块与手机/平板的蓝牙进行通信;当接收到手机/平板发送的数据时,将接收到的蓝牙报文转换成CAN报文并发送给汽车ECU;当接收到汽车ECU发送的CAN报文时,将接收到的CAN报文转换成蓝牙报文发送给手机/平板。通过这一流程,安卓手机/平板就可以利用转接设备实现与汽车ECU进行间接通信,从而实现对汽车ECU的故障诊断功能。
2.3.2 蓝牙与CAN报文转换规则
由于蓝牙报文与CAN报文的格式不同,因此,需要设计一种将蓝牙报文与CAN报文进行格式转换的规则。CAN报文主要包括8 B的数据和一个11 B的CAN ID标志符。本文设计的蓝牙转CAN的报文转换规则为:将蓝牙每次发送与接收到数据帧设计成1 B的头帧+2 B的CAN ID标志符+8 B的CAN报文+1 B的校验和,一次总共发送或接收12 B的数据。当蓝牙转CAN设备接收到上述报文时,提取出CAN ID标志符,将蓝牙转CAN设备的CAN ID标志符改成从蓝牙报文中提取出的CAN ID标志符,并将蓝牙报文中的8 B的CAN报文转发给汽车内部ECU。当蓝牙转CAN设备接收到汽车ECU响应的CAN报文时,将从CAN报文读取出的发送方CAN ID与8 B的数据打包成1 B的头帧+2 B的CAN ID标志符+8 B的CAN报文+1 B的校验和的蓝牙数据,并通过蓝牙模块发送给手机/平板。
2.3.3 数据库及数据安全设计
考虑到汽车故障诊断仪的各车厂的故障诊断信息数据库需要通过周期性地升级诊断仪程序才能得到更新的问题,本文将诊断仪所需的诊断数据库存储在SD卡中,并用可扩展标记语言(extensible markup language,XML)来表示、存放各汽车厂商的故障诊断信息。当某个厂商的诊断信息需要更新时,只需替换SD上对应该车厂的XML数据库即可,而不必再升级诊断仪软件[8]。各车厂的诊断数据信息主要包括故障匹配信息XML文件和数据流信息XML文件。
故障匹配信息XML文件中存储的是故障码与故障信息对应表(即一个故障码对应一条故障信息的匹配表);数据流信息XML文件中存储的是各车厂汽车的数据标志符列表、数据流描述、数据换算公式及数据流单位的说明表。
由于XML只是一种结构化的标记语言,因此,若不对XML内容进行加密处理[9],则各汽车厂商的诊断数据库容易被不法分子窃取。为了保护各汽车厂商的诊断数据不被泄漏,本文对诊断数据库进行了加密处理。本文采用数字加密标准(data encryption standard,DES)来加密XML[10-13]的元素内容。DES算法入口参数包括:8 B密钥、8 B加密或解密数据和工作方式(加密或解密)。具体工作流程为:在PC机上用DES算法对各汽车厂商的数据进行加密,并将加密后得到的数据用XML语言存储在XML文件中;将加密的各汽车厂商的诊断数据库拷贝到安卓手机的SD卡根目录中;当诊断仪软件运行时,从SD卡中读取各车厂的XML文件,并利用与加密时的同一个密钥,利用DES算法把厂商的诊断数据库解密出来并存放在内存中;当诊断仪从汽车ECU中读取到故障码时,根据存储在内存中的诊断数据库,匹配和解析出各个故障诊断对应的故障信息并显示在人机交互界面,从而指导汽车维修人员找到故障诊断的原因。
2.4 安卓平台诊断仪的实现图
诊断仪软件的系统用例图如图4所示。
图4 诊断仪系统用例图
诊断仪软件的系统活动图如图5所示。
图5 诊断仪系统活动图
从图5可以看出:诊断仪的运行过程首先进入诊断仪主界面,在主界面中主要实现“扩展功能”、“辅助功能”、“汽车诊断”和“连接设备”这四个功能。在“连接设备”功能中,需要实现手机/平板与蓝牙转CAN设备的配对和连接。当成功将手机/平板与蓝牙转CAN设备连接后,就可以选择“汽车诊断”。用户根据需要选择自己的汽车型号。当进入部件选择界面后,就可以分别对汽车的各个部件进行故障诊断。
2.4.3 诊断仪系统UML序列
诊断仪系统工作的序列图如图6所示。
图6 诊断仪系统序列图
诊断仪系统工作流程如下:当用户选择某一诊断功能时,诊断仪软件需要调用UDS诊断服务,并把诊断服务请求报文通过手机蓝牙发送给蓝牙转CAN设备;蓝牙转CAN设备接收到手机蓝牙发送的蓝牙报文后,根据上文所述的蓝牙报文与CAN报文转换规则,将请求诊断报文转换成CAN报文发送给汽车ECU;汽车ECU从CAN网络接收到诊断请求报文后,响应诊断请求报文,并通过CAN网络发送给蓝牙转CAN设备;蓝牙转CAN设备接收到汽车ECU发送的CAN响应报文后,利用蓝牙报文转CAN报文规则,将CAN报文转换成蓝牙报文发送给手机蓝牙;当诊断仪接收到蓝牙转CAN设备转发的诊断请求响应报文后,查找SD卡中的XML诊断数据库,从而解析出响应报文中的故障码,并显示在人机交互界面。
3 功能测试与结果分析
在对汽车ECU进行故障诊断之前,需将蓝牙转CAN设备接入到汽车OBD接口,再运行安卓手机/平板上的诊断仪软件。本文的测试平台为:将蓝牙转CAN设备接入到纯电动汽车长安奔奔mini的OBD诊断接口上,在电动汽车的BCU和HCU部件中已分别存储了故障码和汽车信息。诊断仪若能正确读取与解析出这些故障码与汽车信息,则说明本文开发的故障诊断仪是正确与成功的。从对BCU和HCU的诊断结果可以看出,诊断仪可以正确读取存储在汽车ECU中的故障码和汽车信息,说明本文所设计的基于安卓平台的汽车故障诊断仪方案是正确可行的。
4 结束语
基于安卓平台的汽车故障诊断仪是通过在手机/平板上安装诊断仪软件的方式,并配合使用蓝牙转CAN设备,使手机/平板变成专业的汽车故障诊断仪。这样可以解决基于单片机/FPGA手持式故障诊断仪需要专门设计系统硬件电路而导致成本较高的问题,同时由于诊断仪软件是基于安卓平台开发的,软件的更新升级非常方便。本方案设计的诊断仪具有外出作业携带方便、软件更新升级容易、系统成本低廉等优点。
[1] 唐乐.基于CAN总线的通用型汽车ECU故障诊断仪的研究与设计[D].重庆:重庆邮电大学,2012.
[2] 韩鑫.电容式混合动力汽车离线诊断系统的设计开发[D].镇江:江苏大学,2011.
[3] 刘陶然.PC式汽车故障诊断系统的开发[D].武汉:武汉理工大学,2011.
[4] 陈文增.嵌入式汽车故障诊断仪[D].杭州:浙江大学,2008.
[5] 李锐,王晶莹,姚燕,等.基于ISO15765的车载CAN网络诊断设计[J].计算机工程,2012,38(4):35-39.
[6] 刘丽丽,徐皑,宋岩,等.车辆通用故障诊断协议的研究与开发[J].计算机工程,2012,38(16):9-13.
[7] 黄丽芳.UDS诊断服务在车载ECU中的应用分析[J].汽车电器,2012(6):60-63.
[8] 黄智宇,陈倍新,冯辉宗,等.一种基于XML的汽车ECU故障诊断信息匹配方法:中国,201210504280.0[P].2013-03-20.
[9] 欧海蕉,黄刊迪.XML加密和签名技术在信息安全中的研究与应用[J].微计算机信息,2012,28(3):166-128.
[10]李丽泰.基于XML加密的车载监控系统[J].科技创新导报,2012(3):29-33.
[11]徐锦科,张李超.基于OLE自动化和XML技术的科技人才信息系统[J].计算机与数字工程,2006(1):25-26.
[12]孙宏伟.XML与RDB的多层次双向数据集成技术研究[D].西安:西北工业大学,2003.
[13]周晓,卢炎麟.产品远程协同设计中STEP和XML的集成与应用[J].机床与液压,2005(5):61-62.