4. UDS诊断协议在底盘量产中的落地
在底盘量产诊断与EOL测试中,UDS(Unified Diagnostic Services,统一诊断服务)是贯穿研发、试制、量产和售后全生命周期的通信基础。ISO 14229标准定义了服务集、会话模型、安全访问机制以及DTC、例程、IO控制等核心能力,但真正落地到量产场景时,必须结合ECU资源、产线节拍、诊断仪能力和整车网络拓扑进行裁剪与扩展。本节围绕底盘量产中最常用的几类服务,说明它们"是什么、怎么用、量产中如何取舍"。
一、ISO 14229服务集与量产常用子集
ISO 14229-1定义了六大类服务:诊断与通信管理(0x10、0x11、0x27、0x28、0x3E、0x83、0x84、0x85、0x86、0x87)、数据传输(0x22、0x23、0x24、0x2A、0x2C、0x2E、0x3D)、存储数据传输(0x14、0x19)、输入输出控制(0x2F)、例程控制(0x31)、上传下载(0x34~0x38)。底盘量产EOL并不需要全部实现,典型裁剪后的服务子集包括:0x10会话控制、0x11 ECU复位、0x14清除DTC、0x19读取DTC、0x22按DID读数据、0x27安全访问、0x28通信控制、0x2E按DID写数据、0x2F IO控制、0x31例程控制、0x3E保持连接、0x85控制DTC设置。0x23/0x24/0x2A/0x2C/0x34~0x38等内存与下载类服务,在底盘量产EOL中通常被Bootloader刷写流程替代,不纳入常规EOL诊断序列。
裁剪原则有三条:一是产线必须用到的服务必须实现且响应时间可控;二是仅研发或售后使用的服务可保留但不必优化;三是与安全相关的服务(0x27、0x2E、0x31、0x2F)必须实现权限分级,防止误操作改变底盘标定或执行机构状态。
二、会话与安全访问:量产诊断的"门禁"
UDS会话模型由0x10服务切换,默认会话(0x01)只允许读取类服务;编程会话(0x02)用于刷写;扩展会话(0x03)开放写入、例程和IO控制。量产EOL通常流程是:默认会话→扩展会话→安全访问→执行写入/例程/IO→返回默认会话。会话有S3超时(通常5s),超时后自动回默认会话,因此EOL序列中必须周期性发送0x3E保持连接,或在每个服务间控制间隔小于S3。
安全访问0x27采用"种子—密钥"机制:诊断仪发送0x27 01请求种子,ECU返回4字节或8字节随机种子;诊断仪用预置算法计算密钥,发送0x27 02 + 密钥;ECU校验通过后解锁。底盘ECU常见安全等级分为Level 1(标定写入)和Level 2(例程/IO控制),不同等级种子算法不同。量产中密钥算法固化在诊断仪脚本中,不通过明文传输;若连续多次(通常3次)密钥错误,ECU会启动延时锁定(如10s),EOL工位必须处理该异常,避免整线停线。
三、DTC读取与清除:量产质量门禁
DTC(Diagnostic Trouble Code)在底盘量产中是判断装配、标定和功能是否合格的核心依据。读取使用0x19服务,常用子功能:0x02按状态掩码读取DTC数量与列表、0x04读取DTC快照、0x06读取DTC扩展数据、0x0A读取所有支持的DTC。量产EOL最常用0x19 02,状态掩码通常取0x08(confirmedDTC)或0xFF(全部状态),返回格式为:DTC数量(2字节)+ 每个DTC 3字节(高字节+中字节+低字节)+ 状态字节(1字节)。状态字节8个bit分别表示testFailed、testFailedThisOperationCycle、pendingDTC、confirmedDTC、testNotCompletedSinceLastClear、testFailedSinceLastClear、testNotCompletedThisOperationCycle、warningIndicatorRequested。
清除使用0x14服务,请求格式为0x14 + 3字节DTC组,0xFFFFFF表示清除所有DTC。量产中清除后必须再次读取0x19 02确认DTC数量为0,且状态位全部复位,否则判定清除失败。需要注意的是,部分底盘ECU对安全相关DTC(如ESC故障)有"清除后需重新自检"的要求,EOL序列中应在清除后执行一次0x31例程自检,再读取DTC确认。
四、例程控制0x31:EOL功能测试的核心
0x31服务用于启动、停止和查询ECU内部例程,是底盘EOL功能测试的主要手段。请求格式为:0x31 + 子功能(0x01启动、0x02停止、0x03请求结果)+ 2字节例程标识符RoutineIdentifier + 可选参数。响应格式为:0x71 + 子功能 + 例程标识符 + 例程状态字节 + 可选结果。例程状态字节常见值:0x00成功、0x01进行中、0x02失败、0x03超时。
底盘EOL典型例程包括:ESC阀体自检(RoutineID示例0x0201)、EPS电机零点标定(0x0301)、制动踏板行程学习(0x0401)、轮速传感器信号校验(0x0501)。以EPS零点标定为例,诊断仪发送0x31 01 03 01,ECU返回0x71 01 03 01 00表示标定成功;若返回0x71 01 03 01 02,则需检查方向盘是否回正、电机温度是否过高、电压是否在9~16V范围内。量产中每个例程都有明确的执行时间上限(如5s),超时未返回则判定失败并记录工位日志。
五、IO控制0x2F:执行器与信号强制
0x2F服务用于临时控制ECU的输入输出信号,常用于产线验证执行器动作和传感器信号链。请求格式为:0x2F + 控制参数(0x00返回默认、0x01短时调整、0x02调整至默认、0x03短时调整并返回默认)+ 2字节DID + 控制状态 + 控制值。响应为0x6F + 控制参数 + DID + 控制状态。
底盘EOL中,0x2F常用于:强制点亮制动灯(验证灯驱动电路)、强制ESC泵电机运转(验证液压单元)、模拟轮速信号(验证ABS信号链)、强制EPS助力电流(验证电机驱动)。例如,控制制动灯DID 0xF1A0,发送0x2F 03 F1 A0 01 FF,ECU返回0x6F 03 F1 A0 01,表示制动灯已强制点亮。IO控制必须在扩展会话且安全解锁后执行,且多数ECU要求控制值在安全范围内(如泵电机占空比不超过30%),超出范围返回NRC 0x31(requestOutOfRange)。
六、量产场景下的裁剪与扩展
量产裁剪的核心是"够用、快、可追溯"。够用指只实现EOL序列必需的服务;快指响应时间满足产线节拍(通常单条诊断请求响应<50ms,整个EOL序列<30s);可追溯指每条诊断请求和响应都记录到工位日志,包含时间戳、服务ID、DID/RoutineID、结果码。
扩展方面,底盘ECU常增加以下量产专用能力:一是自定义DID,如0xF1F0读取EOL测试结果、0xF1F1读取标定版本、0xF1F2读取产线序列号;二是自定义例程,如0xE001写入车辆配置字、0xE002触发下线自检;三是0x85控制DTC设置,在EOL测试期间关闭非相关DTC记录,避免误报干扰;四是0x28通信控制,在EOL工位关闭非必要报文,降低总线负载。这些扩展必须在CDD/ODX诊断描述文件中明确定义,并与诊断仪脚本、MES系统保持一致。