汽车UDS诊断之通过标识符读取数据服务(0x22)深度剖析

ReadDataByIdentifier就是通过标识符读取数据服务,这里的标识符(ID)指的是数据标识符,也就是我们经常说的DID

目录

1.英文术语

2.缩写表

3.服务描述

4.请求消息定义

4.1.请求消息子功能定义

4.2.请求消息数据参数定义

5.肯定响应消息定义 

5.1.肯定响应消息数据参数定义

6.否定响应消息定义

6.1.否定响应码

7.服务使用示例

7.1.示例#1-读取单个数据标识符0xF190(VIN码)

7.1.1.步骤1:请求通过标识符读取数据

7.1.2.操作汇总

7.2.示例#2-读取多个数据标识符0x010A和0x0110

7.2.1.步骤1:请求通过标识符读取数据

7.2.2.操作汇总


通过标识符读取数据
服务描述
ReadDataByIdentifier

客户端向服务端请求获取一个或多个DID标识的数据记录值。

1.英文术语

英文术语翻译
ReadDataByIdentifier通过标识符读取数据
ReadDataByIdentifier Request SID

通过标识符读取数据请求SID

ISO14229定义此值为0x22

ReadDataByIdentifier Response SID

通过标识符读取数据响应SID

ISO14229定义此值为(0x22+0x40)

dataIdentifier数据标识符,缩写为DID
dataRecord数据记录

2.缩写表

缩写

解释
SID服务标识符
DID数据标识符
Cvt

约定值

M 强制的

C 有条件的

U 用户选项

NRC否定响应码

3.服务描述

通过标识符读取数据服务就是用来获取数据标识符所对应的数据记录值的,对于服务端来说,客户端可向服务端一次请求一个或多个数据标识符。

通过标识符读取数据服务重点知识:

  • 服务端可以限制请求数据标识符的数量,此数量由车辆制造商系统供应商协商一致
  • 对于某些特定的DID,可以设置在某个安全等级下访问某个诊断会话模式下访问
  • 数据记录值的格式和定义需要车辆制造商系统供应商指定的。

4.请求消息定义

请求消息定义
A_Data字节参数名称Cvt字节值助记符
#1通过标识符读取数据请求SIDM0x22RDBI

#2

#3

DID[]#1 = [

                   字节#1(MSB)

                   字节#2]

M

M

0x00-0xFF

0x00-0xFF

DID_

HB

LB

:::::

#2m

#2m+1

DID[]#m = [

                    字节#1(MSB)

                    字节#2]

U

U

0x00-0xFF

0x00-0xFF

DID_

HB

LB

4.1.请求消息子功能定义

该服务不使用子功能参数。(肯定也没有抑制肯定响应位,因为没有子功能参数) 

4.2.请求消息数据参数定义

请求消息数据参数定义
定义

