关于DTC诊断故障码的获取与清除(ISO14229系列之14、19服务)

关于DTC诊断故障码的获取与清除(ISO14229系列之14、19服务)
1、19服务-——读取诊断故障码信息(ReadDTCInformation)
1、01子服务
2、02子服务
3、04子服务
4、06子服务
5、0A子服务
2、14服务-——清除故障信息 (ClearDiagnosticInformation)
总结
1、19服务-——读取诊断故障码信息(ReadDTCInformation)
1、01子服务
        通过状态掩码去查找与其相匹配的故障个数。
        通过该服务诊断仪能够请求ECU中DTC状态与DTC状态掩码相匹配的故障码个数。如果某一个故障码的实际状态位为1,并且DTC状态掩码中的相应位也为1,那么就认为该故障码的状态与DTC状态掩码相匹配(即:如果DTC状态掩码字节与DTC实际状态字节进行逻辑“位与”运算后的结果为非零值,那么两者就相匹配);此时则将故障数+1。如果诊断仪定义了一个状态掩码,其中包含ECU不支持的位,那么ECU仅使用本身支持的位进行处理故障信息。请求格式如下:

收到请求后,ECU的响应报文格式如下:

 关于19 01服务代码部分示例如下(帮助理解,仅供参考):

uint16 DTC_GetDtcCountByStatusMask(uint8 status_mask)               /*按照状态掩码统计ECU中与之匹配的DTC数*/    
{
    uint16 Dtc_count = 0;
    uint8 Record_count;

    for(Record_count = 0; Record_count < DTC_CODE_MAX_NUM; Record_count++)/*检索所有的DTC*/
    {
        if((Dtc_dtc_status_record[Record_count].dtc_status.status_byte & status_mask) != 0)
        {
            Dtc_count++;
    }
    }    
    return Dtc_count;
}

FUNC(void,DCM_CODE) App_Fault_Memory_Read_Number(P2VAR(Dcm_MsgContextType,AUTOMATIC,DCM_APPL_DATA) pMsgContext)
{
    uint16 Counter = 0U;
    uint8  DtcStatus_Temp;
    DtcStatus_Temp = pMsgContext->reqData[DCM_INDEX_2];             /*通过19 01服务第3个字节发送状态掩码;*/
    
    Counter = DTC_GetDtcCountByStatusMask(DtcStatus_Temp);          /*按照状态掩码统计ECU中与之匹配的DTC数(代码如上)*/
    
    pMsgContext->resData[DCM_INDEX_2] = DTCStatusAvailabilityMask;  /*返回ECU支持的状态位*/
    /* Change below data if necessary */
    /* 0x00 ISO15031-6Format,0x01 ISO14229-1Format,0x02 J1939 Format */
    pMsgContext->resData[DCM_INDEX_3] = 0x00U;                      /*返回ECU使用的DTC格式标识符,
                                                                      00:15031-6;01:14229-1;02:J1939*/
    pMsgContext->resData[DCM_INDEX_4] = (uint8)(Counter >> 8U);     /*返回按照状态掩码统计出来的DTC数*/
    pMsgContext->resData[DCM_INDEX_5] = (uint8)(Counter);
    /* Always equals 6, don't change it */
    pMsgContext->resDataLen = 6U;
    DsdInternal_ProcessingDone(pMsgContext);  
}

Ps:DTC状态掩码参数包含8个DTC状态位,其位定义如下:

2、02子服务

        按照定义的状态掩码的形式去查找匹配的故障,将匹配的DTC标识符(3个字节)、DTC状态(1个字节)信息返回。上一小节的01子服务只统计与状态掩码相匹配的DTC个数,02子服务则会将这些匹配的DTC信息返回。请求格式如下:

在这里插入图片描述

收到请求后,ECU的响应报文格式如下:

   关于19 02服务代码部分示例如下(帮助理解,仅供参考):

uint16 DTC_GetDtcByStatusMask(uint8 *p_dtc, uint8 status_mask)  /*按照状态掩码统计ECU中与之匹配的DTC,返回该DTC信息*/
{
    uint16 dtc_count = 0;
    uint8 record_count;

    for(record_count = 0; record_count < DTC_CODE_MAX_NUM; record_count++)
    {
        if((Dtc_dtc_status_record[record_count].dtc_status.status_byte & status_mask) != 0)
        {
            *p_dtc++ = Dtc_dtc_code_data[record_count].dtc_high_byte;
            *p_dtc++ = Dtc_dtc_code_data[record_count].dtc_middle_byte;
            *p_dtc++ = Dtc_dtc_code_data[record_count].dtc_low_byte;
	
            *p_dtc++ = Dtc_dtc_status_record[record_count].dtc_status.status_byte;
            dtc_count++;
        }
    }    
    return dtc_count;
}

FUNC(void,DCM_CODE) App_Fault_Memory_Read_identified_errors(P2VAR(Dcm_MsgContextType,AUTOMATIC,DCM_APPL_DATA) pMsgContext)
{  
    uint16 counter = 0U;
    uint8  DtcStatus_Temp;
    DtcStatus_Temp = pMsgContext->reqData[DCM_INDEX_2];             /*通过19 02服务第3个字节发送状态掩码;*/

    /*按照状态掩码统计ECU中与之匹配的DTC,返回其DTC信息(代码如上)*/
    counter = DTC_GetDtcByStatusMask(&(pMsgContext->resData[DCM_INDEX_3]),DtcStatus_Temp);
   
    pMsgContext->resData[DCM_INDEX_2] = DTCStatusAvailabilityMask;  /*返回ECU支持的状态位*/
    pMsgContext->resDataLen = DCM_INDEX_3 + (counter * 4U);         /*更新响应报文的长度;*/
    DsdInternal_ProcessingDone(pMsgContext);
}


        为了方便找到故障的原因,车厂一般会在诊断调查表中定义一些信息作为快照信息,例如故障的发生时间、电压、行驶里程数、车速等。在对应故障发生时,ECU端要记录发生故障时的快照信息;而04服务就是用于请求指定故障码(DTC)的快照信息,通过查找故障发生时刻的这些数据,来分析故障原因。请求格式如下:

 19服务用于故障码信息的读取;14服务则用于对故障码信息的清除。14服务的操作简单,但关于19服务,包含了比较多的子服务功能,其中,比较常用的子服务如下:

Sub-function    Description
01    reportNumberOfDTCByStatusMask/通过状态掩码报告DTC数量
02    reportDTCByStatusMask/通过状态掩码报告DTC信息
04    reportDTCSnapshotRecordByDTCNumber/获取指定DTC的快照记录
06    reportDTCExtendedDataRecordByDTCNumber/获取指定DTC的扩展数据记录
0A    reportSupportedDTC/获取ECU支持的所有DTC
————————————————
版权声明:本文为CSDN博主「第55号小白鸭」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44536482/article/details/93090417


 

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值