APP下载

车辆控制器故障诊断系统的设计与实现

2020-07-27赵立超吴长水

软件工程 2020年7期
关键词:上位机故障诊断

赵立超 吴长水

摘  要:故障诊断系统是汽车上各类控制器的重要组成部分,本文基于ISO 14229(UDS-统一诊断服务)和ISO 15765(DoCAN)两种协议设计了一套基于CAN(Controller Area Network,控制器局域网络)总线的故障诊断系统。主芯片为XC2785的发动机ECU作为试验平台,并开发与之配合使用的上位机,最后进行测试,结果表明,可以实现CAN报文的发送及接收,诊断符合UDS的诊断流程,上位机操作简单,可以快速读取故障码,以及清除故障码,满足设计需求。

关键词:UDS;故障诊断;CAN;上位机

中图分类号:TP520.40     文献标识码:A

Abstract: Fault diagnosis system is an important part of all kinds of controllers in automobile. This paper designs a fault diagnosis system based on CAN (Controller Area Network) communication, on the basis of ISO 14229 (UDS-Unified Diagnosis Service) and ISO 15765 (DoCAN). The main chip, the XC2785 engine ECU, is used as the test platform, and the upper computer is developed to use with it. The test results show that CAN message can be sent and received, the diagnosis is in line with the UDS diagnosis process, the upper computer is simple to operate, and the fault code can be quickly read and cleared, so as to meet the designing requirement.

Keywords: UDS; fault diagnosis; CAN; upper computer

1   引言(Introduction)

隨着汽车电气化的快速发展,汽车上的电气设备不断增加,如果没有诊断功能和安全保护机制,在发生故障的时候是十分危险的。目前,基于CAN总线的车辆故障诊断系统是车辆安全机制的重要要求,应用最广泛的故障诊断协议是UDS协议。UDS由ISO-14229系列标准定义[1]。所以开发基于UDS协议的故障诊断系统是很有必要的,对提高汽车故障诊断的准确性、可靠性、安全性具有重要的价值和意义[2]。

本文按照UDS协议的要求,在主芯片为英飞凌的XC2785的发动机控制器上,开发出一套故障诊断的程序,并在Visual Studio上开发与之配套的上位机,对其进行测试,可以实现基于UDS协议的CAN报文接收和故障码的读取和清除功能,满足故障故障诊断的要求。

2  故障诊断系统总体架构设计(Overall architecture

design of fault diagnosis system)

在汽车中,诊断仪器对车辆系统的检测称之为诊断[3]。诊断分为在线模式和离线模式,在线模式指汽车仪表对汽车实时数据的一个显示,离线模式指的是用一个外接设备,通过汽车的OBD接口,进行一个诊断的通信,从而掌握汽车的故障信息和一些实时的数据,对生产和售后提供一些便利,节约时间和成本。本文研究的是离线模式。

目前,国内外对诊断系统的研究主要基于故障诊断仪和基于PC平台的故障诊断方案[4]。本文采用的是基于PC平台的方案。如图1所示,右边为主芯片为英飞凌XC2785的六缸发动机控制器,通过周立功的CAN卡连接至PC机,通过PC上开发的上位机来对发动机控制器进行诊断。

3  故障诊断系统设计(Design of fault diagnosis system)

3.1   UDS命令解析

UDS共包含六大类26种服务,每种服务都有自己特有的标识符SID(Service Identifier),UDS其实是一种定向的通信,是一种交互协议(Request/Response),即诊断方(PC或诊断仪)给ECU发送指定的请求数据,这条数据中需要包含SID。ECU对诊断方的响应有两种,一种是肯定的响应(Positive Response),回复[SID+0x40],如请求10,响应50;请求22,响应62;一种是否定的响应(Negative Response),回复7F+SID+NRC(否定响应码),回复的是一个声明。

