您的当前位置:首页正文

基于Android平台的汽车故障诊断系统设计

2020-03-09 来源:好走旅游网
基于Android平台的汽车故障诊断系统设计

乔美昀

【摘 要】设计和开发了一种基于Android平台的汽车故障诊断系统.系统由车载总线系统、VCI系统、Android终端软件和售后诊断数据管理系统组成.建立了系统完整的通信链路,在此基础上,开发了系统诊断软件,其具有5种基础诊断功能和3种系统设置功能.搭建了系统的集成测试平台,对软件的功能进行了测试,并对结果进行了分析,软件功能正确且性能可靠,并逐渐在某公司4S店投入使用. 【期刊名称】《装备制造技术》 【年(卷),期】2018(000)008 【总页数】6页(P60-65)

【关键词】汽车电控;故障诊断;安卓平台;诊断通信 【作 者】乔美昀

【作者单位】上汽通用五菱汽车股份有限公司,广西柳州545007 【正文语种】中 文 【中图分类】U472.9

汽车保有量的持续快速增长,环境、交通、能源、安全问题日益凸显,汽车电子化和新兴的车联网技术是解决上述问题的重要途径[1-2];同时,汽车系统也变得复杂,故障诊断难度增加,对汽车诊断系统要求提高。针对国内外汽车诊断系统的研究现状和发展趋势及Android平台的优势[3],本文提出并设计开发了基于

Android平台的汽车故障诊断系统。 1 系统总体方案 1.1 系统架构及工作原理

本文设计的汽车故障诊断系统要求根据诊断通信协议获取车载总线网络各ECU的故障等数据,并设计算法对其进行解析,而且能把解析的结果上传至服务器进行管理,同时服务器对软件用户进行管理。本系统共由车载总线网络系统、VCI(Vehicle Communication Interface)系统、Android终端软件、售后诊断数据管理系统四大部分组成,其架构如图1所示。 图1 系统架构图

汽车故障诊断系统在工作的过程中,带有蓝牙功能的VCI通过OBDII接口与车载总线网络相连,根据诊断通信协议实现VCI与车载总线网络的通信;通过蓝牙方式实现VCI与Android平台设备的数据通信;Android设备通过WiFi/4G网络与远程服务器实现数据交互,并通过PAD端数据管理系统对服务器数据进行管理。通信链路建立后,根据UDS(统一诊断服务),Android设备发送对应功能的诊断服务,通过VCI系统的处理,发送给车载网络;车载网络中接收指令的ECU模块将反馈数据并通过VCI系统发送给Android设备,Android设备利用其强大的处理能力将收到的数据根据协议进行处理,然后通过友好的人机交互显示出来以满足各种功能需求。 1.2 系统各部分主要功能

车载诊断系统作为车载总线网络系统的重要组成部分,通过OBDII接口和网关挂载在车载网络,与汽车各ECU组成网络,实现信息和数据的共享,根据通信协议实现诊断设备与ECU的通信,完成汽车的故障诊断功能[4]。

通用的Android设备与其他设备的通信方式主要是4G、WiFi、蓝牙、USB,无法直接满足总线通信协议规定的物理层、数据链路层、传输层的要求,因此本文需要

研究并选择VCI系统将车载总线网络接口信号电平与Android设备通信接口电平进行转换,以实现车辆与Android设备的通信。VCI系统硬件实现通信链路物理层上的连接,VCI系统软件实现数据通信链路控制和对硬件系统的管理。其主要的功能有:对VCI系统硬件控制,包括对串口、CAN接口及I/O端口的控制;对车载网络ECU的通信链路控制与维持;对Android设备的通信链路控制与维持;K线和CAN总线数据报文处理[5]。

同时Android设备与服务器实现信息的交互完成软件的在线激活、在线自动更新等功能。

售后诊断数据管理系统包含远程服务器和访问服务器的PC数据管理端,是本文汽车故障诊断系统的数据管理中心,是整个系统的核心组成部分。Android设备通过4G/WiFi通信方式与远程服务器交互,实现数据的上传和下载。 2 系统通信实现 2.1 系统通信方案

