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时的数据顺序一致。