本文设计的故障诊断系统用到的命令有:诊断会话控制(0x10),安全访问(0x27),读取故障码信息(0x19),清除故障码(0x14)。有的命令还会有一系列子服务。

3.2   故障诊断流程设计

首先,当发动机控制器发生故障的时候,会将对应的故障码储存在Flash中[5]。如图2所示,当我们通过CAN线连接至我们的PC时,首先发送的是诊断会话控制命令(0x10),每一个会话当中可能会支持的服务是不同的,为了做这一个区别,我们在每个子服务中定义不同的范围,首先ECU上电进入的是一个默认会话;当我们确认会话状态后,会进入安全访问功能(0x27),由上位机向ECU请求种子(seed),ECU接收到诊断命令后,根据当前所处的诊断模式,发送相应的seed给上位机,上位机接收到seed后,通过特定的算法计算出key,然后通过安全访问(0x27 0x03)命令向ECU发送key,如果key能够与ECU计算出的key匹配,那么上位机就获得了进入该模式的权限,如果发生错误,则返回否定相应(0x7F)。

接下来开始进行诊断,这里我们用到的主要是两条命令,(0x19读取DTC信息)和(0x14清除诊断信息)。0x19这条命令主要用来查询故障信息,0x14这个服务用于清除故障码,3个ff代表清除所有DTC。如图2所示,首先发送0x19服务的命令,去读取故障码,如果存在故障码,上位机显示出来,如果不存在故障码,上位机提示无故障后结束;如果存在故障码,上位机显示出来,然后决定是否清除故障码,如果要清除故障码,发送0x14命令,在命令中调用清除故障信息的功能函数,清除故障成功结束,如果不清除故障码则等待上位机的下条命令。

3.3   故障诊断软件设计

本文的故障诊断系统是基于CAN网络的,在CAN的中断函数调用UDS的函数uds_handler(M0.ubData,8),UDS的每条服务中需要发送数据时调用CAN的发送函数CAN_vTransmit()。

在uds_handler函数中有UDS中使用到的服务的实现,如图3所示,首先判断CAN帧的字节数是否在2—8,一帧CAN报文最多有8个字节,而UDS中最少也要有2个字节,所以不再这个范围内的字节数即为错误。然后通过CAN报文的第一个字节来判断CAN帧的类型,在ISO 15765中定义的四种帧的类型,分别为:单帧(SF)、首帧(FF)、连续帧(CF)、流控制帧(FC)[6]。判断出CAN帧的类型后,CAN报文的第二个字节代表的是UDS的不同服务。在不同服务的case中实现该服务的功能,然后通过udsSend()函数发送正响应,如果出错则返回错误信息,通过communUDS_NRC_Send(communUDS_ServiceID, 0xNRC)函数发送。

4   故障码设计(Design of fault code)

DTC(Diagnostic Trouble Code)是诊断故障的一个缩写,如果系统检测到一个故障,它将储存为一个DTC[7]。UDS协议中3个字节的长度作为一个DTC。一般来说,我们会使用ISO 15031-6中的规范,前两个字节代表一个根DTC,最后一个字节DTC状态位。

故障码有四类,分别为P、C、B、U,P是动力系统(Powertrain),C是底盘(Chassis),B是车身(Body),U是通信系统(Network)。由于是在发动机控制器上开发的,所以选择动力系统。人为的设置两个故障码,用于测试故障诊断系统。如下表1所示,选择进气温度传感器来进行测试,因为信号电缆上只可能存在大约0.25 V到4.75 V之间的电压,0V和5V预留用于故障检测[8]。使用电位器模拟进气温度传感器信号,当转动电位器到达0V或5V时,故障诊断系统应该检测到。

5   上位机设计(Upper computer design)

上位机是在Visual Studio中开发的。上位机设计分为两个部分,报文显示区域和诊断区域。如图4所示。

