【零基础学习UDS诊断测试】——NRC 否定响应码

在这里插入图片描述

从0开始学习CANoe使用
从0开始学习车载测试
相信时间的力量
星光不负赶路者,时光不负有心人。

在这里插入图片描述

1.概述

NRC(Negative Response Code)是UDS(统一诊断服务)中用于表示ECU(电子控制单元)拒绝执行诊断请求的代码。每个NRC都有一个唯一的含义,用来指明诊断请求错误的原因。

否定响应格式如下:

请求: ID:长度+SID+子功能
否定响应:ID:长度+7F+SID+NRC

举例:

### UDS诊断协议中的否定响应码UDS(统一诊断服务)协议中,当ECU接收到不符合预期的服务请求时,会返回一个否定响应(Negative Response Code, NRC)[^2]。这些NRC提供了关于为何特定命令未能成功执行的具体原因。 #### 否定响应码的意义 每种NRC都有其独特的意义,帮助开发者理解失败的原因并采取适当措施: - **0x10 - General Reject**: 表明所请求的服务未被实现或识别。 - **0x11 - Service Not Supported In Active DTCs**: 请求的服务对于当前激活的故障代码(DTC)不可用。 - **0x12 - Sub Function Not Supported/Invalid Format**: 子功能不受支持或是参数格式错误。 - **0x13 - Busy Repeat Request**: ECU忙于其他操作;建议重试该请求。 - **0x21 - Request Out Of Range**: 参数超出允许范围。 - **0x22 - Security Access Denied**: 安全访问拒绝,通常是因为安全种子/密钥验证失败。 - **0x31 - Request Sequence Error**: 发送序列有误,可能需要重新初始化通信过程。 - **0x78 - Test Failed Since Last Clear of DTCs**: 自上次清除以来检测到新的故障条件。 以上仅列举了一些常见的NRC例子[^4]。 #### 处理方法 针对不同的NRC,可以采用如下策略来解决问题: - 对于`General Reject`(0x10),确认目标设备确实实现了所需的功能,并检查发送的数据包是否有语法上的问题。 - 如果遇到`Service Not Supported In Active DTCs`(0x11),则需查阅车辆制造商提供的文档了解哪些服务适用于现有的DTC状况。 - 当面对`Sub Function Not Supported/Invalid Format`(0x12)时,仔细核对输入参数是否遵循了正确的定义规格。 - 遇见`Busy Repeat Request`(0x13),可设置合理的等待时间后再尝试相同的指令。 - 若是`Request Out Of Range`(0x21),调整参数使其处于合法区间内。 - `Security AccessDenied`(0x22)意味着必须先完成必要的认证步骤才能继续下一步的操作。 - 关于`Request SequenceError`(0x31),按照规定的顺序依次调用各个函数可能会有所帮助。 - 而对于`TestFailedSinceLastClearofDTCs`(0x78),应该调查最近发生的事件以找出潜在的问题根源。 通过上述方式能够有效地解析和应对来自ECU的各种负面反馈信息,从而提高系统的稳定性和可靠性。 ```python def handle_nrc(nrc_code): responses = { 0x10: "GeneralReject", 0x11: "ServiceNotSupportedInActiveDTCs", 0x12: "SubFunctionNotSupportedOrInvalidFormat", 0x13: "BusyRepeatRequest", 0x21: "RequestOutOfRange", 0x22: "SecurityAccessDenied", 0x31: "RequestSequenceError", 0x78: "TestFailedSinceLastClearOfDTCs" } if nrc_code in responses: print(f"NRC {hex(nrc_code)} means: {responses[nrc_code]}") else: print("Unknown NRC code.") handle_nrc(0x12) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值