APP下载

基于SAE J1939协议的故障诊断系统开发

2020-10-12张帆姚胜华顾祖飞

湖北汽车工业学院学报 2020年3期
关键词:诊断仪控件指示灯

张帆,姚胜华,顾祖飞

(湖北汽车工业学院 汽车工程学院,湖北 十堰442002)

汽车电子在车辆上的广泛应用,不仅促进了车辆的自动化和智能化,还使得汽车性能有较大的提升,但相应汽车故障种类也越来越多,难以排查。当电控系统出现问题时,如何快速准确锁定故障、缩短客户等待时间、降低客户损失,是汽车制造商无法回避的问题,这对故障诊断系统的通用性提出了更高的要求。因此建立能够快速确定故障的诊断系统也是汽车制造公司提高竞争力的一种途径。

1 SAE J1939故障诊断报文

SAE J1939 协议的故障代码通过故障诊断报文DM(diagnostic message)传输,DM 由指示灯MIL和诊断故障码DTC组成,其中指示灯位置处于DM数据场的第1~2 字节,在SAE J1939 协议中的故障诊断DM协议中已定义的故障指示灯、琥珀色警告灯、红色停止灯、保护灯的位置分别处于第1 字节的7~8位、5~6位、3~4位、1~2位[1];第2字节是协议预留给用户自定义任务灯状态。故障诊断码DTC(diagnostic trouble code)由4个字节组成,包含可疑参数编码SPN(suspect parameter number,19位)、故障模式标志FMI(failure mole identifier,5 位)、可疑参数码的转换方式CM(conversion method,1 位)及记录故障发生次数OC(occurrence count,7位)。具体位置如图1所示。

要实现基于SAE J1939 的客车故障诊断系统的开发,需要对诊断报文进行相应的解析。

1)可疑参数编号SPN 是19位的值,与特定元素组件或ECU 中的相关参数对应。SAE J1939 协议将初始的511个SPN进行了设定,并且制定编号520192~524287为用户可自定义可疑参数。

2)故障模式标志5 位FMI 定义SPN 所识别的子系统中发现的故障类型,如表1所示,FMI和SPN及故障发生次数OC组成已知的故障诊断代码。

图1 DTC结构图

表1 故障模式标志定义

3)故障发生次数7 位OC 记录某个故障发生的次数,最大值为126。当OC溢出时,其值保持为126,当OC未知时,其域所有位上的值均为1。

4)故障指示灯 故障指示灯传达相关故障代码信息;红色指示灯表示车辆出现严重问题,必须停车检修;琥珀色指示灯表示车辆系统出现问题,但不需要立即停车检修;保护指示灯告知车辆系统出现的问题极有可能不是相关电路子系统引发[2]。

2 故障诊断码通信方式

当车辆有多个电子控制单元(ECU)且各ECU检测到故障时,会发送相应诊断报文,而报文来源、类型、位置根据故障报文ID 来确定。如诊断报文ID为0x18FECA30,其中0x18代表优先级为6,0x30代表报文的源地址,0xFECA 是实时故障报文DM1的可疑参数编号。实时故障采用SAE J1939 协议中DM1 报文格式发送,历史故障采用DM2 报文格式发送,故障数据清除采用DM3报文格式发送[3]。

1)DM1 故障码传输方式 故障码有3 种情况:无故障码、单故障码和多故障码。在无故障码、单故障码的情况下,以1 帧报文发送,报文的发送格式如图2所示。当有多个故障码同时发送时,则需要发送1个8字节的头报文,信息包括后面发的报文数、指示灯状态及故障码的字节数,后面发的报文第1个字节都是报文序列,如果最后1个数据帧的故障报文没有填满,则用0xFF 来填充。多故障报文格式如图3所示。

图2 单故障报文格式

图3 多故障报文格式

2)DM2 故障代码传输方式 故障诊断系统需要1个请求历史故障报文,控制器才能发送DM2报文。DM2故障报文发送方式和DM1相同。

3)DM3 故障代码传输方式 故障诊断系统需要诊断仪向控制器发送1 个请求历史故障码清除报文,清除历史故障报文DM2,若控制器清除完毕会发送1个肯定报文DM3,若失败则会发送1个否定报文DM3[4]。

3 故障诊断系统设计

3.1 故障诊断系统的功能

文中基于CANoe 平台开发故障诊断系统,以客车控制器为诊断对象,通过CAN网络进行通讯,从而将诊断信息通过诊断仪显示出来。利用CANoe的Panel Designer 来设计诊断仪的面板,故障面板如图4所示。系统功能如下:1)接收和发送DM1报文,并将报文内容显示在诊断仪上;2)发送DM2请求报文和清除报文,并将DM2 报文内容及其是否清除报文显示在诊断仪上;3)发送软硬件请求报文,并将其信息显示在诊断仪上。

3.2 DBC数据库和系统变量建立

完成诊断仪功能的基础是建立相应的数据库,DBC 数据库是故障诊断系统进行报文发送和报文解析的基础。根据功能需求及项目提供的信息建立相应的报文,建立的报文如表2所示。在CANoe中建立相应的系统变量,将系统变量与后续故障诊断面板的相关控件相互关联,方便在脚本文件中完成控件的信息交互。

3.3 故障诊断系统的CAPL程序设计

1)单故障诊断报文接收 用数组DTC 来存放故障信息,当接收到DM1 时,利用DTC 将DM1 和FMI、SPN 对应,从而确定DM1 类型;然后将1 和故障报文OC值分别赋给DTC和OC[5];最后将DTC和OC 值赋给相关的系统变量。对于单故障报文来讲,诊断仪对DM1 和DM2 的接收方式是相同的。具体单故障报文接收流程如图5所示。

