覃石昌
(中國直升機(jī)設(shè)計(jì)研究所無人機(jī)事業(yè)部, 江西景德鎮(zhèn),333001)
對(duì)于無人直升機(jī)地面控制站來說,內(nèi)部運(yùn)行著多種類復(fù)雜的設(shè)備,幾乎所有設(shè)備都和外界進(jìn)行數(shù)據(jù)交互,控制站的正常運(yùn)行依賴于這些設(shè)備的正常工作,由于站內(nèi)設(shè)備數(shù)目眾多且軟件異構(gòu)多樣化,為每一款設(shè)備預(yù)留專門的監(jiān)控軟件是不現(xiàn)實(shí)、沒有必要的,因而需要集成管理軟件對(duì)所有設(shè)備進(jìn)行集中進(jìn)行監(jiān)控、管理。C++是強(qiáng)類型的面向?qū)ο箝_發(fā)語言,使用其開發(fā)的代碼具有運(yùn)行效率高、代碼簡潔、可直接操作硬件等優(yōu)點(diǎn)。但是,C++并沒有專門的UI組件,也缺乏可靠的線程通信機(jī)制。QT是一套跨平臺(tái)的C++開發(fā)庫,其封裝了大量的工具庫;界面源碼與業(yè)務(wù)代碼充分解耦合;QT的信號(hào)槽機(jī)制十分適合UI組件刷新。因而本文利用QT開發(fā)無人直升機(jī)地面站[1]無人直升機(jī)地面站集成管理軟件。
無人直升機(jī)地面站集成管理軟件采用模塊化設(shè)計(jì),界面源碼與業(yè)務(wù)代碼充分解耦,具有良好的復(fù)用性和擴(kuò)展性。軟件架構(gòu)如圖1所示,分為顯示界面、管理界面、通信、后臺(tái)管理四大模塊。
圖1 基于QT的集成管理軟件架構(gòu)圖
底層的通信模塊中網(wǎng)絡(luò)通信部件基于QUdpSocket進(jìn)行開發(fā),串口通信部件基于QSerialPort進(jìn)行開發(fā),其他界面顯示、業(yè)務(wù)邏輯部件均基于QT庫進(jìn)行開發(fā)。
軟件中的通信模塊主要功能室向界面提供顯示數(shù)據(jù),對(duì)外界提供交互接口,QT作為一款功能強(qiáng)大的C++類庫,庫內(nèi)有豐富的通信組件。無人直升機(jī)地面控制站的主要功能是和無人直升機(jī)交互數(shù)據(jù),該類數(shù)據(jù)通信具有數(shù)據(jù)量大、對(duì)時(shí)間敏感等特點(diǎn),所以采用UDP通信;同時(shí),地面站內(nèi)設(shè)有多套冗余設(shè)備提高地面站的可靠性,冗余設(shè)備之間除了UDP外,也使用串口通信,因而,從全站統(tǒng)一數(shù)據(jù)傳輸協(xié)議,提高系統(tǒng)集成效率的目的出發(fā),集成管理軟件與外界的通信接口基于UDP和串口。通信模塊以動(dòng)態(tài)鏈接庫形式被主程序調(diào)用。
通信模塊設(shè)計(jì)流程如圖2所示。
圖2 基于QT的通信模塊設(shè)計(jì)流程圖
根據(jù)需求,集成管理軟件與服務(wù)器之間要實(shí)現(xiàn)狀態(tài)管理、權(quán)限控制等功能?;赨DP的無狀態(tài)通信的特點(diǎn),集成管理軟件與服務(wù)器的交互數(shù)據(jù)格式分為兩部分,第一部分為通用請求類型數(shù)據(jù),第二部分為通用反饋類型數(shù)據(jù),反饋類型數(shù)據(jù)是對(duì)請求數(shù)據(jù)的執(zhí)行反饋。
通用請求類型數(shù)據(jù)格式如下:
actCode存放的是本次請求數(shù)據(jù)的類型,表示該請求是否需要結(jié)果反饋,actData數(shù)組內(nèi)存放各種請求數(shù)據(jù),例如,用戶(席位)登陸的請求數(shù)據(jù),actData內(nèi)存放用戶ID、密碼、角色等數(shù)據(jù);用戶(席位)管理的請求數(shù)據(jù),actData內(nèi)存放的是席位ID、管理類型ID等數(shù)據(jù)。
通用反饋類型數(shù)據(jù)格式如下:
其中actResult存放ID為actNum的請求的執(zhí)行結(jié)果,replyText數(shù)組存放該請求的文本信息,一般存放請求執(zhí)行失敗的錯(cuò)誤信息。
集成管理軟件在服務(wù)器登錄期間要保持狀態(tài)信息,需要定時(shí)發(fā)送心跳信息,數(shù)據(jù)格式如下:
為了提高效率、避免占用主線程導(dǎo)致主界面出現(xiàn)卡滯,網(wǎng)絡(luò)通信需要運(yùn)行在線程上,代碼如下:
網(wǎng)絡(luò)通信線程接收到數(shù)據(jù)存放在緩沖區(qū),等待數(shù)據(jù)解析線程解析。
串口通信作為網(wǎng)絡(luò)通信的備份冗余,傳輸相同的數(shù)據(jù)信息,優(yōu)先級(jí)比網(wǎng)絡(luò)通道低。串口傳輸?shù)耐ㄓ谜埱髷?shù)據(jù)格式如下:
因?yàn)榇谕ㄐ诺臄?shù)據(jù)流傳輸特點(diǎn),因而串口的數(shù)據(jù)格式需要在網(wǎng)絡(luò)數(shù)據(jù)格式基礎(chǔ)上增加起始標(biāo)識(shí)和結(jié)束標(biāo)識(shí),其中startFlag數(shù)組內(nèi)存放開始標(biāo)志常量0xAA,0xAA;endFlag數(shù)組內(nèi)存放結(jié)束標(biāo)志常量0xBB,0xBB。
為了提高效率、避免占用主線程導(dǎo)致主界面出現(xiàn)卡滯,串口通信業(yè)同樣需要運(yùn)行在線程上,主要代碼如下所示:
串口通信線程初始化串口列表,監(jiān)聽串口數(shù)據(jù),接收到串口流數(shù)據(jù)后,截獲0xAA標(biāo)記作為數(shù)據(jù)幀的開始標(biāo)記,截獲0xBB作為數(shù)據(jù)幀的結(jié)束標(biāo)記,開始標(biāo)志與結(jié)束標(biāo)志之間的數(shù)據(jù)作為完整數(shù)據(jù)幀發(fā)送到串口數(shù)據(jù)緩沖中,等待數(shù)據(jù)解析線程解析。
通信模塊接收到的數(shù)據(jù)還不能直接發(fā)送到界面模塊顯示,因?yàn)閿?shù)據(jù)還要經(jīng)過協(xié)議解析、運(yùn)算、以及業(yè)務(wù)邏輯處理后才能由界面顯示出來。
數(shù)據(jù)解析由單獨(dú)線程執(zhí)行,如圖3所示,首先讀取協(xié)議文件內(nèi)容,從緩沖區(qū)取出通信模塊接收到的數(shù)據(jù),根據(jù)協(xié)議解析數(shù)據(jù)目的地、數(shù)據(jù)格式、數(shù)據(jù)單位等,通過信號(hào)槽發(fā)送到界面模塊。
圖3 數(shù)據(jù)解析流程圖
主界面分為四大部分,左側(cè)為時(shí)間顯示部件,中間是狀態(tài)顯示部件與狀態(tài)管理部件,右側(cè)是菜單部件。
如圖4所示,時(shí)間顯示部件可顯示本地時(shí)間與時(shí)統(tǒng)設(shè)備時(shí)間,當(dāng)顯示時(shí)統(tǒng)設(shè)備時(shí)間時(shí),通信模塊定時(shí)通過UDP接收時(shí)統(tǒng)設(shè)備發(fā)送的授時(shí)信息,經(jīng)過數(shù)據(jù)解析,推送到時(shí)間顯示部件顯示出來。
圖4 時(shí)間顯示部件
如圖5所示,狀態(tài)顯示部件主要顯示全站設(shè)備的自檢、運(yùn)行狀態(tài)信息,點(diǎn)擊狀態(tài)圖標(biāo),將會(huì)彈出地面站運(yùn)行詳細(xì)狀態(tài)子界面,通過UDP組播定時(shí)接收服務(wù)器推送的信息,實(shí)現(xiàn)顯示任務(wù)模式、主鏈、副鏈、服務(wù)器、控制器等設(shè)備的狀態(tài)。
圖5 狀態(tài)顯示部件圖
消息提示欄顯示地面站內(nèi)設(shè)備變動(dòng)、重大狀態(tài)更改的消息,例如,某設(shè)備出現(xiàn)故障,鏈路冗余線路發(fā)生切換等消息都會(huì)及時(shí)推送到消息顯示欄,從而為席位操作員提供恰當(dāng)?shù)念A(yù)警通知。
如圖6所示,狀態(tài)管理部件是全站設(shè)備的管理入口,界面部署負(fù)責(zé)席位計(jì)算機(jī)軟件的顯示位置安排;虛擬鍵盤在席位計(jì)算機(jī)不能連接物理鍵盤的情況下提供鍵盤的作用,進(jìn)程管理可以查看、關(guān)閉本席位或站內(nèi)其他計(jì)算機(jī)的進(jìn)程;記錄回放負(fù)責(zé)記錄站內(nèi)數(shù)據(jù)流,為無人直升機(jī)飛行任務(wù)過程的故障排查、訓(xùn)練仿真提供數(shù)據(jù)支撐;軟件管理主要對(duì)席位和其他計(jì)算機(jī)的軟件安裝進(jìn)行管理;系統(tǒng)管理主要對(duì)服務(wù)器的運(yùn)行進(jìn)行管理,包括參數(shù)設(shè)置,冗余手動(dòng)切換等。
圖6 狀態(tài)管理部分圖
如圖7所示,菜單部件是集成管理軟件的管理入口,主要功能有角色切換、注銷、密碼修改等。
圖7 菜單部件圖
集成管理軟件部署于無人直升機(jī)地面站人機(jī)交互席位上。首次運(yùn)行前,在軟件配置文件配置本席位IP地址、UDP通信參數(shù)等配置參數(shù),其他的應(yīng)用軟件有集成管理軟件啟動(dòng)、關(guān)閉,進(jìn)行集中管理。
經(jīng)過在U-M無人直升機(jī)項(xiàng)目的實(shí)際運(yùn)行驗(yàn)證,集成管理軟件運(yùn)行良好,能夠?qū)崟r(shí)顯示控制站內(nèi)各設(shè)備的狀態(tài),并能有效進(jìn)行管理,為無人直升機(jī)控制站的穩(wěn)定運(yùn)行提供了必要的幫助。
本文詳細(xì)介紹了基于QT的無人直升機(jī)地面站集成故那里軟件的開發(fā)過程。用本文方法開發(fā)的集成管理軟件,經(jīng)在實(shí)際無人機(jī)控制站運(yùn)行驗(yàn)證,該集成管理軟件能夠?qū)崟r(shí)監(jiān)控站內(nèi)設(shè)備動(dòng)態(tài)并對(duì)其進(jìn)行有效管理,具有界面直觀、操作方便等特點(diǎn),為無人直升機(jī)的飛行提供了一定的幫助。