皮祖成,陳 文,馬 龍,魏 瀚
?
面向?qū)ο蟮臒o(wú)人機(jī)任務(wù)設(shè)備通信接收軟件設(shè)計(jì)
皮祖成,陳 文,馬 龍,魏 瀚
(彩虹無(wú)人機(jī)科技有限公司,北京 100074)
無(wú)人機(jī)在執(zhí)行任務(wù)過(guò)程中,任務(wù)管理計(jì)算機(jī)需要接收地面控制站發(fā)送的遙控指令,同時(shí)也將遙測(cè)信息發(fā)回地面控制站。遙測(cè)信息來(lái)源于無(wú)人機(jī)上各種任務(wù)載荷的狀態(tài)遙測(cè)和偵察數(shù)據(jù)遙測(cè)信息。任務(wù)載荷遙控和遙測(cè)的通信處理過(guò)程是由任務(wù)管理軟件來(lái)實(shí)現(xiàn)的。本文所述的任務(wù)設(shè)備通信接收軟件是任務(wù)管理軟件的底層通信模塊。任務(wù)設(shè)備通信幀模型采用了數(shù)據(jù)結(jié)構(gòu)化定義的方式,其基本模塊包含通信幀的幀頭、幀長(zhǎng)和幀校驗(yàn)等區(qū)段。為了統(tǒng)一接收所有任務(wù)設(shè)備的通信數(shù)據(jù),本文設(shè)計(jì)了基于面向?qū)ο蠓椒ǖ耐ㄐ艓邮哲浖?。通過(guò)試驗(yàn)測(cè)試,本文所述程序能高效的完成通信幀的接收工作,并具備一定的擴(kuò)展靈活性,并成功應(yīng)用于某型無(wú)人機(jī)任務(wù)管理處理中。
無(wú)人機(jī);狀態(tài)機(jī);通信幀;面向?qū)ο?/p>
無(wú)人機(jī)廣泛應(yīng)用于偵察監(jiān)視等領(lǐng)域[1],隨著無(wú)人機(jī)技術(shù)的發(fā)展,無(wú)人機(jī)的載重能力也得到了很大的進(jìn)步,同時(shí)能掛載多型任務(wù)載荷。無(wú)人機(jī)可通過(guò)換裝搭配不同的任務(wù)載荷以實(shí)現(xiàn)不同的作業(yè)任務(wù)需求。為了適應(yīng)多任務(wù)載荷掛載的需求,無(wú)人機(jī)中通常配備有任務(wù)管理計(jì)算機(jī)[2],任務(wù)管理計(jì)算機(jī)的軟件模塊如圖1所示。任務(wù)管理軟件實(shí)現(xiàn)對(duì)任務(wù)載荷的控制、狀態(tài)監(jiān)控、任務(wù)載荷協(xié)同控制和數(shù)據(jù)存儲(chǔ)等功能。所有功能通過(guò)接口單元向任務(wù)載荷和外部系統(tǒng)獲取數(shù)據(jù),基于獲取到的數(shù)據(jù)來(lái)實(shí)現(xiàn)特定的功能。
圖1 任務(wù)管理系統(tǒng)
無(wú)人機(jī)機(jī)載端通常采用RS422、CAN總線、ARINC-429等面向字節(jié)數(shù)據(jù)流的接口進(jìn)行通信[3-4],為了從數(shù)據(jù)流中提取出通信幀,解決類似TCP網(wǎng)絡(luò)通信“粘包”問題[5],一般采用了結(jié)構(gòu)化的方法對(duì)數(shù)據(jù)進(jìn)行封裝。結(jié)構(gòu)化后的通信幀一般包含幀頭、幀長(zhǎng)、幀識(shí)別ID、數(shù)據(jù)和幀校驗(yàn)等區(qū)段。本文通過(guò)面向?qū)ο蟮脑O(shè)計(jì)方法對(duì)通信幀接收過(guò)程的軟件進(jìn)行建模[6-7],并設(shè)計(jì)了通信接收算法[8]。通過(guò)C++語(yǔ)言在嵌入式VxWorks操作系統(tǒng)中實(shí)現(xiàn)了任務(wù)設(shè)備通信接收算法[9-10]。
任務(wù)載荷設(shè)備的通信數(shù)據(jù)一般被設(shè)計(jì)為結(jié)構(gòu)化的通信幀。針對(duì)不同的任務(wù)載荷設(shè)備采用不同的幀頭,如0xEB90、0x597E、0xEE16、0x597E0BAA51B0等幀頭。“幀長(zhǎng)”為連續(xù)多個(gè)字節(jié)所表達(dá)的長(zhǎng)度信息,一個(gè)通信幀的總字節(jié)數(shù)需要從“幀長(zhǎng)”區(qū)段中獲取。通常在任務(wù)載荷中采用1個(gè)或2個(gè)字節(jié)的無(wú)符號(hào)整數(shù)直接表達(dá)通信幀的長(zhǎng)度,而在一些特殊情況下需要將多個(gè)字節(jié)的“幀長(zhǎng)”信息進(jìn)行復(fù)雜的運(yùn)算后才能獲得通信幀的長(zhǎng)度?!皫R(shí)別ID”區(qū)段用于進(jìn)一步識(shí)別通信幀的類型?!皵?shù)據(jù)”段則存放了有效數(shù)據(jù)?!皫r?yàn)”則為多個(gè)字節(jié)的幀校驗(yàn)信息。
本文將通信幀抽象為具有幀頭、幀長(zhǎng)和幀附加特征這3種元素的模型。通信幀的“幀頭”位于通信幀的開始部分,具有一定長(zhǎng)度的連續(xù)字節(jié)序列?!皫L(zhǎng)”表達(dá)了一幀數(shù)據(jù)所有字節(jié)的數(shù)量,其值為單個(gè)字節(jié)的整數(shù)倍。幀長(zhǎng)信息可以從一幀數(shù)據(jù)的幀頭之后的數(shù)據(jù)中獲取,但獲取的方式因幀類型而異?!皫郊犹卣鳌笔且欢巫止?jié)序列,該序列用于進(jìn)一步識(shí)別該通信幀的類型。在此模型的基礎(chǔ)上,判斷所接收到的數(shù)據(jù)是否為某一種特定通信幀時(shí),需要具備以下兩個(gè)條件:①幀頭匹配;②附加特征匹配。
為了標(biāo)識(shí)通信幀的所有類型,設(shè)計(jì)了圖2所示的FrameID枚舉來(lái)表示通信幀類型,其中僅示例了一部分通信幀類型,可根據(jù)軟件的需求進(jìn)行增減。設(shè)計(jì)如圖3所示的ComFrame類用于存儲(chǔ)一個(gè)完整的通信幀數(shù)據(jù),其中content用于存放幀的所有內(nèi)容,id則為該通信幀的類型。
圖2 通信幀ID枚舉
圖3 通信幀類
設(shè)計(jì)圖4所示的FrameTrait通信幀特征類,該類作為一個(gè)抽象類描述了通信幀的特征:幀頭(header)、幀長(zhǎng)(length)、幀附加特征(trait)。通過(guò)幀識(shí)別符(id)標(biāo)識(shí)了通信幀對(duì)象所對(duì)應(yīng)的通信幀類型。因幀接收算法的需要,提供了識(shí)別該類通信幀所需要的最少原始字節(jié)數(shù)(bestPartialSize)信息。從“幀長(zhǎng)”的類型來(lái)看存在定幀長(zhǎng)和可變幀長(zhǎng)兩種類型,其中定幀長(zhǎng)的幀長(zhǎng)值為一固定值,用一個(gè)大于零的值來(lái)代表;當(dāng)length為零時(shí)代表了可變幀長(zhǎng),此時(shí)的幀長(zhǎng)度需要從幀頭之后的數(shù)據(jù)中計(jì)算得出。幀長(zhǎng)的計(jì)算方法包含于FrameTrait提供的Length方法中。Length方法調(diào)用了getVarLength虛方法,F(xiàn)rameTrait抽象類的實(shí)現(xiàn)類可根據(jù)具體通信幀類型的幀長(zhǎng)計(jì)算方法來(lái)實(shí)現(xiàn)該算法。幀頭匹配和附加特征匹配算法通過(guò)isHeaderOk方法和isTraitOk方法來(lái)實(shí)現(xiàn)。所有通信幀類型的幀頭均為固定值,在FrameTrait中實(shí)現(xiàn)了統(tǒng)一的isHeaderOk算法,用于在數(shù)據(jù)流中檢查幀頭是否匹配。由于通信幀的附加特征存在各種變化,為了提供算法的可擴(kuò)展性,將isTraitOk設(shè)計(jì)為虛函數(shù),以便派生類重寫特征匹配算法。通信幀類ComFrame與通信幀特征類Fra-meTrait之間通過(guò)FrameID進(jìn)行關(guān)聯(lián),如圖5所示。
圖4 通信幀特征類
圖5 通信幀類與通信幀特征類的關(guān)聯(lián)
為了統(tǒng)一配置和獲取通信幀的類型定義,設(shè)計(jì)了FrameTraitFactory工廠類,如圖 6所示。通過(guò)該類提供的insertTrait方法可添加通信幀的類型。通信幀的類型定義包含幀識(shí)別符、幀頭、幀長(zhǎng)和幀附加特征這4個(gè)屬性。在需要使用通信幀特征對(duì)象的地方,可提供通信幀ID并使用GetFrameTrait方法獲取到所需的通信幀特征對(duì)象。
圖6 通信幀特征工廠類
通過(guò)FrameTrait抽象類派生并實(shí)現(xiàn)了3種通信幀特征類型:StandardFrameTrait、DGPSFrameTrait、SpecialFrameTrait類,如圖7所示。其中Standard-FrameTrait用于處理固定幀長(zhǎng)通信幀和常規(guī)的變幀長(zhǎng)通信幀。常規(guī)變幀長(zhǎng)通信幀的結(jié)構(gòu)如圖8所示,其中幀長(zhǎng)用幀頭之后的1個(gè)字節(jié)表示;固定幀長(zhǎng)通信幀則不具有“幀長(zhǎng)”區(qū)段。特殊可變幀長(zhǎng)的通信幀如DGPS(Differential GPS)的某類通信幀,其幀長(zhǎng)信息的解析需要使用幀頭之后的數(shù)據(jù),并采用特定的CalcLength算法進(jìn)行解算,如圖9所示。
圖7 通信幀特征類關(guān)系圖
圖8 常規(guī)變幀長(zhǎng)通信幀
圖9 DGPS通信幀
如圖10所示的通信幀既需要識(shí)別通信幀頭,同時(shí)還要識(shí)別子幀ID才能確定通信幀所屬類型。在這種情況下需要用到附加特征匹配功能,此時(shí)需要提供附加特征信息和實(shí)現(xiàn)isTraitOk方法,該方法在識(shí)別到幀頭之后進(jìn)一步判斷子幀ID是否與給定的值相同,如圖10中當(dāng)子幀ID位置為“01”則代表了ID_FCC_FrA幀,當(dāng)幀ID位置為“02”則代表了ID_FCC_FrB幀。附加特征存儲(chǔ)在FrameTrait派生對(duì)象的trait字段中。isTraitOk算法決定了如何利用附加特征對(duì)通信幀類型進(jìn)行判斷。
圖10 需要進(jìn)行附加信息判斷的通信幀
通信幀接收算法封裝于FrameFinder類中,如圖11所示,每個(gè)通信端口綁定一個(gè)FrameFinder對(duì)象,用于接收該端口的數(shù)據(jù)。FrameFinder對(duì)象必須知道需要從該端口接的通信幀類型,這些信息通過(guò)其的構(gòu)造函數(shù)的參數(shù)提供。FrameFinder將通信幀類型信息存放于frameTraits變量中。buffer用于緩存來(lái)自于通信端口的字節(jié)數(shù)據(jù)流,當(dāng)端口有數(shù)據(jù)到來(lái)時(shí)調(diào)用InBuffer方法將數(shù)據(jù)追加到緩存中。GetFrames方法用于從緩存中獲取指定通信幀類型的數(shù)據(jù)。
圖11 通信幀識(shí)別算法類
FrameFinder中包含多個(gè)FrameTrait對(duì)象,并為每各FrameTrait對(duì)象提供一個(gè)接收算法所需的狀態(tài)機(jī),如圖12所示,該狀態(tài)機(jī)用于查找、識(shí)別和接收該類型的通信幀,各狀態(tài)機(jī)的狀態(tài)存儲(chǔ)于states變量當(dāng)中。WorkingStage描述了狀態(tài)機(jī)的3種狀態(tài),不同狀態(tài)下均需要使用到WorkingState狀態(tài)變量,其結(jié)構(gòu)如圖13所示。NextStage記錄了狀態(tài)機(jī)的下一個(gè)狀態(tài),即在接下來(lái)的狀態(tài)切換時(shí)切入該狀態(tài)。
圖12 通信幀接收狀態(tài)機(jī)
圖13 狀態(tài)機(jī)狀態(tài)參數(shù)
圖14 從buffer中接收一幀數(shù)據(jù)示意圖
圖15 緩存buffer的定義及使用
通信幀接收的序列圖如圖16所示,App作為主程序首先獲取通信端口的配置信息。通過(guò)端口的配置信息可以得知需要從該端口中接收的通信幀類型(FrameID枚舉)的集合。將該集合提供給Frame-TraitFactory對(duì)象,并調(diào)用GetFrameTrait方法獲取通信幀類型所對(duì)應(yīng)的FrameTrait。FrameTraitFactory是通過(guò)找到對(duì)應(yīng)FrameID的FrameTrait,然后調(diào)用FrameTrait的Clone方法完成的對(duì)象復(fù)制。由Frame-TraitFactory將所復(fù)制的對(duì)象返回給App。App根據(jù)所獲取的FrameTrait集合創(chuàng)建FrameFinder對(duì)象,然后App進(jìn)入一個(gè)循環(huán)讀取通信端口數(shù)據(jù)的過(guò)程中。在App的循環(huán)過(guò)程中,App首先獲取設(shè)備通信端口的新數(shù)據(jù),然后調(diào)用FrameFinder對(duì)象的InBuffer方法將端口數(shù)據(jù)追加到緩存的尾部。然后,針對(duì)每一個(gè)狀態(tài)機(jī)的狀態(tài),執(zhí)行相應(yīng)的幀頭查找、特征判斷、幀長(zhǎng)提取和通信幀數(shù)據(jù)接收等操作。最后更新數(shù)據(jù)緩存和各狀態(tài)機(jī)對(duì)應(yīng)的VirtualCutPos位置。狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換如圖12所示,狀態(tài)機(jī)起始狀態(tài)為查找?guī)^狀態(tài)(Finding),在查找到幀頭(Condition A)時(shí)進(jìn)入特征匹配狀態(tài)(TraitTest)。如果特征匹配失?。–ondition C)則退回到查找?guī)^狀態(tài),如果特征匹配成功(Condition B)則進(jìn)入到數(shù)據(jù)接收等待狀態(tài)(WaittingData)。在數(shù)據(jù)接收等待狀態(tài)時(shí),待接收完一幀通信數(shù)據(jù)(Condition D)后再次進(jìn)入查找?guī)^狀態(tài)。
圖16 通信幀接收序列圖
無(wú)人機(jī)任務(wù)管理機(jī)載軟件運(yùn)行于PowerPC系列處理器上,軟件的底層采用了VxWorks操作系統(tǒng),并使用面向?qū)ο蟮腃++語(yǔ)言編程實(shí)現(xiàn)?;就ㄐ艓怌omFrame的content和FrameTrait的header、trait等成員由于變長(zhǎng)度的存儲(chǔ)需求,采用STL標(biāo)準(zhǔn)容器vector來(lái)存儲(chǔ),并實(shí)例化為BYTE(即C++中的基本類型unsigned char)的容器。FrameTrait類作為一個(gè)通信幀特征描述類,需要具備較靈活的擴(kuò)展性,并且不同的FrameTrait實(shí)例需要給通信幀接收算法提供統(tǒng)一的接口。所以將FrameTrait實(shí)現(xiàn)為一個(gè)抽象類,將算法變化最多的幾個(gè)功能實(shí)現(xiàn)為其虛函數(shù)成員,其中包含了isTraitOk成員、getVarLength成員。同時(shí),因?yàn)樵趹?yīng)用程序中需要傳遞FrameTrait子類的對(duì)象,但由于其多態(tài)性,在FrameTrait中設(shè)計(jì)了虛的Clone方法,通過(guò)該方法可使用其抽象類的指針克隆該指針?biāo)笇?duì)象。FrameTrait的各派生類的對(duì)象可從兩種方式獲取,第一種方式采用FrameTra-itFactory工廠類的GetFrameTait方法獲取,另一種方式采用其派生類對(duì)象的Clone方法獲取。通過(guò)這兩種方式獲取的對(duì)象都必須由使用方進(jìn)行析構(gòu)。FrameFinder作為算法運(yùn)行的主體,通過(guò)vector容器實(shí)現(xiàn)了通信數(shù)據(jù)的緩沖區(qū),并在每次接收到新的通信數(shù)據(jù)時(shí)進(jìn)行一次通信幀接收過(guò)程。Frame-Finder中通過(guò)STL標(biāo)準(zhǔn)容器map實(shí)現(xiàn)了FrameTrait子對(duì)象和幀接收狀態(tài)機(jī)的關(guān)聯(lián),每一個(gè)通信幀接收過(guò)程即是對(duì)該map的一個(gè)遍歷過(guò)程,完成每個(gè)FrameTrait子對(duì)象特征的判斷、數(shù)據(jù)的接收過(guò)程。
本文通過(guò)面向?qū)ο蟮姆椒▽?duì)無(wú)人機(jī)機(jī)載通信幀接收軟件進(jìn)行了建模設(shè)計(jì)。利用面向?qū)ο蟮睦^承、多態(tài)等特性給通信幀接收算法創(chuàng)造了較靈活的可擴(kuò)展機(jī)制,為不同的通信幀格式的統(tǒng)一接收設(shè)計(jì)了一套基本的算法。通過(guò)在VxWorks嵌入式操作系統(tǒng)中采用面向?qū)ο蟮腃++編程,提高了嵌入式軟件的抽象能力。本文所設(shè)計(jì)的通信幀接收算法為無(wú)人機(jī)任務(wù)管理的各項(xiàng)應(yīng)用層功能提供了標(biāo)準(zhǔn)的接口,使得上層應(yīng)用軟件的設(shè)計(jì)得以標(biāo)準(zhǔn)化,降低了對(duì)底層處理的依賴。通過(guò)項(xiàng)目實(shí)踐證明本軟件能高效的運(yùn)行于無(wú)人機(jī)任務(wù)管理計(jì)算機(jī)中,并能滿足性能和實(shí)時(shí)性的需求。
[1] 劉長(zhǎng)清, 潘舟浩, 唐曉斌. 國(guó)外無(wú)人偵察監(jiān)視飛機(jī)發(fā)展分析[J]. 中國(guó)電子科學(xué)研究院學(xué)報(bào), 2015, 10(6): 657-661.
[2] 皮祖成, 王誠(chéng), 陳文. 某型無(wú)人機(jī)機(jī)載任務(wù)管理計(jì)算機(jī)設(shè)計(jì)[J]. 航空工程進(jìn)展, 2016, 7(4): 464-470.
[3] 支超有. 機(jī)載數(shù)據(jù)總線技術(shù)及其應(yīng)用[M]. 北京: 國(guó)防工業(yè)出版社, 2009.
[4] 劉凱, 何君燕. CAN總線廣播系統(tǒng)設(shè)計(jì)[J]. 軟件, 2012, 33(1): 109-111.
[5] 王紅霞. 一個(gè)內(nèi)網(wǎng)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 吉林: 吉林大學(xué), 2014.
[6] 盧超, 黃蔚, 胡國(guó)超. 基于圖形數(shù)據(jù)結(jié)構(gòu)的復(fù)雜對(duì)象建模設(shè)計(jì)[J]. 軟件, 2015, 36(12): 220-223.
[7] 蘇薈. 一種新的面向?qū)ο筌浖蓽y(cè)試序列生成方法[J]. 軟件, 2012, 33(3): 75-76.
[8] 張合, 劉小紅. 面向?qū)ο蟮膶?duì)象建模技術(shù)及其應(yīng)用研究[J]. 軟件, 2011, 3: 66-68.
[9] 王學(xué)龍. 嵌入式VxWorks系統(tǒng)開發(fā)與應(yīng)用[M]. 北京: 人民郵電出版社, 2003.
[10] 段德功, 丁瑩亮. 基于嵌入式技術(shù)的工業(yè)通信管理機(jī)的開發(fā)及應(yīng)用[J]. 軟件, 2012, 33(6): 83-84.
Object-oriented Design of Communication Receiving Software for UAV Mission Payloads
PI Zu-cheng, CHEN Wen, MA Long, WEI Han
(Cai Hong UAV Technology Co. Ltd., Beijing 100074, China)
The mission management computer needs to receive the remote control commands sent by the ground control station (GCS) during the execution of the mission of UAV. At the same time, mission management computer also needs to send telemetry information to GCS. Telemetry information is derived from telemetry and reconnaissance data for various mission payloads on UAV. The communication procedure of telemetry and remote control is achieved by mission management software. The communication receiving software discussed in this paper is the underlying module of the mission management software. The mission payload communication frame model adopts the structured data definition way, its basic module includes the frame header, the frame length and the frame check sum section and so on. In order to uniformly receive the communication data of all mission payload, this paper designed a communication frame receiving software based on object-oriented method. Throught experiments, the program described in this paper can efficiently complete the reception of communication frames and have a certain degree of expansion flexibility. It is successfully applied to the mission management computer of a certain type of UAV.
UAV; State machine; Datagram; Object-oriented
V247.1
A
10.3969/j.issn.1003-6970.2018.07.013
皮祖成(1985-),男,工程師,主要研究方向:無(wú)人機(jī)任務(wù)載荷應(yīng)用;陳文(1986-),男,工程師,主要研究方向:無(wú)人機(jī)任務(wù)載荷應(yīng)用;馬龍(1987-),男,工程師,主要研究方向:無(wú)人機(jī)任務(wù)載荷應(yīng)用;魏瀚(1990-),男,助理工程師,主要研究方向:無(wú)人機(jī)任務(wù)規(guī)劃。
本文著錄格式:皮祖成,陳文,馬龍,等. 面向?qū)ο蟮臒o(wú)人機(jī)任務(wù)設(shè)備通信接收軟件設(shè)計(jì)[J]. 軟件,2018,39(7):63-67