12.3 读取DTC信息(0x19)服务
12.3.1 服务描述
12.3.1.1 一般描述
此服务允许客户端从任何服务器或车辆内的服务器组读取服务器驻留的诊断故障代码 (DTC) 信息的状态。除非特定子功能另有要求,否则服务器应返回所有 DTC 信息(例如与排放相关的和非排放相关的信息)。此服务允许客户端执行以下操作:
- 检索与客户端定义的 DTC 状态掩码匹配的 DTC 数量;
- 检索与客户端定义的 DTC 状态掩码匹配的所有 DTC 列表;
- 检索特定功能组内与客户端定义的 DTC 状态掩码匹配的 DTC 列表;
- 检索所有具有“永久 DTC”状态的 DTC;
- 检索与客户端定义的 DTC 关联的 DTCSnapshot 数据(有时称为冻结帧):DTC 快照是与 DTC 关联的特定数据记录,存储在服务器的内存中。DTC 快照的典型用途是在检测到系统故障时存储数据。DTC 快照将充当系统故障发生时数据值的快照。存储在 DTC 快照中的数据参数应与 DTC 相关联。DTC 特定的数据参数旨在简化技术人员的故障隔离过程;
- 检索支持客户端定义的 DTCExtDataRecordNumber 的特定 DTCExtendedDataRecord 的所有 DTC 列表;
- 从 DTC 内存中检索与客户端定义的 DTC 和状态掩码组合关联的 DTCExtendedData。DTCExtendedData 包含与 DTC 关联的扩展状态信息。
DTCExtendedData 包含 DTC 参数值,这些值在请求时已被识别。DTCExtendedData 的典型用途是存储与 DTC 相关的动态数据,例如:
- DTC B1 故障指示器计数器,用于传送 OBD 系统在故障处于活动状态时运行的时间量(发动机运行小时数);
- DTC 发生计数器,用于计算已报告“测试失败”的驾驶循环次数;
- DTC 老化计数器,用于计算自上次故障失败以来的驾驶循环次数,不包括测试未报告“测试通过”或“测试失败”的驾驶循环;
- OBD 专用计数器(例如,如果驾驶循环可以在无故障模式下执行,则计算“检查发动机”灯熄灭前的剩余驾驶循环次数);
- 上次发生的时间(等等);
- 测试失败计数器,用于计算报告的“测试失败”次数,如果验证分几个步骤执行,则可能计算其他计数器;
- 未完成测试计数器,计算自测试最近完成以来的驾驶循环次数(即自测试报告“测试通过”或“测试失败”以来);
- 检索与客户端定义的严重性掩码匹配的 DTC 数量;
- 检索与客户端定义的严重性掩码记录匹配的 DTC 列表;
- 检索客户端定义的 DTC 的严重性信息;
- 检索服务器支持的所有 DTC 的状态;
- 检索服务器失败的第一个 DTC;
- 检索服务器内最近失败的 DTC;
- 检索服务器确认的第一个 DTC;
- 检索服务器内最近确认的 DTC;
- 检索所有当前“预失败”DTC,这些 DTC 已被检测为“待处理”或“已确认”,或尚未被检测为“待处理”或“已确认”;
- 从 DTC 内存中检索与客户端定义的 DTCExtendedData 记录状态相关联的 DTCExtendedData;
- 从用户定义的 DTC 内存中检索与客户端定义的 DTC 状态掩码匹配的 DTC 列表;
- 检索客户端定义的 DTC 掩码的用户定义的 DTC 内存 DTCExtendedData 记录数据;
- 从用户定义的 DTC 内存中检索客户端定义的 DTC 掩码的用户定义的 DTC 内存 DTCSnapshotRecord 数据;
- 检索客户端定义的 DTCReadinessGroupIdentifier 的 DTC 信息。
此服务使用 SubFunction 来确定客户端请求的诊断信息类型。以下子条款提供了有关每个 SubFunction 参数的更多详细信息。
此服务使用以下术语:
- 启用标准:服务器/车辆制造商/系统供应商特定标准,用于控制服务器实际执行特定内部诊断的时间。
- 测试通过标准:服务器/车辆制造商/系统供应商特定条件,定义被诊断的系统是否在正常、可接受的操作范围内正常运行(例如,不存在故障,诊断的系统被归类为“OK”)。
- 测试失败标准:服务器/车辆制造商/系统供应商特定故障条件,定义被诊断的系统是否未通过测试。
- 确认故障标准:服务器/车辆制造商/系统供应商特定故障条件,定义被诊断的系统是否确实存在问题(已确认),保证将 DTC 记录存储在长期内存中。
- 发生计数器:由某些服务器维护的计数器,用于记录给定 DTC 测试报告唯一测试故障发生的实例数。
- 老化:某些服务器评估每个内部诊断的过去结果以确定是否可以从长期记忆中清除已确认的 DTC 的过程,例如在无故障循环次数达到校准值的情况下。
给定的 DTC 值(例如 0x080511)不得在对 readDTCInformation 的肯定响应中报告多次,但读取 DTCSnapshotRecords 除外,其中响应可能包含同一 DTC 的多个 DTCSnapshotRecords。
当使用分页缓冲区处理读取 DTC(尤其是对于 SubFunction = reportDTCByStatusMask)时,创建响应时 DTC 的数量可能会减少。在这种情况下,响应应填充 DTC 0x000000 和 DTC 状态 0x00。客户端应将这些 DTC 视为响应消息中不存在。
重要提示 - 服务器和客户端应满足 8.7 中规定的请求和响应消息行为。
12.3.1.2 检索与客户端定义的状态掩码匹配的 DTC 数量(SubFunction = 0x01 reportNumberOfDTCByStatusMask)
客户端可以通过发送此服务的请求(将 SubFunction 设置为 reportNumberOfDTCByStatusMask)来检索与客户端定义的状态掩码匹配的 DTC 数量。对此请求的响应包含 DTCStatusAvailabilityMask,它指示服务器为掩码目的而支持的 DTC 状态位。在 DTCStatusAvailabilityMask 之后,响应包含 DTCFormatIdentifier,它报告有关 DTC 格式和编码的信息。DTCFormatIdentifier 后面是 DTCCount 参数,它是一个 2 字节无符号数字,包含基于客户端提供的状态掩码的服务器内存中可用的 DTC 数量。
12.3.1.3 检索与客户端定义的状态掩码匹配的 DTC 列表(子功能 = 0x02 reportDTCByStatusMask)
客户端可以通过发送将子功能字节设置为 reportDTCByStatusMask 的请求来检索满足客户端定义的状态掩码的 DTC 列表。此子功能允许客户端请求服务器报告所有“testFailed”或“confirmed”或“etc.”的 DTC。
评估应按如下方式进行:服务器应在客户端请求中指定的掩码与服务器支持的每个 DTC 相关的实际状态之间执行按位逻辑 AND 运算。除了 DTCStatusAvailabilityMask 之外,服务器还应返回 AND 运算结果非零的所有 DTC(即 (statusOfDTC & DTCStatusMask) != 0)。如果客户端指定的状态掩码包含服务器不支持的位,则服务器应仅使用其支持的位来处理 DTC 信息。如果服务器中没有符合客户端请求中指定的掩码标准的 DTC,则在肯定响应消息中的 DTCStatusAvailabilityMask 字节之后不应提供任何 DTC 或状态信息。
客户端成功发出 ClearDiagnosticInformation 请求后,应清除 DTC 状态信息(有关服务端接收到 ClearDiagnosticInformation 服务请求时 DTC 状态位处理的进一步描述,请参阅 D.2 中的 DTC 状态位定义)。
12.3.1.4 检索 DTCSnapshot 记录标识 (SubFunction = 0x03 reportDTCSnapshotIdentification)
客户端可以通过发送此服务的请求并将 SubFunction 设置为 reportDTCSnapshotIdentification 来检索所有捕获的 DTCSnapshot 记录的 DTCSnapshot 记录标识信息。服务器应返回所有存储的 DTCSnapshot 记录的 DTCSnapshot 记录标识信息列表。服务器在单个 DTCSnapshot 记录的响应消息中放置的每个项目都应包含一个 DTCRecord [包含 DTC 编号(高、中、低字节)] 和 DTCSnapshot 记录编号。如果为单个 DTC 存储了多个 DTCSnapshot 记录,则服务器应在响应中为每次发生放置一个项目,对每次发生使用不同的 DTCSnapshot 记录编号(用于以后检