李 澳
(吉利汽車研究院電子電器開發(fā)中心電子電氣架構(gòu)室,浙江 寧波 315336)
隨著汽車電子電器技術(shù)高速發(fā)展,汽車的控制和網(wǎng)絡(luò)變得越來越復(fù)雜,同時(shí)對(duì)于汽車的診斷要求也越來越高。診斷數(shù)據(jù)的定義越來越多,但是在當(dāng)前診斷數(shù)據(jù)傳輸?shù)倪^程中大部分汽車主機(jī)廠還是使用傳統(tǒng)的word、excel、pdf等文件格式進(jìn)行數(shù)據(jù)的交換,這樣的傳輸導(dǎo)致傳輸過程中的數(shù)據(jù)改變、數(shù)據(jù)理解的差異甚至數(shù)據(jù)的丟失時(shí)有發(fā)生,這就需要在控制器供應(yīng)商再到主機(jī)廠最終到診斷設(shè)備的開發(fā)中有一套完整定義的數(shù)據(jù)格式文件,這就使得ODX數(shù)據(jù)庫(kù)的誕生。
ODX數(shù)據(jù)庫(kù)是以UML進(jìn)行模型創(chuàng)建,以XML的Schema語(yǔ)言進(jìn)行描述。規(guī)范整個(gè)診斷運(yùn)用的數(shù)據(jù)字段、數(shù)據(jù)的格式以及數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系,標(biāo)準(zhǔn)化的數(shù)據(jù)格式定義使得數(shù)據(jù)的傳輸更加安全和高效。除了上述的特點(diǎn)外,ODX還有一個(gè)重大的改善對(duì)于診斷數(shù)據(jù)的管理,就是充分利用已有數(shù)據(jù)避免重復(fù)開發(fā),冗余數(shù)據(jù),這就引出了ODX的另一個(gè)核心值繼承。
軟件開發(fā)方法的發(fā)展過程中出現(xiàn)的一次重要變革C++語(yǔ)言的出現(xiàn),將面向過程的開發(fā)轉(zhuǎn)變成了面向?qū)ο蟮姆绞?,這一次的變革使得軟件開發(fā)的方法實(shí)現(xiàn)了跨越式的發(fā)展。面向?qū)ο蟮乃枷氤闪塑浖_發(fā)的重要思想,包含了三大特性:封裝性、多態(tài)性、繼承性。如圖1所示。
ODX的UML建立數(shù)據(jù)模型采用了面向?qū)ο蟮乃枷搿DX數(shù)據(jù)結(jié)構(gòu)將面向?qū)ο蟮姆椒ê驮\斷數(shù)據(jù)結(jié)構(gòu)的創(chuàng)建進(jìn)行了高度整合。
圖2展示了ODX-D層的繼承關(guān)系,從一般性到特殊性的繼承關(guān)系。
從圖2繼承關(guān)系中,PROTOCOL具有一般性,ECU VARIANT具有特殊性。在CAN網(wǎng)絡(luò)UDS車型診斷數(shù)據(jù)開發(fā)中,UDS定義的基礎(chǔ)服務(wù)在PROTOCOL為CAN中進(jìn)行了描述,這些服務(wù)適用于PROTOCOL層級(jí),具備高度的通用性;ECU VARIANT是根據(jù)某一個(gè)具體的控制器進(jìn)行診斷數(shù)據(jù)的定義,除了滿足基本的CAN PROTOCOL定義的服務(wù)以外,還需要定義具體的診斷數(shù)據(jù),因此將一般性數(shù)據(jù)定義在高層級(jí),特殊性低層級(jí)通過繼承高層級(jí)的屬性同時(shí)獲取高層級(jí)的屬性,高層級(jí)的屬性能夠覆蓋更多特殊性低層級(jí)的屬性需求,避免數(shù)據(jù)重復(fù)開發(fā)和便捷維護(hù)。
圖1 面向?qū)ο蟮娜筇匦?/p>
圖2 診斷層繼承關(guān)系
ODX的值繼承方式只存在于診斷層,值繼承通過以下的方式實(shí)現(xiàn)。
符合值繼承診斷層對(duì)象的范圍:DIAG-COMM (its specializations);DIAG-VARIABLE;GLOBAL-NEG-RESPONSE;DOP-BASE (its specializations);TABLE;FUNCT-CLASS;VARIABLE-GROUP;ADDITIONAL-AUDIENCE;STATECHART;UNIT-GROUP。
值繼承體現(xiàn)在診斷層,診斷層具有面向?qū)ο蟮睦^承關(guān)系,如圖2所示。特殊層級(jí)具有繼承特性,下面介紹如何通過PARENT-REF進(jìn)行定義繼承關(guān)系。ECUVariant繼承父類BASEVariant的定義通過PARENT-REF引用進(jìn)行值繼承,體現(xiàn)在ODX的XML的Schema定義。如圖3所示。
圖3 ECU-Variant schema
3.1.1 診斷層繼承關(guān)系模型分析
圖4為整個(gè)診斷層級(jí)的繼承模型,通過PARENT-REF說明繼承關(guān)系。
圖4 診斷層級(jí)繼承關(guān)系
在一對(duì)診斷層對(duì)象之間,可能存在PREANT-REF值繼承關(guān)系或IMPORT-REF導(dǎo)入關(guān)系,禁止對(duì)同一對(duì)診斷層對(duì)象存在兩種關(guān)系。IMPORT-REF導(dǎo)入關(guān)系不在此篇中論述。通過UML模型展示了診斷層級(jí)的繼承關(guān)系,各個(gè)繼承關(guān)系的實(shí)現(xiàn)方式和約束規(guī)則。表1規(guī)定了診斷層的繼承規(guī)則。
下面通過具體的XML Schema可以體現(xiàn)各層繼承和PARENT-REF的關(guān)系。如圖5~圖8所示。
表1 值繼承關(guān)系
圖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引導(dǎo)的值繼承數(shù)據(jù)結(jié)構(gòu),下面兩種形式展示了Schema的結(jié)構(gòu)特性,通過PARENT-REF對(duì)父類層進(jìn)行可繼承對(duì)象的值繼承。
3.1.2 診斷層繼承PARENT-REF的結(jié)構(gòu)
1) PARENT-REF Schema結(jié)構(gòu)分解 (圖9)。
圖9 PARENT-REF Schema結(jié)構(gòu)分解
2) PARENT-REF Text形式 (圖10)。
圖10 PARENT-REF Text形式
3) PARENT-REF XML Text結(jié)構(gòu)。
上述兩種形式體現(xiàn)PARENT-REF通過引用“ODXLINKATTR”來實(shí)現(xiàn)繼承,“ODXLINK-ATTR”是ODX中極為重要的引用 ODXLINK概念的屬性,對(duì)于ODXLINK將在后續(xù)進(jìn)行專題的分析。在Schema結(jié)構(gòu)中體現(xiàn)了ODXLINKH和ODXLINK-ATTR的關(guān)系,如圖11所示。
圖11 ODXLINKH和ODXLINK-ATTR的關(guān)系
3.1.3 值繼承PARENT-REF實(shí)現(xiàn)方式
1)診斷繼承的兩個(gè)層級(jí)在同一文件中,通過在ECUVARIANT定義ID-REF即可引用當(dāng)前文檔中的父類對(duì)象,如果在BASE-Variant中定義10 01服務(wù),則在ECU-Variant中即進(jìn)行繼承,繼承的對(duì)象不能超出對(duì)象范圍。
2)診斷繼承的兩個(gè)層級(jí)在不同的文件中,圖12中Schema描述的BASE-Variant通過ID-REF、DOC-REF、DOC-TYPE聯(lián)合定義繼承層。BASE-VARIANTS中的PARENT-REFS中的PARENT-REF的FUCTION-GROUP的文件由內(nèi)部對(duì)象繼承。
圖12 PARENT-REF繼承方式
在通過面向?qū)ο蟮乃枷脒M(jìn)行對(duì)象繼承時(shí),當(dāng)其中某一具體的對(duì)象不需要繼承的時(shí)候,通過NOT-INHERITED關(guān)鍵結(jié)構(gòu)段進(jìn)行ODX值繼承PARENT-REF消除繼承的創(chuàng)建,從而實(shí)現(xiàn)單一對(duì)象的消除繼承關(guān)系。如圖13所示。
圖13 繼承關(guān)系中的消除繼承NOT-INHERITED
通過圖13模型中可以了解到整個(gè)消除繼承4種不同對(duì)象消除繼承的定義。同時(shí)通過上述3.1.1診斷層繼承的Schema數(shù)據(jù)結(jié)構(gòu)中,亦可見消除繼承在PARENT-REF繼承的結(jié)構(gòu)。
在面向?qū)ο笏枷胫校宇悓?duì)象繼承父類對(duì)象,當(dāng)子類對(duì)象中不能消除繼承對(duì)象,同時(shí)需要改變子類對(duì)象定義,此時(shí)需要進(jìn)行對(duì)象重寫同名稱的對(duì)象。
重寫特性為:①重寫對(duì)象的優(yōu)先級(jí)高于繼承對(duì)象;②重寫對(duì)象具有與繼承對(duì)象同樣的SHORT-NAME;③重寫對(duì)象在D-SERVER中是可見的,但是繼承對(duì)象是不可見的。
在圖14的PRARENT-REF值繼承體系中,BASE-VARIANT的OBJECT A對(duì)象被ECU-VARIANT繼承,但是ECUVARIANT重寫了OBJECT A為OBJECT A’。OBJECT A’可見和可用于D-sever中。OBJECT A將不可見。
圖14 PRARENT-REF值繼承體系的重寫
在面向?qū)ο笏枷胫校?dāng)子類對(duì)象同時(shí)繼承來自多個(gè)父類的同一SHORT-NAME對(duì)象時(shí),子類的對(duì)象就產(chǎn)生了多重繼承。下面解釋多重繼承的關(guān)系。
在圖15的PRARENT-REF值繼承體系中,PROTOCOLVARIANT和 FUNCTION-GROUP中的OBJECT A對(duì)象同時(shí)被BASE-VARIANT繼承,出現(xiàn)多重繼承在BASE-VARIANT。由于FUNTION-GROUP越特殊,PROTOCOL越一般,F(xiàn)UNCTION-GROUO具有更高的優(yōu)先有效,因此BASE-VARIANT中的OBJECT A’可見和可用于D-sever中,OBJECT A將不可見。
圖15 PARENT-REF值繼承的多重繼承
1)ODX數(shù)據(jù)庫(kù)中值繼承思想使得診斷數(shù)據(jù)能夠在ECU和ECU變種之間進(jìn)行診斷數(shù)據(jù)的重用,構(gòu)建診斷數(shù)據(jù)的開發(fā)架構(gòu)。
2)通過值繼承PARENT-REF可以保證數(shù)據(jù)結(jié)構(gòu)的合理性和穩(wěn)定性。
3)通過面向?qū)ο蟮乃枷雽⑵囋\斷數(shù)據(jù)庫(kù)開發(fā)進(jìn)行了高度融合,使得控制器數(shù)據(jù)結(jié)構(gòu)更加規(guī)范,對(duì)于ECU開發(fā)避免了數(shù)據(jù)拷貝帶來的錯(cuò)誤。
4)本文的研究結(jié)論,對(duì)通過ODX創(chuàng)建診斷數(shù)據(jù)庫(kù)和設(shè)備解析ODX數(shù)據(jù)庫(kù)的設(shè)計(jì)和使用也有參考價(jià)值。