本系统通信总体方案如图2所示。核心通信主要由三部分组成,VCI系统通过CAN模块与车载CAN网络实现通信;VCI系统的SCI与蓝牙串口模块相连通过蓝牙方式实现与Android设备通信;Android设备通过4G/WiFi方式接入Internet实现与服务器信息的交互。同时,PC管理端通过Internet访问和管理服务器的信息;Android应用程序在PC上开发,并通过USB进行调试。 图2 系统通信总体方案 2.2 系统核心通信实现 2.2.1 车载网络与VCI通信

汽车的ECU具有自诊断模块,汽车发生故障时,自诊断模块把故障数据存储在EPROM,ECU以节点的形式搭载在车载网络上,ECU与外部设备的通信是根据诊断协议来实现的。

由于VCI系统支持K-Line、CAN总线的多种诊断协议,适用于多种车型,针对某一标识符的ECU建立通信链路必须通过上位机向VCI发送指令对其进行初始化。针对采用UDS的某控制器,VCI的初始化过程如下步骤:对VCI诊断芯片进行复位;选择模块对应的诊断协议,设置CAN通信模式的流控制信息,CAN协议传输层要求发送首帧后,必须接收一个流量控制帧;针对要诊断的控制器设定CAN 11位标准格式ID;设置VCI系统CAN模块的屏蔽器和过滤器;完成以上设置后,发送“3E00”维持服务,若控制器反馈数据包含3E00+ID,则通信链路建立成功。 2.2.2 Android设备与VCI通信

根据功能需求,要实现蓝牙通信,VCI必须具有蓝牙功能。VCI系统已具备SCI功能,只需要选择蓝牙串口模块即可完成通信功能,本项目选择HC06蓝牙串口模块,其最主要的功能是取代了串口线,把串口转换为蓝牙。

Android设备与VCI的通信就是调用Android蓝牙API完成配对,实现通信的过程设置蓝牙,通过BluetoothAdapter的getDefaultAdapter()方法判断设备是否支持蓝牙功能,通过enable()方法打开蓝牙。查找周围设备,通过调用startDiscovery()方法搜索设备,搜索完成后会在一个列表页面显示所有的蓝牙设备名称和MAC地址以便后面的连接操作。连接设备,获取一个代表远程

BluetoothDevice的对象调用其 creatRfcommSocketToServiceRecord(UUID)方法获取一个BluetoothSocket对象;调用其connect()方法即可实现连接。数据传输,Android设备从其BluetoothSocket对象中获取输出流,其次把字符串数据写入到输入流,然后VCI获取其BluetoothSocket对象的输入流,最后从其输入流中把数据读取出来,完成数据的传输[7]。

由于汽车故障诊断系统所有的数据都是通过Android设备的蓝牙与VCI的蓝牙模块传输的,对蓝牙通信要求很高。本文从搜索、配对和数据传输三个方面进行优化,解决了通用蓝牙的通信过程中搜索设备时间长,无自动配对功能,调用数据接收时

造成程序假死的问题。

2.2.3 Android设备与服务器通信

Android设备与服务器交互是采用互联网上应用最广泛的HTTP网络协议标准,而该协议的与接入网络的方式无关,对Android设备4G/WiFi方式接网络均可,且在编写程序时必须声明Internet的权限。

因特网上的每一个资源都具有唯一的标识名称,被称为URL(统一资源定位符)地址,这种地址通常是因特网上的一个网址,URLConnection就是URL和应用程序之间的形成通信链路的桥梁,通过实例化HttpURLConnection类,并调用其方法即可实现对URL指定应用资源的读和写操作[8]。 3 诊断系统软件开发 3.1 系统软件架构

本文开发的软件的功能是通过维修人员操作Android设备精确定位和查找汽车的故障。为了符合Android诊断软件的工作原理和实现其功能,满足软件开发高内聚、低耦合的设计概念,本软件采用代码可读性强、结构清晰的分层设计方案[9]。本软件从上到下依次分为用户界面层、业务逻辑层、数据访问层,详细结构如图3所示。

图3 汽车诊断软件架构 3.2 系统各层设计 3.2.1 数据访问层

数据访问层是接收数据的载体层,主要访问本地数据库的数据,通过网络访问服务器管理端的远程数据,通过VCI向车辆网络中的ECU发送指令或获取诊断数据。数据访问层获取的数据通过业务逻辑层处理,同时业务逻辑层也能向数据访问层发送数据。本软件数据访问层主要函数如表1所示。

表1 数据访问层接口函数函数 描述SendATCommand 向VCI初始化请求

