统一诊断服务(UDS)否定响应码的判定(NRC优先级)

本文介绍了统一诊断服务(UDS)中否定响应码(NRC)的判定逻辑及优先级,涵盖所有诊断服务通用NRC、带子功能参数服务及特定服务的NRC判定。

统一诊断服务否定响应码的判定


上一篇文章《UDS服务应该支持哪些否定响应码》中介绍了具体的诊断服务应该支持哪些否定响应码。在实际的应用过程中,经常出现否定响应的场景同时满足多个否定响应码的情况。但否定响应中的NRC只能给出一个。那么,这种情况下应该给出哪个否定响应码呢?这就涉及到诊断服务否定响应码判定优先级问题。
在ISO14229-1:2013(E)中,对否定响应的处理过程有详细地说明。

适用所有诊断服务的NRC及其优先级

首先,我们来看Figure 5 – General server response behaviour。
 
上图的描述可以总结为下表中的NRC优先级。这是判定优先级最高的一组NRC。适用于所有的诊断服务。

优先级
Priority
否定响应码
NRC
备注
Notes
10x21可选
服务器正忙于执行已请求的诊断服务,暂时无法执行当前请求的诊断服务时,回复此编码
20xXX整车制造商或零部件供应商自定义
30x11强制要求
服务器不支持请求的诊断服务。诊断请求中的服务标识符(Service ID)是服务器不支持的或不能识别的,则回复此编码。
40x7F强制要求
诊断请求中的服务标识符(Service ID)在当前的会话下不支持时,回复此编码。
50x33可选
在所请求的诊断服务需要服务器处于解锁状态,但服务器未被解锁时,回复此编码。
60xXX整车制造商或零部件供应商自定义

观察Figure 5 - General server response behaviour的左下角,可以发现进一步的否定响应判断被分成了两个分支。
 

适用于带子功能参数的诊断服务的NRC及其优先级

分支一,带子功能参数的诊断服务(0x31服务除外)。常用的带子功能参数的诊断服务如下:

诊断服务标识
Service ID
诊断服务
Diagnostic Service
0x10诊断会话控制
DiagnosticSessionControl
0x11ECU复位
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
70x13强制要求
仅用于判断最小数据长度。诊断请求的数据长度小于2字节时,回复此编码
80x12强制要求
服务器支持诊断请求中的服务标识符(Service ID),但不支持其中的子功能参数时,回复此编码。
90x7E强制要求
诊断请求中服务的子功能参数在当前的会话下不支持时,回复此编码。
100x33可选。
诊断服务的子功能要求的安全等级未解锁时,回复此编码
110x24可选。
诊断服务的子功能需要按照某种顺序依次请求,而当前不满足此条件时,回复此编码。典型的例子是安全访问服务(SID 0x27)
120xXX整车制造商或零部件供应商自定义

ISO14229-1中做了具体的NRC判断逻辑描述的诊断服务的NRC优先级

分支二,ISO14229-1中做了具体的NRC判断逻辑描述的诊断服务。这部分常用的诊断服务如下:

诊断服务标识
Service ID
诊断服务
Diagnostic Service
0x22通过ID读取数据
ReadDataByIdentifier
0x2E通过ID写入数据
WriteDataByIdentifier
0x14清除故障信息
ClearDiagnosticInformation
0x2F通过ID进行输入输出控制
InputOutputControlByIdentifier
0x31例程控制
RoutineControl
0x34请求下载
RequestDownload
0x35请求上传
RequestUpload
0x36数据传输
TransferData
0x37请求退出传输
RequestTransferExit

在ISO14229-1:2013(E)中,对这些服务支持的NRC的判定做了具体说明。这里以通过ID写入数据服务(WriteDataByIdentifier, SID 0x2E)为例。在ISO14229-1:2013(E)的10.7.4章节Figure 21 - NRC handling for WriteDataByIdentifier service中进行了详细的说明。
 
由此图中的描述,可以得出

通过ID写入数据服务(WriteDataByIdentifier, SID 0x2E)所支持的NRC优先级

优先级
Priority
否定响应码
NRC
备注
Notes
70x13强制要求
诊断请求的数据长度小于4字节时,回复此编码
80x31强制要求
服务器不支持请求的DID或请求的DID不支持写入操作时,回复此编码
90x13强制要求
完整的数据长度与预期不一致时,回复此编码
100x33强制要求
此服务要求的安全等级未解锁时,回复此编码
110x22可选。
DID的写入条件不满足时,回复此编码
120x31强制要求
写入的数据无效时,回复此编码
130x72强制要求
数据写入到存储器失败时,回复此编码

参考ISO14229-1:2013(E)中的相关章节,可以得出其它诊断服务的否定响应处理优先级。

通过ID读取数据服务(ReadDataByIdentifier,SID 0x22)支持的否定响应码优先级

