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