报文显示区域负责的部分为CAN通道的打开,诊断会话的选择,安全访问,单条CAN报文的测试;诊断区域负责故障码的讀取和清除,以及状态流的显示,状态流即此时发动机的信息,例如转速,冷却液温度等。在每个显示区域都有一个对应的Clear按钮用于清除数据。

6   功能测试(Functional test)

将建好的工程通过编译器烧写进6缸发动机控制器中,按照图1的方式将电脑和6缸发动机控制器连接好。如图5所示,为测试的部分显示结果。首先通过CANopen按钮打开CAN通道,再进行各个功能的测试。

对报文信息进行分析,一帧CAN报文是8个字节,上位机发送的字节中多余的字节用cc补齐,接受的字节中多余的字节用aa补齐,cc和aa可以根据需要来自定义。首先上位机发送的第一条命令是诊断会话控制,用于进入合适的模式,如下表2所示,发送的字节中,根据UDS协议中的相关定义,02表示单帧,占2个数据字节,10表示诊断会话服务,01表示编程会话中的子服务;接受的数据中,02代表的与发送中的字节含义相同,50表示10服务的肯定响应(SID+0x40),01表示编程会话中的子服务。

安全访问结束后,进入诊断模式,使用自定义的两个故障码用于测试,P0098表示进气温度传感器电路电压高,P0097表示进气温度传感器电路电压低。如表4所示,前两组用于请求故障信息,后一组用于清除故障码。

发送读取故障码的命令,当转动电位计使其处于0V时,应该读取到P0097这个故障码;当电位计处于5V状态时,应该读取到P0098这个故障码。然后发送清除故障码的命令,三个ff表示清除所有故障码。如表4所示,为读取和清除故障码的报文信息,符合UDS协议中的要求。

7   结论(Conclusion)

本文设计的故障诊断系统成功实现了主芯片为XC2785的发动机控制器的诊断功能。测试结果表明,该系统的通信过程与诊断结果符合ISO 14229和ISO 15765协议的规范。上位机提供简洁的界面,提供了多种数据显示方式,以及操作方便的诊断功能,为自主开发ECU诊断系统提供基础的技术支持,节约成本,将故障诊断的过程大大缩短,有良好的实用性和商业价值。

参考文献(References)

[1] ISO 14229. Road vehicles - Unified Diagnostic Services (UDS)[S]. Switzerland: International Organization for Standardization, 2006.

[2] 沈凯.基于UDS协议的纯电动汽车整车控制器故障诊断研究[D].湖北汽车工业学院,2017.

[3] 邹凤.基于ISO15765协议的汽车诊断系统的设计与实现[D].中国科学院大学(中国科学院工程管理与信息技术学院),2017.

[4] 黄悦鹏.基于CAN总线的UDS诊断系统的设计与实现[D].南京邮电大学,2016.

[5] Liao Y S, Lin Z Y. Design of Bootloader for air-conditioning controller based on CAN bus[J]. Mechanical & Electrical Technology, 2015 (2): 104-106.

[6] ISO 15765. Road vehicles - Diagnostics on Controller Area Networks (CAN)[S].Switzerland:International Organization for Standardization, 2006.

[7] 聂幸福,孟晨兴.基于UDS的BootLoader上位机实现[J].汽车工业研究,2018(07):26-29.

[8] 白稳峰,汪春华,刘洪飞,等.基于独立网关的UDS服务设计与实现[J].汽车实用技术,2019(23):55-58.

作者简介:

赵立超(1995-),男,硕士生.研究领域:汽车电子控制,辅助驾驶.

吴长水(1978-),男,博士,副教授.研究领域:发动机电控.

猜你喜欢

上位机故障诊断
论网络通信技术
基于云的短波发射机机房中央空调自动控制系统的设计与实现
因果图定性分析法及其在故障诊断中的应用
基于LCD和排列熵的滚动轴承故障诊断
基于WPD-HHT的滚动轴承故障诊断
高速泵的故障诊断