• [UDS] --- ReadDataByIdentifier 0x22


    1 0x22功能描述

    根据ISO14119-1标准中所述,诊断服务22主要用于Client向Server(ECU)通过DID的方式读取相关的数据。这些数据可以输入输出的数字信号,模拟信号,内部数据以及其他的系统状态信息。

    2 0x22 应用场景

    一般而言,对于22诊断服务,主要应用场景为以下场合:

    读取当前ECU的序列号,版本号等;
    标定成功后读取内部标定结果等;
    读取当前ECU所处在的Session,内部状态,Snapshot Data等;
    其他需要读取内部相关参数的场合;
    上述这些应用场景较为常见,除此以外,当然还有很多面向ECU内部测试的应用场合,这里就不一一列举。

    3 0x22服务请求

    服务请求是Client发送给到Server的诊断服务指令。其中Client可以理解为Tester,Server可以理解为ECU节点。

    3.1 请求格式

    按照ISO14229-1标准所述,如下图1所示:
    在这里插入图片描述
    DID占2字节,取值范围为0x00-0xFF,根据ISO14229-1规范,定义了诸多只能用于特定场合的DID,也就意味着大家都不能随意乱用DID,在使用DID Number应充分考虑到14229的要求,防止出现跟客户扯皮的现象。

    如下图所示简要列举了较为常见的DID种类及其含义:
    在这里插入图片描述

    4 请求和响应

    4.1 Single DID Format请求与正响应

    以读取单个DID F1 90 (VIN码)为例,其对应的诊断请求实例如下图所示:
    在这里插入图片描述
    特别需要注意的是22诊断并不存在Subfunction。

    单DID(F1 90)请求示例所对应的正响应:
    在这里插入图片描述

    4.2 Multiple DID Format请求与正响应

    既然存在单个DID读取,自然也就存在Multiple DID读取数据的操作,如下图5所示为同时读取多个DID(01 0A + 01 10)的22诊断服务请求实例:
    在这里插入图片描述
    当然多DID读取时表示的是超过一个DID以上的22诊断读取请求,因为个数不受限制。

    谈到22服务的多DID读取,这边也可以拓展下Composite DID的使用,即通过读取一个DID便可以将map至该DID的多个DID一并读取出来,这样做的好处就是可以通过某一DID一次性获取其余已存在的DID的值,其软件实现也完全可通过配置来实现。

    多DID(01 0A + 01 10)请求示例所对应的正响应:
    在这里插入图片描述
    在这里插入图片描述

    4.3 0x22负响应

    负响应的诊断格式:7F +SID + NRC。对于0x22支持的负响应如下表:
    在这里插入图片描述

    • 例如当尝试读取F190的DID值且当前车速条件不满足,此时Client发送诊断指令"22 F1 90"请求Server读取数据,Server将会回复“7F 22 22”来告诉请求者当前读取数据的条件不满足,请再次检查读取该DID的条件。
    • 当发送报文长度或者格式不对时,则Server会回复"7F 22 13";
    • 当诊断请求的DID太多导致超出了传输层的限定时,则Server会回复”7F 22 14“;
    • 当诊断请求DID不存在或者在当前Session中不支持时,则Server就会回复“7F 22 31”;
    • 当Server在发生复位前处于security lock状态,那么此时Server则会回复"7F 22 33";
  • 相关阅读:
    学习笔记——指针!
    java计算机毕业设计-游戏账号交易平台-演示录像-源程序+mysql+系统+lw文档+远程调试
    SpringBoot统一返回处理和全局异常处理
    SpringBoot 集成 RocketMQ
    《前端运维》二、Nginx--3静态资源服务、跨域与其他
    Python unicode编码转中文
    一个简单的HTML网页 故宫学生网页设计作品 dreamweaver作业静态HTML网页设计模板 旅游景点网页作业制作
    Linux 必知必会
    IP-Guard申请外发流程说明步骤
    【test】文章测试
  • 原文地址:https://blog.csdn.net/weixin_42445727/article/details/134071203