目标:学习SAE1939-73中的DM1,尤其是多包故障的传输规则
一、基本概念
SAE1939-73即CAN总线J1939协议的应用层-诊断
符号缩写的含义
DM1 诊断信息1,当前故障码
DM2 诊断信息2,历史故障码
DM3 诊断信息3,历史故障码的清除/复位
DM4 诊断信息4,停帧参量
DM5 诊断信息5,诊断准备就绪
DM6 诊断信息6,持续监视系统测试结果
DM7 诊断信息7,指令非持续监视测试
DM8 诊断信息8,非持续监视系统测试结果
DM9 诊断信息9,氧传感器测试结果
DM10 诊断信息10,非持续监视系统测试标志符识别支持
DM11 诊断信息11,当前故障码清除/复位
DM12 诊断信息12,发送排放相关的当前故障码
DM13 诊断信息13,停止启动广播
DTC 诊断故障代码
FTP 联合测试程序
MIL 故障指示灯
NA 不支持
PID 参数标志符(SAE J1578 或SAE J1979)
OBDⅡ 第二代车载诊断系统
DM14 内存存取请求
DM15 内存存取响应
DM16 二进制数据转换
DM17 引导载入数据
DM18 数据安全性
DM19 标定信息
DM20 监视工作比率
DM21 MIL 激活时的行程距离
EDC 错误检测和/或校准
EDCP 错误检测和/或校准参数
FMI 故障模式指示器
MA 内存存取
PG 参数组
OC 出现次数
SPN 可疑参数编号
二、 DTC(诊断故障代码)
一种用以识别故障类型、相关故障模式以及它的发生次数的4 字节数值。
诊断故障代码(DTC)由4 个独立域构成,这4 个部分是:
这些独立的参数不是一个单独的数,而是一组描述故障的信息。
DTC | ||||||||||||||||||||||||||||||||
字节3 SPN的低8位有效位 (第8位位最高有效位) | 字节4 SPN的第2字节 (第8位位最高有效位) | 字节5 SPN高3位有效位与FMI有效位 (第8位为SPN的最高有效位及第5位为FMI的最高有效位) | 字节6 | |||||||||||||||||||||||||||||
SPN | FMI | CM | OC | |||||||||||||||||||||||||||||
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
SPN是发生故障的参数编号,FMI是发生故障的类型(具体查表SAE J1939-73 附录A),
CM是SPN转换序列,OC为本故障的发生次数。当故障第一次发生时,OC加1,如果故障一直存在,OC不累加,当故障成为先前发生的故障后,故障再次发生时,OC累加1。故障取值为0~126,即使大于126时,OC也保持126。
CM(SPN Conversion Method,SPN转化方法)
定义DTC对齐方式。值为“0”表示“Structure of a DTC”模式4的对齐方式;
如果值为“1”,则必须区分是标准曾经定义过的3种方式之中的哪一种。
诊断故障代码实例
三、DM1(激活状态的诊断故障代码)
激活状态的故障码,包含指示灯状态,一列诊断代码以及当前激活状态诊断代码的发生次数。
DM1属于广播类型,每秒广播一次,其他当接收到PGN 59904参数请求指令时响应,DM1为数据传输类型。
一旦有 DTC 成为激活的故障,就有DM1 消息会被传输,并在之后处于正常的每秒仅一次的更新速度。当不止一个激活的DTC 存在时,这个参数组将会要求使用“多包传输”参数组。
3.1 故障指示灯
只用于传达排放相关的故障代码信息。当有一个排放相关的故障代码处于激活状态时才被点亮。
红色停止灯,用于传达整车出现严重故障,必须停车检修的故障代码信息。
琥珀色警告灯,用于传达告知车辆系统出现问题,但不须立即停车检修的故障代码信息。
保护灯,用于传达一种代码信息,提示告知车辆系统出现问题且极有可能不是相关电路子系统引起的故障。
3.2 单帧报文
DM1:激活状态的故障诊断代码,PNG=0xFECA,发送速率:1s
举例ID:0x 18 FE CA 00
优先级 | R | DP | PF | PF | SA | 数据区(8字节) | ||||
3位 | 1位 | 1位 | 8位 | 8位 | 8位 | 1 | 2 | 3-6 | 7 | 8 |
6 | 0 | 0 | FE | CA | 00 | 00 | FF | DTC | FF | FF |
注:数据区1字节为故障灯状态,故障为严重则点亮红灯,一般点亮淡黄灯,无故障为00。
3.3 多帧报文
首先发送TP.CM_BAM(Transport Protocol-Connection Management_Broadcast Announce Message)广播连接报文;
接着发送TP.DT(Transport -Protocol_Data Transfer)多包传输报文载体,具体操作:将数据分包,每七个字节为一包,每包的第一个字节为该报文的编号(SN),剩余字节放数据,最后一包未用完的字节,全置0xFF。
(1)发送TP.CM_BAM广播报文,PGN=0xECFF
举例ID:0X 18 EC FF 00
优先级 | R | DP | PF | PF | SA | 数据区(8字节) | |||||||
3位 | 1位 | 1位 | 8位 | 8位 | 8位 | 1 | 2-3 | 4 | 5 | 6 | 7 | 8 | |
6 | 0 | 0 | EC | FF | 00 | 20 | LSB | MSB | FF | 8LSB | 2ND | 8MSB | |
ID:0X 18 EC FF 00 | 控制字 | 数据字节数 | 数据帧数 | 保留 | 数据的PGN |
对于DM1,PGN=0xFECA
Byte6 | Byte7 | Byte8 | |
DM1 | CA | FE | 00 |
(2)发送TP.DT数据报文,PGN=0xEBFF
举例ID:0x 18 EB FF 00
激活的故障代码DM1,发送的故障码有两部分组成,假设,故障灯为a, DTC为b,c,d,e等四个字节。多个故障码时,打包的顺序是a b c d e b c d e….。如果最后一个报文中数据字节不到7位,则填充0X FF。
优先级 | R | DP | PF | PF | SA | 数据区(8字节) | ||||
3位 | 1位 | 1位 | 8位 | 8位 | 8位 | 1 | 2 | 3 | 4-7 | 8 |
6 | 0 | 0 | EB | FF | 00 | SN=1 | 故障灯 | DTC1 | DTC2字节1 |
SN为数据帧序号,SN=1表示数据报文的第一帧。
优先级 | R | DP | PF | PF | SA | 数据区(8字节) | ||
3位 | 1位 | 1位 | 8位 | 8位 | 8位 | 1 | 2-4 | 5-8 |
6 | 0 | 0 | EB | FF | 00 | SN=2 | DTC2字节2-4 | DTC3 |
优先级 | R | DP | PF | PF | SA | 数据区(8字节) | ||
3位 | 1位 | 1位 | 8位 | 8位 | 8位 | 1 | 2-? | |
6 | 0 | 0 | EB | FF | 00 | SN=n | DTCm | FF |
举例,发动机存在2个激活的故障码(FMI,SPN)分别为(2898,20)、(3597,3)
当OC=1时,
DTC1: 52 0B 14 01
DTC2: 0D 0E 03 01
如果单帧发送,0x18FECA41:00 FF AC F3 E1 01 30 F3 E3 01
显然超过单帧数据包数量,需要采用多帧发送,
数据位10个字节(2个DTC=8个字节+故障灯=2个字节),分为两个数据包,
对于DM1,PGN=0xFECA
起始帧:0x18ECFF00
20 0A 00 02 FF CA FE 00
第一包数据帧:0x18EBFF00
01 00 FF 52 0B 14 01 0D
第二包数据帧:0x18EBFF00
02 0E 03 01 FF FF FF FF
参考资料
SAE_J1939-73中文