SendOBDCommand 向ECU发送诊断指令请求DataReceive 接收ECU反馈回来的数据OpenDatabase 打开本地数据库QueryDatabase 查找本地数据库的数据SharedPreferences 创建删除更新用户信息SendJsonData 向服务器发送JSON数据ReceiveJsonData 接收服务器的JSON数据DownloadFile 从服务器下载文件UploadFile 向服务器上传文件

上位机软件是通过发送接收函数实现和VCI系统及ECU数据交互的,主要由三个面向VCI驱动层的函数组成。SendATCommand函数封装了蓝牙通信的写缓存函数和读缓存函数,发送的指令以“AT”字符串开始,主要是与VCI通信,完成VCI系统上电后的初始化及通信链路的建立。SendOBDCommand函数和DataReceive函数相对应,一个封装了蓝牙的写缓存函数,另一个封装了蓝牙的读缓存函数,当上位机发送业务逻辑层生成的OBD诊断指令后,通过接收函数接收ECU反馈的数据供业务逻辑层处理。

本诊断系统通过SQlite数据库存储车型模块配置信息和故障码信息,通过Shared Preferences保存唯一的一个用户信息(用户名、密码、激活码、MAC、激活日期、有效期)用于激活功能。调用设计的SendJ-sonData和ReceiveJsonData方法实现用户信息的发送和接收,调用设计的DownloadFile和UploadFile方法用于下载服务器中指定网址的新版本安装文件和上传本地诊断记录等文件至服务器指定位置。 3.2.2 业务逻辑层

Android诊断软件业务逻辑层的主要任务是完成诊断流程的控制和指令生成及反馈数据解析。诊断系统最核心的业务就是发送指令并接收反馈数据,其工作基本流程如图4所示。Android设备生成诊断指令后,调用发送函数发给VCI系统,VCI系统触发中断,接收数据并发送给ECU,根据诊断协议ECU接收到数据并反馈给VCI,存入VCI的蓝牙缓存中,VCI通过读缓存方法将接收数据传给Android设

备。

图4 诊断系统工作基本流程

考虑到VCI系统的发送和接收数据机制,对接收较多的数据必须对其进行相对较长的延时,才能保证通信的可靠性和准确性。对具有N个数据流的数据组,采用循环发送数据流指令和循环接收反馈数据的方式;每发送一条读数据指令,即接收一帧的数据流数据,数据长度较短,VCI蓝牙模块的接收和发送也反应较快,故只需要很短的延时即可保证通信的准确性和可靠性。因此本文的诊断流程控制采用如图5所示的方案。 图5 诊断流程控制策略

ECU的诊断协议中包含很多的诊断服务,与程序功能相关的服务都以变量或常量的形式保存在代码中;而很多诊断服务又根据不同的DID(动态定义的标识符)定义了子服务,而要获取指定DID的反馈数据,需要生成对应子诊断指令步骤如下:根据功能确定总的服务;根据要选定的子项目获取DID;根据诊断协议指令的规定,通过设计通用的算法生成对应服务的请求指令。

ECU接收到指令反馈数据经VCI系统到Android设备的数据是16进制报文的形式;必须通过业务逻辑层对接收的数据解析才能传递给界面显示层。根据诊断协议确定接收数据中的有效数据;根据协议对中规定的参数定义设计通用的算法换算直观的结果。 3.2.3 界面显示层

Android软件分离了用户界面显示的代码和控制逻辑的Java代码,不仅便于开发人员的编写,也能使程序结构更加清晰。Android应用程序由多个界面组成,为了满足程序的功能,不同的界面必须能够实现相互切换,Android程序的界面切换通过实例化Intent来完成。Android程序的任何两个活动窗体都可以跳转切换,灵活性很高,方便开发。

3.3 软件功能开发

本汽车故障诊断系统由故障诊断、系统设置两大功能组成,其方案如图6所示。由于故障诊断系统的通用性,在实现子诊断功能之前,需根据待诊断车型的信息先选择车型、排量、上市年份,然后选择单个模块进入子功能或选择全车诊断功能。对单个模块的诊断分为诊断故障代码、数据实时显示、动作测试、模块信息识别四大功能。对系统的设置主要是通过Android设备与服务器的交互,实现在线激活、修改密码、在线更新三大功能。 图6 汽车诊断系统功能架构方案