DID(#1 to #m

此参数标识服务端的数据记录值。譬如:某协议定义了DID = 0xF190,标识了服务端的VIN码。

5.肯定响应消息定义 

肯定响应消息定义
A_Data字节参数名称Cvt字节值助记符
#1通过标识符读取数据响应SIDM0x62RDBIPR

#2

#3

DID[]#1 = [

                   字节#1(MSB)

                   字节#2]

M

M

0x00-0xFF

0x00-0xFF

DID_

HB

LB

#4

:

#(k-1)+4

数据记录[]#1 = [

                          数据#1

                               :

                          数据#k]                     

M

:

U

0x00-0xFF

:

0x00-0xFF

DREC_

DATA_1

      :

DATA_k

:::::

#n-(o-1)-2

#n-(o-1)-1

DID[]#m = [

                   字节#1(MSB)

                   字节#2]

U

U

0x00-0xFF

0x00-0xFF

DID_

HB

LB

#n-(o-1)

#n

数据记录[]#m = [

                           数据#1

                                :

                           数据#o]

U

:

U

0x00-0xFF

:

0x00-0xFF

DREC_

DATA_1

      :

DATA_o

5.1.肯定响应消息数据参数定义

肯定响应消息数据参数定义
定义

DID(#1 to #m

此参数标识服务端的数据记录值,是与上面的请求消息中的DID相同。譬如:某协议定义了DID = 0xF190,标识了服务端的VIN码。

数据记录(#1 to #k/o)

该参数向客户端提供所请求的数据记录值,此数据记录值由车辆制造商定义

6.否定响应消息定义

否定响应消息定义
A_Data字节参数名称Cvt字节值助记符
#1否定响应SIDM0x7FSIDNR
#2通过标识符读取数据请求SIDM0x22SIDRQ
#3否定响应码M0xXXNRC_

6.1.否定响应码

此服务支持的否定响应码
否定响应码描述助记符
0x13

消息长度错误或格式无效

如果消息的长度错误,则应发送此否定响应码。

IMLOIF
0x14

响应过长

如果响应消息的总长度超过底层传输协议的限制(例如,当单个请求中请求多个DID时),则发送该NRC。

RTL
0x22

条件不正确

如果服务端不满足条件,就无法清除储存在服务端中的DTC相关信息,则应返回此NRC。

CNC
0x31

请求超出范围

以下情况下,应发送该NRC:

——设备不支持所请求的DID值;

——当前会话中不支持所请求的DID;

——所请求的动态定义DID尚未分配。

ROOR

0x33

安全访问被拒绝

如果请求读取的DID有一个需要进行安全访问,此时服务端若处于非解锁状态非对应的解锁状态下,则应返回此NRC。

SAD

7.服务使用示例

7.1.示例#1-读取单个数据标识符0xF190(VIN码)

7.1.1.步骤1:请求通过标识符读取数据

譬如:在某个协议中定义,该数据标识符0xF190包含VIN码

通过标识符读取数据请求消息

消息方向

客户端→服务端

消息类型

请求

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

通过标识符读取数据请求SID

0x22

RDBI

#2

#3

DID[]#1 = [

                   字节#1(MSB)

                   字节#2]

0xF1

0x90

DID_B1

DID_B2

通过标识符读取数据响应消息

消息方向

服务端→客户端

消息类型

响应

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

通过标识符读取数据响应SID

0x62

RDBIPR

#2

#3

DID[]#1 = [

                   字节#1(MSB)

                   字节#2]

0xF1

0x90

DID_B1

DID_B2

#4

#5

#6

#7

#8

#9

#10

数据记录[]#1 = [

                          数据#1 = VIN数字1 = "W"

                          数据#2 = VIN数字2 = "0"

                          数据#3 = VIN数字3 = "L"

                          数据#4 = VIN数字4 = "0"

                          数据#5 = VIN数字5 = "0"

                          数据#6 = VIN数字6 = "0"

                          数据#7 = VIN数字7 = "0"]

0x57

0x30

0x4C

0x30

0x30

0x30

0x30

DREC_DATA1

DREC_DATA2

DREC_DATA3

DREC_DATA4

DREC_DATA5

DREC_DATA6

DREC_DATA7

7.1.2.操作汇总

步骤1:请求通过标识符读取数据

图解:

注:超过8字节数据使用首帧和连续帧进行拆解。

操作CAN报文实体
01234567
请求通过标识符读取数据0x030x220xF10x90

   客户端
肯定响应(首帧)0x100x0A0x62

0xF1

0x900x570x30 0x4C 服务端
流控帧0x300x010x0A客户端
肯定响应(连续帧)

0x21

0x300x300x300x30服务端

7.2.示例#2-读取多个数据标识符0x010A和0x0110

7.2.1.步骤1:请求通过标识符读取数据

譬如:在某个协议中定义,

数据标识符0x010A包含发动机冷却液温度、油门位置、发动机转速、进气歧管绝对压力、空气质量流量、车速传感器、气压、负载、怠速控制器、油门踏板位置

数据标识符0x0110包含电池正电压

通过标识符读取数据请求消息

消息方向

客户端→服务端

消息类型

请求

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

通过标识符读取数据请求SID

0x22

RDBI

#2

#3

DID[]#1 = [

                   字节#1(MSB)

                   字节#2]

0x01

0x0A

DID_B1

DID_B2

#4

#5

DID[]#2 = [

                   字节#1(MSB)

                   字节#2]

0x01

0x10

DID_B1

DID_B2

通过标识符读取数据响应消息

消息方向

服务端→客户端

消息类型

响应

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

通过标识符读取数据响应SID

0x62

RDBIPR

#2

#3

DID[]#1 = [

                   字节#1(MSB)

                   字节#2]

0x01

0x0A

DID_B1

DID_B2

#4

#5

#6

#7

#8

#9

#10

#11

#12

#13

#14

数据记录[]#1 = [

                          数据#1 = ECT

                          数据#2 = TP

                          数据#3 = RPM

                          数据#4 = RPM

                          数据#5 = MAP

                          数据#6 = MAF

                          数据#7 = VSS

                          数据#8 = BARO

                          数据#9 = LOAD

                          数据#10 = IAC

                          数据#11 = APP]

0xA6

0x66

0x07

0x50

0x20

0x1A

0x00

0x63

0x4A

0x82

0x7E

DREC_DATA1

DREC_DATA2

DREC_DATA3

DREC_DATA4

DREC_DATA5

DREC_DATA6

DREC_DATA7

DREC_DATA8

DREC_DATA9

DREC_DATA10

DREC_DATA11

#15

#16

DID[]#2 = [

                   字节#1(MSB)

                   字节#2]

0x01

0x10

DID_B1

DID_B2

#17

数据记录[]#2 = [

                          数据#1 = B+]

0x8C

DREC_DATA1

7.2.2.操作汇总

步骤1:请求通过标识符读取数据

图解:

注:超过8字节数据使用首帧和连续帧进行拆解。

操作CAN报文实体
01234567
请求通过标识符读取数据0x050x220x010x0A

0x01

0x10   客户端
肯定响应(首帧)0x100x110x62

0x01

0x0A0xA60x66 0x07服务端
流控帧0x300x020x0A客户端
肯定响应(连续帧SN =1)0x210x500x200x1A0x000x630x4A0x82服务端
肯定响应(连续帧SN =2)0x220x7E0x010x100x8C服务端

到这里我们的0x22服务基本学完了。

以上解释有没有解决大家的疑惑,如果还是觉得有疑惑的地方,欢迎大家踊跃提出,一起分享,共同进步!!!

有CSDN号的也可以帮忙点个关注,我会陆续更新其它UDS服务

  • 34
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论
通过标识符读取数据服务汽车UDS诊断协议中的一种功能,通过该功能可以从汽车的电子控制单元(ECU)中读取特定的数据。其中,标识符0x22表示读取数据服务。 该命令的结构是由一个请求帧和一个响应帧组成。请求帧中包含了要读取数据标识符和数据记录编号等信息。响应帧中则包含了请求的数据。 在进行标识符读取数据服务时,首先需要确定要读取的数据的标识符标识符是通过制定的标准或者车辆制造商定义的,用于唯一标识某个特定的数据。例如,可以通过标识符来读取车速、发动机转速等信息。 一旦确定了要读取的数据的标识符,就可以构建请求帧发送给对应的ECU。ECU接收到请求后,会根据标识符来查找对应的数据,并将其封装在响应帧中返回给诊断设备。 标识符读取数据服务深度剖析需要了解不同的车辆制造商和标准对于标识符和其对应数据的定义。在实际使用中,需要根据特定的车辆型号和诊断设备的要求来选择合适的标识符。此外,不同的ECU可能支持不同的标识符和数据,因此在使用过程中需要根据实际情况进行选择。 总之,通过标识符读取数据服务汽车UDS诊断中的一个重要功能,它能够帮助用户获取车辆的各种数据信息,提供诊断和故障排除的参考依据。在实际应用中,需要根据具体情况选择合适的标识符来读取所需的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心骗小白话

和我一起成长吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值