李 澳
(吉利汽車研究院電子電器開發(fā)中心 電子電氣架構(gòu)室,浙江 寧波 315336)
隨著汽車電子電器技術(shù)高速發(fā)展,汽車的控制和網(wǎng)絡(luò)變得越來越復(fù)雜,同時對于汽車的診斷要求也越來越高。ODX診斷開發(fā)型數(shù)據(jù)庫應(yīng)用是從診斷設(shè)備工具開發(fā),自動化控制器開發(fā),診斷數(shù)據(jù)管理不斷地深入。
在《基于ODX數(shù)據(jù)庫的核心-值繼承-PARENT-REF研究綜述》一文中,已經(jīng)將值繼承的范圍、定義、實(shí)現(xiàn)的方式、繼承形式進(jìn)行了詳細(xì)介紹,本文將深入剖析值繼承下的對象狀態(tài)和Runtime執(zhí)行的結(jié)果以及導(dǎo)入方式的共享庫繼承邏輯。
值繼承分為一般性繼承、多重繼承和導(dǎo)入。在《基于ODX數(shù)據(jù)庫的核心-值繼承-PARENT-REF研究綜述》一文中已經(jīng)就繼承的基本概念和多重繼承有了相關(guān)介紹,并且著重分析和講述了繼承以PARENT-REF為基類接口的實(shí)現(xiàn)方式,下文將重點(diǎn)介紹導(dǎo)入和值繼承的結(jié)果分析。圖1展示了繼承層級和優(yōu)先級的關(guān)系。

圖1 繼承層級和優(yōu)先級
導(dǎo)入為值繼承提供另外實(shí)現(xiàn)方式。在圖1中ECU-SHAREDATA層在最左邊關(guān)系可以看到,其可以被除它自身以外的其他的任意診斷層進(jìn)行值繼承,同時還可以保持原有的診斷層的數(shù)據(jù)繼承關(guān)系。在整車的診斷開發(fā)過程中會有整車企業(yè)級的診斷規(guī)范,這一類規(guī)范不屬于標(biāo)準(zhǔn)的UDS定義的數(shù)據(jù),也不屬于CAN標(biāo)準(zhǔn)定義的數(shù)據(jù),但是這些企業(yè)級別的診斷數(shù)據(jù)規(guī)范在整車所有控制器中都是同樣的解析和運(yùn)用規(guī)則。展示一般性控制器診斷數(shù)據(jù)的定義規(guī)則來源如圖2所示。
在ODX的數(shù)據(jù)模型中運(yùn)用圖1中ECU-SHARE-DATA來定義企業(yè)級以及各個ECU級別的規(guī)范性數(shù)據(jù),各個診斷層就可以通過導(dǎo)入的方式 (IMPORT-REF)完成子規(guī)范和通用性定義診斷數(shù)據(jù)對象的引用。

