8145v5 参数_诊断文件ODX(六) - 诊断服务中的参数类型简介

在《诊断文件ODX(五) - DIAG-SERVICE元素》中提到过,DIAG-SERVIC是ODX文件中最核心的元素,找到它之后,就可以层层抽丝剥茧把它引用的所有数据类型都找出来,这对我们理解ODX文件的定义是非常有帮助的。可以把DIAG-SERVICE元素当作一个根节点,通过它去了解ODX的构造。

96b2fe24c3513c9e9a067944c5ee6338.png
DIAG-SERVICE的结构

DIAG-SERVICE的下级元素分别是REQUEST, POS-RESPONSE和NEG-RESPONSE。而这三个元素的下级元素则是一个个的PARAM(即参数Parameter的缩写)。

17566ad039569c2c2aeb588b6e88bdeb.png
带有三个PARAM的REQUEST

上图展示了一个带有三个PARAM的REQUEST,我用红线画出来的“type”是PARAM最重要的属性,它定义了这个PARAM的类型。这篇文章的主要内容就是介绍ODX中定义的PARAM类型。

  1. VALUE类型:

b6bb904a09f8dc3e4c1812324b116216.png
VALUE类型的定义

VALUE是最常用的PPARAM类型,这种类型的参数需要引用一个数据对象,被引用的数据对象具体定义了这个参数的数据结构,比如长度、转换方法、单位等等。被引用的数据对象在ODX中命名为Data Object Property ,简称DOP,以及一系列由DOP派生出来的数据对象。被VALUE参数引用的数据类型在下一篇文章中介绍。

2. RESERVED类型

如果某个参数没有具体用处需要被诊断忽略掉,则定义为这种类型。RESERVED类型很不常用。

3.CODED-CONST

a5facaa4905cad41b74099b4234e4c62.png
CODED-CONST类型的定义

CODED-CONST类型用于一些数值固定的参数,主要用于SERVICE-ID。

4.PHYS-CONST

PHYS-CONST类型也是用于一些数值固定的参数,与CODED-CONST不同的是,它需要引用一个DOP来解释参数的转换方法,而CODED-CONST则只需要<CODED-VALUE>来定义参数值就可以了。

5.LENGTH-KEY

在某些情况下,一个参数的长度需要由另一个参数来决定,比如0x34服务中的“lengthOfMemoryAddress”这个参数,就决定了后面的内存地址信息所占用的字节数。在这里,lengthOfMemoryAddress的类型就是LENGTH-KEY。LENGTH-KEY类型的参数引用一个DOP来描述另一个参数的长度,而被描述长度的那个参数则引用这个LENGTH-KEY类型的参数,这样 诊断 仪就可以知道这个参数的长度是多少了。下面这个例子很好地解释了LENGTH-KEY的用法。

0022eaed880c704dc614b409092c127b.png
LENGTH-KEY类型参数应用举例

6.MATCHING-REQUEST-PARAM

这参数 只能用在RESPONSE中,作为REQUEST中的echo,用于验证收到的响应是否与请求中的内容相匹配。最典型的应用是0x2E服务。 比如2E AA BB XX XX XX这个请求中,AA BB是一个标识符,正响应是6E AA BB,正响应中的AA BB就是MATCHING-REQUEST-PARAM类型。

7.TABLE-KEY和TABLE-STRUCT

TABLE-KEY和TABLE-STRUCT 这两种参数类型主要用于读取和写入数据,即 22和2E服务。每个ECU所支持的读写标识符都有很多,所以可以用列表(table)的方式来组织这些数据。

在介绍这两种类型的参数之前,先介绍一下TABLE这种数据类型。TABLE是ODX中定义的一种数据结构(与DOP, STRUCTURE等属于并列的概念,不要与PARAM类型搞混),TABLE由一个个的TABLE-ROW元素组成,每个TABLE-ROW就代表了一个标识符,它由一个KEY元素和一个对STRUCTURE元素的引用构成,前者就是ID,后者则表征了这个ID所代表的数据定义。

接下来 介绍我们的 主角,TABLE-KEY和TABLE-STRUCT,来看看它们是如何实现读写数据的。

5fb12b5d7c8187831911adf5aabb0835.png
动态地引用TABLE

上图展示了一个用2E服务写入数据的例子,第一个参数是SID,第二个参数是TABLE-KEY,第三个参数是TABLE-STRUCT。在这里,TABLE-KEY指向了一个TALBE数据结构,而非具体的TABLE-ROW,TABLE-STRUCT则指向了同一REQUEST中的TABLE-KEY,这样,只要选定了TABLE-KEY,则TABLE-STRUCT也就确定了。诊断仪处理ODX数据时,就可以根据TABLE把所有的写入ID的服务构造出来了。

58e2976b847b1d336280476e07251567.png
静态地引用TABLE

上图也是用2E服务写入数据的例子,第一个参数是SID,第二个参数是TABLE-KEY,第三个参数是TABLE-STRUCT。与之前那张图的区别在于,这里的TABLE-KEY指向了一个具体的TABLE-ROW,TABLE-STRUCT同样也指向了同一REQUEST中的TABLE-KEY。

这两种实现方式没有优劣之分,只是静态的方式在构造ODX文件时需要为所有的ID都构造一条服务,而动态的方式只需要一条服务。

8. TABLE-ENTRY

TABLE-ENTRY类型的参数只能存在于被TABLE-ROW引用的STRUCTURE数据结构中。STRUCTURE是ODX文件中的一种数据结构,类型为VALUE的参数可以是STRUCTURE,STRUCTURE是一种递归的定义,它又可以包含多个参数(PARAM)。TABLE-ENTRY指向某个具体的TABLE-ROW。

这部分定义比较乱,参数类型和ODX数据类型很容易混淆,写这篇文章一方面是帮助同行厘清概念,另一方面也是帮助自己巩固记忆。

下篇 文章将对DOP , STRUCTURE, TABLE等ODX数据类型进行介绍。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值