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