李 智
(中國電子科技集團(tuán)公司 第十研究所信息中心,成都 610036)
在航空、通訊、航天等綜合電子系統(tǒng)中數(shù)據(jù)總線接口格式差異較大,如:端序方面即有大端序,也有小端序的接口格式;長度方面既存在長度固定的接口定義,又存在長度動(dòng)態(tài)變化的定義。因此,為了匹配不同設(shè)備的接口,控制類、接口類、測試類等應(yīng)用軟件代碼需要定義較多類型接口。當(dāng)某一設(shè)備接口發(fā)生變化后,需要修改軟件代碼,從而導(dǎo)致軟件適應(yīng)性以及通用性降低。如果軟件代碼與接口設(shè)計(jì)解耦,可降低軟件因接口變更的代碼修改,提升軟件的適應(yīng)性和通用性[1]。本文提出基于XML語言統(tǒng)一描述多類型并適用動(dòng)態(tài)可擴(kuò)展接口的方法,全文首先分析了常規(guī)數(shù)據(jù)報(bào)文、動(dòng)態(tài)可擴(kuò)展數(shù)據(jù)報(bào)文結(jié)構(gòu),然后提出了適應(yīng)動(dòng)態(tài)可擴(kuò)展報(bào)文的模型,最后給出了基于XML語言對(duì)動(dòng)態(tài)可擴(kuò)展報(bào)文的模型的實(shí)現(xiàn)方法。
常規(guī)數(shù)據(jù)報(bào)文一般由幀頭、長度、數(shù)據(jù)類型、數(shù)據(jù)內(nèi)容、校驗(yàn)位、幀尾等結(jié)構(gòu)組成(如圖1所示)。接收系統(tǒng)根據(jù)幀頭、長度或幀尾接收完整的數(shù)據(jù)幀,并通過校驗(yàn)位判斷接收的數(shù)據(jù)是否正確,校驗(yàn)類型包括奇偶校驗(yàn)、異或校驗(yàn)及循環(huán)校驗(yàn)等。接收系統(tǒng)根據(jù)數(shù)據(jù)報(bào)文中的數(shù)據(jù)類型調(diào)用對(duì)應(yīng)的計(jì)算邏輯,將數(shù)據(jù)報(bào)文中的數(shù)據(jù)內(nèi)容作為計(jì)算邏輯的輸入[2-3]。
圖1 常規(guī)數(shù)據(jù)報(bào)文結(jié)構(gòu)
常規(guī)數(shù)據(jù)報(bào)文中具體的數(shù)據(jù)類型確定了報(bào)文的長度,以及數(shù)據(jù)內(nèi)容區(qū)所攜帶的信息種類,因此,數(shù)據(jù)報(bào)文的封裝和解析邏輯較簡單,但一幀數(shù)據(jù)所攜帶的信息相對(duì)較少,可擴(kuò)展性和適應(yīng)性較差[4-5]。
為適應(yīng)復(fù)雜綜合電子系統(tǒng)信息量大、靈活擴(kuò)展等需求,出現(xiàn)大量動(dòng)態(tài)可擴(kuò)展數(shù)據(jù)報(bào)文的設(shè)計(jì),具體表現(xiàn)為:一幀數(shù)據(jù)攜帶較多信息種類,并且數(shù)據(jù)種類可動(dòng)態(tài)增減。
例如某信號(hào)分析系統(tǒng),信號(hào)處理設(shè)備向頻譜處理軟件輸出信號(hào)處理結(jié)果,數(shù)據(jù)幀除攜帶信號(hào)頻率、帶寬、幅度等參數(shù)外,可選擇攜帶頻譜數(shù)據(jù)、信號(hào)結(jié)果數(shù)據(jù)等,其數(shù)據(jù)報(bào)文結(jié)構(gòu)如圖2所示。當(dāng)主偵功能項(xiàng)的值為“0001H”,數(shù)據(jù)內(nèi)容中附加頻譜數(shù)據(jù)子幀,為“0000H”不附加該頻譜數(shù)據(jù)子幀。當(dāng)頻譜子幀中擴(kuò)展標(biāo)志為1時(shí)嵌套接收機(jī)頻譜特性子子幀,為0則不嵌套。
圖2 動(dòng)態(tài)可擴(kuò)展數(shù)據(jù)報(bào)文
通過對(duì)常規(guī)數(shù)據(jù)報(bào)文、動(dòng)態(tài)可擴(kuò)展數(shù)據(jù)報(bào)文分析發(fā)現(xiàn),數(shù)據(jù)報(bào)文具有以下特性:
1)數(shù)據(jù)報(bào)文具有可逐層分解到基本單元的特性:無論是常規(guī)數(shù)據(jù)報(bào)文,還是動(dòng)態(tài)可擴(kuò)展數(shù)據(jù)報(bào)文,均具有可逐層分解到基本信息單元的特性,如:圖1慣導(dǎo)數(shù)據(jù)分解為高度、角速度、加速度等信息,形成基本的信息單元存放于慣導(dǎo)數(shù)據(jù)報(bào)文;圖2信號(hào)處理結(jié)果報(bào)文可分解為頻率信息單元、頻譜子幀等,頻譜子幀可繼續(xù)分解為頻率、帶寬等基本信息單元。
2)基本信息單元具有應(yīng)用信息表達(dá)或報(bào)文結(jié)構(gòu)表達(dá)作用:應(yīng)用信息用于物理信號(hào)量、系統(tǒng)參數(shù)等數(shù)據(jù)表達(dá),如圖1數(shù)據(jù)報(bào)文中的元素1信息單元表示高度物理量。信息單元結(jié)構(gòu)信息用于數(shù)據(jù)報(bào)文結(jié)構(gòu)的邏輯控制,如圖1幀頭、幀尾、數(shù)據(jù)長度、校驗(yàn)值等,該部分結(jié)構(gòu)信息用于接收系統(tǒng)根據(jù)幀頭、長度或幀尾接收完整的數(shù)據(jù)幀,并通過校驗(yàn)位判斷接收的數(shù)據(jù)是否正確。報(bào)文結(jié)構(gòu)表達(dá)主要實(shí)現(xiàn)發(fā)送系統(tǒng)和接收系統(tǒng)之間如何編譯和解譯信息。
3)動(dòng)態(tài)可擴(kuò)展數(shù)據(jù)報(bào)文中結(jié)構(gòu)表達(dá)類型增多:動(dòng)態(tài)可擴(kuò)展數(shù)據(jù)報(bào)文為適應(yīng)報(bào)文長度變化,增加了數(shù)據(jù)結(jié)構(gòu)表達(dá)的信息,如:圖2信號(hào)處理結(jié)果中功能項(xiàng)用于確定是否附加頻譜數(shù)據(jù)子幀,頻譜子幀中擴(kuò)展標(biāo)識(shí)用于確定是否附加接收機(jī)頻譜特性子子幀。
常規(guī)數(shù)據(jù)報(bào)文可一次分解到基本信息單元。動(dòng)態(tài)可擴(kuò)展數(shù)據(jù)報(bào)文在主幀中包含子幀,甚至子幀繼續(xù)嵌套子幀,通過逐級(jí)分解,仍然可分解到基本信息單元。因此,根據(jù)可逐級(jí)分解的特點(diǎn),可將數(shù)據(jù)報(bào)文形式化為樹形模型,如圖3所示。
圖3 適應(yīng)動(dòng)態(tài)可擴(kuò)展報(bào)文的模型
信息單元具有應(yīng)用信息表達(dá)或報(bào)文結(jié)構(gòu)表達(dá)作用的特性。通過分析大量采用動(dòng)態(tài)可擴(kuò)展報(bào)文的項(xiàng)目,發(fā)現(xiàn)表達(dá)結(jié)構(gòu)信息的信息單元越多,報(bào)文結(jié)構(gòu)形式越多。進(jìn)一步分析結(jié)構(gòu)信息表達(dá)的邏輯與報(bào)文動(dòng)態(tài)擴(kuò)展形式的關(guān)系,發(fā)現(xiàn)其邏輯控制類型可歸納為4類:選擇控制、位開關(guān)控制、循環(huán)控制、占位鏈接控制等4種。
綜上研究,如圖4所示,基本信息單元可歸納為應(yīng)用信息和結(jié)構(gòu)信息兩大類,結(jié)構(gòu)信息可分為幀結(jié)構(gòu)信息、邏輯控制信息。其中,邏輯控制信息包括:選擇控制、位開關(guān)控制、循環(huán)控制、占位鏈接控制等,各類控制定義和擴(kuò)展方式如下:
圖4 基本信息單元分類歸納
選擇控制是指數(shù)據(jù)報(bào)文中所附加的子幀由邏輯控制信息單元的數(shù)值確定,即每一個(gè)數(shù)值對(duì)應(yīng)一種具體的子幀。例如圖5所示,主幀中功能項(xiàng)即為選擇控制信息單元,當(dāng)功能項(xiàng)值為1時(shí),主幀動(dòng)態(tài)擴(kuò)展子幀1;當(dāng)功能項(xiàng)值為2時(shí),主幀動(dòng)態(tài)擴(kuò)展子幀2;圖5當(dāng)功能項(xiàng)值為n時(shí),主幀動(dòng)態(tài)擴(kuò)展子幀n。
圖5 選擇控制抽象示例
位開關(guān)控制是指數(shù)據(jù)報(bào)文中邏輯控制信息單元的二進(jìn)制比特位對(duì)應(yīng)一個(gè)具體的子幀,二進(jìn)制比特位值為1表示動(dòng)態(tài)附加某對(duì)應(yīng)子幀,0表示不附加。例如圖6所示,主幀中功能項(xiàng)即為位開關(guān)控制信息單元,功能項(xiàng)的二進(jìn)制比特位對(duì)應(yīng)一個(gè)具體的子幀,如Bit0對(duì)應(yīng)子幀1,Bit7對(duì)應(yīng)子幀k。當(dāng)Bit0值為1時(shí),附加子幀1,為0時(shí)不附加;當(dāng)Bit1為1時(shí),附加子幀2,為0時(shí)不附加;當(dāng)Bit2為1時(shí),附加子幀3,為0時(shí)不附加。
圖6 位開關(guān)控制抽象示例
循環(huán)控制是指數(shù)據(jù)報(bào)文中邏輯控制信息單元的值確定了子幀重復(fù)添加的次數(shù)。例如圖7所示,主幀中功能項(xiàng)即為循環(huán)控制信息單元,功能項(xiàng)的值為1時(shí)子幀在主幀中重復(fù)1次;功能項(xiàng)的值為2時(shí)子幀在主幀中重復(fù)2次;功能項(xiàng)的值為k時(shí)子幀在主幀中重復(fù)k次。
圖7 循環(huán)控制抽象示例
占位鏈接控制信息單元是一個(gè)虛擬的邏輯控制信息單元,在實(shí)際數(shù)據(jù)報(bào)文中不占空間,主要用于標(biāo)記子幀在主幀中動(dòng)態(tài)擴(kuò)展的位置,與選擇控制、位開關(guān)控制、循環(huán)控制搭配使用,如圖5、圖6、圖7中灰色底紋信息單元。
數(shù)據(jù)報(bào)文可分解到基本信息單元的特性使其可形式化為樹形表達(dá)結(jié)構(gòu),XML語言恰好具備樹形結(jié)構(gòu)的展現(xiàn)形式,而且XML節(jié)點(diǎn)屬性化描述方式可表述信息單元的大量信息,如:信息單元名稱、類型、值、數(shù)據(jù)類型、長度等等。同時(shí),XML語言便于計(jì)算機(jī)對(duì)模型的識(shí)別,以及跨平臺(tái)之間信息傳遞。因此,XML語言是對(duì)動(dòng)態(tài)可擴(kuò)展報(bào)文的模型的最佳實(shí)現(xiàn)方式之一[6-7]。
框架結(jié)構(gòu)如下所示,Message為根節(jié)點(diǎn),表示數(shù)據(jù)報(bào)文集合,多個(gè)數(shù)據(jù)報(bào)文并列作為兄弟節(jié)點(diǎn),構(gòu)成Message的子節(jié)點(diǎn)集合。數(shù)據(jù)報(bào)文MsgData是由多個(gè)信息單元集合構(gòu)成,多個(gè)信息單元MsgDataElement并列作為兄弟節(jié)點(diǎn)。數(shù)據(jù)報(bào)文、信息單元所具有的特性通過XML節(jié)點(diǎn)屬性表述。如下所示:
……
……
……
子幀報(bào)文與主幀報(bào)文描述方式一樣,并作為主幀報(bào)文的兄弟節(jié)點(diǎn)。主幀報(bào)文中邏輯控制信息單元與占位鏈接控制信息單元配合使用,LinkTo屬性表示映射、鏈接關(guān)系。占位鏈接控制信息單元也通過其LinkTo屬性建立與具體子幀的映射關(guān)系[8]。
信息單元節(jié)點(diǎn)定義為MsgDataElement,是數(shù)據(jù)報(bào)文MsgData的子節(jié)點(diǎn),多個(gè)信息單元并列作為兄弟節(jié)點(diǎn)。信息單元具有的特性通過XML節(jié)點(diǎn)的屬性進(jìn)行表達(dá),如:名稱、長度、信息單元類型、值類型、值、最小值、最大值、大小端、擴(kuò)展標(biāo)識(shí)等。如下所示[9-10]:
Name表示信息單元名稱。NodeType表示信息單元類型,其值有應(yīng)用信息DataNode、選擇控制SelectCtrNode、位開關(guān)控制BitCtrlNode、循環(huán)控制CycleCtrlNode、占位鏈接控制LinkNode等。Length表示信息單元長度。Type表示信息單元數(shù)據(jù)值Value的數(shù)據(jù)類型,包括:整型Int、字符串String、布爾型Bool、IP地址型IP、浮點(diǎn)型Float、高精度Double、日期DataTime等等。Extend表示信息單元是否為擴(kuò)展,邏輯控制類型信息單元值為True,應(yīng)用信息類型值為False。Endian表示信息單元大小端屬性。LValue、HValue表示信息單元值Value的取值范圍。LinkTo表示與其匹配的占位鏈接控制信息單元[8]。
根據(jù)動(dòng)態(tài)可擴(kuò)展報(bào)文模型,占位鏈接控制標(biāo)記子幀在主幀中的擴(kuò)展位置,子幀動(dòng)態(tài)添加方式主要通過選擇控制、位開關(guān)控制、循環(huán)控制等信息單元表示,并與占位鏈控制信息單元配合使用。
3.3.1 XML語言描述選擇控制邏輯
選擇控制信息單元與占位鏈接信息單元共同實(shí)現(xiàn)多個(gè)子幀的選擇添加。如下代碼片段所示,Name屬性為“選擇控制信息單元|【選擇控制】”的XML節(jié)點(diǎn)表示子幀在主幀中擴(kuò)展的位置,Name屬性為“選擇控制信息單元”的XML節(jié)點(diǎn)和其子節(jié)點(diǎn)決定在占位鏈接中擴(kuò)展的具體子幀。EnumElement節(jié)點(diǎn)集合通過LinkTo屬性與被選擇的子幀映射,當(dāng)Value屬性值為1時(shí),表示EnumElement節(jié)點(diǎn)中“子幀1”被選中,其LinkTo屬性所指向的“子幀1”子報(bào)文動(dòng)態(tài)添加到占位鏈接節(jié)點(diǎn)。如下所示:
……
……
3.3.2 XML語言描述位開關(guān)控制邏輯
位開關(guān)控制信息單元與占位鏈接信息單元共同實(shí)現(xiàn)多個(gè)子幀在指定位置是否添加的控制。如下代碼片段所示,Name屬性為“位控制節(jié)點(diǎn)|子消息1”的占位鏈接控制節(jié)點(diǎn)表示子幀1在主幀中擴(kuò)展的位置,子幀2、子幀3在主幀中的位置描述與上類似。Name屬性為“位控制節(jié)點(diǎn)”的XML節(jié)點(diǎn)和其子節(jié)點(diǎn)決定對(duì)應(yīng)占位鏈接控制節(jié)點(diǎn)的子幀是否添加。Name屬性為“位控制節(jié)點(diǎn)”的XML節(jié)點(diǎn)按位拆分成ExtendElement節(jié)點(diǎn)集合,其每一個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)子節(jié)點(diǎn)控制,例如:“子消息1”ExtendElement節(jié)點(diǎn),其Start和End屬性代表在字節(jié)中的啟始BIT位置,LinkTo屬性指向其對(duì)應(yīng)的占位控制節(jié)點(diǎn),當(dāng)“子消息1”ExtendElement節(jié)點(diǎn)Value值為0時(shí)表示不添加子幀1,否則添加子幀。如下所示:
……
……
3.3.3 XML語言描述循環(huán)控制邏輯
循環(huán)控制信息單元與占位鏈接信息單元共同實(shí)現(xiàn)子幀在指定位置重復(fù)添加次數(shù)。如下代碼片段所示,Name屬性為“循環(huán)控制信息單元|【循環(huán)控制】”的占位鏈接控制節(jié)點(diǎn)表示子幀1在主幀中重復(fù)添加的位置。Name屬性為“循環(huán)控制信息單元”的XML節(jié)點(diǎn)決定對(duì)應(yīng)占位鏈接控制節(jié)點(diǎn)所指向的子幀重復(fù)添加的次數(shù)。例如:當(dāng)“循環(huán)控制信息單元”的XML節(jié)點(diǎn)Value屬性值為2時(shí),表示其LinkTo屬性指向的占位鏈接控制對(duì)應(yīng)子幀重復(fù)添加2次。
........
........
3.3.4 XML語言描述占位鏈接控制邏輯
占位鏈接控制信息單元是一個(gè)虛擬的信息單元,在實(shí)際數(shù)據(jù)報(bào)文中不占空間,無具體值。它表示對(duì)應(yīng)子幀在主幀中出現(xiàn)的位置,需要與選擇控制、位開關(guān)控制、循環(huán)控制等信息單元配對(duì)使用。選擇控制、位開關(guān)控制、循環(huán)控制等信息單元的LinkTo屬性指向?qū)?yīng)的占位鏈接控制信息單元。
........
本文通過分析常規(guī)數(shù)據(jù)報(bào)文格式以及動(dòng)態(tài)可擴(kuò)展數(shù)據(jù)報(bào)文格式,歸納出基本信息單元的類型和用途,以及具有的3種特性: 數(shù)據(jù)報(bào)文具有可逐層分解到基本單元的特性;基本信息單元具有應(yīng)用信息表達(dá)或報(bào)文結(jié)構(gòu)表達(dá)作用;動(dòng)態(tài)可擴(kuò)展數(shù)據(jù)報(bào)文中結(jié)構(gòu)表達(dá)類型增多等。根據(jù)分析結(jié)果,提出了適應(yīng)動(dòng)態(tài)可擴(kuò)展的數(shù)據(jù)報(bào)文描述模型。最后,使用XML語言給出了模型的框架描述方法,以及選擇控制、位開關(guān)控制、循環(huán)控制、占位鏈接控制的描述方法。以上方法已在配套多個(gè)型號(hào)工程的總線接口測試軟件中應(yīng)用,可有效實(shí)現(xiàn)軟件代碼與接口定義的解耦,提高軟件代碼的通用性和適應(yīng)性。