优先级
Priority
否定响应码
NRC
备注
Notes
70x13强制要求
诊断请求的数据长度小于4字节时,回复此编码
80x13强制要求
完整的数据长度不符合预期,或请求的DID数量超过服务器支持的最大数量时,回复此编码
90x33强制要求
请求的DID要求的安全等级未解锁时,回复此编码
100x22可选。
读取DID的条件不满足时,回复此编码
120x31强制要求
请求的所有DID都不被服务器支持或在当前的会话下不支持时,回复此编码
130x14强制要求
诊断响应的数据长度超过服务器支持的最大值时,回复此编码

清除故障信息服务(ClearDiagnosticInformation, SID 0x14)支持的否定响应码优先级

优先级
Priority
否定响应码
NRC
备注
Notes
70x13强制要求
数据长度不为4字节时,回复此编码
80x31强制要求
服务器不支持请求中的GroupOfDTC参数时,回复此编码
90x22可选。
当清除DTC的条件不满足时,回复此编码
100xXX整车制造商或零部件供应商自定义
110x72强制要求
向存储器写入数据失败时,回复此编码

通过ID进行输入输出控制服务(InputOutputControlByIdentifier, SID 0x2F)支持的否定响应码优先级

优先级
Priority
否定响应码
NRC
备注
Notes
70x13强制要求
数据长度小于4字节时,回复此编码
80x31强制要求
请求的服务在当前会话下不被支持或请求中的InputOutputControlParameter参数不被支持时,回复此编码
90x13强制要求
完整的数据长度与预期不一致时,回复此编码
100x31强制要求
服务器不支持请求中的ControlState参数或ControlMask参数时,回复此编码
110x33强制要求
如请求的DID需要的安全等级未解锁时,回复此编码
120x22可选
当请求的输入输出控制功能的执行条件不满足时,回复此编码
130xXX整车制造商或零部件供应商自定义

例程控制服务(RoutineControl,SID 0x31)支持的否定响应码优先级

优先级
Priority
否定响应码
NRC
备注
Notes
70x13强制要求
数据长度小于4字节时,回复此编码
80x31强制要求
服务器不支持请求中的例程标识(RID)时,回复此编码
90x33强制要求
请求的例程标识(RID)所需的安全等级未解锁时,回复此编码
100x12强制要求
服务器不支持请求的子功能参数时,回复此编码
110x13强制要求
完整的数据长度不符合预期时,回复此编码
120x31强制要求
服务器不支持请求中的RoutineControlOptionRecord参数时,回复此编码
130x22可选
当请求的例程控制的执行条件不满足时,回复此编码
140x24可选
如下情况下,可回复此编码
- 例程正在执行,在此收到了启动例程控制(StartRoutine)请求
- 例程没有执行,而收到了停止例程控制(StopRoutine)请求
- 收到请求例程控制结果(RequestRoutineResults)的请求时,由于例程没有被执行等原因无法给出执行结果时
150xXX整车制造商或零部件供应商自定义

请求下载(RequestDownload, SID 0x34)支持的否定响应码优先级

优先级
Priority
否定响应码
NRC
备注
Notes
70x13强制要求
诊断请求的数据长度小于5字节时,回复此编码
80x31强制要求
诊断请求中的DataFormatIdentifier参数或AddressAndLengthFormatIdentifier参数无效时时,回复此编码
90x13强制要求
完整的数据长度与预期不一致时,回复此编码
100x31强制要求
诊断请求中的参数MemoryAddress或MemorySize无效时时,回复此编码
110x33强制要求
服务要求的安全等级未解锁时,回复此编码
120x22可选
服务器在接收下载数据的过程中又收到了请求下载服务时,回复此编码
130x70强制要求
服务器由于故障原因不能执行下载时,回复此编码
140xXX整车制造商或零部件供应商自定义

请求上传服务(RequestUpload,SID 0x35)支持的否定响应码优先级

优先级
Priority
否定响应码
NRC
备注
Notes
70x13强制要求
诊断请求的数据长度小于5字节时,回复此编码
80x31强制要求
诊断请求中的参数DataFormatIdentifier或AddressAndLengthFormatIdentifier无效时时,回复此编码
90x13强制要求
完整的数据长度与预期不一致时,回复此编码
100x31强制要求
诊断请求中的参数MemoryAddress或MemorySize无效时时,回复此编码
110x33强制要求
服务要求的安全等级未解锁时,回复此编码
120x22可选。
请求上传数据服务的执行条件不满足时,回复此编码。例如服务器在执行请求上传数据的传输过程中再次收到了请求上传数据服务
130x70强制要求
服务器由于故障原因不能执行下载时,回复此编码
140xXX整车制造商或零部件供应商自定义

数据传输服务(TransferData,SID 0x36)支持的否定响应码优先级