图4 故障面板的设计

表2 报文信息

图5 单故障报文接收逻辑图

2)多故障诊断报文接收 DM1 和DM2 的多故障诊断报文ID 相同,所以用是否需要发送请求故障码才能接收故障报文来区分DM1和DM2。由于多故障报文的故障数不确定,所以要先确定故障个数,根据头报文获得的故障码字节数和原始数据字节包括2 个字节的指示灯状态。具体多故障诊断报文接收流程如图6所示。

3)请求报文发送 在CANoe 设计的故障面板中,请求报文的发送由按钮控件来控制。按下按钮控件时,控件所连接的环境变量Request 的值为1,释放时值为0,这个动作触发2次环境事件,因此在发送报文请求报文时,第1次触发环境事件诊断仪发送请求报文,第2次触发则不发送。

4)故障报文发送 发送报文采用DM1_mul 格式进行发送,CANoe 根据SAE J1939协议将其拆分成多包报文。报文需要根据诊断仪界面上选择的故障周期性发送,因为DM1的报文发送周期为1 s,所以设置时间事件的触发周期为1 s,并在事件中再次设置时间事件,使其循环触发从而达到周期发送的目的。进入时间事件后先将诊断仪界面上选择的故障记录下来,判断当前故障数,进行不同处理,发送处理后的报文,具体流程如图7所示。

图6 多故障诊断报文接收逻辑图

图7 发送故障报文逻辑图

4 基于C#的诊断界面生成

目前整车上每个控制系统都需要配备单独的诊断仪,诊断仪分为通用类和专用类。在Visual Studio 2013 环境运用C#语言设计开发故障面板、系统变量文件和对应的CAPL 文件、cfg 文件、stcfg文件和BPM 文件生成工具,通过读取DTC 信息来生成相应的故障面板和对应的CAPL文件、系统变量文件、cfg 文件、stcfg 文件及BPM 文件,从而实现一键生成故障诊断系统的功能。

由于需要通过读取DTC 的Excel 获取故障名称、SPN、FMI、故障类别、控制器地址等信息,Excel格式如表3所示,读取DTC信息流程如图8所示。

表3 控制器故障码信息

图8 Excel读取流程图

根据现有DTC 信息改变故障面板的故障名称,在现有CAPL程序中修改SPN、FMI及OC,产生新的故障面板、对应的CAPL程序、DBC文件、系统变量文件、cfg文件、stcfg文件及BMP文件。这些文件的生成逻辑大致相同,文中仅介绍CAPL文件和面板文件的生成。

1)CAPL 文件生成 在设计故障诊断程序之前考虑了故障诊断的通用性问题,所以将与故障诊断码相关的常量都用变量来表示,可根据CAPL程序的格式和内容将新的DTC 信息的SPN、FMI、OC 等转换为CAPL中的变量进行定义,从而完成相应的CAPL 程序替换,新生成的CAPL 程序以CAN 文件的格式产生。在其相关转换生成过程中,如何划分SPN的低、中、高位成为难点,流程图如图9所示。

图9 SPN高、中、低位划分流程图

2)Panel 文件的生成 为控制Panel上各控件的属性,建立各控件的类,其中的属性以变量形式进行定义,以上述故障面板为模板,根据模板来定义各控件的大小和属性。按照上述故障面板来做此故障诊断面板,根据现有DTC 信息改变故障面板static text中的内容,改变控件与环境变量之间的链接。生成的故障面板文件以xvp格式保存,故障面板文件通过CANoe的Panel Designer进行编辑。

5 故障诊断系统的测试

图10 测试现场图

通过VN1640A将2台电脑相连,其中1台用来发送故障报文,另外1 台负责接收故障报文,对故障诊断系统进行测试工作,验证生成故障诊断系统在CANoe中的功能。图10为测试现场。将DTC信息导入故障诊断系统生成工具生成相应的故障面板文件、CAPL 文件、系统变量文件及DBC 文件。将4个文件关联在CANoe中运行,并通过发送故障报文的电脑将表3中的故障码发送出去,让接收故障报文的电脑进行接收,从而完成故障诊断系统的测试工作。收发报文验证效果如图11~12所示。

图11 生成文件关联后在CANoe中的运行

图12 收发报文测试

6 结论

根据SAE J1939 协议简要分析了DM 故障报文,根据相应的功能需求,利用CANoe 平台编写了CAPL 程序、制作了故障面板。为满足故障面板的通用性,以Visual Studio 2013 集成开发环境,利用C#语言编写了故障诊断生成程序,方便读取以固定格式储存DTC 信息的Excel 表格,生成相应的CAPL 文件、DBC 文件、面板文件及系统变量文件、BMP文件,重新搭建类似的诊断系统。

故障诊断系统生成工具根据存储DTC 信息的Excel 表一键生成所需的故障诊断系统,缩短了故障诊断系统的开发时间,降低了故障系统的开发门槛。自动生成的故障诊断系统减少了人为因素产生的错误,提高了运行可靠性;因其获悉对应车辆的故障诊断信息就可运行,同样适用于其他车型。

猜你喜欢

诊断仪控件指示灯
日立EUB 8500E彩色超声诊断仪的维修与升级
基于.net的用户定义验证控件的应用分析
一闪一闪亮晶晶浅析笔记本身上的指示灯
关于.net控件数组的探讨
李剑锋:用技术进步促进诊断仪在汽车维修中的应用
马纯栋:维修技术人员应提高诊断仪的利用率
蔡鹏:优质诊断仪为现代汽修打开便利之门
上海大众POLO充电指示灯点亮
2013年波罗车充电指示灯异常点亮
基于嵌入式MINIGUI控件子类化技术的深入研究与应用