李 澳
(吉利汽车研究院电子电器开发中心电子电气架构室,浙江 宁波 315336)
随着汽车电子电器技术高速发展,汽车的控制和网络变得越来越复杂,同时对于汽车的诊断要求也越来越高。诊断数据的定义越来越多,但是在当前诊断数据传输的过程中大部分汽车主机厂还是使用传统的word、excel、pdf等文件格式进行数据的交换,这样的传输导致传输过程中的数据改变、数据理解的差异甚至数据的丢失时有发生,这就需要在控制器供应商再到主机厂最终到诊断设备的开发中有一套完整定义的数据格式文件,这就使得ODX数据库的诞生。
ODX数据库是以UML进行模型创建,以XML的Schema语言进行描述。规范整个诊断运用的数据字段、数据的格式以及数据与数据之间的关系,标准化的数据格式定义使得数据的传输更加安全和高效。除了上述的特点外,ODX还有一个重大的改善对于诊断数据的管理,就是充分利用已有数据避免重复开发,冗余数据,这就引出了ODX的另一个核心值继承。
软件开发方法的发展过程中出现的一次重要变革C++语言的出现,将面向过程的开发转变成了面向对象的方式,这一次的变革使得软件开发的方法实现了跨越式的发展。面向对象的思想成了软件开发的重要思想,包含了三大特性:封装性、多态性、继承性。如图1所示。
ODX的UML建立数据模型采用了面向对象的思想。ODX数据结构将面向对象的方法和诊断数据结构的创建进行了高度整合。
图2展示了ODX-D层的继承关系,从一般性到特殊性的继承关系。
从图2继承关系中,PROTOCOL具有一般性,ECU VARIANT具有特殊性。在CAN网络UDS车型诊断数据开发中,UDS定义的基础服务在PROTOCOL为CAN中进行了描述,这些服务适用于PROTOCOL层级,具备高度的通用性;ECU VARIANT是根据某一个具体的控制器进行诊断数据的定义,除了满足基本的CAN PROTOCOL定义的服务以外,还需要定义具体的诊断数据,因此将一般性数据定义在高层级,特殊性低层级通过继承高层级的属性同时获取高层级的属性,高层级的属性能够覆盖更多特殊性低层级的属性需求,避免数据重复开发和便捷维护。
图1 面向对象的三大特性
图2 诊断层继承关系
ODX的值继承方式只存在于诊断层,值继承通过以下的方式实现。
符合值继承诊断层对象的范围:DIAG-COMM (its specializations);DIAG-VARIABLE;GLOBAL-NEG-RESPONSE;DOP-BASE (its specializations);TABLE;FUNCT-CLASS;VARIABLE-GROUP;ADDITIONAL-AUDIENCE;STATECHART;UNIT-GROUP。
值继承体现在诊断层,诊断层具有面向对象的继承关系,如图2所示。特殊层级具有继承特性,下面介绍如何通过PARENT-REF进行定义继承关系。ECUVariant继承父类BASEVariant的定义通过PARENT-REF引用进行值继承,体现在ODX的XML的Schema定义。如图3所示。
图3 ECU-Variant schema
3.1.1 诊断层继承关系模型分析
图4为整个诊断层级的继承模型,通过PARENT-REF说明继承关系。
图4 诊断层级继承关系
在一对诊断层对象之间,可能存在PREANT-REF值继承关系或IMPORT-REF导入关系,禁止对同一对诊断层对象存在两种关系。IMPORT-REF导入关系不在此篇中论述。通过UML模型展示了诊断层级的继承关系,各个继承关系的实现方式和约束规则。表1规定了诊断层的继承规则。
下面通过具体的XML Schema可以体现各层继承和PARENT-REF的关系。如图5~图8所示。
表1 值继承关系
图5 PROTOCOL-REF与 PARENT-REF
图6 ECU-SHARE-DATA-REF与PARENT-REF
图7 FUNCTIONAL-GROUNP-REF与PARENT-REF
图8 BASE-VARIANT-REF与 PARENT-REF
PARENT-REF引导的值继承数据结构,下面两种形式展示了Schema的结构特性,通过PARENT-REF对父类层进行可继承对象的值继承。
3.1.2 诊断层继承PARENT-REF的结构
1) PARENT-REF Schema结构分解 (图9)。
图9 PARENT-REF Schema结构分解
2) PARENT-REF Text形式 (图10)。
图10 PARENT-REF Text形式
3) PARENT-REF XML Text结构。
上述两种形式体现PARENT-REF通过引用“ODXLINKATTR”来实现继承,“ODXLINK-ATTR”是ODX中极为重要的引用 ODXLINK概念的属性,对于ODXLINK将在后续进行专题的分析。在Schema结构中体现了ODXLINKH和ODXLINK-ATTR的关系,如图11所示。
图11 ODXLINKH和ODXLINK-ATTR的关系
3.1.3 值继承PARENT-REF实现方式
1)诊断继承的两个层级在同一文件中,通过在ECUVARIANT定义ID-REF即可引用当前文档中的父类对象,如果在BASE-Variant中定义10 01服务,则在ECU-Variant中即进行继承,继承的对象不能超出对象范围。
2)诊断继承的两个层级在不同的文件中,图12中Schema描述的BASE-Variant通过ID-REF、DOC-REF、DOC-TYPE联合定义继承层。BASE-VARIANTS中的PARENT-REFS中的PARENT-REF的FUCTION-GROUP的文件由内部对象继承。
图12 PARENT-REF继承方式
在通过面向对象的思想进行对象继承时,当其中某一具体的对象不需要继承的时候,通过NOT-INHERITED关键结构段进行ODX值继承PARENT-REF消除继承的创建,从而实现单一对象的消除继承关系。如图13所示。
图13 继承关系中的消除继承NOT-INHERITED
通过图13模型中可以了解到整个消除继承4种不同对象消除继承的定义。同时通过上述3.1.1诊断层继承的Schema数据结构中,亦可见消除继承在PARENT-REF继承的结构。
在面向对象思想中,子类对象继承父类对象,当子类对象中不能消除继承对象,同时需要改变子类对象定义,此时需要进行对象重写同名称的对象。
重写特性为:①重写对象的优先级高于继承对象;②重写对象具有与继承对象同样的SHORT-NAME;③重写对象在D-SERVER中是可见的,但是继承对象是不可见的。
在图14的PRARENT-REF值继承体系中,BASE-VARIANT的OBJECT A对象被ECU-VARIANT继承,但是ECUVARIANT重写了OBJECT A为OBJECT A’。OBJECT A’可见和可用于D-sever中。OBJECT A将不可见。
图14 PRARENT-REF值继承体系的重写
在面向对象思想中,当子类对象同时继承来自多个父类的同一SHORT-NAME对象时,子类的对象就产生了多重继承。下面解释多重继承的关系。
在图15的PRARENT-REF值继承体系中,PROTOCOLVARIANT和 FUNCTION-GROUP中的OBJECT A对象同时被BASE-VARIANT继承,出现多重继承在BASE-VARIANT。由于FUNTION-GROUP越特殊,PROTOCOL越一般,FUNCTION-GROUO具有更高的优先有效,因此BASE-VARIANT中的OBJECT A’可见和可用于D-sever中,OBJECT A将不可见。
图15 PARENT-REF值继承的多重继承
1)ODX数据库中值继承思想使得诊断数据能够在ECU和ECU变种之间进行诊断数据的重用,构建诊断数据的开发架构。
2)通过值继承PARENT-REF可以保证数据结构的合理性和稳定性。
3)通过面向对象的思想将汽车诊断数据库开发进行了高度融合,使得控制器数据结构更加规范,对于ECU开发避免了数据拷贝带来的错误。
4)本文的研究结论,对通过ODX创建诊断数据库和设备解析ODX数据库的设计和使用也有参考价值。