UDS 诊断 - ReadScalingDataByIdentifier(按标识符读取换算数据)(0x24)服务

本文主要是介绍UDS 诊断 - ReadScalingDataByIdentifier(按标识符读取换算数据)(0x24)服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UDS 诊断服务系列文章目录

诊断和通信管理功能单元
UDS 诊断 - DiagnosticSessionControl(诊断会话控制)(0x10)服务
UDS 诊断 - ECUReset(ECU重置)(0x11)服务
UDS 诊断 - SecurityAccess(安全访问)(0x27)服务
UDS 诊断 - CommunicationControl(通信控制)(0x28)服务
UDS 诊断 - TesterPresent(测试仪保活)(0x3E)服务
UDS 诊断 - AccessTimingParameter(访问计时参数)(0x83)服务
UDS 诊断 - SecuredDataTransmission(受保护的数据传输)(0x84)服务
UDS 诊断 - ControlDTCSetting(控制DTC设置)(0x85)服务
UDS 诊断 - ResponseOnEvent(基于事件响应)(0x86)服务
UDS 诊断 - LinkControl(链路控制)(0x87)服务
数据传输功能单元
UDS 诊断 - ReadDataByIdentifier(按标识符读取数据)(0x22)服务
UDS 诊断 - ReadMemoryByAddress(按地址读取内存)(0x23)服务
UDS 诊断 - ReadScalingDataByIdentifier(按标识符读取换算数据)(0x24)服务

文章目录

  • UDS 诊断服务系列文章目录
  • 一、服务说明
  • 二、请求消息
    • 1.请求消息定义
    • 2. 请求消息数据参数定义
  • 三、肯定响应消息
    • 1. 肯定响应消息定义
    • 2. 肯定响应消息数据参数定义
      • 1. scalingByte 参数定义
  • 四、支持的NRC
  • 五、示例
    • 1. 假设
    • 2. 示例 1:带 DID 0xF190(VIN 号)的 0x24 服务
    • 3. 示例 2:带 DID 0x0105(车速)的 0x24服务
    • 4. 示例 3:带 DID 0x0967 的 0x24 服务


一、服务说明

0x24 服务允许客户端请求服务器中通过一个 DID 所识别的换算数据记录信息。

客户端请求消息包含一个识别服务器所维护的数据记录的 DID 值。dataRecord(数据记录)的格式和定义应由车辆制造商规定,并且可包含模拟输入和输出信号、数字输入很输出信号、内部数据,以及系统状态信息(若服务器支持)。

接收到 0x24 请求后,服务器应访问与指定 DID 关联的换算信息,并以 ReadScalingDataByIdentifier(按标识符读取换算数据)的一个肯定响应传输换算信息。

二、请求消息

1.请求消息定义

