中国汽车工程师之家--聚集了汽车行业80%专业人士 

论坛口号:知无不言,言无不尽!QQ:542334618 

本站手机访问:直接在浏览器中输入本站域名即可 

搜索附件  
汽车工程师之家 附件中心 结构原理专业知识特区 『汽车控制器VCU/BMS/MCU/域控』 UDS 19服务全方面了解,19 01服务w4.jpg
左侧广告
附件中心&附件聚合2.0
For Discuz! X2.5 © hgcad.com

UDS 19服务全方面了解,19 01服务w4.jpg

 

UDS 19服务全方面了解,19 01服务:
当了解什么是DTC状态,什么是快照数据和扩展数据,什么是老化,驾驶循环等概念之后,就可以来详细UDS 19服务。


19 01子服务

UDS 19服务的01子功能是 “根据状态掩码读取 DTC 数量(reportNumberOfDTCByStatusMask)”,即通过该服务让诊断设备获取ECU中与DTC状态掩码相匹配的故障个数。通过向ECU发送带有特定状态掩码的请求,ECU会根据这个掩码来筛选内部存储的DTC,并返回符合条件的DTC数量,帮助诊断人员快速了解特定类型故障的数量情况。如果某一个故障码的实际状态位为1,并且DTC状态掩码中的相应位也为1,那么就认为该故障码的状态与DTC状态掩码相匹配,其具体逻辑是:如果DTC状态掩码与DTC实际状态进行逻辑“位与”运算后的结果为非零值,那么两者就相匹配,此时则将故障数累加1。根据ISO 14229-1,19 01的请求格式如下:


常用的DTC状态掩码值有 0x01(表示当前故障)、0x08(表示历史故障)、0x09(表示当前故障和历史故障)等。比如发送的状态掩码为 0x01,就是请求ECU返回当前存在的故障 DTC的数量。ECU收到请求后,ECU的响应报文格式如下:



其中DTCstatusAvaiabilityMask表示当前ECU支持的状态位,DTCFormatIdentifier表示使用的哪种DTC格式;而DTCCount,需要根据DTC状态掩码和DTC状态匹配情况进行计数统计,其实现代码,如下所示:
/*按照DTC状态掩码统计ECU中与之匹配的DTC数*/uint16 DTC_GetDtcCountByStatusMask(uint8 status_mask)     {uint16 DTC_count = 0;uint8 count;/*遍历所有的DTC*/for(count = 0; count < DTC_CODE_MAX_NUM; count++)    {        /*如果某个DTC的状态掩码和其DTC状态一样,则计数加1*/if((DTC_status_record[count].dtc_status.status_byte & status_mask) != 0)        { DTC_count++;}    }    return DTC_count;}
因此,当ECU进行19 01的正响应,Byte #1和Byte #2是固定的,分别为50(SID+0x40)和01,其余字节实现代码如下所示:
FUNC(void,DCM_CODE) Dcm_ProcessSubFct01(P2VAR(Dcm_MsgContextType,AUTOMATIC,DCM_APPL_DATA) pMsgContext){   uint16 Counter = 0U;   uint8  DTCStatus_Temp;   /*通过19 01服务第3个字节发送状态掩码;*/   DTCStatus_Temp = pMsgContext->reqData[DCM_INDEX_2];    /*按照状态掩码统计ECU中与之匹配的DTC数*/               Counter = DTC_GetDtcCountByStatusMask(DTCStatus_Temp);   /*返回ECU支持的状态位*/             pMsgContext->resData[DCM_INDEX_2] = DTCStatusAvailabilityMask;    /* 如果以下数据按需设置 *//* 0x00 ISO15031-6Format,0x01 ISO14229-1Format,0x02 J1939 Format */   /*返回ECU使用的DTC格式标识符,00:15031-6;01:14229-1;02:J1939*/    pMsgContext->resData[DCM_INDEX_3] = 0x00U;/*返回按照状态掩码统计出来的DTC数*/    pMsgContext->resData[DCM_INDEX_4] = (uint8)(Counter >> 8U);         pMsgContext->resData[DCM_INDEX_5] = (uint8)(Counter);               最后通过一个例子再说明:比如需要了解ECU历史故障的情况,那么会请求:19 01 08;假设有4个DTC,其状态分别为01,08, 09, 0F,则ECU正响应为59 01 FF 00 00 03.为什么是这样?

    从Byte #3为0xFF,说明DTC状态bit0-bit7都支持;

    从Byte #4为0x00,说明使用ISO15031-6所定义的DTC格式;

    从Byte #5和#6为0x0003,因为DTC掩码为0x08,与DTC状态进行位与,则 01&08=0,08&08=1, 09&08=1, 0F&08=1,结果为1则加1,最终计数为3。

以上就是关于19 01服务的简单介绍,以后以别人家的实例数据来结束:



source: uds 0x19 0x14 服务总结_uds 19服务回复 (本图ECU样件支持的状态掩码为第0位和第3位)



创作不易,欢迎点赞再看收藏关注!

汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车从业人员
UDS 19服务全方面了解,19 01服务w4.jpg
         同一主题附件:
    UDS 19服务全方面了解,19 01服务w1.jpg
    UDS 19服务全方面了解,19 01服务w2.jpg
    UDS 19服务全方面了解,19 01服务w3.jpg
    UDS 19服务全方面了解,19 01服务w4.jpg

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 22-2-2025 12:35 , Processed in 0.412028 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.