文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.181311
中文引用格式: 盛蔚,黃偉杰. 民用無人機(jī)多通道數(shù)傳交換系統(tǒng)設(shè)計[J].電子技術(shù)應(yīng)用,2018,44(12):77-80,84.
英文引用格式: Sheng Wei,Huang Weijie. Design of multi-channel data switch system for civil UAVs[J]. Application of Electronic Technique,2018,44(12):77-80,84.
0 引言
民用無人機(jī)系統(tǒng)集成時,除了飛控需要與地面站通信外,部分機(jī)載設(shè)備也需要與地面系統(tǒng)的設(shè)備進(jìn)行通信。如采用相對差分GPS技術(shù)來提高無人機(jī)導(dǎo)航精度時,地面端差分基站需要上傳差分導(dǎo)航電文給機(jī)載移動站接收機(jī)[1];任務(wù)載荷需要與其配套的地面控制終端傳輸狀態(tài)與指令數(shù)據(jù)等。如何解決空地多路設(shè)備的數(shù)據(jù)傳輸成為系統(tǒng)集成的關(guān)鍵問題。
現(xiàn)有的解決方法主要包括:(1)采用多對數(shù)傳電臺或多通道電臺分別傳輸各路設(shè)備的數(shù)據(jù);(2)由飛控和地面站轉(zhuǎn)發(fā)多路數(shù)據(jù),數(shù)據(jù)經(jīng)過一對電臺實現(xiàn)無線傳輸[2-3]。方法1體積重量增加,電磁兼容性差,且成本高。因此,方法2成為主要實現(xiàn)方法。但由于飛控需要完成復(fù)雜的導(dǎo)航控制解算任務(wù),處理器資源有限,造成數(shù)據(jù)傳輸效率低,數(shù)據(jù)量大時容易發(fā)生數(shù)據(jù)阻塞的問題,影響無人機(jī)飛行安全。
鑒于現(xiàn)有的無人機(jī)設(shè)備多采用串口通信方式,且空地間的通信呈現(xiàn)交換局域網(wǎng)特性,本文設(shè)計了一種應(yīng)用于無人機(jī)設(shè)備網(wǎng)絡(luò)的串口交換機(jī),通過專用的鏈路層報文協(xié)議和基于RT-Thread實時操作系統(tǒng)的多線程通信程序,實現(xiàn)高效的多通道數(shù)據(jù)交換傳輸功能;利用操作系統(tǒng)基于線程優(yōu)先級的內(nèi)核調(diào)度方法實現(xiàn)輸出端口的優(yōu)先級隊列調(diào)度功能,確保高優(yōu)先級數(shù)據(jù)不因數(shù)據(jù)量大而發(fā)生通信阻塞,提高了交換傳輸系統(tǒng)的可靠性。
1 系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)與工作原理
一對串口交換機(jī)分別安裝在無人機(jī)系統(tǒng)的機(jī)載端和地面端,連接機(jī)載系統(tǒng)和地面系統(tǒng)的串口設(shè)備,如圖1所示。交換機(jī)端口分為1個節(jié)點端口和多個設(shè)備端口,節(jié)點端口連接數(shù)傳電臺,分時傳輸各設(shè)備的數(shù)據(jù)。在計算機(jī)網(wǎng)絡(luò)中,以太網(wǎng)交換機(jī)工作在OSI模型的數(shù)據(jù)鏈路層,各端口接收到鏈路層的以太網(wǎng)數(shù)據(jù)幀后根據(jù)其中的目的MAC地址與端口地址映射表完成數(shù)據(jù)幀的轉(zhuǎn)發(fā)[4]。而在無人機(jī)設(shè)備網(wǎng)絡(luò)中,串口交換機(jī)接收到的是設(shè)備的應(yīng)用協(xié)議數(shù)據(jù)幀,不包含任何網(wǎng)絡(luò)連接信息,因此系統(tǒng)軟件為各設(shè)備端口分配唯一的端口地址,并根據(jù)鏈路層的報文協(xié)議和端口參數(shù)為設(shè)備數(shù)據(jù)幀添加地址等鏈路層封裝,通過端口尋址轉(zhuǎn)發(fā)數(shù)據(jù),在端口輸出時去除封裝,實現(xiàn)各通道設(shè)備間虛連接的透傳功能。當(dāng)出現(xiàn)多路數(shù)據(jù)同時訪問節(jié)點端口時,則根據(jù)通道優(yōu)先級依次輸出各路數(shù)據(jù),最終實現(xiàn)多通道數(shù)據(jù)的無線傳輸功能。
2 系統(tǒng)需求分析與硬件方案
結(jié)合當(dāng)前應(yīng)用需求分析,無人機(jī)空地數(shù)據(jù)鏈包括飛控數(shù)據(jù)鏈、差分導(dǎo)航電文數(shù)據(jù)鏈、載荷數(shù)據(jù)鏈等。因此,將串口交換機(jī)的端口數(shù)定為5個,分為1個節(jié)點端口和4個設(shè)備端口,在實現(xiàn)常用的3通道數(shù)據(jù)傳輸?shù)幕A(chǔ)上預(yù)留1路給其他擴(kuò)展設(shè)備。
串口交換機(jī)的硬件組成包括單片機(jī)、電平轉(zhuǎn)換芯片、端口通信指示燈和開關(guān)電源。單片機(jī)采用ST公司的STM32F405RGT6,其內(nèi)核為ARM公司推出的Cotex-M4內(nèi)核,運(yùn)行時鐘達(dá)168 MHz,總共有6個串口外設(shè),具有1 MB的Flash和192 KB的RAM,充足的運(yùn)行內(nèi)存為大容量通信提供足夠的緩沖區(qū),單個芯片即可滿足系統(tǒng)設(shè)計需求。
電平轉(zhuǎn)換芯片由MAX3232和MAX3490分別將COMS/TTL電平轉(zhuǎn)為常用的RS-232和RS-422串口電平,以適應(yīng)不同接口的設(shè)備,如圖2所示。通信指示燈則用于顯示各端口的數(shù)據(jù)收發(fā)狀態(tài)。
3 系統(tǒng)軟件設(shè)計
3.1 鏈路層報文協(xié)議設(shè)計
為實現(xiàn)多路數(shù)據(jù)交換傳輸功能,首先定義了鏈路層報文交換協(xié)議。借鑒IEEE802.3標(biāo)準(zhǔn)以太網(wǎng)幀格式定義[5],并結(jié)合無人機(jī)串口設(shè)備網(wǎng)絡(luò)的特點和實際功能需求,設(shè)計了如表1所示的鏈路層報文協(xié)議。
相較于以太網(wǎng)幀格式,上述定義的鏈路層報文協(xié)議存在以下特點:
(1)以太網(wǎng)數(shù)據(jù)幀最長為1 500 B,串口交換機(jī)的報文幀長由1 B表示,最長數(shù)據(jù)幀為255 B,該長度能夠滿足絕大部分的串口設(shè)備幀長。對于超長的數(shù)據(jù)幀,對其拆分成多個數(shù)據(jù)報文,由報文序號表示報文之間的拼接順序,避免超長數(shù)據(jù)幀占用鏈路時間過長而增加其他報文的等待延時;
(2)報文攜帶端口的優(yōu)先級信息,在多個報文同時訪問一個輸出端口時能夠?qū)崿F(xiàn)區(qū)分服務(wù)功能,確保重要的設(shè)備數(shù)據(jù)優(yōu)先輸出;
(3)協(xié)議除了用于數(shù)據(jù)通信外,還可向交換機(jī)發(fā)送指令報文,配置各個端口的優(yōu)先級和串口參數(shù)等,提高串口交換機(jī)應(yīng)用的靈活性。
3.2 多線程通信程序設(shè)計
串口交換機(jī)的嵌入式通信程序要求能夠?qū)崟r處理5個串口外設(shè)的數(shù)據(jù)收發(fā),同時還要完成各設(shè)備端口數(shù)據(jù)的鏈路層協(xié)議封裝、轉(zhuǎn)發(fā)、解封和端口輸出調(diào)度等任務(wù)。采用傳統(tǒng)單片機(jī)順序執(zhí)行的程序設(shè)計方法難以實現(xiàn)多個端口高效、實時的數(shù)據(jù)交換傳輸功能。
本文在串口交換機(jī)的STM32處理器上移植了嵌入式實時操作系統(tǒng)RT-Thread[6-7],利用操作系統(tǒng)的多線程編程模型與運(yùn)行機(jī)制實現(xiàn)各端口通信程序模塊化編程和獨(dú)立運(yùn)行。利用系統(tǒng)提供的信號量、消息隊列等線程同步和通信對象實現(xiàn)各端口收發(fā)線程的同步與數(shù)據(jù)交換功能,極大地提高了程序設(shè)計的效率。
首先,為了應(yīng)對多串口并發(fā)傳輸數(shù)據(jù)的通信壓力,軟件底層設(shè)計了DMA傳輸和接收空閑中斷的串口驅(qū)動程序。端口接收設(shè)備的數(shù)據(jù)時,DMA控制器自動將數(shù)據(jù)存入底層接收緩沖區(qū)。當(dāng)數(shù)據(jù)幀結(jié)束時,串口產(chǎn)生空閑中斷,在中斷服務(wù)函數(shù)中計算接收數(shù)據(jù)長度,并釋放信號量通知上層的應(yīng)用程序讀取數(shù)據(jù)。在發(fā)送數(shù)據(jù)時,直接將發(fā)送緩沖區(qū)的首地址和數(shù)據(jù)長度賦值給DMA控制器后,便掛起釋放CPU資源,底層由硬件自動執(zhí)行串口發(fā)送。該方法與常用的單字節(jié)接收中斷方法相比,極大地減少數(shù)據(jù)接收的中斷頻率,接收線程可在底層接收完一幀數(shù)據(jù)后才喚醒一次,統(tǒng)一對接收緩沖區(qū)的數(shù)據(jù)進(jìn)行處理,提高了數(shù)據(jù)傳輸效率和系統(tǒng)可靠性。
上層應(yīng)用程序分別為每個端口創(chuàng)建接收處理線程和發(fā)送線程,由系統(tǒng)內(nèi)核根據(jù)線程狀態(tài)和線程優(yōu)先級調(diào)度執(zhí)行,達(dá)到并發(fā)運(yùn)行的效果。端口接收線程的執(zhí)行流程如圖3所示,首先讀取底層接收FIFO的數(shù)據(jù)。對于4個設(shè)備端口,對讀取的數(shù)據(jù)執(zhí)行透傳處理,即讀取端口目的地址等參數(shù)后對數(shù)據(jù)幀添加鏈路層協(xié)議封裝,形成鏈路層報文數(shù)據(jù),最后通過操作系統(tǒng)提供的消息隊列將報文數(shù)據(jù)轉(zhuǎn)發(fā)到節(jié)點端口的發(fā)送線程。對于節(jié)點端口,其接收電臺發(fā)送過來的鏈路層報文數(shù)據(jù),需要對報文進(jìn)行傳輸校驗,校驗通過后按照報文的目的端口信息將報文轉(zhuǎn)發(fā)到目的端口的發(fā)送線程。
設(shè)備端口的發(fā)送線程在等待消息隊列的報文數(shù)據(jù)時處于掛起狀態(tài)。在獲得節(jié)點接收線程轉(zhuǎn)發(fā)過來的報文數(shù)據(jù)后,發(fā)送線程以高于接收線程的優(yōu)先級搶占CPU,讀取隊列中報文數(shù)據(jù)并根據(jù)鏈路層的報文協(xié)議去除封裝,提取數(shù)據(jù)內(nèi)容,執(zhí)行DMA發(fā)送,最后釋放CPU。該過程流程簡單,占用CPU時間少,使消息隊列中的報文及時輸出,避免隊列溢出。
3.3 基于線程優(yōu)先級的優(yōu)先隊列調(diào)度實現(xiàn)方法
交換機(jī)連接電臺的節(jié)點端口任意時刻只能傳輸一個報文數(shù)據(jù),當(dāng)多路報文同時訪問時,須在輸出隊列中排隊等待。不同數(shù)傳電臺的傳輸速率不同,造成后續(xù)報文排隊等待延時難以確定。設(shè)備增多,數(shù)據(jù)量變大時容易發(fā)生通信阻塞和緩沖區(qū)溢出的問題。
考慮到不同的設(shè)備數(shù)據(jù)對實時性要求和無人機(jī)安全飛行的重要程度不同。為了確保無人機(jī)飛行安全,本文采用的策略是對端口進(jìn)行優(yōu)先級定義,形成不同優(yōu)先級的報文,并確保最高優(yōu)先級的數(shù)據(jù)充分享有電臺的傳輸帶寬,不發(fā)生通信阻塞。一種易于實現(xiàn)的方法是嚴(yán)格優(yōu)先級隊列調(diào)度算法(Strict Priority,SP)[8],該算法的原理是在節(jié)點輸出端口設(shè)計一個隊列調(diào)度器和多級輸出緩沖隊列,如圖4所示。隊列調(diào)度器每次發(fā)送報文數(shù)據(jù)時,先發(fā)送最高優(yōu)先級隊列的報文數(shù)據(jù),只有在最高優(yōu)先級隊列中無報文數(shù)據(jù)后,才從次優(yōu)先級中選擇報文發(fā)送,以此類推。
通過分析比較,SP調(diào)度算法對隊列的調(diào)度策略與嵌入式實時操作系統(tǒng)內(nèi)核基于線程優(yōu)先級的調(diào)度策略[9]相似,因此采用線程優(yōu)先級的調(diào)度方法可快速實現(xiàn)SP隊列調(diào)度算法。具體實現(xiàn)方法是為圖4中的每個隊列創(chuàng)建一個發(fā)送線程,即將原來節(jié)點端口的1個發(fā)送線程擴(kuò)展為4個,線程的優(yōu)先級順序按照端口優(yōu)先級排序,且均高于其他端口線程的優(yōu)先級。每個發(fā)送線程對應(yīng)一個長度為20條消息的消息隊列,用于緩存待調(diào)度輸出的報文數(shù)據(jù)。在只有一個發(fā)送線程的消息隊列收到報文時,內(nèi)核直接調(diào)度執(zhí)行串口發(fā)送。當(dāng)多個發(fā)送線程同時處于就緒態(tài)時,內(nèi)核根據(jù)線程優(yōu)先級先執(zhí)行高優(yōu)先級的發(fā)送線程,發(fā)送完成后進(jìn)行下一次調(diào)度,每次調(diào)度都從就緒態(tài)中最高優(yōu)先級的發(fā)送線程開始。
線程調(diào)度與隊列調(diào)度的一個區(qū)別在于內(nèi)核對線程實行全搶占式的調(diào)度方法,即高優(yōu)先級的線程能夠搶占低優(yōu)先級線程的執(zhí)行。為了避免高優(yōu)先級發(fā)送線程搶占發(fā)送數(shù)據(jù),造成前一報文傳輸失敗,需在節(jié)點端口4個發(fā)送線程之間添加發(fā)送互斥鎖同步對象,使高優(yōu)先級的發(fā)送線程在收到報文后仍須等待當(dāng)前發(fā)送完成并釋放互斥鎖,才獲得執(zhí)行。
通過上述方法,原有的隊列調(diào)度工作轉(zhuǎn)換為內(nèi)核對線程的調(diào)度工作,無需設(shè)計隊列調(diào)度器程序,由穩(wěn)定的系統(tǒng)內(nèi)核實現(xiàn)相同的功能,提高了運(yùn)行的可靠性,確保了高優(yōu)先級設(shè)備數(shù)據(jù)不因數(shù)據(jù)量大而發(fā)生通信阻塞,進(jìn)一步提高了無人機(jī)系統(tǒng)多路數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
4 系統(tǒng)測試結(jié)果與分析
為了測試驗證系統(tǒng)軟件,排除電臺無線傳輸誤碼造成的報文丟失,測試時采用有線的方式連接一對串口交換機(jī)的兩個節(jié)點端口,節(jié)點端口的波特率設(shè)置為115 200 b/s。通過串口助手模擬設(shè)備通信,測試內(nèi)容分為2項:
(1)測試各通道在不同波特率、不同數(shù)據(jù)頻率下數(shù)據(jù)傳輸?shù)耐暾院蛯崟r性。由兩個串口助手分別在傳輸通道的兩端,雙向同時發(fā)送字符串消息。測試結(jié)果表明,各通道獨(dú)立工作時均能完整、實時地傳輸數(shù)據(jù)。
(2)測試在不同數(shù)據(jù)頻率下4個通道并發(fā)傳輸數(shù)據(jù)時各通道數(shù)據(jù)的傳輸完整率。首先按端口序號定義4個設(shè)備端口的優(yōu)先級,數(shù)值越小優(yōu)先級越高,波特率統(tǒng)一配置為115 200 b/s。串口助手軟件同時向交換機(jī)的4個設(shè)備端口發(fā)送幀長為50 B的數(shù)據(jù),發(fā)送頻率為50~100 Hz,以10 Hz遞增,各頻率下通信10 min,統(tǒng)計每個頻率下4個通道接收字節(jié)數(shù)占發(fā)送字節(jié)數(shù)的百分比,結(jié)果如圖5所示。
在60 Hz頻率下,總的數(shù)據(jù)輸入速率為12 000 B/s,由于緩沖區(qū)的存在,即使略大于節(jié)點的輸出速率11 520 B/s,短時間內(nèi)仍然能夠完整地傳輸4個通道的數(shù)據(jù),只存在少量誤碼丟包。當(dāng)數(shù)據(jù)頻率達(dá)到70 Hz時,輸入速率已經(jīng)大大超過節(jié)點輸出速率,此時最低優(yōu)先級的COM4端口數(shù)據(jù)開始得不到傳輸,COM3端口只傳輸了67.8%,而高優(yōu)先級的COM1、COM2仍然能夠得到完整的傳輸。繼續(xù)增加發(fā)送頻率,COM3的傳輸率繼續(xù)下降,但仍然不影響高優(yōu)先級的兩個端口。測試結(jié)果說明基于線程優(yōu)先級的SP隊列調(diào)度實現(xiàn)方法有效。
5 結(jié)論
本文針對當(dāng)前民用無人機(jī)系統(tǒng)集成時出現(xiàn)的空地多路設(shè)備傳輸需求,將計算機(jī)局域網(wǎng)中以太網(wǎng)交換機(jī)的原理應(yīng)用于無人機(jī)系統(tǒng)串口設(shè)備網(wǎng)絡(luò),設(shè)計了多串口交換機(jī)。通過專用的鏈路層協(xié)議和高效的多線程通信程序,實現(xiàn)了空地多通道數(shù)傳交換功能,并實現(xiàn)了端口的區(qū)分服務(wù),確保高優(yōu)先級數(shù)據(jù)的可靠傳輸,保障無人機(jī)飛行安全。該設(shè)計簡化了系統(tǒng)集成工作,降低了系統(tǒng)成本,對推動無人機(jī)在各領(lǐng)域的應(yīng)用具有重要意義。
參考文獻(xiàn)
[1] 張曉毅,韋高.基于Novatel DL-V3接收機(jī)的相對差分定位技術(shù)研究[J].彈箭與制導(dǎo)學(xué)報,2008(4):266-268,271.
[2] 陳青松,李平,韓波,等.多路串行通信在微型無人機(jī)飛控計算機(jī)中的設(shè)計與實現(xiàn)[J].機(jī)電工程,2006(4):57-61.
[3] 余國林,陳繼平,余濤,等.無人機(jī)航空遙感平臺機(jī)載作業(yè)控制系統(tǒng)設(shè)計[J].現(xiàn)代電子技術(shù),2012,35(4):132-135.
[4] 呂斌.交換機(jī)原理及應(yīng)用[J].電腦知識與技術(shù),2009,5(10):2557-2558,2563.
[5] 郭曉宇.基于IEEE802.3標(biāo)準(zhǔn)的以太網(wǎng)數(shù)據(jù)幀格式的封裝實現(xiàn)[D].北京:北京交通大學(xué),2008.
[6] 朱傳宏,張麗全.嵌入式實時操作系統(tǒng)RT-Thread在SEP-4020上的移植[J].計算機(jī)與數(shù)字工程,2010,38(11):93-96.
[7] 邱祎.嵌入式實時操作系統(tǒng)RT-Thread的設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2007.
[8] 魏艷艷,孟李林.高速分組交換網(wǎng)絡(luò)中調(diào)度器的設(shè)計[J].計算機(jī)技術(shù)與發(fā)展,2012,22(1):25-28.
[9] 郭楊,王新社.嵌入式操作系統(tǒng)的硬實時微內(nèi)核設(shè)計[J].計算機(jī)工程與設(shè)計,2008(1):115-118.
作者信息:
盛 蔚,黃偉杰
(北京航空航天大學(xué) 儀器科學(xué)與光電工程學(xué)院,北京100191)