当了解什么是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,备注:公司+职务入群。仅限汽车从业人员