优先级
Priority
否定响应码
NRC
备注
Notes
70x13强制要求
诊断请求的数据长度小于2字节时,回复此编码
80x24强制要求
如下情况,回复此代码
-收到此服务前,服务器未收到请求下载(RequestDownload)或请求上传服务(RequestUpload)
-收到此服务前,服务器收到了请求下载(RequestDownload)或请求上传服务(RequestUpload),并且也已经收到了请求传输的全部数据
90x71强制要求
传输的下载数据长度与之前收到的请求下载(RequestDownload)服务中的参数MemorySize不一致时,回复此编码
100x73强制要求
服务器检测到数据传输的BlockSequenceCounter错误时,回复此编码
110x31强制要求
如下情况,回复此编码
-请求传输的数据长度与之前服务器收到的请求下载(RequestDownload)或请求上传服务(RequestUpload)后给出的肯定响应中的MaxNumberOfBlockLength不一致时(不包括最后一个Block的传输)
-请求传输的数据长度与服务器的存储器数据对齐要求不一致时
120x72可选
服务器在擦除或写入非易失存储器发生错误时,回复此编码
130x92/0x93可选。
服务器的供电电压超出了允许向非易失存储器写入数据的电压范围(供电电压过高或过低)时,回复此编码
140xXX整车制造商或零部件供应商自定义

请求退出传输服务(RequestTransferExit,SID 0x37)支持的否定响应码优先级

优先级
Priority
否定响应码
NRC
备注
Notes
70x24强制要求
如下情况,回复此代码
-收到此服务时,编程过程未完成
-收到此服务前,服务器未收到请求下载(RequestDownload)或请求上传服务(RequestUpload)
80x31可选
请求中的参数无效时,回复此编码
90x13强制要求
诊断请求的数据长度与预期不一致时,回复此编码
100xXX整车制造商或零部件供应商自定义

参考文献
Road vehicles - Unified diagnostic services (UDS) - Part 1: Specification and requirements, Second edition 2013-03-15

<think>好的,用户的问题是关于NRC代码的优先级顺序在IT系统中的情况。首先我需要明确什么是NRC代码。NRC通常指Negative Response Code,在汽车诊断协议如UDS统一诊断服务)中使用,用于表示ECU(电子控制单元)对请求的否定响应。每个NRC代码对应不同的错误类型,比如请求超时、条件不满足等。 接下来,用户提到的优先级顺序,可能是指当多个错误条件同时触发时,ECU如何决定返回哪个NRC代码。根据UDS标准ISO 14229-1,确实存在NRC优先级顺序,以确保诊断系统的一致性和可预测性。 我需要回忆ISO 14229-1中的相关内容。例如,当ECU在处理请求时遇到多个错误,应该优先返回最高优先级NRC。例如,如果请求的格式错误(NRC 13),通常比服务不支持(NRC 11)优先级更高,因为格式错误可能在更早的处理阶段被识别。 同时,用户提到的IT系统可能是指汽车内部网络或诊断系统,所以需要考虑具体应用场景中的实现。不同的汽车制造商可能有自己的实现差异,但一般会遵循标准优先级。 另外,用户之前的引用中有关于AT指令调试网络服务的内容,虽然不直接相关,但可能用户是在处理车载通信模块的诊断问题,所以需要将NRC优先级与网络通信中的错误处理联系起来,确保回答的实用性。 最后,生成相关问题时要围绕NRC的应用场景、具体代码示例、优先级确定方法以及常见错误处理等,帮助用户深入理解。</think>关于NRC(Negative Response Code)代码的优先级顺序,在车载诊断系统(如ISO 14229定义的UDS协议)中,其优先级主要遵循以下规则: ### NRC优先级判定原则 1. **协议层优先** 通信协议相关的错误(如报文格式错误$NRC\_13$)优先级高于应用层错误(如条件不满足$NRC\_22$) 2. **执行阶段顺序** 按照诊断请求处理流程,错误检测顺序决定优先级: $$ \text{格式检查} \rightarrow \text{会话状态检查} \rightarrow \text{安全访问检查} \rightarrow \text{参数有效性检查} $$ 3. **标准推荐顺序** 根据ISO 14229-1标准,典型优先级从高到低为: ``` 1. NRC_13(报文长度错误) 2. NRC_12(子功能不支持) 3. NRC_31(请求超出范围) 4. NRC_22(条件不满足) ``` ### 具体应用示例 当同时触发$NRC\_13$(报文长度错误)和$NRC\_22$(条件不满足)时,系统会优先返回$NRC\_13$,因为格式校验发生在业务逻辑处理之前[^1]。 ### IT系统实现要点 在汽车ECU软件开发中,通常通过状态机实现优先级判断: ```c if (checkMessageLength() == FAIL) return NRC_13; else if (checkSessionState() == FAIL) return NRC_7E; else if (checkSecurity() == FAIL) return NRC_33; else processRequest(); ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值