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