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