蔡 偉,周乃恩
(中國航天空氣動力技術(shù)研究院,北京100074)
無人機(jī)在飛行時,地面控制站發(fā)送上行指令通過遙控信道到達(dá)機(jī)載設(shè)備,機(jī)載設(shè)備產(chǎn)生的下行數(shù)據(jù)通過遙測信道到達(dá)地面控制站。一般設(shè)計為上行指令與下行數(shù)據(jù)在某一機(jī)載設(shè)備上(如設(shè)備 1)匯集,經(jīng)處理后發(fā)送到其他的設(shè)備中。但該設(shè)備同時還有其他任務(wù)需完成,當(dāng)數(shù)據(jù)量過大時會對設(shè)備造成負(fù)擔(dān),甚至影響飛行安全。為此本文設(shè)計了一個專用數(shù)據(jù)接口設(shè)備,用于無人機(jī)的數(shù)據(jù)交換。全系統(tǒng)框圖如圖1所示。
數(shù)據(jù)接口設(shè)備硬件主要由PC104嵌入式計算機(jī)組成,主要組成部分有:(1)PC104總線型 CPU板,最高運行速度可達(dá)300 MHz;(2)PM504型串口擴(kuò)展板;(3)32 MB DOC(閃存,Disk On Chip);(4)系統(tǒng)電源板。 其中,PM504串口擴(kuò)展板實現(xiàn)PC104總線的串口擴(kuò)展,共擴(kuò)展4個RS422總線的UART(通用異步接收/發(fā)送裝置);32 MB DOC用于存儲操作系統(tǒng)以及開發(fā)程序;系統(tǒng)電源板采用Ericsson的PKF系列電源模塊,用于提供系統(tǒng)電源,主要為5 V和12 V。
如圖1所示,數(shù)據(jù)接口設(shè)備與機(jī)載設(shè)備的數(shù)據(jù)交換分為全雙工方式與半雙工兩種方式。數(shù)據(jù)交換分為上行指令分發(fā)和下行數(shù)據(jù)融合兩部分。
上行指令分發(fā)指數(shù)據(jù)接口設(shè)備接收到機(jī)載收發(fā)組合的數(shù)據(jù)后,發(fā)送到相應(yīng)的設(shè)備中去。上行指令采用統(tǒng)一的幀格式,如表1所示。
表1 上行指令幀格式
其中,A為同步碼 0xFF,B為幀識別符 (設(shè)備 1為0X11,設(shè)備 2為 0X22,設(shè)備 3為 0X33)。數(shù)據(jù)接口設(shè)備首先判斷數(shù)據(jù)是否為同步碼,如果是則存入接收數(shù)組中,接收剩余的28 B數(shù)據(jù)。然后,根據(jù)幀識別符B,發(fā)送該幀數(shù)據(jù)到相應(yīng)的端口。
下行數(shù)據(jù)發(fā)送指接口設(shè)備將機(jī)載設(shè)備產(chǎn)生的數(shù)據(jù)信息發(fā)送到收發(fā)組合中。每個機(jī)載設(shè)備的數(shù)據(jù)發(fā)送速率各不相同,為保證數(shù)據(jù)準(zhǔn)確性和實時性,程序分別建立了相應(yīng)的環(huán)形接收緩存。接口設(shè)備定時從環(huán)形緩存中取出數(shù)據(jù)組合后送到收發(fā)組合中。
以接口設(shè)備接收機(jī)載設(shè)備1數(shù)據(jù)建立的環(huán)形緩存為例,該緩存分為6個分區(qū),如圖2所示。程序開辟兩個線程:接收線程和發(fā)送線程,同時生成兩個跟蹤變量,即接收數(shù)據(jù)當(dāng)前分區(qū)索引號IndexIn和發(fā)送數(shù)據(jù)當(dāng)前分區(qū)索引號IndexOut,并且初始化為零,指向第一個分區(qū)。
圖3給出了環(huán)形緩沖接收數(shù)據(jù)流程圖。接收流程完成創(chuàng)建并初始化緩存工作后,開始接收設(shè)備1發(fā)送的數(shù)據(jù)。當(dāng)接收完一幀數(shù)據(jù)后,接收索引IndexIn指向下一接收分區(qū)。
圖3 環(huán)形緩沖接收數(shù)據(jù)流程
圖4給出了發(fā)送數(shù)據(jù)流程圖。數(shù)據(jù)發(fā)送為定時模式,定時時間到后,建立發(fā)送數(shù)組并初始化,程序首先判斷接收索引IndexIn與發(fā)送索引IndexOut是否相等,如果相等,則表明環(huán)形緩存中無數(shù)據(jù),跳出發(fā)送流程,否則進(jìn)入發(fā)送流程。取IndexOut指向的當(dāng)前分區(qū)數(shù)據(jù)到發(fā)送數(shù)組,同時IndexOut指向下一分區(qū)。數(shù)據(jù)在接收和發(fā)送過程中,可能出現(xiàn)IndexIn與IndexOut相等的情況,因此在環(huán)形緩存中接收完一幀數(shù)據(jù)后判斷兩者是否相等,如果相等,則IndexOut自增 1,使得進(jìn)入發(fā)送流程中后,兩者不相等,保證了發(fā)送的進(jìn)行。
圖4 環(huán)形緩沖發(fā)送數(shù)據(jù)流程
當(dāng)變量IndexIn和IndexOut指向緩存最后一個分區(qū)時,將兩變量重新賦初始值,分別進(jìn)行下一循環(huán)的數(shù)據(jù)接收和發(fā)送。程序為接收設(shè)備1數(shù)據(jù)開辟6×32 B大小的緩存區(qū),為設(shè)備3開辟2×80 B的緩存區(qū)。每次從存有設(shè)備1數(shù)據(jù)的緩存中取兩幀數(shù)據(jù),從存有設(shè)備3數(shù)據(jù)的緩存中取一幀數(shù)據(jù),組合后發(fā)送到機(jī)載收發(fā)組合。設(shè)備1的數(shù)據(jù)發(fā)送速率為38 400 b/s,而設(shè)備 3為19 200 b/s。因為數(shù)據(jù)接口設(shè)備主頻最高為300 MHz,所以不會出現(xiàn)緩存區(qū)開辟過小導(dǎo)致數(shù)據(jù)溢出的現(xiàn)象。
環(huán)形緩沖技術(shù)采用的線程機(jī)制實現(xiàn)了數(shù)據(jù)接收和發(fā)送的并行工作,通過對接收線程當(dāng)前數(shù)據(jù)分區(qū)索引號IndexIn和發(fā)送線程當(dāng)前數(shù)據(jù)處理分區(qū)索引IndexOut的有效控制,可以跟蹤并且及時處理緩存中的分區(qū)數(shù)據(jù),避免緩存區(qū)數(shù)據(jù)覆蓋和數(shù)據(jù)的漏移。
根據(jù)上述流程框圖編寫好軟件后,下載到PC104主板上的DOC中。啟動路徑指向當(dāng)前程序所在位置,設(shè)備上電后自動運行程序。試驗在兩臺PC機(jī)上進(jìn)行,一臺模擬收發(fā)組合,另一臺模擬設(shè)備1、2和3。因為PC機(jī)上串口有限,采用MOXA卡進(jìn)行了串口擴(kuò)展。數(shù)據(jù)的發(fā)送和接收采用串口精靈軟件。試驗過程中沒有出現(xiàn)數(shù)據(jù)丟失現(xiàn)象,表明設(shè)備性能良好,可以正常工作。
本文介紹了一種采用環(huán)形緩存技術(shù)的數(shù)據(jù)接口設(shè)備。經(jīng)在無人機(jī)上驗證,該設(shè)備可以很好地完成數(shù)據(jù)接收和發(fā)送任務(wù),避免數(shù)據(jù)丟失現(xiàn)象。產(chǎn)品可擴(kuò)展性強(qiáng),可以用于其他無人機(jī)系統(tǒng),具有廣泛的應(yīng)用前景。
[1]姚章俊,陳蜀宇,盧堯.一種高性能環(huán)形緩沖區(qū)的研究與實現(xiàn)[J].計算機(jī)工程,2012,38(8):228-231.
[2]王蕾,潘梁,吳國斌,等.基于數(shù)字廣播的大數(shù)據(jù)量接收與存儲策略[J].計算機(jī)工程,2008,34(24):233-237.
[3]余泓利,習(xí)勇,馬東堂.一種基于ARM和FPGA的環(huán)形緩沖區(qū)接口設(shè)計[J].電子技術(shù),2011(09):53-55.
[4]張穩(wěn)穩(wěn),歐陽嫻,白永林,等.PC104串口通信在工程中的應(yīng)用[J].微計算機(jī)信息,2006,22(1-2):57-59.