崔宗星
(中國電子科技集團公司第二十研究所,陜西 西安 710068)
?
基于Qt的轉(zhuǎn)發(fā)設(shè)備顯控的設(shè)計與實現(xiàn)
崔宗星
(中國電子科技集團公司第二十研究所,陜西 西安 710068)
多個數(shù)據(jù)平臺通過鏈路接入轉(zhuǎn)發(fā)設(shè)備后具有通過不同信道進(jìn)行轉(zhuǎn)發(fā)通信的需求。通過顯示控制界面對信道資源進(jìn)行統(tǒng)一管理,并對設(shè)備狀態(tài)進(jìn)行實時監(jiān)視具有重要意義。提出了一種在Vxworks下基于Qt的顯控方案,結(jié)合實例詳細(xì)描述了用戶界面設(shè)計、接口數(shù)據(jù)處理、信息到界面的顯示過程以及Qt信號槽機制及事件調(diào)用。
顯控;界面美化;信號槽
隨著無線通信技術(shù)的成熟應(yīng)用,基于轉(zhuǎn)發(fā)設(shè)備進(jìn)行遠(yuǎn)距離廣域組網(wǎng)通信成為新的趨勢[1]。在局域網(wǎng)端,多個數(shù)據(jù)平臺集中接入,轉(zhuǎn)發(fā)設(shè)備對不同平臺的不同協(xié)議標(biāo)準(zhǔn)的消息需要更強的適配性。在云端,轉(zhuǎn)發(fā)設(shè)備需要集成的遠(yuǎn)程傳輸信道更加多樣,包括:衛(wèi)星信道、地面射頻信道、地面有線網(wǎng)信道等。在這種多對多的通信模式下,轉(zhuǎn)發(fā)設(shè)備具有紐帶作用。在多平臺、多信道、大數(shù)據(jù)量的傳輸過程中,顯示控制程序?qū)υO(shè)備管理者動態(tài)管理網(wǎng)內(nèi)資源具有重要作用。
本文提出了一種基于Qt的轉(zhuǎn)發(fā)設(shè)備顯控軟件的設(shè)計與實現(xiàn)方法,實現(xiàn)信道管理、設(shè)備狀態(tài)監(jiān)控、消息統(tǒng)計、數(shù)據(jù)記錄等功能。
轉(zhuǎn)發(fā)設(shè)備使用中最重要的是高穩(wěn)定性與高實時性,界面友好易用,另外需要具有良好的可擴展性,以滿足日益變化的接口需求。基于以上原則,設(shè)備硬件采用PowerPC為主處理器加現(xiàn)場可編程門陣列(FPGA)的硬件架構(gòu)。設(shè)備外圍具有2路以太網(wǎng)口與網(wǎng)內(nèi)平臺連接,3路RS422串口與信道設(shè)備及時間處理模塊連接。硬件細(xì)節(jié)與信道業(yè)務(wù)非本文重點略去不表。軟件采用Vxworks6.8系統(tǒng),Qt 4.8.5 圖形用戶界面(GUI)開發(fā)環(huán)境。其中Vxworks是美國風(fēng)河公司開發(fā)的一種嵌入式實時操作系統(tǒng)(RTOS)[2],具有良好的可靠性與卓越的實時性,作為設(shè)備后臺軟件,主要處理接口數(shù)據(jù),為顯控提供數(shù)據(jù)支撐。Qt是基于C++的跨平臺圖形用戶界面應(yīng)用程序開發(fā)框架[3],通過其快速開發(fā)工具Qt Designer,開發(fā)者可以方便地進(jìn)行可視化編程。在構(gòu)建與Vxworks交叉編譯環(huán)境后,可以生成嵌入式界面應(yīng)用程序。
顯控系統(tǒng)設(shè)計包含操作界面設(shè)計、接口數(shù)據(jù)采集與解析、狀態(tài)信息上顯三大部分。基本功能如圖1所示。
2.1 操作界面設(shè)計
操作界面是設(shè)備與用戶交互的重要通道。轉(zhuǎn)發(fā)設(shè)備采用18.33 cm(5.5寸)16:9屏幕,前面板配備了觸摸板及簡易鍵盤。界面交互輸入即采用鼠標(biāo)、鍵盤的方式。通過設(shè)置對應(yīng)按鍵的鼠標(biāo)、鍵盤響應(yīng)事件,完成操作功能。界面采用640×480分辨率無邊框設(shè)計,在Qt Designer設(shè)計中,以主界面為例,先創(chuàng)建QWidget界面類,在生成的.ui文件中布局按鈕并修改對應(yīng)名稱、大小、位置等屬性,最后編輯clicked()槽對應(yīng)的事件處理函數(shù),添加子界面的功能。在主界面中子界面按鈕分列兩側(cè)。界面結(jié)構(gòu)分解如圖2所示。
其中工作模式子界面主要有設(shè)置設(shè)備編號、工作模式等輸入項。時統(tǒng)信息子界面用于展示當(dāng)前日期與準(zhǔn)確時間、經(jīng)緯高度、授時類型等參數(shù)。信道管理子界面對應(yīng)各個子信道,分別進(jìn)行通信速率等參數(shù)輸入,同時展示信道質(zhì)量。連通狀態(tài)用于顯示轉(zhuǎn)發(fā)設(shè)備與平臺、信道之間的鏈路通斷情況及通信質(zhì)量。設(shè)備狀態(tài)子界面展示設(shè)備內(nèi)部各硬件板卡工作狀態(tài)。消息統(tǒng)計子界面展示轉(zhuǎn)發(fā)設(shè)備各接口收發(fā)條數(shù)及統(tǒng)計清零輸入。數(shù)據(jù)記錄界面用于導(dǎo)出記錄文件,幫助界面羅列操作快捷鍵及對各子界面輸入輸出項進(jìn)行說明。
在編輯完成所有操作界面后,可采用css文件對各種控件進(jìn)行統(tǒng)一美化,使界面整體形成統(tǒng)一的風(fēng)格。Qt中每個控件實例都具有setStyleSheet()風(fēng)格表設(shè)置子函數(shù),通過該函數(shù),輸入固定格式的功能字符串作為參數(shù)即可實現(xiàn)控件外觀的變化。以顯控中所有的按鈕QPushButton為例,在css文件中,設(shè)置按鈕類控件外觀參數(shù)為:
QPushButton{
background-color: rgb(255, 255, 255);//按鈕背景色,白色
border-radius:1px;//邊框半徑1px
border:1px solid black;//邊框黑色}
然后在每個子界面類的實例化過程中只需讀取css文件內(nèi)容,使用自身的setStyleSheet()函數(shù)加載此css文件,即可使該子界面的按鈕統(tǒng)一美化。例:
QString StrPath=QCoreApplication::applicationDirPath();//取當(dāng)前根目錄
QString strcssFile=StrPath + "/default.css";//將名為default.css的css文件置于根目錄下
QFile fCss(strcssFile);//聲明一個文件fCss指向css文件
if(!fCss.open(QFile::ReadOnly))//以只讀方式打開css文件
{return;//打開失敗則返回}
QString strCssContent(fCss.readAll());//將文件內(nèi)容讀入字符串中
ui->setStyleSheet(strCssContent); //將內(nèi)容輸入子界面setStyleSheet()函數(shù)
fCss.close();//關(guān)閉文件
在每個子界面中重復(fù)以上過程即可實現(xiàn)按鈕QPushButton的統(tǒng)一美化,同理標(biāo)簽QLabel、窗體QWidget等均可采用此方式美化。按照此方式不斷設(shè)計并修改,顯控界面總體風(fēng)格統(tǒng)一,明朗易用。
2.2 接口數(shù)據(jù)接收與解析
顯控作為與用戶交互的通道,是轉(zhuǎn)發(fā)設(shè)備應(yīng)用層的頂端, Qt本身并不支持面向驅(qū)動級的接口處理,需要后臺程序Vxworks鏡像及功能模塊程序?qū)ζ溥M(jìn)行數(shù)據(jù)支持。后臺程序通過調(diào)用標(biāo)準(zhǔn)串口、網(wǎng)口接收發(fā)送函數(shù),完成接口數(shù)據(jù)的第1層處理。在匯總了所有接口數(shù)據(jù)后,通過歸一化軟接口msgQSend()、msgQReceive()與顯控程序交互,將接口數(shù)據(jù)添加分類報頭后透明傳輸給顯控,顯控根據(jù)各個接口數(shù)據(jù)協(xié)議進(jìn)行第2層解析處理,上顯信息到界面,界面顯控按照協(xié)議封包下發(fā)應(yīng)答信息及界面操作信息。
msgQSend()與msgQReceive()是Vxworks線程間進(jìn)行通信的消息隊列函數(shù)。轉(zhuǎn)發(fā)設(shè)備的顯控程序都是作為一個線程與后臺程序共同工作的。消息隊列函數(shù)有4個輸入?yún)?shù),分別是消息隊列ID、消息內(nèi)容句柄、發(fā)送或接收消息內(nèi)容長度、消息隊列超時等待時間。對于第1個參數(shù)消息隊列ID已經(jīng)在后臺程序聲明,Qt程序需要對其進(jìn)行外部調(diào)用,其使用過程如圖3所示。
轉(zhuǎn)發(fā)設(shè)備外部主要由2路以太網(wǎng)口及3路路串口組成。接口數(shù)據(jù)主要由后臺程序接收后按照類型添加報頭,通過msgqsend函數(shù)統(tǒng)一發(fā)送給顯控程序。顯控端只需要單獨啟動1個Qthread線程類監(jiān)聽msgqsend發(fā)送來的數(shù)據(jù),再根據(jù)后臺-顯控接口協(xié)議解析出不同接口的數(shù)據(jù)。最后,對于不同接口數(shù)據(jù),根據(jù)其對應(yīng)的消息協(xié)議進(jìn)行解析,用于信息上顯。
2.3 狀態(tài)信息上顯
在進(jìn)行接口程序接收與解析后,需要實時將要上顯的數(shù)據(jù)傳遞到用戶界面。如果使用全局變量向界面?zhèn)鬟f消息內(nèi)容,需要界面不斷刷新,界面顯示的實時性會降低,還會占用大量的隨機存儲器(RAM)空間,面對復(fù)雜數(shù)據(jù),需要聲明大量全局結(jié)構(gòu)體變量,使程序運行效率降低。Qt中提供了不同對象間通信的策略即信號槽機制,可基于該機制,進(jìn)行狀態(tài)信息上顯的實現(xiàn)。
時間信息是轉(zhuǎn)發(fā)設(shè)備的時間及精度敏感性較高的信息,一方面需要通過界面展示給用戶,另一方面需要為界面下發(fā)的指令消息添加時間戳,便于信息在到達(dá)信宿后解算消息時延。基于上述2種機制的時間信息秒上顯過程對比如圖4所示。
信號槽機制在信息上顯時更具有實時性優(yōu)勢。信號槽機制由三部分組成:信號(SIGNAL)、槽(SLOT)、信號與槽的連接(CONNECT)。每個類都可以定義自己的信號與槽,在對象狀態(tài)改變時,可以發(fā)射信號(emit)以提供給其他對象連接使用,當(dāng)信號與槽通過connect()函數(shù)連接后,被連接的其他對象槽函數(shù)在收到信號后,可以像收到中斷一樣進(jìn)入處理過程,使觸發(fā)過程大大簡化,同時具有極高的實時性。
信號的發(fā)射可以傳遞信號本身,也可以傳遞指定數(shù)據(jù)。本文使用一種傳遞指定數(shù)據(jù)至目標(biāo)對象的方法。首先將目標(biāo)數(shù)據(jù)結(jié)構(gòu)體化,然后對結(jié)構(gòu)體類型進(jìn)行元類型聲明:以時間信息報文結(jié)構(gòu)體TestInfoTag為例,在其定義頭文件中還需:
Q_DECLARE_METATYPE(TimeInfoTag);//元類型聲明
結(jié)構(gòu)體類型的元類型注冊旨在向Qt編譯器告知一種由用戶自定義的信號量參數(shù)類型,未經(jīng)元類型聲明的結(jié)構(gòu)體無法作為參數(shù)通過SIGNAL信號函數(shù)發(fā)送。再經(jīng)過元類型注冊后,對象想要使用該信號連接還需要在實例化時進(jìn)行注冊:
qRegisterMetaType< TimeInfoTag >();//元類型注冊
元類型注冊旨在向Qt編譯器告知該對象將使用此類型作為參數(shù)的信號進(jìn)行連接操作。在準(zhǔn)備工作妥當(dāng)后,連接信號與槽,即可在槽函數(shù)的處理中添加顯控界面控件的上顯操作。這種方式有兩大優(yōu)點:基于信號與槽的方式可以實時顯示數(shù)據(jù)接收線程中接收到的數(shù)據(jù)信息;用于信號傳遞的結(jié)構(gòu)體變量在槽函數(shù)處理結(jié)束后即釋放,極大節(jié)省了程序的運行RAM空間,特別是在時間位置信息的顯示上,具有較高的效率。
信號槽使用過程如圖5所示。
在經(jīng)過不斷的完善與調(diào)整之后,顯控軟件逐步適應(yīng)了轉(zhuǎn)發(fā)設(shè)備的功能需求,經(jīng)過測試能夠穩(wěn)定、持續(xù)地運行,滿足了轉(zhuǎn)發(fā)設(shè)備顯示控制的基本需要。然而,距離一個功能完善、界面友好的控制軟件來說,還有很多工作要做。比如繼續(xù)進(jìn)行界面控件的美化與調(diào)整;根據(jù)用戶的需求增添操作界面;設(shè)計本地嵌入式數(shù)據(jù)庫;對數(shù)據(jù)記錄進(jìn)行分析等。總的來說,通過本顯控,大大提升了系統(tǒng)效能,使得原本固定的傳輸拓?fù)淠軌蚧陲@控實時改變,其設(shè)計與實現(xiàn)過程具有很大參考意義。
[1] 邱洪云,關(guān)慧,田莉,等.衛(wèi)星戰(zhàn)術(shù)數(shù)據(jù)鏈的應(yīng)用及發(fā)展[J].空間電子技術(shù),2012,9(3):1-4.
[2] 美國風(fēng)河系統(tǒng)北京辦事處.風(fēng)河與Digia合作為VxWorks平臺提供Qt Commercial支持[J].工業(yè)控制計算機,2012(3):44.
[3] 范新剛,姚新,胡海燕.VxWorks環(huán)境下基于Qt的聲納信息顯示設(shè)計[J].艦船電子工程,2016,36(9):86-88.
Design and Realization of Transmitting Device Console Based on Qt
CUI Zong-xing
(The 20 Institute of China Electronic Technology Group Corporation,Xi'an 710068,China)
Transmitting communication through different channels is need after several data platforms are connected into transmitting device through link.It is of great significance to monitor the device state in real time and manage the channel resource uniformity through console interface.This paper presents a console scheme based on Qt,which works in Vxworks,combining with examples,detailedly describes the user interface (UI) design,interface data processing,show processing from information to interface and the Qt signal slot mechanism and event call.
console;interface beautification;signal slot
2017-03-07
TN92
A
CN32-1413(2017)02-0082-04
10.16426/j.cnki.jcdzdk.2017.02.019