【摘" 要】近些年,隨著歐洲新能源電動汽車領(lǐng)域的發(fā)展,國際標(biāo)準(zhǔn)化組織制定了ISO 15118系列通信標(biāo)準(zhǔn),該標(biāo)準(zhǔn)對車-樁通信交互進(jìn)行了定義。EXI格式作為協(xié)議底層傳輸?shù)妮d體,在通信過程中,用以實現(xiàn)在受限線路上進(jìn)行高效傳輸。文章通過描述通信標(biāo)準(zhǔn)中定義的數(shù)據(jù)結(jié)構(gòu)的解析方法,獲取事件碼與元素層級結(jié)構(gòu)。通過采用遞歸模型,逐步完成對復(fù)雜元素的深入,由復(fù)雜元素轉(zhuǎn)變?yōu)槎鄠€簡單元素,并通過完成簡單元素的編解碼,從而實現(xiàn)整個通信消息的編解碼。最后通過EXI編解碼測試驗證設(shè)計結(jié)果。
【關(guān)鍵詞】數(shù)據(jù)交換技術(shù);新能源充電;EXI
中圖分類號:U469.72" " 文獻(xiàn)標(biāo)識碼:A" " 文章編號:1003-8639(2025)03-0038-05
Application of EXI Codec in European Standard Electric Vehicle Charging
【Abstract】In recent years,with the development of new energy electric vehicles in Europe,the International Organization for Standardization has formulated ISO15118 series communication standards. As the carrier of the underlying transmission format,EXI is more efficiently and extensibility than traditional XML format on a restricted channel. This paper describes the design of the analytic method for the data structure defined in the communication standard to obtain the event code and element hierarchy. By adopting recursive model,the complex elements are gradually transformed into simple elements,and the codecs of simple elements are completed to realize the codecs of the whole communication message. And finally,the design results are verified by EXI codec test.
【Key words】data exchange technology;new energy charging;EXI
0" 引言
在歐洲,近年來新能源電動汽車不僅用于解決交通代步問題,而且由于其具備大容量電池的特點,可作為移動充電寶對外放電。因此,國際標(biāo)準(zhǔn)化組織參考ISO 15118中制定的通信接口標(biāo)準(zhǔn)及近些年的應(yīng)用經(jīng)驗,于2022年4月,發(fā)布了新一代道路車輛通信接口標(biāo)準(zhǔn),即ISO 15118-20[1]。此標(biāo)準(zhǔn)除了完善上一代道路車輛V2G通信接口標(biāo)準(zhǔn)外,主要引入了反向充電的通信交互定義,使得新能源電動汽車作為移動充電寶向外放電成為可能。
ISO 15118標(biāo)準(zhǔn)中,EXI(Efficient XML Interchange,高效XML交換)以其優(yōu)秀的高效性及可擴(kuò)展性,取代了其他通信編解碼方式。ISO 15118-20發(fā)布了以XSD格式的XML Schema模式規(guī)約,制定了通信中需要使用的各項元素。本文根據(jù)ISO 15118-20中XML Schema的定義,結(jié)合W3C高效XML交換(EXI)格式1.0中描述的編解碼標(biāo)準(zhǔn),進(jìn)行了編解碼方面的研究實現(xiàn)及測試設(shè)計。目前,國內(nèi)對于EXI編解碼的研究較少,而在新能源電動汽車領(lǐng)域與EXI編解碼技術(shù)結(jié)合的經(jīng)驗也十分匱乏,本文為此提供一個新思路。
1" EXI編解碼技術(shù)特點
EXI編解碼稱之為高效XML交換,主要在于其可采用二進(jìn)制流的形式,實現(xiàn)數(shù)據(jù)交互[2]。以往XML以其嚴(yán)謹(jǐn)?shù)母袷蕉x,廣受業(yè)內(nèi)設(shè)計研發(fā)人員的青睞。但由于其冗余的文本格式框架,龐大的交互數(shù)據(jù)報文,降低了通信交互中的傳輸效率[3]。在需要高速交互或資源受限的場景中,需要更短小的報文交互設(shè)計[4]。
1.1" 高效性
EXI編解碼技術(shù)的高效性,表現(xiàn)在其可以使用二進(jìn)制流來表示以往龐大的數(shù)據(jù)報文。以ISO 15118-20中定義的一條通信消息PowerDeliveryReq為例,JSON格式與EXI格式的對比見表1。
根據(jù)報文字節(jié)長度,可以得到下面公式:
ΔR=(L1-L2)/L1×100%
在傳輸同樣內(nèi)容的情況下,XML格式(L1)與EXI格式(L2)對比時,L1為222字節(jié),L2為38字節(jié)。因此可得EXI報文交互效率提升了約82.88%。JSON格式(L1)與EXI格式(L2)對比時,L1為137字節(jié),L2為38字節(jié),因此可得EXI報文交互效率提升了約72.26%。
1.2" 可擴(kuò)展性
EXI編解碼中,根據(jù)標(biāo)準(zhǔn)設(shè)計,其可分為內(nèi)置語法和模式語法。不論內(nèi)置還是模式語法,在解析過程中都是可學(xué)習(xí)的。這種可學(xué)習(xí)性表現(xiàn)在編解碼的過程中對于元素的解析上。EXI編解碼中使用QName(Qualified Name,限定名稱)來對元素進(jìn)行匹配,對于匹配的元素,可以快速分配事件碼,確定需要傳輸?shù)臄?shù)據(jù)結(jié)構(gòu)。而對于無法匹配的未知元素,則提供通配符的形式匹配,并在匹配后自動學(xué)習(xí),將新元素加入元素列表,并按照字典序進(jìn)行排序以獲得新的事件碼。
2" XSD解析器設(shè)計
實現(xiàn)歐標(biāo)電動汽車充電通信交互共需要完成兩項設(shè)計:首先是XSD文檔解析的設(shè)計,即對通信標(biāo)準(zhǔn)ISO 15118-20中發(fā)布的XSD文檔進(jìn)行解析。通過解析,以獲取標(biāo)準(zhǔn)中制定的消息結(jié)構(gòu)層級定義、數(shù)據(jù)類型以及事件碼。其次是編解碼的設(shè)計,即通過使用事件碼、消息結(jié)構(gòu)及數(shù)據(jù)類型的層級定義,完成編碼(將數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為EXI格式的二進(jìn)制流)和解碼(將EXI格式的二進(jìn)制流轉(zhuǎn)化為對應(yīng)數(shù)據(jù)結(jié)構(gòu))。
在新能源電動汽車充電交互過程中,數(shù)據(jù)報文需要根據(jù)標(biāo)準(zhǔn)提供的XSD文檔進(jìn)行EXI數(shù)據(jù)進(jìn)行編解碼,從而完成車-樁通信交互。通過XSD文檔解析,可將ISO 15118-20標(biāo)準(zhǔn)中定義的數(shù)據(jù)元素進(jìn)行構(gòu)建,并確定消息事件碼。ISO 15118-20標(biāo)準(zhǔn)中,根據(jù)命名空間的不同,共計8份XSD文檔,用以針對不同充電場景應(yīng)用中對交互報文數(shù)據(jù)元素的需求,見表2。
EXI編解碼的核心工作之一,就是通過這些全局元素定義,確定該元素在消息交互過程中使用的事件碼。
2.1" 事件碼確定
不論常用的XML結(jié)構(gòu),還是JSON結(jié)構(gòu),甚至其他編程中采用的數(shù)據(jù)結(jié)構(gòu),都會有一種固定的數(shù)據(jù)格式。這種數(shù)據(jù)格式?jīng)Q定了數(shù)據(jù)交互中需要傳輸?shù)幕緮?shù)據(jù)類型、種類、數(shù)量和層次結(jié)構(gòu)。EXI編解碼也不例外。不同的是,EXI編解碼并非使用冗余的字符串進(jìn)行格式劃分與表達(dá),而是采用事件碼。
可以將事件碼簡單理解為通往終點的路徑編號。在ISO 15118-20的XSD文件中,自頂向下,可以將一條通信交互消息解析為文檔-文檔內(nèi)容-消息復(fù)雜元素。消息復(fù)雜元素還可以繼續(xù)向下解析,直至簡單元素。在這個解析的過程中,會依次經(jīng)過多個事件碼,每個事件碼表達(dá)了解析該層時的路徑選擇。在解析每層級的事件碼時,根據(jù)XSD中定義的層級元素下的子元素數(shù)量,按照字典序排列,并從0開始依次遞增分配事件碼,如圖1所示,括號中表示事件碼數(shù)值??梢娨晕臋n起始,文檔內(nèi)容事件碼為0,下一級PowerDeliveryReq消息事件碼為21。
2.2" 層級元素解析
在確定了事件碼后,XSD解析器的另一項核心功能就是解析消息的層級元素。解析層級消息元素的目的,就是將XSD文檔中定義的消息元素進(jìn)行分解,為每項復(fù)雜元素依次標(biāo)注其子元素并分配事件碼。對于子元素依然是復(fù)雜元素的,繼續(xù)向下層遞歸深入;對于子元素是簡單元素的,向后查看其兄弟元素,若兄弟元素為復(fù)雜元素,則遞歸深入,否則返回父元素。因此,消息的層級元素解析可以理解為一條消息的樹狀構(gòu)成展開。以一條消息為例,如圖2所示,通過遞歸的方式進(jìn)行層級元素解析。
消息的根節(jié)點為文檔,確定事件碼后,判斷其是否存在子元素,如果存在,則進(jìn)入遞歸子流程,解析子元素,否則標(biāo)注該元素。之后判斷其是否存在相鄰兄弟元素,如果存在,則進(jìn)入遞歸子流程,解析下一相鄰兄弟元素,否則返回入口。
在遞歸過程中,XSD解析器會依次向其子節(jié)點及兄弟節(jié)點擴(kuò)展,不論其為子節(jié)點還是兄弟節(jié)點。在該過程中,將整個解析遞歸路徑遇到的事件碼和元素均標(biāo)注并打印。若無子元素或兄弟元素時返回上一層,直至返回到文檔根節(jié)點。
遞歸的層級根據(jù)ISO 15118-20標(biāo)準(zhǔn)發(fā)布的XSD文件決定,通常不超過10層。
通過對XSD文檔的層級元素解析,可以依次輸出并打印出自文檔開始,向下展開的每個消息及其子元素及兄弟元素的事件碼及元素名稱,以供EXI編解碼時使用。
3" EXI編解碼實現(xiàn)設(shè)計
EXI編解碼分為EXI編碼及EXI解碼兩種操作。EXI編碼,即將結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制流的操作;EXI解碼,即將二進(jìn)制流轉(zhuǎn)換為結(jié)構(gòu)數(shù)據(jù)的操作。EXI編碼和解碼可互為逆向操作。
EXI編解碼需要使用XSD解析器解析XSD文檔,解析結(jié)果包含了消息層級的樹狀展開及對應(yīng)層級的事件碼。
3.1" 編解碼步驟
可參考XSD解析器對層級元素解析的步驟,進(jìn)行EXI的編解碼操作。下面以PowerDeliveryReq消息的解析說明EXI編解碼的步驟。
1)首先,EXI編解碼的入口為根節(jié)點文檔。根據(jù)XSD解析器的結(jié)果,其下只包含1項子元素且為復(fù)雜元素,事件碼為0。進(jìn)入遞歸處理,解析子元素。
2)其次,子元素的解析時,根據(jù)XSD解析器的結(jié)果,其中也包含多項子元素,而其中Power DeliveryReq消息的事件碼為21且為復(fù)雜元素。解析該子元素,進(jìn)入遞歸處理。
3)以此類推,在遞歸處理中,當(dāng)遇到簡單元素時,對簡單元素進(jìn)行編解碼,之后完成結(jié)尾事件碼的編解碼后返回上一元素;如果再次遇到復(fù)雜元素,則再次深入進(jìn)行遞歸處理,解析該子元素。
4)最后,在遞歸處理全部返回后,回到根節(jié)點文檔時,完成末尾補(bǔ)位,編解碼全部流程結(jié)束。
3.2" 復(fù)雜元素的編解碼
Schema中定義了多種復(fù)雜元素,仍以Power DeliveryReq消息為例,Schema中對其定義如圖3所示。
可知該復(fù)雜元素PowerDeliveryReqType有5個子元素,依次為Header(來自于繼承的V2GRequestType)、EVProcessing、ChargeProgress、EVPowerProfile、BPT_ChannelSelection。分別將這5個元素記錄為Element1~Element5。
并且可見EVPowerProfile與BPT_ChannelSelection的最小可能出現(xiàn)0次,表示可能出現(xiàn)或可能不出現(xiàn)。因此進(jìn)行編解碼時,狀態(tài)如圖4所示。
對于PowerDeliveryReq消息,從StartTag(起始標(biāo)識)進(jìn)入。StartTag后只有1個可選元素Header,即Element1,需要經(jīng)過SE(Header)通路到達(dá)。SE(StartElement,起始元素事件)表示通往Header的事件碼。
對事件碼進(jìn)行編解碼。事件碼的值來自XSD解析器,使用簡易元素類型“n-bit Unsigned Integer”的編解碼方式進(jìn)行編解碼。完成事件碼的編解碼后到達(dá)Element1。
對Element1判斷,若Header元素為復(fù)雜元素,則進(jìn)入遞歸編解碼。
當(dāng)遞歸返回后,同樣只存在一個可選元素EVProcessing,即Element2,需要經(jīng)過SE(EVProcessing)通路到達(dá)。對事件碼SE(EVProcessing)編解碼。
對Element2判斷,若EVProcessing元素為復(fù)雜元素,則進(jìn)入遞歸編解碼。
當(dāng)遞歸返回后,同樣只存在一個可選元素ChargeProgress,即Element3,需要經(jīng)過SE(ChargeProgress通路到達(dá)。對事件碼SE(ChargeProgress)編解碼。
對Element3判斷,ChargeProgress元素為簡單元素,不再進(jìn)行遞歸編解碼。對簡單元素ChargeProgress編解碼后,出現(xiàn)兩條路徑:其一為EVPower Profile不出現(xiàn)時,則通過編解碼EE(End Element,終止元素)事件碼返回上層DocContent;其二為EVPowerProfile出現(xiàn)時,可通過SE(EVPowerProfile)事件碼到達(dá)Element4,即EVPowerProfile。
對Element4判斷,若EVPowerProfile元素為復(fù)雜元素,則進(jìn)入遞歸編解碼。
當(dāng)遞歸返回后,出現(xiàn)兩條路徑:其一為BPT_ChannelSelection不出現(xiàn)時,通過編解碼EE事件碼返回上層DocContent;其二為BPT_ChannelSelection出現(xiàn)時,可通過SE(BPT_ChannelSelection)事件碼到達(dá)Element5,即BPT_ChannelSelection。
對Element5判斷,BPT_ChannelSelection為簡單元素,不再進(jìn)行遞歸編解碼,對BPT_ChannelSelection元素編解碼后,只存在1條通路,通過編解碼EE事件碼返回上層DocContent。
當(dāng)返回上層DocContent時,復(fù)雜元素Power DeliveryReq的編解碼結(jié)束。
3.3" 簡單元素的編解碼
EXI標(biāo)準(zhǔn)制定了共計11種內(nèi)置的簡單元素類型,如表3所示。
簡單元素的編解碼方式按照W3C于2014年2月發(fā)布的高效XML交換(EXI)格式1.0推薦標(biāo)準(zhǔn)實現(xiàn)編解碼。
4" EXI編解碼測試
為了證明EXI編解碼的正確性,需要通過EXI編解碼測試程序,對EXI編解碼器的編解碼處理結(jié)果進(jìn)行測試。
對編碼而言,需要測試EXI編解碼器能否對ISO 15118-20制定的消息結(jié)構(gòu)編碼,輸出可被其他編解碼器解析的二進(jìn)制流。
對解碼而言,需要測試EXI編解碼器能否對其他編解碼器輸出的EXI數(shù)據(jù)進(jìn)行解碼,并以ISO 15118-20制定的消息結(jié)構(gòu)輸出為具體的數(shù)據(jù)結(jié)構(gòu)。
4.1" 測試標(biāo)準(zhǔn)
使用開源社區(qū)版的編解碼器EXICodec.jar結(jié)合ISO 15118-20協(xié)議中的消息,完成編解碼標(biāo)準(zhǔn)的設(shè)計。以PowerDeliveryReq為例,使用EXICodec.jar得到其編解碼結(jié)果,作為驗證編解碼器正確性的標(biāo)準(zhǔn),PowerDeliveryReq消息標(biāo)準(zhǔn)對照見表4。
4.2" 測試實現(xiàn)
EXI編解碼的測試形式以測試用例的形式完成。一項測試中,可以有多個測試用例。每個測試用例均有參數(shù)、輸入、輸出。在完成EXI編解碼后,根據(jù)測試標(biāo)準(zhǔn)比對輸出的結(jié)果。測試用例的數(shù)據(jù)結(jié)構(gòu)見表5。
4.3" 測試流程
測試的執(zhí)行,按照預(yù)先定義的測試用例依次進(jìn)行。測試流程如圖5所示。
1)初始化。在該階段,對測試過程中需要使用的變量及流緩存進(jìn)行初始化,完成變量初始值分配,清空輸出緩存中的數(shù)據(jù)。
2)類型判斷。在該階段,對測試用例的類型進(jìn)行判斷,當(dāng)測試類型為編碼時,使用編碼函數(shù);當(dāng)測試類型為解碼時,使用解碼函數(shù)。
3)編解碼。編碼時,對inputDoc中定義的標(biāo)準(zhǔn)結(jié)構(gòu)進(jìn)行編碼,生成outputString字符串用以表示編碼輸出。解碼時,對inputString中定義的標(biāo)準(zhǔn)EXI內(nèi)容進(jìn)行解碼,生成outputDoc結(jié)構(gòu),用以表示解碼輸出。
4)結(jié)果輸出。對編解碼結(jié)構(gòu)采用不同的判斷方式,與標(biāo)準(zhǔn)輸入進(jìn)行判斷,當(dāng)與標(biāo)準(zhǔn)一致,則說明編解碼正確。
4.4" 判斷方法設(shè)計
1)EXI編碼的判斷方法。輸出的outputString中,以字符串的形式表示了編碼后的結(jié)果。通過將其與inputString中的EXI輸入內(nèi)容進(jìn)行字符串比對,可確認(rèn)EXI編碼操作的正確性。
2)EXI解碼的判斷方法。輸出的outputDoc中,以結(jié)構(gòu)的形式表示了解碼后的數(shù)據(jù)結(jié)構(gòu)。通過將其與inputDoc中的標(biāo)準(zhǔn)結(jié)構(gòu)內(nèi)容進(jìn)行內(nèi)存比對,可確認(rèn)EXI解碼操作的正確性。
4.5" 測試實例
以PowerDeliveryReq消息為例,在上位機(jī)進(jìn)行測試時,分為編碼測試及解碼測試。
1)編碼測試用例。將表4中的JSON結(jié)構(gòu)轉(zhuǎn)為struct類型的inputDoc結(jié)構(gòu),以此作為待編碼的數(shù)據(jù)結(jié)構(gòu)進(jìn)行編碼。編碼后,將輸出的outputString與輸入的inputString進(jìn)行字符串自動比對,測試編碼的正確性。
2)解碼測試用例。將表4中的EXI字符串作為inputString,以此作為待解碼的數(shù)據(jù)進(jìn)行解碼。解碼后,將輸出的outputDoc與輸入的inputDoc結(jié)構(gòu)進(jìn)行內(nèi)存比對,測試解碼的正確性。測試結(jié)果如圖6所示,可見編解碼后的內(nèi)容與預(yù)期的標(biāo)準(zhǔn)一致,編解碼設(shè)計成功。
5" 結(jié)語
在歐標(biāo)電動汽車充電的報文交互中,采用EXI編解碼技術(shù),極大縮小了通信交互中傳輸?shù)膱笪拈L度,使傳輸效率得到了提升,尤其適合有限的傳輸信道。EXI的編解碼技術(shù)采用XSD解析器,完成了對通信標(biāo)準(zhǔn)中制定的元素層級結(jié)構(gòu)及事件碼的解析。解析后,根據(jù)文檔層級結(jié)構(gòu)采用遞歸策略,依次對層級結(jié)構(gòu)中的復(fù)雜元素展開深入,最小化為簡單結(jié)構(gòu)。通過完成簡單結(jié)構(gòu)的編解碼,實現(xiàn)對整個消息的編解碼,最終通過測試用例驗證。
參考文獻(xiàn)
[1] ISO 15118-20:2022,Road vehicles—Vehicle to grid communication interface-Part 20:2nd generation network layer and application layer requirements[S].
[2] 何錫祺,陶文偉,莫宇,等.基于EXI的配網(wǎng)信息模型交換格式研究[J].電力系統(tǒng)保護(hù)與控制,2018,46(16):135-140.
[3] 周游,陸安江.XML與對象關(guān)系模型之間的轉(zhuǎn)換[J].通信技術(shù),2019,52(6):1541-1548.
[4] 劉洋.基于數(shù)據(jù)交換技術(shù)的信息集成平臺開發(fā)[J].信息技術(shù)與信息化,2021(12):133-135.