uds 诊断服务码具体格式
时间: 2025-07-24 11:01:39 浏览: 6
### UDS 诊断协议服务码格式规范
#### 服务请求格式
在 ISO14229 中,UDS 请求消息由多个字节组成。第一个字节总是表示服务 ID (SID),用于标识所请求的服务类型[^1]。
对于大多数常规服务,SID 是一个单字节值,范围从 `0x10` 到 `0x7F` 或者 `0x80` 到 `0xFF`。前者代表请求报文中的正向请求,后者则通常用来指示响应报文中对应的肯定或否定回应[^3]。
#### 数据长度编码(DLC)
紧随其后的字段是数据记录(Data Record),它可能包含额外的数据参数,具体取决于特定的服务需求。某些情况下,这些附加数据前会有一个或多个人工指定的数据长度计数器来说明后续跟随了多少有效载荷字节数量。
#### 肯定响应格式
当 ECU 接收到有效的请求并成功处理之后,将会发送回一条肯定应答消息。这条回复同样以原始 SID 加上固定偏移量的形式作为开头——即如果接收到的是读取数据识别符的命令 (`0x22`) ,那么返回时就会变成 `0x62`= `0x22 + 0x40` 。这种模式适用于所有标准服务调用[^2]。
#### 否定响应格式
假如出现了错误情况,则ECU将构建一个NRC(negative response code)类型的拒绝答复包。该结构的第一位依旧是原生SID加上十六进制数值'40'(十进制64),后面跟着的就是具体的错误原因代码,比如未知子功能(0x11).
```python
def is_valid_service_id(sid):
"""验证是否为合法的服务ID"""
return isinstance(sid, int) and ((0x10 <= sid <= 0x7F) or (0x80 <= sid <= 0xFF))
def get_positive_response_sid(request_sid):
"""计算对应肯定响应的服务ID"""
if not is_valid_service_id(request_sid): raise ValueError('Invalid Service ID')
return request_sid + 0x40 if request_sid < 0x80 else request_sid - 0x40
```
阅读全文
相关推荐



