字节参数名称字节值
#1 ReadScalingDataByIdentifier(按标识符读取换算数据)请求SID0x24
#2
#3
dataIdentifier[] = [
byte#1(MSB)
byte#2 ]

0x00 - 0xFF
0x00 - 0xFF

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

定义
dataIdentifier(数据标识符)
此参数识别客户端当前锁清秋的服务器数据记录。

三、肯定响应消息

1. 肯定响应消息定义

字节参数名称字节值Cvt
#1 ReadScalingDataByIdentifier(按标识符读取换算数据)请求SID0x64M

#2
#3
dataIdentifier[] = [
byte#1(MSB)
byte#2 ]

0x00 - 0xFF
0x00 - 0xFF
M
M
#4scalingByte#1(第 1 个换算字节)0x00 - 0xFFM

#5
.
.
#(p-1)+5
scalingByteExtension[]#1 = [
scalingByteExtensionParameter#1
.
.
scalingByteExtensionParameter#p ]

0x00 - 0xFF
.
.
0x00 - 0xFF

C1
.
.
C1
. .. .. .. .
#n-rscalingByte#k(第 k 个换算字节)0x00 - 0xFFC2

#n-(r-1)
.
.
#n
scalingByteExtension[]#k = [
scalingByteExtensionParameter#1
.
.
scalingByteExtensionParameter#r ]

0x00 - 0xFF
.
.
0x00 - 0xFF

C1
.
.
C1

C1:此参数的存在性取决于 scalingByte(换算字节)的高效半字节。若 scalingByte 的高效半字节被编码成公式、单位 / 格式或采用 bitMappedReportedWithOutMask(无掩码报告位映射),则必须存在此参数。
C2:此参数的存在性取决于换算信息的编码是否需要多个字节。

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

定义
dataIdentifier(数据标识符)
此参数是请求消息中数据参数 dataIdentifier(数据标识符)的回显。
scalingByte(换算字节)(第 1 个至 第 k 个)
此参数用在 0x24 服务的肯定响应消息中,用以向客户端提供所请求的换算记录值。
scalingByteExtension(换算字节扩展)(第 1 个至第 9 个 / 第 1 个至第 r 个)
此参数用于提供有关带高效半字节的 scalingByte(换算字节)的附加信息。

1. scalingByte 参数定义

下表为换算字节高效半字节参数定义。

高效半字节编码数据类型说明
0x0unSignedNumeric(无符号数字)(第 1 至 4 个字节)
该编码采用通用二进制加权方案并取离散增量步长平均值表示相关数值。一个字节步长为 256;两个字节步长为 65536,依此类推。
0x1SignedNumeric(带符号数字)(第 1 至 4 个字节)
该编码采用二进制补码二进制加权法,并取离散增量步长平均值表示相关数值。一个字节步长为 256;两个字节步长为 65536,依此类推。
0x2bitMappedReportedWithOutMask(无掩码报告位映射)
位映射编码中采用单个位或位组显示状态。有效掩码体现了特定应用程序各位有效性。无掩码报告位映射编码表示参数定义本身不包括有效掩码。单独的 scalingByteExtension(换算字节扩展)需报告有效掩码。
0x3bitMappedReportedWithMask(有掩码报告位映射报告)
位映射编码中采用单个位或位组显示状态。有掩码位映射报告编码表示参数定义本身包括有效掩码。参数定义中表示状态的各位需对应某屏蔽位。该掩码体系拿了特定应用程序各位有效性。该种位映射参数包含各状态字节(表示状态)的有效掩码字节。由于参数定义包含有效掩码,因此,无需单独的 scalingByteExtension(换算字节扩展)。
0x4BinaryCodeDecimal(二进制编码的十进制)
传统二进制编码十进制编码能表示各字节两个数字。其中,上班字节表示最高有效数位(0 - 9),下半字节表示最低有效数位(0 - 9)。
0x5stateEncodedVariable(状态编码变量)(1 个字节)
该编码采用二进制加权方案表示近 256 种不同状态。例如,参数能表示点火开关状态。代码 “00”、“01”、“02” 和 “03” 分别表示熄火、锁定、运行和启动。该种表示方法通常只限于一个字节。
0x6ASCII(美国信息交换标准代码)(各换算字节分别包括 1 至 15 个字节)
传统 ASCII 编码能表示越 128 个标准字符,其中 MSB = logic ‘0’。MSB = logic ‘1’ 能表示其他 128 个自定义字符。
0x7signedFloatingPoint(带符号浮点)
浮点编码适用于采用浮点或科学记数法表示的数据。
0x8数据包
数据包含有大量数据值,各数据包通常对应独特换算方法。但是,其中不含单个数值的换算信息。
0x9公式
使用公式,将原始数据计算为数值。
0xA单位 / 格式
采用单位和格式使数据更方便用户阅读。
注意:若采用了组合式单位 / 格式,如 mV,则 0x24 服务肯定响应需包含各 单位 / 格式某 scalingByte(换算字节)(和 scalingData(换算数据))。
0xBstateAndConnectionType(状态和连接类型)(1 个字节)
这种编码方式尤其适用于输入和输出信号。数据字节中编码信息说明了高级物理布局、电平以及功能状态。建议将本编码方式用于数字输入和输出参数。
0xC - 0xF保留

下表为换算字节低效半字节参数定义。

低效半字节编码数据类型说明
0x0 - 0xFnumberOfBytesOfParameter(参数字节数)
该数值范围规定了参数标识符所引用数据流内数据字节数。根据换算字节确定参数长度,通常以参数标识符(一个或多个字节)开头。若参数标识符后续多个换算字节,则参数标识符引用数据长度为换算字节中低效半字节之和。
例如,VIN 根据单字节参数标识符确定,且后续两个换算字节。计算参数字节长度为 17 数据字节。两个低效半字节可能包含 17 个数据字节组合值。
注意:如果公式或单位 / 格式中换位字节采用高效半字节编码,则该数值为 0x0。

四、支持的NRC

NRC说明
0x13消息长度不正确或格式无效
0x22条件不正确
若不满足服务器的运行条件而无法执行所需的操作,则应发送此 NRC。
0x31请求超过限值
以下情况下,应发送此 NRC:
装置不支持所请求的 DID 值;
装置支持所请求的 DID 值,但指定的 DID 无可用的换算信息。
0x33安全访问被拒绝
若DID 已受保护,并且服务器未处于解锁状态,则应发送此 NRC。

下图为 0x24 服务的否定响应码的处理。
在这里插入图片描述

五、示例

1. 假设

本条规定了为执行 0x24 服务示例需满足的条件。不论服务器处于何种状态,客户端可随时请求 DID 换算数据。

第一则示例描述了与双字节 DID 0xF190(包含单条信息(17 个字符的 VIN 号))关联的换算信息。

第二则示例演示了使用公式和单位标识符指定服务器中的数据变量。

第三则示例举例说明了使用 readScalingDataByIdentifier(按标识符读取换算数据)回传通过使用 readDataByIdentifier(按标识符读取数据)在无掩码的情况下报告的位映射 DID 的支持位(有效性掩码)。

2. 示例 1:带 DID 0xF190(VIN 号)的 0x24 服务

req   24 F1 90
resp  64 F1 90 6F (scalingByte#1 {ASCII,15 个数据字节})62 (scalingByte#2 {ASCII,2 个数据字节})

3. 示例 2:带 DID 0x0105(车速)的 0x24服务

req   24 01 05
resp  64 01 05 01 (scalingByte#1{无符号数字,1 个数据字节})95 (scalingByte#2{公式,5 个数据字节}) 00 (scalingByteExtension#2(第 2 个换算字节扩展){formulaIdentifier = C0 * x + C1})E0 (scalingByteExtension#2(第 2 个换算字节扩展){C0 高字节})4B (scalingByteExtension#2(第 2 个换算字节扩展){C0 低字节}[C0 = 75 * 10P - 2P])00 (scalingByteExtension#2(第 2 个换算字节扩展){C1 高字节})1E (scalingByteExtension#2(第 2 个换算字节扩展){C1 低字节}[C1 = 30 * 10P0P])A1 (scalingByte#3{单位 / 公式,1 个数据字节})30 (scalingByteExtension#3(第 3 个换算字节扩展){单位标识符,km/h)

常数(C0,C1)和单位的解码信息,按照下式计算车速的数据变量:
车速 = (0.75 * x + 30)km/h
式中,‘x’ 是服务器中所保存的实际数据,通过 DID 0x0105 加以识别。

4. 示例 3:带 DID 0x0967 的 0x24 服务

本示例说明了客户端如何解决服务器中经格式编排成在不带有效性掩码的情况下报告的位映射记录的 DID 所支持的位。

下表定义了示例 DID 0x0967。

数据字节说明
#27 - 4未使用
3中速风扇开启
2检测到中速风扇输出故障
1清洗显示器暖风机时间状态未标志
0加油事件阻碍了清洗显示器的怠速测试
#17油箱盖校验指示灯点亮
6检测到油箱盖校验指示灯输出故障
5检测到风扇控制 A 输出故障
4检测到风扇控制 B 输出故障
3检测到高速风扇输出故障
2高速风扇输出启动
1清洗显示器怠速测试(低泄露)准备就绪
0已监测到清洗显示器低泄漏
req   24 09 67
resp  64 09 67 22 (scalingByte#1 {bitMappedReportedWithOutMask,2 个数据字节})03 (scalingByteExtension#1 {dataRecord#1 (第 1 个数据记录)有效性掩码})43 (scalingByteExtension#1 {dataRecord#2 (第 2 个数据记录)有效性掩码})

上述示例假设服务器中此 DID 所支持的位(即包含信息的位)仅为第 1 个字节,第 1 位和第 0 位,以及第 2 个字节,第 6 位,第 1 位和第 0 位。

这篇关于UDS 诊断 - ReadScalingDataByIdentifier(按标识符读取换算数据)(0x24)服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096714

相关文章

关于DNS域名解析服务

《关于DNS域名解析服务》:本文主要介绍关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录DNS系统的作用及类型DNS使用的协议及端口号DNS系统的分布式数据结构DNS的分布式互联网解析库域名体系结构两种查询方式DNS服务器类型统计构建DNS域

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模