本文主要是介绍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(按标识符读取换算数据)请求SID | 0x24 |
#2 #3 | dataIdentifier[] = [ byte#2 ] | 0x00 - 0xFF 0x00 - 0xFF |
2. 请求消息数据参数定义
定义 |
---|
dataIdentifier(数据标识符) 此参数识别客户端当前锁清秋的服务器数据记录。 |
三、肯定响应消息
1. 肯定响应消息定义
字节 | 参数名称 | 字节值 | Cvt |
---|---|---|---|
#1 | ReadScalingDataByIdentifier(按标识符读取换算数据)请求SID | 0x64 | M |
#2 #3 | dataIdentifier[] = [ byte#2 ] | 0x00 - 0xFF 0x00 - 0xFF | M M |
#4 | scalingByte#1(第 1 个换算字节) | 0x00 - 0xFF | M |
#5 . . #(p-1)+5 | scalingByteExtension[]#1 = [ . . scalingByteExtensionParameter#p ] | 0x00 - 0xFF . . 0x00 - 0xFF | C1 . . C1 |
. . | . . | . . | . . |
#n-r | scalingByte#k(第 k 个换算字节) | 0x00 - 0xFF | C2 |
#n-(r-1) . . #n | scalingByteExtension[]#k = [ . . 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 参数定义
下表为换算字节高效半字节参数定义。
高效半字节编码 | 数据类型说明 |
---|---|
0x0 | unSignedNumeric(无符号数字)(第 1 至 4 个字节) 该编码采用通用二进制加权方案并取离散增量步长平均值表示相关数值。一个字节步长为 256;两个字节步长为 65536,依此类推。 |
0x1 | SignedNumeric(带符号数字)(第 1 至 4 个字节) 该编码采用二进制补码二进制加权法,并取离散增量步长平均值表示相关数值。一个字节步长为 256;两个字节步长为 65536,依此类推。 |
0x2 | bitMappedReportedWithOutMask(无掩码报告位映射) 位映射编码中采用单个位或位组显示状态。有效掩码体现了特定应用程序各位有效性。无掩码报告位映射编码表示参数定义本身不包括有效掩码。单独的 scalingByteExtension(换算字节扩展)需报告有效掩码。 |
0x3 | bitMappedReportedWithMask(有掩码报告位映射报告) 位映射编码中采用单个位或位组显示状态。有掩码位映射报告编码表示参数定义本身包括有效掩码。参数定义中表示状态的各位需对应某屏蔽位。该掩码体系拿了特定应用程序各位有效性。该种位映射参数包含各状态字节(表示状态)的有效掩码字节。由于参数定义包含有效掩码,因此,无需单独的 scalingByteExtension(换算字节扩展)。 |
0x4 | BinaryCodeDecimal(二进制编码的十进制) 传统二进制编码十进制编码能表示各字节两个数字。其中,上班字节表示最高有效数位(0 - 9),下半字节表示最低有效数位(0 - 9)。 |
0x5 | stateEncodedVariable(状态编码变量)(1 个字节) 该编码采用二进制加权方案表示近 256 种不同状态。例如,参数能表示点火开关状态。代码 “00”、“01”、“02” 和 “03” 分别表示熄火、锁定、运行和启动。该种表示方法通常只限于一个字节。 |
0x6 | ASCII(美国信息交换标准代码)(各换算字节分别包括 1 至 15 个字节) 传统 ASCII 编码能表示越 128 个标准字符,其中 MSB = logic ‘0’。MSB = logic ‘1’ 能表示其他 128 个自定义字符。 |
0x7 | signedFloatingPoint(带符号浮点) 浮点编码适用于采用浮点或科学记数法表示的数据。 |
0x8 | 数据包 数据包含有大量数据值,各数据包通常对应独特换算方法。但是,其中不含单个数值的换算信息。 |
0x9 | 公式 使用公式,将原始数据计算为数值。 |
0xA | 单位 / 格式 采用单位和格式使数据更方便用户阅读。 注意:若采用了组合式单位 / 格式,如 mV,则 0x24 服务肯定响应需包含各 单位 / 格式某 scalingByte(换算字节)(和 scalingData(换算数据))。 |
0xB | stateAndConnectionType(状态和连接类型)(1 个字节) 这种编码方式尤其适用于输入和输出信号。数据字节中编码信息说明了高级物理布局、电平以及功能状态。建议将本编码方式用于数字输入和输出参数。 |
0xC - 0xF | 保留 |
下表为换算字节低效半字节参数定义。
低效半字节编码 | 数据类型说明 |
---|---|
0x0 - 0xF | numberOfBytesOfParameter(参数字节数) 该数值范围规定了参数标识符所引用数据流内数据字节数。根据换算字节确定参数长度,通常以参数标识符(一个或多个字节)开头。若参数标识符后续多个换算字节,则参数标识符引用数据长度为换算字节中低效半字节之和。 例如,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。
数据字节 | 位 | 说明 |
---|---|---|
#2 | 7 - 4 | 未使用 |
3 | 中速风扇开启 | |
2 | 检测到中速风扇输出故障 | |
1 | 清洗显示器暖风机时间状态未标志 | |
0 | 加油事件阻碍了清洗显示器的怠速测试 | |
#1 | 7 | 油箱盖校验指示灯点亮 |
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)服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!