龍 可,呂良慶
(1.國(guó)家空間科學(xué)中心 中國(guó)科學(xué)院復(fù)雜航天系統(tǒng)電子信息技術(shù)重點(diǎn)實(shí)驗(yàn)室,北京 100190; 2.中國(guó)科學(xué)院大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,北京 100049)
CAN總線通信協(xié)議標(biāo)準(zhǔn)主要規(guī)定的是鏈路層協(xié)議,在實(shí)際任務(wù)中需要根據(jù)任務(wù)需要設(shè)計(jì)通信協(xié)議。由于任務(wù)需求各不相同,因此對(duì)應(yīng)的通信協(xié)議也各不相同,這使得任務(wù)之間難以通用,對(duì)項(xiàng)目合作時(shí)異構(gòu)系統(tǒng)之間的協(xié)調(diào)工作造成了困難[1]。引入即插即用設(shè)計(jì)思路有利于解決這一問(wèn)題?,F(xiàn)有的CAN總線即插即用方法多數(shù)是基于地面通用即插即用技術(shù)[2],對(duì)設(shè)備信息描述的方法往往是個(gè)性化的,這不利于航天架構(gòu)異構(gòu)子網(wǎng)的標(biāo)準(zhǔn)化接入。目前,采用電子數(shù)據(jù)單(electronic data sheet,EDS)技術(shù)來(lái)管理設(shè)備信息已成為一種主流[3]。例如空間數(shù)據(jù)系統(tǒng)咨詢委員會(huì)(consultative committee for space data system,CCSDS)提出的航天器接口業(yè)務(wù)(spacecraft onboard interface services,SOIS)[4],采用SOIS EDS(SEDS)對(duì)部件信息進(jìn)行描述[5];美國(guó)空軍實(shí)驗(yàn)室(air force research laboratory,AFRL)提出的SPA(space PnP avionics)計(jì)劃,利用xTEDS(XML transducer electronic data sheet)來(lái)管理所有設(shè)備和服務(wù)[6]。在上述架構(gòu)中,CAN總線作為底層子網(wǎng)之一,需要在總線內(nèi)部先解決設(shè)備級(jí)的即插即用[7],然后與上層的應(yīng)用和業(yè)務(wù)過(guò)程進(jìn)行銜接。
在CAN總線中增加即插即用特性,可以在不改變各自節(jié)點(diǎn)原有通信協(xié)議的基礎(chǔ)上,建立它們之間的互通性,提高航天器的協(xié)調(diào)和集成效率。即插即用技術(shù)的實(shí)現(xiàn)思路一般可以歸納為以下幾個(gè)步驟:設(shè)備編址、設(shè)備發(fā)現(xiàn)、設(shè)備描述、設(shè)備控制、設(shè)備事件和設(shè)備表達(dá)[8]。結(jié)合星載CAN總線的實(shí)際特點(diǎn),擬定了CAN總線即插即用的整體流程,如圖1所示。
圖1 CAN PnP整體流程
為方便即插即用的過(guò)程描述,將系統(tǒng)主計(jì)算機(jī)所在的CAN總線節(jié)點(diǎn)定義為主節(jié)點(diǎn)(master node),其余接入節(jié)點(diǎn)為從節(jié)點(diǎn)(slave node)。航天任務(wù)中CAN總線通信協(xié)議對(duì)系統(tǒng)中各節(jié)點(diǎn)的地址做了固定分配。
用于描述設(shè)備信息的EDS可以參考IEEE1451.0[9]的TEDS格式。當(dāng)主節(jié)點(diǎn)收到從節(jié)點(diǎn)的EDS消息,對(duì)消息內(nèi)容進(jìn)行解析、存儲(chǔ),并依據(jù)解析結(jié)果進(jìn)行消息的編排,以啟動(dòng)雙方的正常通信,這一過(guò)程需考慮單從節(jié)點(diǎn)、多從節(jié)點(diǎn)的接入以及撤出等多種場(chǎng)景。從節(jié)點(diǎn)方面只需按照協(xié)議約定的格式進(jìn)行EDS內(nèi)容的填寫(xiě),遵循握手協(xié)議發(fā)送給主節(jié)點(diǎn)。
CAN總線只是航天器綜合系統(tǒng)架構(gòu)底層子網(wǎng)的一種,若系統(tǒng)中還有其它異構(gòu)子網(wǎng),則需進(jìn)行異構(gòu)子網(wǎng)之間的協(xié)議同構(gòu),即匯聚層的設(shè)計(jì)。為方便用戶填寫(xiě)EDS,還需考慮EDS的生成工具和解析工具的設(shè)計(jì),構(gòu)建EDS工具鏈,使CAN總線即插即用協(xié)議能在實(shí)際應(yīng)用中推廣。
因此,CAN總線即插即用解決方案涉及的主要內(nèi)容包括:①EDS設(shè)計(jì);②握手協(xié)議設(shè)計(jì);③主節(jié)點(diǎn)設(shè)計(jì)(主要是消息調(diào)度算法設(shè)計(jì));④從節(jié)點(diǎn)設(shè)計(jì);⑤匯聚層設(shè)計(jì);⑥EDS工具鏈設(shè)計(jì)。
為了實(shí)現(xiàn)即插即用,需要在CAN總線技術(shù)規(guī)范基礎(chǔ)上進(jìn)行必要的約定。①主節(jié)點(diǎn)地址固定為0,確保主節(jié)點(diǎn)消息的發(fā)送優(yōu)先權(quán),明確從節(jié)點(diǎn)發(fā)送EDS消息的目標(biāo)地址;②不支持從節(jié)點(diǎn)之間的通信;③消息首幀的數(shù)據(jù)場(chǎng)前兩字節(jié)約定為消息類型,可根據(jù)任務(wù)需要進(jìn)行約定。細(xì)分為消息子類型和子編號(hào),各占一個(gè)字節(jié)。其中EDS消息類型定義為0xEDXX。
定義CAN總線表的概念來(lái)描述總線上消息的運(yùn)行情況,其作用類似于列車時(shí)刻表,它由一個(gè)個(gè)消息單元順序組成,每個(gè)消息單元包括一條消息的類型、地址、消息時(shí)間。由周期性消息組織而成的總線表稱為主總線表,突發(fā)性的消息編排入插入總線表。
對(duì)用于描述即插即用過(guò)程的相關(guān)時(shí)間概念做以下定義(如圖2所示):
圖2 時(shí)間概念說(shuō)明
(1)消息時(shí)間(TMSG):一條消息傳輸所需的時(shí)間與幀間隙之和。CAN總線標(biāo)準(zhǔn)數(shù)據(jù)幀包含44 bit-108 bit,考慮星上對(duì)CAN總線幀間隙Titv的常見(jiàn)要求在0.2 ms-0.6 ms(此處取0.4 ms),以常用通信速率500 Kbps為例計(jì)算,即發(fā)送1 bit數(shù)據(jù)耗時(shí)2 μs。當(dāng)從節(jié)點(diǎn)接入系統(tǒng)時(shí),單幀數(shù)據(jù)域?yàn)榭盏南ⅲ琓MSG=44 bit×2 μs/bit+400 μs=488 μs,一個(gè)字節(jié)的數(shù)據(jù)傳輸時(shí)間為8 bit×2 μs /bit=16 μs,數(shù)據(jù)域每增加1個(gè)字節(jié),消息幀傳輸時(shí)間增加16 μs,帶8字節(jié)數(shù)據(jù)的消息幀TMSG為616 μs。
(2)小幀周期(TFRM):主總線表中一個(gè)小幀內(nèi)所有消息的TMSG累加和。為確保主總線表周期的相對(duì)穩(wěn)定,消息在不上線的小幀內(nèi)仍然占用該消息的TMSG時(shí)間。
(3)消息間隔(TITV):同一消息連續(xù)兩次傳輸之間的最小間隔,是從節(jié)點(diǎn)的期望值。
下面以標(biāo)準(zhǔn)幀格式為例進(jìn)行說(shuō)明。
為了增強(qiáng)協(xié)議的通用性,在一定程度上適應(yīng)不同的CAN總線通信協(xié)議,對(duì)地址分配、總線占用以及幀類型等方面的不同約定,本文設(shè)計(jì)了兩種形式的EDS:握手EDS(shake-hand EDS,SH EDS)和通信EDS(slave communication EDS,SC EDS)。SH EDS交代節(jié)點(diǎn)地址、幀類型、總線占用等信息,解決通信格式的識(shí)別問(wèn)題。SC EDS用以描述從節(jié)點(diǎn)的個(gè)性化鏈路層通信需求,說(shuō)明消息類型、方向、長(zhǎng)度、最小期望間隔等信息,解決總線通信的消息編排問(wèn)題。
3.1.1 SH EDS格式設(shè)計(jì)
SH EDS為數(shù)據(jù)幀,幀頭仲裁場(chǎng)的11位標(biāo)識(shí)符格式見(jiàn)表1。
表1 SH EDS仲裁場(chǎng)格式
D10~D5:由節(jié)點(diǎn)自行定義,以適應(yīng)不同節(jié)點(diǎn)遵循的不同協(xié)議。
D4~D0:節(jié)點(diǎn)地址,00000代表主節(jié)點(diǎn),其余用于從節(jié)點(diǎn)地址。
SH EDS數(shù)據(jù)場(chǎng)包含8字節(jié),前2字節(jié)為消息類型,方便初始握手時(shí)節(jié)點(diǎn)雙方的第一次識(shí)別,取值0xED00~0xED03(分別對(duì)應(yīng)單幀SH EDS、多幀SH EDS的起始幀、中間幀和尾幀)。
SH EDS數(shù)據(jù)場(chǎng)后6字節(jié)是正式內(nèi)容,解釋仲裁場(chǎng)D10~D5位的個(gè)性化格式約定。如果仲裁場(chǎng)D10~D5位有多個(gè)域的劃分,則每一個(gè)域?qū)?yīng)一個(gè)字節(jié),最多6個(gè)域(擴(kuò)展幀域的數(shù)量可能大于6)。每個(gè)字節(jié)的格式都見(jiàn)表2。
表2 SH EDS數(shù)據(jù)場(chǎng)字節(jié)格式
D7~D4:標(biāo)識(shí)符類型,具體可根據(jù)實(shí)際工程需要自定義,例如表3。
表3 標(biāo)識(shí)符類型定義實(shí)例
D3~D0:該標(biāo)識(shí)符類型在仲裁場(chǎng)中所占的位數(shù)(1~6)。
3.1.2 SC EDS格式設(shè)計(jì)
主節(jié)點(diǎn)在解析完SH EDS后,開(kāi)始向該從節(jié)點(diǎn)發(fā)送SC EDS請(qǐng)求消息,該消息為單幀數(shù)據(jù)幀,仲裁場(chǎng)內(nèi)容與SH EDS相同,消息類型為0xED04,數(shù)據(jù)場(chǎng)中的后6字節(jié)填0。
從節(jié)點(diǎn)收到請(qǐng)求消息后,向主節(jié)點(diǎn)發(fā)送SC EDS,用以描述其個(gè)性化的鏈路層通信需求,SC EDS消息仲裁場(chǎng)內(nèi)容與SH EDS相同。數(shù)據(jù)場(chǎng)的具體格式見(jiàn)表4。
表4 SC EDS數(shù)據(jù)場(chǎng)格式
表4中,EDS識(shí)別符:取值0xED05;EDS長(zhǎng)度:消息定義部分的長(zhǎng)度;消息定義:描述節(jié)點(diǎn)消息,每個(gè)消息的定義占用6個(gè)字節(jié),分別包括消息類型、消息方向、消息長(zhǎng)度和消息最小期望間隔。具體格式見(jiàn)表5。
表5 SC EDS中消息定義格式
①消息方向T/R:指該消息是由從節(jié)點(diǎn)發(fā)送(1)或接收(0);②消息長(zhǎng)度:0~32 767,單位字節(jié);③U/D:默認(rèn)上下線。指該子地址消息在安排入總線表時(shí),是默認(rèn)上線(1)還是默認(rèn)不上線(0),默認(rèn)上線代表在從第一個(gè)運(yùn)行周期開(kāi)始該類消息一直周期性傳輸,直到從節(jié)點(diǎn)主動(dòng)請(qǐng)求其下線(下線消息類型:0xFFFF)或者異常結(jié)束,主節(jié)點(diǎn)可以通過(guò)改變?cè)撐坏臓顟B(tài)對(duì)消息實(shí)現(xiàn)上下線控制;④間隔:代表從節(jié)點(diǎn)期望的該消息傳輸最小間隔,全0代表該消息非周期性傳輸,即突發(fā)性消息,期望的最小間隔取值0 ms~32 767 ms。
CAN總線即插即用握手時(shí)序圖如圖3所示。
圖3 CAN PnP握手時(shí)序圖
具體的握手步驟如下:
(1)從節(jié)點(diǎn)接入過(guò)程:
步驟1 從節(jié)點(diǎn)以500 ms周期性發(fā)送SH EDS。
步驟2 主節(jié)點(diǎn)收到SH EDS后解析從節(jié)點(diǎn)個(gè)性化通信格式并進(jìn)行記錄。
步驟3 主節(jié)點(diǎn)發(fā)送SC EDS請(qǐng)求消息。
步驟4 從節(jié)點(diǎn)收到SC EDS請(qǐng)求消息后,停止發(fā)送SH EDS,并向主節(jié)點(diǎn)發(fā)送SC EDS消息。
步驟5 主節(jié)點(diǎn)收到SC EDS后解析從節(jié)點(diǎn)對(duì)于消息的約定情況并進(jìn)行記錄。
步驟6 根據(jù)SC EDS解析內(nèi)容編排新的總線表并調(diào)整總線周期:同類型消息按從節(jié)點(diǎn)的接入順序編排;同一節(jié)點(diǎn)多次發(fā)送EDS按最新EDS定義的消息情況進(jìn)行編排,原紀(jì)錄被覆蓋。
步驟7 按照SH EDS定義的通信格式,啟動(dòng)總線表運(yùn)行,正常通信建立。
步驟8 重復(fù)以上步驟實(shí)現(xiàn)多個(gè)從節(jié)點(diǎn)的加入。
(2)從節(jié)點(diǎn)撤出過(guò)程:
步驟1 當(dāng)某一從節(jié)點(diǎn)連續(xù)5次出現(xiàn)應(yīng)答超時(shí),且發(fā)送恢復(fù)幀和切換總線不能恢復(fù),或從節(jié)點(diǎn)發(fā)送下線指令,可判定其下線。
步驟2 主節(jié)點(diǎn)刪除該節(jié)點(diǎn)的通信格式和信息記錄。
步驟3 重新計(jì)算總線周期,調(diào)整總線表。
步驟4 主節(jié)點(diǎn)與其余從節(jié)點(diǎn)正常通信。
主節(jié)點(diǎn)設(shè)計(jì)主要考慮對(duì)從節(jié)點(diǎn)的EDS的傳輸、讀取和解析等過(guò)程的控制,并根據(jù)EDS進(jìn)行總線表的編排,以實(shí)現(xiàn)后續(xù)的正常通信。
3.3.1 總線表構(gòu)建算法
總線表構(gòu)建算法主要解決在從節(jié)點(diǎn)從無(wú)到有加入以及從一到多加入過(guò)程中,主節(jié)點(diǎn)進(jìn)行總線表編排時(shí)對(duì)各從節(jié)點(diǎn)消息的合理調(diào)度問(wèn)題,在滿足各節(jié)點(diǎn)消息傳輸需求的前提下,盡量減小接入和撤出節(jié)點(diǎn)時(shí)對(duì)系統(tǒng)穩(wěn)定性的影響??偩€表的編排遵循以下步驟:
(1) 第一個(gè)節(jié)點(diǎn)加入主總線表:
步驟1 主節(jié)點(diǎn)收到第一個(gè)SC EDS后,將其中所有TITV非零的消息按順序編入主總線表。
步驟2 累加其中所有消息的消息時(shí)間TMSG作為TFRM,若TFRM滿足TFRM≥max{TITV1…TITVn},說(shuō)明小幀周期能滿足所有消息對(duì)最小間隔的要求,否則,應(yīng)調(diào)整TFRM,拉長(zhǎng)最后一條消息的TMSG,拉長(zhǎng)的長(zhǎng)度為max{TITV1…TITVn}-TFRM。
(2)第N個(gè)節(jié)點(diǎn)加入主總線表:
步驟1 記錄當(dāng)前小幀周期為Tbase。
步驟3 若m=0或1,小幀不做復(fù)制,新接入節(jié)點(diǎn)的所有消息依次加入到該小幀中。
步驟5 所有消息插入完成后,計(jì)算新TFRM,若滿足TFRM≥max{TITV1…TITVn},編排結(jié)束,否則應(yīng)調(diào)整TFRM,拉長(zhǎng)最后一條消息的TMSG。
步驟6 若無(wú)后續(xù)節(jié)點(diǎn)的接入,該小幀即作為最終主總線表。
SC EDS中TITV為零的突發(fā)性消息順序編入插入總線表,將突發(fā)性消息與其觸發(fā)條件進(jìn)行關(guān)聯(lián)。
(3)節(jié)點(diǎn)撤出時(shí)總線表的編排:
步驟1 從主總線表和插入總線表中撤出該節(jié)點(diǎn)的所有消息。
步驟2 消息撤出完成后,計(jì)算新TFRM,若滿足TFRM≥max{TITV1…TITVn},編排結(jié)束,否則應(yīng)調(diào)整TFRM。
3.3.2 管理數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
設(shè)計(jì)了3種管理數(shù)據(jù)結(jié)構(gòu)來(lái)描述即插即用通信過(guò)程:通信特征表(FEATAB)、消息表(MSGTAB)和節(jié)點(diǎn)信息表(NODEINFOTAB)。
首先,通信特征表(FEATAB)用于記錄初始握手時(shí)從節(jié)點(diǎn)SH EDS中對(duì)其標(biāo)識(shí)符段的分配使用情況,按SH EDS中標(biāo)識(shí)符定義順序依次記錄其長(zhǎng)度和相對(duì)位置。
其次,消息表(MSGTAB)對(duì)SC EDS中定義的節(jié)點(diǎn)消息進(jìn)行記錄,包括消息地址、消息類型、消息長(zhǎng)度和消息間隔等,是系統(tǒng)建立的消息索引表,能在需要某條消息時(shí)快速查詢。
第三,節(jié)點(diǎn)信息表(NODEINFOTAB)中記錄每個(gè)節(jié)點(diǎn)的地址信息、FEATAB指針、消息數(shù)和MSGTAB指針,包含了一個(gè)節(jié)點(diǎn)的所有個(gè)性化信息,方便在節(jié)點(diǎn)加入撤出時(shí)的索引及消息的上下線控制。
3.3.3 基礎(chǔ)功能模塊設(shè)計(jì)
根據(jù)CAN總線即插即用握手協(xié)議,對(duì)其中每一個(gè)步驟涉及的交互對(duì)象、交互數(shù)據(jù)進(jìn)行了分析,繪制了圖4所示的CAN PnP主節(jié)點(diǎn)數(shù)據(jù)流。
圖4 CAN PnP主節(jié)點(diǎn)數(shù)據(jù)流
為完成CAN總線即插即用主節(jié)點(diǎn)的軟件設(shè)計(jì),主要需實(shí)現(xiàn)的功能包括:總線運(yùn)行控制、數(shù)據(jù)讀寫(xiě)、數(shù)據(jù)解析、總線表編排等。根據(jù)功能編寫(xiě)了如表6所示的基礎(chǔ)模塊。
表6 CAN PnP主節(jié)點(diǎn)基礎(chǔ)功能模塊
用戶可根據(jù)需求對(duì)基礎(chǔ)功能模塊進(jìn)行編寫(xiě)、擴(kuò)充,并與自定義系統(tǒng)進(jìn)行銜接,其中每個(gè)模塊可包括多個(gè)程序函數(shù)。
從節(jié)點(diǎn)的軟件只需按照CAN PnP協(xié)議,將個(gè)性化的SH EDS和SC EDS發(fā)送給主節(jié)點(diǎn)即可,建立握手后的通信過(guò)程按照從節(jié)點(diǎn)原有協(xié)議進(jìn)行。
如果在一個(gè)系統(tǒng)中存在多個(gè)具有即插即用能力的異構(gòu)子網(wǎng),則需要在它們之上設(shè)計(jì)匯聚層協(xié)議以解決系統(tǒng)上層業(yè)務(wù)和應(yīng)用的銜接和標(biāo)準(zhǔn)化訪問(wèn)問(wèn)題。參考CCSDS.850.0-G-2[4]對(duì)匯聚層的設(shè)計(jì),給出了匯聚層設(shè)計(jì)思路,如圖5所示。
圖5 匯聚層設(shè)計(jì)思路
匯聚層在鏈路協(xié)議子層可以采用冗余模型,即除了統(tǒng)一的路由功能和尋址功能外,其余功能都是平行設(shè)計(jì)。
路由功能旨在為上層應(yīng)用確定通信路徑,通過(guò)對(duì)子網(wǎng)的靜態(tài)數(shù)據(jù)和動(dòng)態(tài)數(shù)據(jù)進(jìn)行分析獲得。靜態(tài)數(shù)據(jù)指從上層應(yīng)用到下層子網(wǎng)和設(shè)備之間的邏輯地址與物理地址的轉(zhuǎn)換對(duì)應(yīng)關(guān)系,以及一些固定的通信特征,如最大通信速率、設(shè)置的通信速率、最小傳輸單元和最大傳輸單元等。動(dòng)態(tài)數(shù)據(jù)主要是指新接入設(shè)備的信息,主要體現(xiàn)在EDS上。系統(tǒng)內(nèi)部的管理信息庫(kù)(management information base,MIB),用于保存靜態(tài)、動(dòng)態(tài)數(shù)據(jù)和設(shè)備EDS信息。
尋址功能在路由功能的基礎(chǔ)上,進(jìn)一步為上層應(yīng)用提供可訪問(wèn)地址的服務(wù)。提供的方式有兩種,一種是提供固定的設(shè)備、子網(wǎng)與應(yīng)用程序之間的地址對(duì)應(yīng)關(guān)系。另外一種是設(shè)備、子網(wǎng)與應(yīng)用程序之間的對(duì)應(yīng)關(guān)系事先不確定,這種情況下可以通過(guò)設(shè)計(jì)專門的應(yīng)用EDS,來(lái)描述應(yīng)用程序可以提供的服務(wù)以及所需的輸入服務(wù)信息。當(dāng)子網(wǎng)上傳的消息到達(dá)匯聚層時(shí),尋址功能根據(jù)該消息的信息在MIB中檢索應(yīng)用EDS,如果發(fā)現(xiàn)消息與某個(gè)應(yīng)用EDS的服務(wù)信息能夠匹配,就可以建立設(shè)備、子網(wǎng)與應(yīng)用程序之間的地址連接和通信關(guān)系,表現(xiàn)為應(yīng)用程序的即插即用。
從節(jié)點(diǎn)用戶需按照CAN PnP協(xié)議規(guī)定的格式編輯個(gè)性化的SH EDS和SC EDS。EDS采用XML(extensible markup language)進(jìn)行描述,以便使用相應(yīng)的語(yǔ)言生成工具和解析工具,從而擴(kuò)大它的應(yīng)用范圍和使用的便利。圖6為EDS的生成轉(zhuǎn)換過(guò)程。
圖6 EDS的生成轉(zhuǎn)換過(guò)程
數(shù)據(jù)表單通過(guò)工具或者手工編寫(xiě),然后通過(guò)EDS生成工具轉(zhuǎn)換成XML格式。接收方通過(guò)EDS解析工具,將XML文件轉(zhuǎn)換成系統(tǒng)可以識(shí)別的個(gè)性化二進(jìn)制格式。
3.6.1 EDS生成工具
在互聯(lián)網(wǎng)上可以找到的XML編輯器有很多,本項(xiàng)目選用了XML Validator Buddy[10],它是一個(gè)可在瀏覽器上直接編輯或閱讀XML源碼的編輯器,用于進(jìn)行CAN總線SH EDS、SC EDS的XML文件的編輯生成。在這個(gè)工具中輸入手工編輯的符合本文SH EDS、SC EDS格式的文件,就可以生成個(gè)性化的EDS編輯界面,供用戶進(jìn)行內(nèi)容的填寫(xiě)和修改,如圖7所示。
圖7 SH EDS、SC EDS生成工具
由此生成的SH EDS和SC EDS的XML文件如圖8和圖9所示。
圖8 SH EDS XML文件實(shí)例
圖9 SC EDS XML文件實(shí)例
3.6.2 EDS解析工具
EDS解析工具的目的是將XML格式的EDS,轉(zhuǎn)換成二進(jìn)制格式。存儲(chǔ)與解析XML文檔的方法之一是使用萬(wàn)維網(wǎng)聯(lián)盟(world wide web consortium,W3C)推薦的文檔對(duì)象模型(document object model,DOM)[11]。DOM通過(guò)提取XML文件中的元素和屬性值,組成樹(shù)狀結(jié)構(gòu),通過(guò)對(duì)樹(shù)的操作實(shí)現(xiàn)信息的存儲(chǔ)、更新和訪問(wèn)。圖10以SC EDS為例分析解析過(guò)程。
圖10 SC EDS的解析設(shè)計(jì)
文檔樹(shù)中保留了XML文件中元素名之間以及元素名與屬性值之間的層次歸屬關(guān)系。從根節(jié)點(diǎn)出發(fā),一級(jí)子節(jié)點(diǎn)為節(jié)點(diǎn)地址和SC EDS定義項(xiàng)(見(jiàn)表4),二級(jí)子節(jié)點(diǎn)為SC EDS消息定義詳情(見(jiàn)表5)。采用深度優(yōu)先的遍歷方法,遍歷完成之后,將數(shù)據(jù)進(jìn)行組合,形成系統(tǒng)可識(shí)別的二進(jìn)制EDS文件。
本節(jié)設(shè)計(jì)了實(shí)驗(yàn)來(lái)驗(yàn)證CAN總線即插即用協(xié)議的合理性。實(shí)驗(yàn)基于CAN總線仿真卡USBCAN-2E-U,共使用三路CAN接口模擬一主兩從。編寫(xiě)了主節(jié)點(diǎn)軟件及界面CANPnP和從節(jié)點(diǎn)測(cè)試軟件CANTest。在此基礎(chǔ)上進(jìn)行實(shí)驗(yàn)驗(yàn)證,結(jié)果如圖11所示。
圖11 即插即用節(jié)點(diǎn)接入及撤出過(guò)程演示
過(guò)程詳情和結(jié)果分析如下:①?gòu)墓?jié)點(diǎn)1發(fā)送SH EDS;②主節(jié)點(diǎn)向從節(jié)點(diǎn)1發(fā)送SC EDS請(qǐng)求消息;③從節(jié)點(diǎn)1發(fā)送SC EDS;④主節(jié)點(diǎn)與從節(jié)點(diǎn)1交換數(shù)據(jù),消息的幀頭、類型、長(zhǎng)度等信息符合預(yù)期定義,說(shuō)明EDS格式的設(shè)計(jì)是合理的,總線表的構(gòu)建算法能滿足單節(jié)點(diǎn)的加入情況;⑤從節(jié)點(diǎn)2發(fā)送SH EDS;⑥主節(jié)點(diǎn)向從節(jié)點(diǎn)2發(fā)送SC EDS請(qǐng)求消息;⑦從節(jié)點(diǎn)2發(fā)送SC EDS;⑧主節(jié)點(diǎn)與從節(jié)點(diǎn)1、節(jié)點(diǎn)2交換數(shù)據(jù),觀察先前加入的從節(jié)點(diǎn)1消息的收發(fā)情況沒(méi)有受到影響,說(shuō)明總線表的構(gòu)建算法能滿足多節(jié)點(diǎn)的加入情況;⑨從節(jié)點(diǎn)2發(fā)送下線指令;⑩從節(jié)點(diǎn)2相關(guān)消息全部下線,只剩從節(jié)點(diǎn)1的消息,說(shuō)明總線表的構(gòu)建算法能滿足節(jié)點(diǎn)的撤出情況。
設(shè)備級(jí)即插即用需要在它接入的子網(wǎng)內(nèi)部解決識(shí)別和接入的問(wèn)題,而這一點(diǎn)需要按照異構(gòu)子網(wǎng)的不同特點(diǎn)進(jìn)行設(shè)計(jì)。本文按照CAN總線的特點(diǎn)設(shè)計(jì)了兩次EDS的交換過(guò)程,第一次解決了消息格式的識(shí)別問(wèn)題,第二次解決了總線通信的消息編排問(wèn)題,實(shí)現(xiàn)了接入設(shè)備的自動(dòng)識(shí)別和正常通信。這種兩次交換EDS的方式有利于適應(yīng)按照不同CAN總線通信協(xié)議設(shè)計(jì)的節(jié)點(diǎn)接入同一子網(wǎng)。但是仲裁場(chǎng)中地址的定義決定了物理層通信的特征,這限制了SH EDS對(duì)不同協(xié)議地址定義的適應(yīng)性。在CAN總線即插即用協(xié)議基礎(chǔ)上進(jìn)行了匯聚層和工具鏈的設(shè)計(jì),增強(qiáng)了協(xié)議的通用性和使用的便利性。