覃石昌
(中國直升機設計研究所無人機事業部, 江西景德鎮,333001)
對于無人直升機地面控制站來說,內部運行著多種類復雜的設備,幾乎所有設備都和外界進行數據交互,控制站的正常運行依賴于這些設備的正常工作,由于站內設備數目眾多且軟件異構多樣化,為每一款設備預留專門的監控軟件是不現實、沒有必要的,因而需要集成管理軟件對所有設備進行集中進行監控、管理。C++是強類型的面向對象開發語言,使用其開發的代碼具有運行效率高、代碼簡潔、可直接操作硬件等優點。但是,C++并沒有專門的UI組件,也缺乏可靠的線程通信機制。QT是一套跨平臺的C++開發庫,其封裝了大量的工具庫;界面源碼與業務代碼充分解耦合;QT的信號槽機制十分適合UI組件刷新。因而本文利用QT開發無人直升機地面站[1]無人直升機地面站集成管理軟件。
無人直升機地面站集成管理軟件采用模塊化設計,界面源碼與業務代碼充分解耦,具有良好的復用性和擴展性。軟件架構如圖1所示,分為顯示界面、管理界面、通信、后臺管理四大模塊。

圖1 基于QT的集成管理軟件架構圖
底層的通信模塊中網絡通信部件基于QUdpSocket進行開發,串口通信部件基于QSerialPort進行開發,其他界面顯示、業務邏輯部件均基于QT庫進行開發。
軟件中的通信模塊主要功能室向界面提供顯示數據,對外界提供交互接口,QT作為一款功能強大的C++類庫,庫內有豐富的通信組件。無人直升機地面控制站的主要功能是和無人直升機交互數據,該類數據通信具有數據量大、對時間敏感等特點,所以采用UDP通信;同時,地面站內設有多套冗余設備提高地面站的可靠性,冗余設備之間除了UDP外,也使用串口通信,因而,從全站統一數據傳輸協議,提高系統集成效率的目的出發,集成管理軟件與外界的通信接口基于UDP和串口。通信模塊以動態鏈接庫形式被主程序調用。
通信模塊設計流程如圖2所示。

圖2 基于QT的通信模塊設計流程圖
根據需求,集成管理軟件與服務器之間要實現狀態管理、權限控制等功能。基于UDP的無狀態通信的特點,集成管理軟件與服務器的交互數據格式分為兩部分,第一部分為通用請求類型數據,第二部分為通用反饋類型數據,反饋類型數據是對請求數據的執行反饋。
通用請求類型數據格式如下:


actCode存放的是本次請求數據的類型,表示該請求是否需要結果反饋,actData數組內存放各種請求數據,例如,用戶(席位)登陸的請求數據,actData內存放用戶ID、密碼、角色等數據;用戶(席位)管理的請求數據,actData內存放的是席位ID、管理類型ID等數據。
通用反饋類型數據格式如下:

其中actResult存放ID為actNum的請求的執行結果,replyText數組存放該請求的文本信息,一般存放請求執行失敗的錯誤信息。
集成管理軟件在服務器登錄期間要保持狀態信息,需要定時發送心跳信息,數據格式如下:

為了提高效率、避免占用主線程導致主界面出現卡滯,網絡通信需要運行在線程上,代碼如下:

網絡通信線程接收到數據存放在緩沖區,等待數據解析線程解析。
串口通信作為網絡通信的備份冗余,傳輸相同的數據信息,優先級比網絡通道低。串口傳輸的通用請求數據格式如下:

因為串口通信的數據流傳輸特點,因而串口的數據格式需要在網絡數據格式基礎上增加起始標識和結束標識,其中startFlag數組內存放開始標志常量0xAA,0xAA;endFlag數組內存放結束標志常量0xBB,0xBB。
為了提高效率、避免占用主線程導致主界面出現卡滯,串口通信業同樣需要運行在線程上,主要代碼如下所示:
串口通信線程初始化串口列表,監聽串口數據,接收到串口流數據后,截獲0xAA標記作為數據幀的開始標記,截獲0xBB作為數據幀的結束標記,開始標志與結束標志之間的數據作為完整數據幀發送到串口數據緩沖中,等待數據解析線程解析。
通信模塊接收到的數據還不能直接發送到界面模塊顯示,因為數據還要經過協議解析、運算、以及業務邏輯處理后才能由界面顯示出來。
數據解析由單獨線程執行,如圖3所示,首先讀取協議文件內容,從緩沖區取出通信模塊接收到的數據,根據協議解析數據目的地、數據格式、數據單位等,通過信號槽發送到界面模塊。

圖3 數據解析流程圖
主界面分為四大部分,左側為時間顯示部件,中間是狀態顯示部件與狀態管理部件,右側是菜單部件。
如圖4所示,時間顯示部件可顯示本地時間與時統設備時間,當顯示時統設備時間時,通信模塊定時通過UDP接收時統設備發送的授時信息,經過數據解析,推送到時間顯示部件顯示出來。

圖4 時間顯示部件
如圖5所示,狀態顯示部件主要顯示全站設備的自檢、運行狀態信息,點擊狀態圖標,將會彈出地面站運行詳細狀態子界面,通過UDP組播定時接收服務器推送的信息,實現顯示任務模式、主鏈、副鏈、服務器、控制器等設備的狀態。

圖5 狀態顯示部件圖
消息提示欄顯示地面站內設備變動、重大狀態更改的消息,例如,某設備出現故障,鏈路冗余線路發生切換等消息都會及時推送到消息顯示欄,從而為席位操作員提供恰當的預警通知。
如圖6所示,狀態管理部件是全站設備的管理入口,界面部署負責席位計算機軟件的顯示位置安排;虛擬鍵盤在席位計算機不能連接物理鍵盤的情況下提供鍵盤的作用,進程管理可以查看、關閉本席位或站內其他計算機的進程;記錄回放負責記錄站內數據流,為無人直升機飛行任務過程的故障排查、訓練仿真提供數據支撐;軟件管理主要對席位和其他計算機的軟件安裝進行管理;系統管理主要對服務器的運行進行管理,包括參數設置,冗余手動切換等。

圖6 狀態管理部分圖
如圖7所示,菜單部件是集成管理軟件的管理入口,主要功能有角色切換、注銷、密碼修改等。

圖7 菜單部件圖
集成管理軟件部署于無人直升機地面站人機交互席位上。首次運行前,在軟件配置文件配置本席位IP地址、UDP通信參數等配置參數,其他的應用軟件有集成管理軟件啟動、關閉,進行集中管理。
經過在U-M無人直升機項目的實際運行驗證,集成管理軟件運行良好,能夠實時顯示控制站內各設備的狀態,并能有效進行管理,為無人直升機控制站的穩定運行提供了必要的幫助。
本文詳細介紹了基于QT的無人直升機地面站集成故那里軟件的開發過程。用本文方法開發的集成管理軟件,經在實際無人機控制站運行驗證,該集成管理軟件能夠實時監控站內設備動態并對其進行有效管理,具有界面直觀、操作方便等特點,為無人直升機的飛行提供了一定的幫助。