李 澳
(吉利汽車研究院電子電器開發中心電子電氣架構室,浙江 寧波 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數據庫的設計和使用也有參考價值。