圖2 展示一般性控制器診斷數(shù)據(jù)的定義規(guī)則來源
ECU-SHARE-DATA的運(yùn)用即在原有的診斷繼承數(shù)據(jù)基礎(chǔ)上進(jìn)一步完善各類數(shù)據(jù)的復(fù)用性和維護(hù)性。例如:數(shù)據(jù)單位的創(chuàng)建,通用性公式的創(chuàng)建。對于使用ODX-LINK進(jìn)行導(dǎo)入關(guān)系創(chuàng)建的分為3組關(guān)系:A、I、R。
1)A:即能夠通過ODX-LINK進(jìn)行特定診斷層導(dǎo)入應(yīng)用的元素為A。
2)I:一個屬于A的元素同時也是一個ODXL-LINK(DIAG-COMM-PROXY,DTC-PROXY,DIAG-VARIABLEPROXY or ROW-WRAPPER)作為源的目標(biāo)元素為I,不能通過SNREF/SNPATH-REF進(jìn)行對象的導(dǎo)入。
將34篇文獻(xiàn)信息導(dǎo)入Bicomb 2軟件后進(jìn)行關(guān)鍵詞提取操作,共得到83個原始關(guān)鍵詞,本研究選取頻次閾值≥2的關(guān)鍵詞作為高頻關(guān)鍵詞,共得14個,如表1所示。可見,當(dāng)前,關(guān)于我國高校教師TPACK能力的研究主要集中在教師專業(yè)發(fā)展、教師培訓(xùn)以及翻轉(zhuǎn)課堂應(yīng)用等方面。
3)R:一個屬于A的元素同時不屬于I。
ODX繼承中只有ECU-SHARE-DATA才能成為導(dǎo)入引用的目標(biāo)。
在《基于ODX數(shù)據(jù)庫的核心-值繼承-PARENT-REF研究綜述》一文中介紹了繼承的實(shí)現(xiàn)方式,通過ODX-LINK進(jìn)行實(shí)現(xiàn),下面將針對上文中的3種繼承方式及對應(yīng)的繼承實(shí)現(xiàn)進(jìn)行深入分析其繼承原理。
4.1.1 ODX-LINK繼承
一般診斷層繼承,被繼承對象中使用ODX-LINK進(jìn)行引用同一診斷層對象,不論繼承層是否重寫ODX-LINK對象,繼承層ODX-LINK引用的對象依然保持原有的引用關(guān)系,同時在繼承層中可繼續(xù)使用。如圖3所示,在被繼承層FG中存在對象structure1,同時structure1通過ODX-LINK引用DOP1,在BV的繼承層中,structure1對象將被繼承,同時其引用關(guān)系也被繼承。在圖3所示關(guān)系中BV繼承層重寫對象DOP1為DOP1’,但是其引用仍然是DOP1,即繼承對象中如果存在ODX-LINK的引用關(guān)系,無論繼承層是否重寫,引用對象不變。但是DOP1’只能在BV中使用。EV繼承BV的對象,BV重寫DOP1,因此EV層中存在一般性高的DOP1’。
4.1.2 SNREFS繼承
一般診斷層繼承,被繼承對象中使用SNREFS進(jìn)行引用同一診斷層對象,如果繼承層重寫SNREFS對象,繼承層SNREFS引用對象將被重寫對象替換,并重新生成新的引用關(guān)系,被繼承層的對象不能在繼承層使用。圖4是被繼承層中包含snref引用。
4.1.3 ODX-LINK對象繼承層可見性

圖3 被繼承層中包含ODX-LINK引用

圖4 被繼承層中包含snref引用
在上述的ODX-LINK繼承關(guān)系中,由于被繼承層對象在被繼承層級進(jìn)行了重寫,此對象雖然在繼承層可用,但是由于對象存在被繼承層,重寫對象已經(jīng)存在于繼承層,對于繼承層同一對象,被繼承層的對象是不可見的。
如在圖3中的BV層DOP1’在BV層中可以通過DB-API查詢,但是DOP1則不可查詢,但是DOP1在D-SERVER的runtime中存在此對象。
4.1.4 SNREFS對象繼承層可見性
在上述的SNREFS繼承關(guān)系中,由于被繼承層對象在被繼承層級進(jìn)行了重寫,此對象即不可以在繼承層中使用,亦不可見。如在圖4中的BV層DOP1’在BV層中可以通過DBAPI查詢,EV中的DOP1’也可以通過DB-API查詢,但是DOP1則既不可在BV也不可在EV中查詢,同時DOP1在DSERVER的runtime中不存在此對象引用。
4.1.5 ODX-LINK、SNREFS混合引用繼承對象繼承層可見性
ODX-LINK繼承中可以多層級繼承,同時被繼承層級的對象可以在任意繼承層使用,被繼承層通過SNREFS進(jìn)行應(yīng)用對象或者繼承層通過SNREFS進(jìn)行當(dāng)前層引用,在繼承層如果進(jìn)行了引用對象的重寫,即繼承層的引用對象變?yōu)橹貙憣ο螅瑫r被繼承層的對象在繼承層不可見。
圖5為ODX-LINK、SNREFS混合引用繼承對象繼承層引用關(guān)系和可見性。如圖5所示,被繼承層對象存在ODXLINK對象,同時此對象通過SNREFS引用其他對象,在繼承層進(jìn)行重寫和其他操作后對象的引用關(guān)系,BV層級的關(guān)系如橙色所示,EV層級如藍(lán)色所示。在引用關(guān)系中STRUCTURE1對象既可在BV也可在EV的runtime中存在,但是在BV和EV層級中是不可通過DB-API獲取,只能存在于FG層級。