本文设计的诊断故障代码功能主要包含读取故障码、清除故障码、读取冻结帧功能。根据UDS协议中读故障码功能为19服务,发送诊断指令然后接收数据,根据ISO15031-6协议对故障码解析。

为精确判断故障的位置,本软件根据诊断经验将每个ECU电控系统又分为一些子系统。根据UDS协议,22服务是通过标识符读数据;此服务允许诊断仪从一个或多个数据标识符的ECU中请求的数据记录的数值。针对汽车实时运行的数据,选取某项数据,采用循环发送读单个数据流指令并接收数据解析的控制策略,绘制数据流的实时曲线。

本软开发了动作测试功能。其主要是实现对车辆执行器的控制。一方面,通过该功能对车辆实现短时的调整,判断执行器是否发生故障;另一方面,通过该功能用移动设备实现对车辆的远程控制。

ECU作为汽车电子供应商的一种产品,根据生产商的相关规定,模块中有包含的零件号、硬件版本号、软件号、软件版本号的属性信息。通过读取模块信息可以识别模块,为车辆模块的更换和刷写提供指导和帮助。

全车诊断功能是本诊断系统重要的功能,也是4S店维修技师最常用的功能,通过简单的操作可以读取整车的故障码,方便快捷。全车诊断的实质是读取故障码和清

除故障码。

由于本文开发的软件具有读取车辆信息和操控车辆的功能,涉及到车辆的信息安全,必须对软件用户进行严格的权限管理。本文开发了激活功能其策略是:只有在售后诊断软件PC管理端添加授权的用户才能使用该软件;一个授权用户只能在一台Android设备上应用。

本文设计的汽车故障诊断软件,随着车型的添加,功能的不断完善,性能的优化,软件也需要不断的更新。更新设计流程是软件启动时检测软件是否是最新版本,用户可以根据需要选择是否更新。 4 诊断系统测试 4.1 系统测试平台

系统集成测试平台由本地诊断实车测试平台和远程测试平台组成。本地测试平台由诊断的车辆、带蓝牙模块的VCI盒子和Android设备组成;远程功能测试平台由带4G或WiFi的Android设备、开启的远程服务器和售后诊断软件数据管理系统PC端组成。由测试场景模拟用户客户端,调用动态库接口单元测试用例,配置文件设置连接用户服务端,以返回的结果和测试数据为准,分析是否达到用户目标要求。

4.2 系统测试与分析

针对某一车型的7个电控模块对软件的各个功能进行了反复的测试,测试结果的部分截图如图7、图8、图9、图 10所示,并对测试结果进行了分析,该软件各功能设计开发正确,且性能可靠,并逐步在某企业4S店投入使用。 图7 系统各功能测试结果 图8 系统各功能测试结果 图9 系统各功能测试结果 图10 发动机测试数据

5 结束语

本文设计了一种基于Android平台的汽车故障诊断系统的总体方案,实现了系统的核心通信,开发诊断系统软件,并对软件进行了集成测试。该系统通用性好、功能强大、开发准确、性能稳定可靠,可以满足售后4S维修技师的需求,且在某公司4S店逐步投入市场。 参考文献:

【相关文献】

[1]Bill Fleming.Advances in Automotive Electronics[J].IEEE Vehicular Technology Society,2015,10(1):4-11.

[2]车云网.车联网:决战第四屏[M].北京:电子工业出版社,2014.

[3]李小敏.基于Android智能手机的汽车故障诊断系统研究与实现[D].青岛:中国海洋大学,2014. [4]齐默尔曼.汽车总线系统[M].北京:机械工业出版社,2011.

[5]盛祥政.基于智能手机的远程汽车故障诊断系统的研发与开发[D].武汉:武汉理工大学,2012. [6]ISO/WD14229,Road vehicles Unified Diagnostic Service(UDS)Specification Requirements[S].2006.

[7]陈 文,郭依正.深入理解Android网络编程[M].北京:机械工业出版社,2013.

[8]王晓禹,石 丽.基于 JSON实现 Android智能终端与Web服务器“面向对象”的信息交换[J].数学与实用技术,2012,6(4):20-23.

[9]吴丽平,赵 卓,陈 绮.基于三层架构的系统管理软件的研究与设计[J].计算机工程,2006,32(17):283-284.

因篇幅问题不能全部显示,请点此查看更多更全内容