尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

UDS诊断服务-19服务

UDS诊断服务-19服务 一、19 服务是什么为什么它是诊断的第一入口0x19 的作用只有一句话按需读取 ECU 中存储的 DTC诊断故障码及其相关信息。当 ECU 检测到异常时传感器短路、执行器卡滞、通信丢失……它会做三件事生成标准化的 DTC如 P0301 1 缸失火记录故障状态位当前激活已确认等待清除可选地记录关联数据——快照故障发生瞬间的运行数据、扩展数据老化计数、发生次数等。19 服务就是把这些信息标准化读出来的接口。它定义了怎么请求和怎么反馈让诊断仪可以跨品牌、跨 ECU 类型地读取故障数据。先澄清两个流行误解⚠️误解 1当前故障和历史故障是两个不同的子功能。不是。UDS 里没有读取当前故障码或读取历史故障码的专用子功能。区分当前和历史靠的是状态掩码statusMask的比特位组合——同一个子功能 0x02 配不同 statusMask读出来的范围就不同。⚠️误解 2以太网下 ECU 能返回 DTC 文本描述如P03011 缸失火。不能。UDS 响应里只有数值DTC 编号、状态字节、原始数据不含任何文本字符串。DTC 的文字描述存储在诊断仪本地的数据库ODX/CDD里不是 ECU 返回的。二、子功能全景标准定义了 29 个常用的是这 8 个ISO 14229-12020/2023 版为 0x19 定义了0x01–0x1D 共 29 个子功能。全部列出不现实下面按使用频率给出完整速查表子功能标准名称一句话说明频率0x01reportNumberOfDTCByStatusMask按状态掩码统计匹配的 DTC数量★★★0x02reportDTCByStatusMask按状态掩码读取匹配的 DTC列表 状态字节最常用★★★★★0x03reportDTCSnapshotIdentificationByDTCNumber按 DTC 号查询有哪些快照记录号★0x04reportDTCSnapshotRecordByDTCNumber按 DTC 号 快照记录号读取故障快照★★★0x05reportDTCStoredDataByDTCNumber按 DTC 号读取存储数据★0x06reportDTCExtendedDataRecordByDTCNumber按 DTC 号 记录号读取扩展数据老化/计数/时间★★★0x07reportNumberOfDTCBySeverityMaskRecord按严重度掩码统计数量★0x08reportDTCBySeverityMaskRecord按严重度掩码读取 DTC★0x09reportSeverityInformationOfDTC读取指定 DTC 的严重度信息★0x0AreportSupportedDTC读取 ECU支持的全部 DTC出厂固有能力★★0x0BreportFirstTestFailedDTC首次 testFailed 的 DTC★0x0CreportFirstConfirmedDTC首次 confirmed 的 DTC★0x0DreportMostRecentTestFailedDTC最近一次 testFailed 的 DTC★0x0EreportMostRecentConfirmedDTC最近一次 confirmed 的 DTC★0x0FreportMirrorMemoryDTCByStatusMask镜像存储 DTC按状态掩码★0x14reportDTCFaultDetectionCounter读取 DTC 故障检测计数器★0x15reportDTCWithPermanentStatus读取永久 DTC法规强制0x14 服务清不掉★★★0x16reportDTCBySeverityMaskRecord带扩展严重度相关扩展★0x17reportUserDefMemoryDTCByStatusMask用户自定义内存 DTC★0x18reportUserDefMemoryDTCSnapshotRecordByDTCNumber用户自定义内存快照★0x19reportSupportedDTCExtDataRecordByDTCNumber支持的 DTC 扩展数据★0x1AreportSupportedDTCByStatusMask按状态掩码读支持的 DTC★0x1BWWHSOBDReportDTCByStatusMaskWWH-OBD排放法规专用★0x1CWWHOBDReportDTCWithPermanentStatusWWH-OBD排放法规专用★0x1DWWHOBDReportDTCBySeverityMaskRecordWWH-OBD排放法规专用★⚠️ 网上资料最常见的三处张冠李戴把0x04说成读取历史故障码——它是读快照把0x06说成读取永久故障码——它是读扩展数据永久 DTC 是0x15把0x08说成读取故障快照——它是按严重度掩码读 DTC。另外0x03、0x05 未使用也是错的——0x03 和 0x05 在 2020 版标准中都有定义。三个核心概念的关系DTC 本体编号 状态字节 ├── 快照Snapshot / Freeze Frame故障发生瞬间的运行数据转速、水温、车速… │ → 用 0x04 读取 ├── 扩展数据Extended Data老化计数、发生次数、故障出现/消失时间… │ → 用 0x06 读取 └── 永久状态Permanent排放法规要求清不掉 → 用 0x15 读取三、报文格式逐子功能拆解通用规则请求第 1 字节SID 0x19请求第 2 字节子功能码响应第 1 字节0x59 0x19 0x40响应第 2 字节回显子功能码DTC 编号一律 3 字节这是 UDS 与 KWP2000 的关键区别KWP 是 2 字节statusMask 一律 1 字节不是 2 字节。3.1 子功能 0x01reportNumberOfDTCByStatusMask统计数量请求19 01 statusMask 3 字节 示例19 01 FF 统计所有状态的 DTC 响应59 01 statusMask DTCFormatIdentifier DTCCount 高 DTCCount 低 示例59 01 FF 00 00 02 共 2 个匹配的 DTCDTCFormatIdentifier0x00 ISO 15031-6SAE J20120x01 ISO 14229-10x02 SAE J1939-73 等DTCCount 是 2 字节无符号整数。3.2 子功能 0x02reportDTCByStatusMask读 DTC 列表——最常用请求19 02 statusMask 3 字节 示例19 02 FF 读所有状态的 DTC 19 02 01 只读 testFailed1 的即当前激活 19 02 08 只读 confirmedDTC1 的 响应59 02 statusMask DTCFormatIdentifier [DTC 3字节 statusOfDTC 1字节] × N 示例59 02 FF 00 00 03 01 09 1 个 DTC0x000301 P0301状态 0x09关键点没有显式的DTC 数量字节——数量由响应总长度推算N (总长度 - 4) / 4每个 DTC 占4 字节3 字节编号 1 字节状态不是 3 字节网上常见的2 字节 DTC 掩码 0xFFFF是KWP2000 的遗留概念在 UDS 中不存在。3.3 子功能 0x04reportDTCSnapshotRecordByDTCNumber读快照请求19 04 DTC 3字节 snapshotRecordNumber 5 字节 示例19 04 00 03 01 01 读 P0301 的第 1 组快照 19 04 00 03 01 FF FF 读所有快照记录 响应59 04 DTC 3字节 statusOfDTC [snapshotRecordNumber 快照数据] × N快照数据的内容哪些 DID、什么顺序由 OEM 定义查诊断规范如果该 DTC 没有快照ECU 可能返回空数据或 NRC 0x31。3.4 子功能 0x06reportDTCExtendedDataRecordByDTCNumber读扩展数据请求19 06 DTC 3字节 extendedDataRecordNumber5 字节 示例19 06 00 03 01 01 读 P0301 的第 1 组扩展数据 19 06 00 03 01 FE FE 读所有扩展数据记录 19 06 00 03 01 FF FF OEM 自定义 响应59 06 DTC 3字节 statusOfDTC [extendedDataRecordNumber 扩展数据] × N扩展数据典型内容故障发生次数occurrence counter、老化计数aging counter、最近一次故障时间等记录号和内容格式由 OEM 定义。3.5 子功能 0x15reportDTCWithPermanentStatus读永久 DTC请求19 15 2 字节无额外参数 响应59 15 DTCFormatIdentifier [DTC 3字节] × N 示例59 15 00 00 03 01 1 个永久 DTCP0301永久 DTC 是排放法规强制的0x14 服务清不掉只有故障真实修复、相关监测器重新通过后ECU 才自动清除没有永久 DTC 时响应只有 3 字节59 15 formatId。3.6 子功能 0x0AreportSupportedDTC读支持的 DTC 全集请求19 0A 2 字节 响应59 0A DTCFormatIdentifier [DTC 3字节 statusOfDTC 1字节] × N返回的是 ECU出厂固有能力——它能检测哪些 DTC这里的 statusOfDTC 通常全为 0x00因为不是实际故障状态。四、DTC 状态位8 位定义必须记准statusOfDTC 是 1 字节 8 位每一位都有标准定义Bit掩码名称含义00x01testFailed本检测周期测试失败≈当前存在10x02testFailedThisOperationCycle本运行周期内曾 testFailed20x04pendingDTC待确认 DTC30x08confirmedDTC已确认存储≈已存储40x10testNotCompletedSinceLastClear自上次清除后测试未完成50x20testFailedSinceLastClear自上次清除后曾 testFailed60x40testNotCompletedThisOperationCycle本运行周期测试未完成70x80warningIndicatorRequested请求点亮警告灯当前故障vs历史故障的正确区分目标statusMask 用法说明当前激活的故障19 02 01bit0 1testFailed已确认但当前未检测到历史19 02 08或19 02 09再筛选 bit00bit3 1 且 bit0 0所有故障19 02 FF全掩码等待清除后重新检测的19 02 10bit4 1⚠️ 网上资料常见的状态位错误0x02 历史激活——错bit1 是 testFailedThisOperationCycle0x04 已存储——错已存储是bit30x08confirmedDTC把状态位简化成0x01 当前、0x02 历史、0x04 存储三个值——这是对标准的错误简化。实例解析响应59 02 FF 00 00 03 01 0959 肯定响应02 子功能FF statusMask 回显00 DTCFormatIdentifierDTC 0x000301 →P03011 缸失火status 0x09 0x01 0x08 testFailed confirmedDTC→ 当前激活且已确认存储。五、DTC 编号格式3 字节别写成 2 字节项目KWP2000旧UDSISO 14229-1DTC 编码长度2 字节3 字节P0301 的十六进制0x03 0x010x00 0x03 0x01statusMask2 字节1 字节3 字节 DTC 与 OBD DTC 字符串的对应关系0x000301 → P03011 缸失火 0x001001 → B1001车身控制模块内部故障 0x00C123 → C0123底盘类 0x00U073 → U0073网络通信类⚠️ 原文把 P0301 写成 2 字节0x03 0x01这是 KWP2000 的格式。在 UDS 里一律 3 字节否则报文长度就不对ECU 会报 0x13。六、标准操作流程从读码到定位以车辆亮故障灯排查当前故障为例1. 19 01 FF 统计 DTC 数量快速判断有没有故障 → 59 01 FF 00 00 02 2 个 2. 19 02 FF 读取所有 DTC 列表 → 59 02 FF 00 00 03 01 09 P0301testFailed confirmed 00 05 22 01 P0522testFailed 3. 19 04 00 03 01 FF 读 P0301 的快照故障瞬间的转速、水温… → 59 04 00 03 01 09 01 快照数据 4. 19 06 00 03 01 FE 读 P0301 的扩展数据发生次数、老化计数… → 59 06 00 03 01 09 01 扩展数据 5. 根据 DTC 快照 扩展数据定位故障 → P0301 快照显示高转速 → 检查 1 缸点火线圈/火花塞 6. 修复后19 02 01 确认 testFailed 的 DTC 消失 → 59 02 01 00 无匹配 DTC 7. 14 FF FF FF 清除已修复的 DTC见 14 服务文章 8. 19 15 确认无永久 DTC 残留 → 59 15 00 无永久 DTC要点快照和扩展数据与具体 DTC 绑定读取时必须携带 3 字节 DTC 编号清除前先用 19 服务备份清掉的数据无法通过 UDS 恢复修复验证用19 02 01只看 testFailed比19 02 FF更聚焦。七、NRC 速查表NRC标准名称典型场景处理0x11serviceNotSupportedECU 不支持 0x19极罕见查规范0x12subFunctionNotSupported请求了 ECU 不支持的子功能如低成本 ECU 不支持 0x08换子功能0x13incorrectMessageLengthOrInvalidFormat报文长度不对如 statusMask 写成 2 字节检查帧长度0x31requestOutOfRangeDTC 编号不存在、快照记录号超范围核对参数0x33securityAccessDeniedOEM 加了安全锁少见0x19 通常是低权限操作先做 27 服务0x7FserviceNotSupportedInActiveSession当前会话不允许少见切换会话0x22conditionsNotCorrect通用条件不满足检查前提条件0x78requestCorrectlyReceived-ResponsePending已收到请稍候不要重发等最终响应高频误读提醒0x11 是服务不支持不是子功能不支持——子功能不支持是0x120x81 是 rpmTooHigh与存储器损坏无关0x78 不是资源不可用是请稍候的握手信号正确姿势是等待。八、传输层CAN 与 DoIP 没有功能差异老规矩澄清一遍DTC 在任何传输层都是 3 字节statusMask 都是 1 字节。CAN 单帧8 字节装19 02 FF3 字节请求绰绰有余响应在任何传输层都只有数值不含文本描述。DTC 的文字说明在诊断仪本地数据库里多 DTC 响应超过单帧容量时CAN 用 ISO 15765-2 多帧传输DoIP 用 TCP 分段——这是传输层的事与应用层格式无关标准编号标准内容ISO 14229-1应用层服务定义本文主体ISO 14229-2会话层服务ISO 14229-3UDS on CANISO 14229-5UDS on IPISO 13400DoIP基于 IP 的诊断传输ISO 15765-2CAN 传输层多帧九、实战 Checklist✅ 读码顺序先19 01数量→19 02列表→19 04快照→19 06扩展数据✅ DTC 一律 3 字节statusMask 一律 1 字节✅ 区分当前/历史靠 statusMask 的 bit 组合不靠子功能号✅ 永久 DTC 用19 15读0x14 清不掉是法规设计✅ 清除前用 19 服务备份修复验证用19 02 01❌ 不要期待响应里有 DTC 文本描述❌ 不要把 0x04 当读历史故障、0x06 当读永久 DTC、0x08 当读快照❌ 不要写 2 字节 DTC 掩码——那是 KWP2000。十、总结19 服务的正确画像子功能丰富标准定义 29 个日常用 0x01/0x02/0x04/0x06/0x15 五个就覆盖 90% 场景格式统一DTC 3 字节、statusMask 1 字节、响应无文本——跨传输层一致状态位是关键8 位定义必须记准当前 vs 历史靠 bit 组合而非子功能号快照和扩展数据与 DTC 绑定读取时必须携带 3 字节 DTC 编号。一句话记住19 02 FF 读列表19 04 读快照19 06 读扩展19 15 读永久——这就是 19 服务的实战四件套。本文与《彻底搞懂 UDS 14 服务》构成故障诊断闭环19 服务是读14 服务是清先读后备份再清清完再验证。两篇连读效果更佳。
返回列表