(1.江苏大学 汽车与交通工程学院,江苏 镇江 212013; 2.浙江福爱电子有限公司,浙江 杭州 311100)
随着汽车行业的不断发展,汽车上电子元件日益增多,这使得车辆变得更加安全舒适,但也对车辆故障诊断提出了更高的要求[1]。近年来在车载诊断系统的研究方面,赵静等人基于标准RS232串行通信对故障诊断仪的开发进行了研究[2];汪玲燕等人将OBD技术与RMI、GPRS和GPS技术相结合,研发了OBD物联网控制系统[3];屠雨等人也对汽车OBD车联网的软硬件架构进行了相关研究[4];谢江浩等人基于蓝牙技术用Android手机终端采集了故障数据[5]。
这些研究将OBD技术与目前一些较先进的通信技术相结合,优化了车载故障诊断系统。但这些研究都基于一种型号的机型进行设计且通信质量受到环境限制,而标定实验需要在各种极端环境下进行测试,因此这些技术在用于标定时稳定性较差。而CAN总线作为一种现场总线,由于其能够实现信息共享、通信速率高、适应能力强、稳定性好、关联控制等优点,在汽车上的应用越来越广泛[6]。目前各个厂家的电控系统中集成的故障诊断系统所使用的PCODE码各不相同[7-8],不同厂家的设备往往不能通用,且大部分设备只会预留一个CAN通信接口,这也导致了故障诊断与标定数据采集难以同时进行,这对于标定工程师来说是极为不便的。
因此为了提高标定工作的效率,基于CAN通信开发了一款搭载于标定软件内部的实时故障诊断系统。其在不影响数据读取的前提下,实时诊断不同厂家的故障码,并具有一定的扩展性与兼容性,这样以便标定工程师在标定工作的同时读取故障码,从而提高标定效率。
故障诊断系统总体分为三大部分,分别是通信模块,解析模块及Structure文件,系统结构如图1所示。Structure文件分为两个部分,分别为配置文件和PCODE码文件。通信模块负责与下位机建立CAN通信,结合配置文件为解析模块收发数据。解析模块对数据按照对应模式进行分类解析并对照PCODE码文件得到最终结果,然后将结果显示到程序界面上。Structure文件中的配置文件定义了CAN通信的相关属性与通信代码,以TXT文件的格式存储。PCODE文件按照不同的模式以表格的形式存储了故障码内容和计算公式。Structure文件可以同时存在多份并在软件运行时自由选择,以便于不同系统间的切换。
图1 故障诊断系统结构示意图
通信验证以FAI公司的一款ECU为基础,其选用的单片机型号为飞思卡尔的MC9S12G128,这款芯片自带MSCAN模块,能够实施CAN协议2.0A/2.0B。MSCAN的两个信号引脚分别是发送和接收,其输出为TTL电平,而CAN总线上的通信信号需要通过差分电路来传输[9],因此需加上一个英飞凌的TLE6250G高速收发器[10]。
通过使用周立功USBCAN来实现ECU和上位机软件实时通信。上位机软件以LabVIEW作为开发平台。LabVIEW支持直接调用dll库函数,因此可以直接调用与周立功CAN卡相匹配的CONTROLCAN.dll文件进行通信[11]。
通信模块相对独立,按照配置文件中定义ID将收到的信息进行筛选存储。同时,由于两个模块相对独立,因此在嵌入标定软件时也较为灵活,若标定软件已有CAN通信模块则可以直接将数据输入到通信模块中进行筛选存储,若没有则可以将通信模块与解析模块封入一个子VI内,作为一个整体使用。
上位机软件通过调用库函数实现CAN的打开、设置、初始化,以及指令收发和关闭。ZLGCAN提供了在PC端上使用的应用接口函数——VCI库函数。VCI函数库中定义了常用的数据结构,比如VCI_BOARD_INFO、VCI_CAN_OBJ、VCI_INIT_CONFIG等。可以通过这些事先定义好的数据结构进行数据传输。调用库函数的子VI如图2所示。
图2 库函数调用VI图
诊断系统CAN通信的配置信息可以自由调节,调节方式为调用VCI_CANINIT函数,在VCI_INIT_CONFIG结构中定义了初始化CAN的配置,其具体结构如下所示。
DWORD AccCode
DWORD AccMask
DWORD Reserved
CHAR Filter
CHAR Timing0
CHAR Timing1
CHAR Mode
诊断系统的波特率可以通过VCI_INIT_CONFIG结构中的两个定时器进行调节。在初始化界面上选择合适的波特率,系统将自动分配相应的数据给定时器。从而实现波特率的调节,常用的波特率调节参照表如表1所示。
表1 波特率调节参照表(16 MHz晶振)[9]
为了便于在连接CAN卡的同时可以使用CAN Monitor进行调试,将序列号的选择也加入到了初始化模块中,这样可以方便在同一台电脑上连接多个CAN设备,避免因为占位冲突而导致无法接入CAN总线。
由于CAN通信数据流中包含其他的数据,诊断系统由于实时性要求相对较低,因此需要诊断系统在保证正常诊断功能的前提下,尽可能少占用资源。由于诊断数据符合单进单出的特性,因此将筛选后的数据以队列的形式存入到一组全局变量中,并同时将数据记录。解析模块调用全局变量即可接收数据,这样既保证了数据的实时性,也降低了对系统资源的占用。
解析模块以LabVIEW作为软件开发平台。LabVIEW是一款图形化编程软件,它编程效率高、拥有大量适用于测控领域的工具包、具有良好的平台一致性[12]。解析模块的运行需要两个部分,分别是源程序与PCODE文件,源程序主要负责后台解析与发送命令,PCODE文件存储指令的内容等相关信息。PCODE文件可以按照不同厂家的协议自行制定,当需要对不同厂家的发动机进行诊断时,无需更换程序,只要选择相应的PCODE文件即可。
考虑到平台的通用性,源程序只依照框架运行,框架内容保存于PCODE文件中。源程序通过调用PCODE文件中的数据实现对指令的解析。系统需要满足OBD相关法规的要求,其应用层遵循ISO15031协议,底层遵循ISO15765-4。系统采用一问一答的机制,即上位机发出请求指令,ECU进行答复并进行相应动作,然后由上位机软件依照ECU的答复进行后续操作。具体的逻辑框图如图3所示。
图3 解析流程图
ECU返回的数据需要经过解析并组成数组形式,具体示例如表2所示。
表2 解析示例表格
表格中的数据,以负反馈为例进行说明:03表示后面共有3个数据段,7F表示负反馈SID,04表示对SID4的应答,22表示负反馈(清除条件不足)。每个故障的代码由两个字节组成,依据OBD故障码解析协议,经解析的故障码方能与PCODE对照表中故障相对应。高字节的前四位可以对照表3进行转换。高字节的后四位以及低字节相应转换为十六进制数。完成解析后,对照PCODE码文件将得到的结果返回到主界面上。
表3 故障码转换表[8]
Structure文件分为配置文件与PCODE码文件。配置文件主要定义了与指令发送相关的内容。
以如下具体指令为例:PID(00h) 支持的PID(00h) XXXXXXXX 1 0 1 200 02010000000000000;(文中具体ID号由X代替)指令分别是指令名称、指令描述、ID、帧类型、帧格式、发送次数、发送间隔、指令内容。依据ISO15031协议,软件的主要功能模块包括MODE1请求当前动力总成数据,MODE2请求动力总成冻结数据,MODE3请求已确认的排放诊断信息,MODE4清除相关诊断信息,MODE5请求氧传感器检测结果,MODE6请求非连续检测系统OBD结果,MODE7请求当前或者前一驾驶循环识别到但还未确认的相关故障代码,MODE8请求在线测试和控制,MODE9请求车辆控制器相关信息。因此,配置文件和PCODE文件的内容也分为九块,各模块相互独立,在需要时可以单独使用其中几个模块。
PCODE码对照文件包含故障描述、PCODE码以及转换公式(没有转换公式的项可以不填)。由于各个厂商的PCODE码各不相同,因此当针对不同的发动机进行测试时,可以在程序界面上自由切换不同的PCODE文件。
诊断程序界面如图4所示,将程序嵌入到FAI公司的标定软件DataView中进行测试。左侧为指令发送窗口,右侧为返回结果窗口。左侧的指令从Structure文件中读取。
实验验证分为模拟验证和实车验证。模拟验证中,用CANMonitor来模拟故障代码,检测程序能否解析故障码以及对不同厂家间故障码诊断进行切换。模拟验证如图5所示,上半部分为使用CANMonitor手动发送申请指令,下半部分为过滤ID后ECU返回的指令。当模拟发送的信号发出后,软件可以准确识别出返回信息。
图4 软件界面图
图5 模拟验证
实际应用中,以FAI公司的标定软件DataView为基础,将模块嵌入DataView中进行实车测试。验证的方法是将软件接入车辆的CAN总线,检查能否实现通信。通过人为断开一些接插件形成开路故障,以此检测是否能够顺利读出故障。最终,诊断模块成功接入车辆的CAN通信网络,同步完成标定数据的读取和故障的解析。实车验证如图6所示。
图6 实车验证
以LabVIEW为开发平台,设计了基于CAN总线的新型故障诊断系统,完成了以下工作。
① 通过利用LabVIEW库函数及工具包实现与周立功CAN卡的连接,并最终完成与ECU间的CAN通信。通信模块基于ISO 15765-4协议开发,在此基础上完成Structure文件的设计,实现通信数据的自由设置,以满足不同机型的需求。
② 诊断模块不仅适用于LabVIEW开发平台,亦可通过LabVIEW C Generator将其转换为C代码,因此具有较高的通用性。将诊断模块嵌入到FAI公司的标定软件DataView中,证明该模块具有良好的适用性。
③ 通过CANMonitor模拟发送故障代码以及实车验证两种方法,对程序进行了验证。在配置相应PCODE码文件的情况下,该模块能够对不同厂家的发动机进行故障诊断。最终在东风凯普特车型以及其他车型上成功验证了程序的可靠性。
④ 诊断模块可以作为一个子模块嵌入到标定软件中,共享同一个通信道,在进行数据采集的同时实现实时诊断。通过更换相应的文件,可以实现对不同厂家发动机的故障诊断,从而提高发动机标定的工作效率。