汽车UDS诊断详解及Vector相关工具链使用说明——7.9 动态定义DID(0x2C)

1. 概述

动态定义DID服务允许诊断仪在ECU内部动态定义一个临时的DID,可以通过该DID读取一段内存的数据,也可以通过改DID一次性读取多个原有DID的数据。动态定义DID既可以是支持22服务的DID,也可以是支持2A服务的周期性读取 DID。

该服务可以更加灵活地读取一些临时数据,也可以降低因频繁发送诊断请求和响应而导致的总线负载过高。

动态定义DID有三种方式:

  • 通过原有的DID来定义;
  • 通过指定内存地址来定义;
  • 以上两种方式结合使用。

该服务可以用一条诊断请求定义一个动态DID,也可以用多条诊断请求定义一个DID,这时ECU应把多条诊断请求所定义的DID内容连接起来。使用多条诊断请求定义DID的时候允许使用原有DID定义和指定内存地址定义两种方式同时存在,即上文的第三种方式。

当想要重新定义某个DID时,要先用子功能-清除动态DID来将原有定义清除,再重新定义。

当诊断仪发送了多条诊断指令来定义同一个动态DID时,如果ECU判断该DID的数据长度过长,ECU应该保持之前的动态DID定义不变,忽略最新的诊断指令。

标准没有禁止定义动态DID时引用其它动态DID,但不推荐这样做,因为当被引用的动态DID被删除时,将会导致引用该动态DID的其它动态DID在读取数据时出现问题。

动态定义的DID在发生会话转换时是否继续保持,可以由用户自定义。

读取动态DID时,ECU应保证返回的数据顺序与诊断仪定义动态DID时的数据顺序一致。

2. 请求报文格式

上一篇:phpunit: This test did not perform any assertions


下一篇:The connection to the server localhost:8080 was refused - did you specify the right host or port?