统一诊断服务否定响应码应该怎么回
- 适用所有诊断服务的NRC及其优先级
- 适用于带子功能参数的诊断服务的NRC及其优先级
- ISO14229-1中做了具体的NRC判断逻辑描述的诊断服务的NRC优先级
-
- 通过ID写入数据服务(WriteDataByIdentifier, SID 0x2E)所支持的NRC优先级
- 通过ID读取数据服务(ReadDataByIdentifier,SID 0x22)支持的否定响应码优先级
- 清除故障信息服务(ClearDiagnosticInformation, SID 0x14)支持的否定响应码优先级
- 通过ID进行输入输出控制服务(InputOutputControlByIdentifier, SID 0x2F)支持的否定响应码优先级
- 例程控制服务(RoutineControl,SID 0x31)支持的否定响应码优先级
- 请求下载(RequestDownload, SID 0x34)支持的否定响应码优先级
- 请求上传服务(RequestUpload,SID 0x35)支持的否定响应码优先级
- 数据传输服务(TransferData,SID 0x36)支持的否定响应码优先级
- 请求退出传输服务(RequestTransferExit,SID 0x37)支持的否定响应码优先级
上一篇文章 《UDS服务应该支持哪些否定响应码》中介绍了具体的诊断服务应该支持哪些否定响应码。在实际的应用过程中,经常出现同时满足多个否定响应码的情况。但否定响应中只能给出一个否定响应码。这种情况下应该给出哪个否定响应码呢?这就涉及到诊断服务否定响应码判定优先级问题。
在ISO14229-1:2013(E)中,对否定响应的处理过程有详细地说明。
适用所有诊断服务的NRC及其优先级
首先,我们来看Figure 5 – General server response behaviour。
上图的描述可以总结为下表中的NRC优先级。这是判定优先级最高的一组NRC。适用于所有的诊断服务。
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
1 | 0x21 | 可选 服务器正忙于执行已请求的诊断服务,暂时无法执行当前请求的诊断服务时,回复此编码 |
2 | 0xXX | 整车制造商或零部件供应商自定义 |
3 | 0x11 | 强制要求 服务器不支持请求的诊断服务。诊断请求中的服务标识符(Service ID)是服务器不支持的或不能识别的,则回复此编码。 |
4 | 0x7F | 强制要求 诊断请求中的服务标识符(Service ID)在当前的会话下不支持时,回复此编码。 |
5 | 0x33 | 可选 在所请求的诊断服务需要服务器处于解锁状态,但服务器未被解锁时,回复此编码。 |
6 | 0xXX | 整车制造商或零部件供应商自定义 |
观察Figure 5 - General server response behaviour的左下角,可以发现进一步的否定响应判断被分成了两个分支。
适用于带子功能参数的诊断服务的NRC及其优先级
分支一,带子功能参数的诊断服务(0x31服务除外)。常用的带子功能参数的诊断服务如下:
诊断服务标识 Service ID |
诊断服务 Diagnostic Service |
---|---|
0x10 | 诊断会话控制 DiagnosticSessionControl |
0x11 | ECU复位 ECUReset |
0x19 | 读取故障码信息 ReadDTCInformation |
0x27 | 安全访问 SecurityAccess |
0x28 | 通信控制 CommunicationControl |
0x3E | 测试设备在线 TesterPresent |
0x85 | 控制故障码设置 ControlDTCSetting |
这些带子功能的诊断服务,适用于ISO14229-1:2013(E)中Figure 6 - General server response behaviour for request messages with sub-function parameter中描述的处理逻辑。
这部分处理逻辑可以被总结为如下的NRC处理优先级.(优先级从7开始。优先级为1~6的否定响应码请参考适用所有诊断服务的NRC及其优先级。下同。)
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
7 | 0x13 | 强制要求 仅用于判断最小数据长度。诊断请求的数据长度小于2字节时,回复此编码 |
8 | 0x12 | <