民用無人機系統集成時,除了飛控需要與地面站通信外,部分機載設備也需要與地面系統的設備進行通信。如采用相對差分GPS技術來提高無人機導航精度時,地面端差分基站需要上傳差分導航電文給機載移動站接收機;任務載荷需要與其配套的地面控制終端傳輸狀態與指令數據等。如何解決空地多路設備的數據傳輸成為系統集成的關鍵問題。
現有的解決方法主要包括:(1)采用多對數傳電臺或多通道電臺分別傳輸各路設備的數據;(2)由飛控和地面站轉發多路數據,數據經過一對電臺實現無線傳輸。方法1體積重量增加,電磁兼容性差,且成本高。因此,方法2成為主要實現方法。但由于飛控需要完成復雜的導航控制解算任務,處理器資源有限,造成數據傳輸效率低,數據量大時容易發生數據阻塞的問題,影響無人機飛行安全。
鑒于現有的無人機設備多采用串口通信方式,且空地間的通信呈現交換局域網特性,本文設計了一種應用于無人機設備網絡的串口交換機,通過專用的鏈路層報文協議和基于RT-Thread實時操作系統的多線程通信程序,實現高效的多通道數據交換傳輸功能;利用操作系統基于線程優先級的內核調度方法實現輸出端口的優先級隊列調度功能,確保高優先級數據不因數據量大而發生通信阻塞,提高了交換傳輸系統的可靠性。
1 系統網絡結構與工作原理
一對串口交換機分別安裝在無人機系統的機載端和地面端,連接機載系統和地面系統的串口設備,如圖1所示。交換機端口分為1個節點端口和多個設備端口,節點端口連接數傳電臺,分時傳輸各設備的數據。在計算機網絡中,以太網交換機工作在OSI模型的數據鏈路層,各端口接收到鏈路層的以太網數據幀后根據其中的目的MAC地址與端口地址映射表完成數據幀的轉發。而在無人機設備網絡中,串口交換機接收到的是設備的應用協議數據幀,不包含任何網絡連接信息,因此系統軟件為各設備端口分配唯一的端口地址,并根據鏈路層的報文協議和端口參數為設備數據幀添加地址等鏈路層封裝,通過端口尋址轉發數據,在端口輸出時去除封裝,實現各通道設備間虛連接的透傳功能。當出現多路數據同時訪問節點端口時,則根據通道優先級依次輸出各路數據,最終實現多通道數據的無線傳輸功能。
2 系統需求分析與硬件方案
結合當前應用需求分析,無人機空地數據鏈包括飛控數據鏈、差分導航電文數據鏈、載荷數據鏈等。因此,將串口交換機的端口數定為5個,分為1個節點端口和4個設備端口,在實現常用的3通道數據傳輸的基礎上預留1路給其他擴展設備。
串口交換機的硬件組成包括單片機、電平轉換芯片、端口通信指示燈和開關電源。單片機采用ST公司的STM32F405RGT6.其內核為ARM公司推出的Cotex-M4內核,運行時鐘達168 MHz,總共有6個串口外設,具有1 MB的Flash和192 KB的RAM,充足的運行內存為大容量通信提供足夠的緩沖區,單個芯片即可滿足系統設計需求。
電平轉換芯片由MAX3232和MAX3490分別將COMS/TTL電平轉為常用的RS-232和RS-422串口電平,以適應不同接口的設備,如圖2所示。通信指示燈則用于顯示各端口的數據收發狀態。
3 系統軟件設計
3.1 鏈路層報文協議設計
為實現多路數據交換傳輸功能,首先定義了鏈路層報文交換協議。借鑒IEEE802.3標準以太網幀格式定義,并結合無人機串口設備網絡的特點和實際功能需求,設計了如表1所示的鏈路層報文協議。
相較于以太網幀格式,上述定義的鏈路層報文協議存在以下特點:
(1)以太網數據幀最長為1 500 B,串口交換機的報文幀長由1 B表示,最長數據幀為255 B,該長度能夠滿足絕大部分的串口設備幀長。對于超長的數據幀,對其拆分成多個數據報文,由報文序號表示報文之間的拼接順序,避免超長數據幀占用鏈路時間過長而增加其他報文的等待延時;
(2)報文攜帶端口的優先級信息,在多個報文同時訪問一個輸出端口時能夠實現區分服務功能,確保重要的設備數據優先輸出;
(3)協議除了用于數據通信外,還可向交換機發送指令報文,配置各個端口的優先級和串口參數等,提高串口交換機應用的靈活性。
3.2 多線程通信程序設計
串口交換機的嵌入式通信程序要求能夠實時處理5個串口外設的數據收發,同時還要完成各設備端口數據的鏈路層協議封裝、轉發、解封和端口輸出調度等任務。采用傳統單片機順序執行的程序設計方法難以實現多個端口高效、實時的數據交換傳輸功能。
本文在串口交換機的STM32處理器上移植了嵌入式實時操作系統RT-Thread,利用操作系統的多線程編程模型與運行機制實現各端口通信程序模塊化編程和獨立運行。利用系統提供的信號量、消息隊列等線程同步和通信對象實現各端口收發線程的同步與數據交換功能,極大地提高了程序設計的效率。
首先,為了應對多串口并發傳輸數據的通信壓力,軟件底層設計了DMA傳輸和接收空閑中斷的串口驅動程序。端口接收設備的數據時,DMA控制器自動將數據存入底層接收緩沖區。當數據幀結束時,串口產生空閑中斷,在中斷服務函數中計算接收數據長度,并釋放信號量通知上層的應用程序讀取數據。在發送數據時,直接將發送緩沖區的首地址和數據長度賦值給DMA控制器后,便掛起釋放CPU資源,底層由硬件自動執行串口發送。該方法與常用的單字節接收中斷方法相比,極大地減少數據接收的中斷頻率,接收線程可在底層接收完一幀數據后才喚醒一次,統一對接收緩沖區的數據進行處理,提高了數據傳輸效率和系統可靠性。
上層應用程序分別為每個端口創建接收處理線程和發送線程,由系統內核根據線程狀態和線程優先級調度執行,達到并發運行的效果。端口接收線程的執行流程如圖3所示,首先讀取底層接收FIFO的數據。對于4個設備端口,對讀取的數據執行透傳處理,即讀取端口目的地址等參數后對數據幀添加鏈路層協議封裝,形成鏈路層報文數據,最后通過操作系統提供的消息隊列將報文數據轉發到節點端口的發送線程。對于節點端口,其接收電臺發送過來的鏈路層報文數據,需要對報文進行傳輸校驗,校驗通過后按照報文的目的端口信息將報文轉發到目的端口的發送線程。
設備端口的發送線程在等待消息隊列的報文數據時處于掛起狀態。在獲得節點接收線程轉發過來的報文數據后,發送線程以高于接收線程的優先級搶占CPU,讀取隊列中報文數據并根據鏈路層的報文協議去除封裝,提取數據內容,執行DMA發送,最后釋放CPU。該過程流程簡單,占用CPU時間少,使消息隊列中的報文及時輸出,避免隊列溢出。
3.3 基于線程優先級的優先隊列調度實現方法
交換機連接電臺的節點端口任意時刻只能傳輸一個報文數據,當多路報文同時訪問時,須在輸出隊列中排隊等待。不同數傳電臺的傳輸速率不同,造成后續報文排隊等待延時難以確定。設備增多,數據量變大時容易發生通信阻塞和緩沖區溢出的問題。
考慮到不同的設備數據對實時性要求和無人機安全飛行的重要程度不同。為了確保無人機飛行安全,本文采用的策略是對端口進行優先級定義,形成不同優先級的報文,并確保最高優先級的數據充分享有電臺的傳輸帶寬,不發生通信阻塞。一種易于實現的方法是嚴格優先級隊列調度算法(Strict Priority,SP),該算法的原理是在節點輸出端口設計一個隊列調度器和多級輸出緩沖隊列,如圖4所示。隊列調度器每次發送報文數據時,先發送最高優先級隊列的報文數據,只有在最高優先級隊列中無報文數據后,才從次優先級中選擇報文發送,以此類推。
通過分析比較,SP調度算法對隊列的調度策略與嵌入式實時操作系統內核基于線程優先級的調度策略相似,因此采用線程優先級的調度方法可快速實現SP隊列調度算法。具體實現方法是為圖4中的每個隊列創建一個發送線程,即將原來節點端口的1個發送線程擴展為4個,線程的優先級順序按照端口優先級排序,且均高于其他端口線程的優先級。每個發送線程對應一個長度為20條消息的消息隊列,用于緩存待調度輸出的報文數據。在只有一個發送線程的消息隊列收到報文時,內核直接調度執行串口發送。當多個發送線程同時處于就緒態時,內核根據線程優先級先執行高優先級的發送線程,發送完成后進行下一次調度,每次調度都從就緒態中最高優先級的發送線程開始。
線程調度與隊列調度的一個區別在于內核對線程實行全搶占式的調度方法,即高優先級的線程能夠搶占低優先級線程的執行。為了避免高優先級發送線程搶占發送數據,造成前一報文傳輸失敗,需在節點端口4個發送線程之間添加發送互斥鎖同步對象,使高優先級的發送線程在收到報文后仍須等待當前發送完成并釋放互斥鎖,才獲得執行。
通過上述方法,原有的隊列調度工作轉換為內核對線程的調度工作,無需設計隊列調度器程序,由穩定的系統內核實現相同的功能,提高了運行的可靠性,確保了高優先級設備數據不因數據量大而發生通信阻塞,進一步提高了無人機系統多路數據傳輸的可靠性。
4 系統測試結果與分析
為了測試驗證系統軟件,排除電臺無線傳輸誤碼造成的報文丟失,測試時采用有線的方式連接一對串口交換機的兩個節點端口,節點端口的波特率設置為115 200 b/s。通過串口助手模擬設備通信,測試內容分為2項:
(1)測試各通道在不同波特率、不同數據頻率下數據傳輸的完整性和實時性。由兩個串口助手分別在傳輸通道的兩端,雙向同時發送字符串消息。測試結果表明,各通道獨立工作時均能完整、實時地傳輸數據。
(2)測試在不同數據頻率下4個通道并發傳輸數據時各通道數據的傳輸完整率。首先按端口序號定義4個設備端口的優先級,數值越小優先級越高,波特率統一配置為115 200 b/s。串口助手軟件同時向交換機的4個設備端口發送幀長為50 B的數據,發送頻率為50~100 Hz,以10 Hz遞增,各頻率下通信10 min,統計每個頻率下4個通道接收字節數占發送字節數的百分比
在60 Hz頻率下,總的數據輸入速率為12 000 B/s,由于緩沖區的存在,即使略大于節點的輸出速率11 520 B/s,短時間內仍然能夠完整地傳輸4個通道的數據,只存在少量誤碼丟包。當數據頻率達到70 Hz時,輸入速率已經大大超過節點輸出速率,此時最低優先級的COM4端口數據開始得不到傳輸,COM3端口只傳輸了67.8%,而高優先級的COM1、COM2仍然能夠得到完整的傳輸。繼續增加發送頻率,COM3的傳輸率繼續下降,但仍然不影響高優先級的兩個端口。測試結果說明基于線程優先級的SP隊列調度實現方法有效。
5 結論
本文針對當前民用無人機系統集成時出現的空地多路設備傳輸需求,將計算機局域網中以太網交換機的原理應用于無人機系統串口設備網絡,設計了多串口交換機。通過專用的鏈路層協議和高效的多線程通信程序,實現了空地多通道數傳交換功能,并實現了端口的區分服務,確保高優先級數據的可靠傳輸,保障無人機飛行安全。該設計簡化了系統集成工作,降低了系統成本,對推動無人機在各領域的應用具有重要意義。
責任編輯:gt
評論
查看更多