圖5 ODX-LINK、SNREFS混合引用繼承對象繼承層引用關(guān)系和可見性
導(dǎo)入ECU-SHARE-DATA層后,繼承層進(jìn)行對象的ODX-LINK引用,如果引用的對象存在對同層對象的SNREF引用關(guān)系,當(dāng)前繼承層必須重寫存在于被導(dǎo)入層的SNREF的引用對象,否則引用失敗。圖6為ECU-SHARE-DATA導(dǎo)入后的對象的snref引用關(guān)系。

圖6 ECU-SHARE-DATA導(dǎo)入后的對象的snref引用關(guān)系
導(dǎo)入ECU-SHARE-DATA層后,繼承層進(jìn)行對象的ODX-LINK引用,如果引用的對象存在對同層對象的ODX-link引用關(guān)系,當(dāng)前繼承層在Runtime中可以繼續(xù)保持導(dǎo)入層對象的引用關(guān)系和對象的內(nèi)容,但是引用對象在當(dāng)前繼承層不可見。同時,即使繼承層重寫引用對象也不會對原有的繼承關(guān)系產(chǎn)生影響,但是如在當(dāng)前繼承層使用同名的對象即為重寫對象 (被繼承層對象在繼承層不可見)。圖7為ECUSHARE-DATA導(dǎo)入后的對象的ODX-LINK引用關(guān)系。

圖7 ECU-SHARE-DATA導(dǎo)入后的對象的ODX-LINK引用關(guān)系
繼承層重寫被繼承層對象后,繼承層的對象將不再擁有被繼承層對象的引用關(guān)系,即所有的引用關(guān)系需要在繼承層重新創(chuàng)建。
圖6和圖7中分別對ECU-SHARE-DATA層中導(dǎo)入的對象進(jìn)行了重寫,重寫對象的引用關(guān)系將不會被繼承STRUCTURE1,不會繼承ECU-SHARE-DATA的STRUCTURE的引用關(guān)系。
在繼承層可以通過消除繼承的方式完成對被繼承層對象的去除,同時可以通過使用ODX-LINK再次實(shí)現(xiàn)對消除對象的引用。注意不能夠使用SN-REF創(chuàng)建對消除對象的引用,否則將出現(xiàn)引用對象錯誤。圖8為消除繼承中ODX-LINK和snref引用實(shí)現(xiàn)。

圖8 消除繼承中ODX-LINK和snref引用實(shí)現(xiàn)
1)ODX數(shù)據(jù)庫中值繼承思想使得診斷數(shù)據(jù)能夠在ECU和ECU變種之間進(jìn)行診斷數(shù)據(jù)的重用,構(gòu)建診斷數(shù)據(jù)的開發(fā)架構(gòu)。
2)通過值繼承方式一般繼承和導(dǎo)入繼承合理地設(shè)計數(shù)據(jù)結(jié)構(gòu)。
3)通過不同值繼承方式下的不同的繼承邏輯關(guān)系進(jìn)行數(shù)據(jù)結(jié)構(gòu)的模塊化設(shè)計,充分運(yùn)用對象的繼承關(guān)系和不同環(huán)境的狀態(tài)。
4)本文的研究結(jié)論,對通過ODX創(chuàng)建分析診斷數(shù)據(jù)庫和設(shè)備解析ODX數(shù)據(jù)庫的設(shè)計和使用有重大的參考價值。