• 【车载开发系列】UDS诊断---读取数据($0x22)


    【车载开发系列】UDS诊断—读取数据($0x22)

    一.概念定义

    该服务的英文简称为ReadDataByIdentifier 。
    根据ISO14119-1标准中所述,诊断服务22主要用于Client向Server(ECU)通过DID的方式读取相关的数据。这些数据可以输入输出的数字信号,模拟信号,内部数据以及其他的系统状态信息。作为诊断服务种的基础服务,可以简单理解为就是一个用于读取ECU数据的外部接口,可实时获取软件内部的相关的状态信息。概括起来就是诊断工具读取数据标识符对应的数据记录。

    二.报文格式

    0x22服务用于读did,客户端请求格式为 “22+did”,服务端肯定响应为“62+DID+数据”,否定响应为“7f+22+NRC码”
    当客户端发送22+F186这个请求时,服务端肯定会返回当前的会话状态,
    回复“62+F186+(01 or 02 or 03)”

    1)请求

    这里的MSB也是DID的值,在这里可以看到,读取数据服务$22是支持一条指令取得多个DID信息的。
    在这里插入图片描述

    2)肯定响应

    这里的MSB也是DID的值,譬如:某协议定义了DID = 0xF190,那么这里的MSB就是0xF1和0x90;而此时Record就是服务端的VIN码
    在这里插入图片描述

    3)否定响应

    否定响应SID+通过标识符读取数据请求SID+否定响应码在这里插入图片描述

    1. 如当尝试读取F190的DID值且当前车速条件不满足,此时Client发送诊断指令"22 F1 90"请求Server读取数据,Server将会回复“7F 22 22”来告诉请求者当前读取数据的条件不满足,请再次检查读取该DID的条件。
    2. 当发送报文长度或者格式不对时,则Server会回复"7F 22 13";
    3. 当诊断请求的DID太多导致超出了传输层的限定时,则Server会回复”7F 22 14“;
    4. 当诊断请求DID不存在或者在当前Session中不支持时,则Server就会回复“7F 22 31”;
    5. 当Server在发生复位前处于security lock状态,那么此时Server则会回复"7F 22 33"

    三.应用场景

    1. 读取当前ECU的序列号,版本号等;
    2. 标定成功后读取内部标定结果等;
    3. 读取当前ECU所处在的Session,内部状态,Snapshot Data等;
    4. 其他需要读取内部相关参数的场合;
    5. 内部测试时需要取得相关测试用状态和数据的场合

    四.注意事项

    1. 特别需要注意的是22诊断并不存在Subfunction。
    2. 不光存在单个DID的读取,还可以多个DID读取,而且读取DID的个数是不受到限制的。
    3. 绝大多数情况下,Server针对Client的请求都会给到正响应,比如发生重启前需确保整车处于安全状态,如引擎熄火,车速不能超过3km/h等,或者为了防止不按照诊断请求格式进行请求,那么Server需要通过某种方式来告诉Client执行不成功的原因在哪里以便于调查问题直至得到正响应。
      因此ISO14229-1针对所有的诊断服务提供了一种统一的诊断负响应的诊断格式:7F +SID + NRC。

    五.DID参数定义

    逻辑上,参数数据标识符DID代表了一个对象或者是多个对象的集合。此参数可从服务器的内存中获取。如果数标识符经过了服务动态定义数据标识符的动态定义,则既存在于固定内存中,也能存储在随机存取存储器RAM当中。
    一般来说,数据定义符能够在含0x22,0x2E和0x2F在内的多个诊断服务请求中使用,数据标识符还可以用于各种诊断服务的响应中。
    例如在0x19服务的子功能readDTCSnapshotRecordByDTCNumber(按照DTC编号读取DTC快照)的肯定响应中。
    动态定义的数据标识符除外,虽然ECU未定义此标识符,但客户端使用服务0x2C(动态定义数据标识)可对其进行定义。
    重要
    无论数据标识符用于哪个服务,在固定的ECU当中,该数据标识符始终应仅代表一个对象。即具有固定大小、意义等的固定对象。

    字节值说明描述
    0x0000-0x00FFISOSAEReservedISOSAE已保留
    0x0100-0xA5FFVehicleManufacturerSpecific由车辆制造商规定
    0xA600-0xA7FFReservedForLegislativeUse针对法律用途保留的值
    0xA800-0xACFFVehicleManufacturerSpecific由车辆制造商规定
    0xAD00-0xAFFFReservedForLegislativeUse针对法律用途保留的值
    0xF180BootSoftwareIdentificationDataIdentifier启动软件识别数据标识符
    0xF181applicationSoftwareIdentificationDataIdentifier应用软件识别的数据标识符
    0xF182applicationDataIdentificationDataIdentifier应用程序数据识别标识符
    0xF183bootSoftwareFingerprintDataIdentifier启动软件指纹的数据标识符
    0xF184applicationSoftwareFingerprintDataIdentifier应用软件指纹数据标识符
    0xF185applicationDataFingerprintDataIdentifier应用程序数据指纹标识符
    0xF186ActiveDiagnosticSessionDataIdentifier活动诊断会话的数据标识符:报告服务器中活动诊断会话,由DiagnosticSessionType定义
    0xF187vehicleManufacturerSparePartNumberDataIdentifier车辆制造商零配件编号数据标识符:编码格式为15 Byte ASCII,引用了车辆制造商的零配件编号
    0xF188vehicleManufacturerECUSoftwareNumberDataIdentifier车辆制造商ECU软件编号的数据标识符:用于引用车辆制造商ECU的软件编号,由车厂定义
    0xF189vehicleManufacturerECUSoftwareVersionNumberDataIdentifier车辆制造商ECU软件版本号的数据标识符:用于引用车辆制造商ECU的软件版本号,由车厂定义
    0xF18AsystemSupplierIdentifierDataIdentifier系统供应商信息的数据标识符:引用系统供应商的名称和地址信息
    0xF18BECUManufacturingDateDataIdentifierECU制造日期的数据标识符:引用ECU服务器的制造日期
    0xF18CECUSerialNumberDataIdentifierECU序列号的数据标识符:引用ECU的序列号
    0xF18DsupportedFunctionalUnitsDataIdentifierVehicleManufacturerKitAssemblyPartNumberDataIdentifier受支持的功能单元的数据标识符:请求在服务中实现的功能单元
    0xF18EVehicleManufacturerKitAssemblyPartNumberDataIdentifier车辆制造商套件总成零件号的数据标识符
    0xF18FISOSAEReservedISOSAE已保留:供未来定义用
    0xF190VINDataIdentifierVIN数据标识符:引用了VIN编号
    0xF191vehicleManufacturerECUHardwareNumberDataIdentifier车辆制造商ECU硬件编号的数据标识符:引用了ECU硬件编号
    0xF192systemSupplierECUHardwareNumberDataIdentifier系统供应商ECU硬件编号的数据标识符
    0xF193systemSupplierECUHardwareVersionNumberDataIdentifier系统供应商ECU硬件版本号标识符
    0xF194systemSupplierECUSoftwareNumberDataIdentifier系统供应商ECU软件编号标识符
    0xF195systemSupplierECUSoftwareVersionNumberDataIdentifier系统供应商ECU软件版本号标识符
    0xF196exhaustRegulationOrTypeApprovalNumberDataIdentifier排气法规或型式认证编号的数据标识符
    0xF197systemNameOrEngineTypeDataIdentifier系统名称或发动机类型的数据标识符
    0xF198repairShopCodeOrTesterSerialNumberDataIdentifier维修车间代码或测试仪器序列号数据标识符
    0xF199programmingDateDataIdentifier编程日期的数据标识符
    0xF19AcalibrationRepairShopCodeOrCalibrationEquipmentSerialNumber DataIdentifier校准车间代码或校准设备系列号的数据标识符
    0xF19BcalibrationDateDataIdentifier校准日期的数据标识符
    0xF19CcalibrationEquipmentSoftwareNumberDataIdentifier校准软件设备编号的数据标识符
    0xF19DECUInstallationDateDataIdentifierECU安装日期的数据标识符
    0xF19EODXFileDataIdentifierODX文件的数据标识符
    0xF19FEntityDataIdentifier实际数据标识符:引用用于安全数据传输的实体数据标识符
    0xF1A0–0xF1EFidentificationOptionVehicleManufacturerSpecific车辆制造商规定的识别选项
    0xF1F0–0xF1FFidentificationOptionSystemSupplierSpecific系统供应商规定的识别选项
    0xF200–0xF2FFperiodicDataIdentifier周期性数据标识符
    0xF300–0xF3FFDynamicallyDefinedDataIdentifier动态定义的数据标识符
    0xF400–0xF4FFOBDDataIdentifierOBD数据标识符
    0xF500–0xF5FFOBDDataIdentifierOBD数据标识符
    0xF600–0xF6FFOBDMonitorDataIdentifierOBD监视器的数据标识符
    0xF700–0xF7FFOBDMonitorDataIdentifierOBD监视器的数据标识符
    0xF800–0xF8FFOBDInfoTypeDataIdentifierOBD信息类型的数据标识符
    0xF900–0xF9FFTachographDataIdentifier里程记录器的数据标识符
    0xFA00 – 0xFA0FAirbagDeploymentDataIdentifier气囊展开的数据标识符
    0xFA10NumberOfEDRDevicesEDR装置数 EDR数据的EDR装置的数量
    0xFA11EDRIdentificationEDR识别:应用于报告EDR识别数据
    0xFA13-0xFA18EDREntriesEDR条目:每一个DID对应一个EDR、0xFA13代表最后一个EDR
    0xFA19-0xFAFFSafetySystemDataIdentifier安全系统的数据标识符
    0xFB00-0xFCFFReservedForLegislativeUse针对法律用途保留的值
    0xFD00-0xFEFFSystemSupplierSpecific由系统供应商规定
    0xFF00UDSVersionDataIdentifierUDS版本的数据标识符
    0xFF01-0xFFFFISOSAEReservedISOSAE已经保留
  • 相关阅读:
    最新版校园招聘进大厂系列----------(3)字节篇 -----未完待续
    QT QChartView 鼠标随动 十字线
    【校招VIP】计算机网络之TCP/IP模型归纳
    SpringCloud微服务-RabbitMQ快速入门
    Spring整合Mybatis
    golang sync.Map之如何设计一个并发安全的读写分离结构?
    SpringCloudAlibaba注册中心与配置中心之利器Nacos实战与源码分析(上)
    javaEE进阶 - Spring 的 Bean 作用域 和 生命周期 - 细节狂魔
    Java变量和字面量教程
    [山东科技大学OJ]1634 Problem F: 矩阵的行列交换
  • 原文地址:https://blog.csdn.net/Last_Impression/article/details/128073381