崔宗星
(中國(guó)電子科技集團(tuán)公司第二十研究所,陜西 西安 710068)
?
基于Qt的轉(zhuǎn)發(fā)設(shè)備顯控的設(shè)計(jì)與實(shí)現(xiàn)
崔宗星
(中國(guó)電子科技集團(tuán)公司第二十研究所,陜西 西安 710068)
多個(gè)數(shù)據(jù)平臺(tái)通過(guò)鏈路接入轉(zhuǎn)發(fā)設(shè)備后具有通過(guò)不同信道進(jìn)行轉(zhuǎn)發(fā)通信的需求。通過(guò)顯示控制界面對(duì)信道資源進(jìn)行統(tǒng)一管理,并對(duì)設(shè)備狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)視具有重要意義。提出了一種在Vxworks下基于Qt的顯控方案,結(jié)合實(shí)例詳細(xì)描述了用戶界面設(shè)計(jì)、接口數(shù)據(jù)處理、信息到界面的顯示過(guò)程以及Qt信號(hào)槽機(jī)制及事件調(diào)用。
顯控;界面美化;信號(hào)槽
隨著無(wú)線通信技術(shù)的成熟應(yīng)用,基于轉(zhuǎn)發(fā)設(shè)備進(jìn)行遠(yuǎn)距離廣域組網(wǎng)通信成為新的趨勢(shì)[1]。在局域網(wǎng)端,多個(gè)數(shù)據(jù)平臺(tái)集中接入,轉(zhuǎn)發(fā)設(shè)備對(duì)不同平臺(tái)的不同協(xié)議標(biāo)準(zhǔn)的消息需要更強(qiáng)的適配性。在云端,轉(zhuǎn)發(fā)設(shè)備需要集成的遠(yuǎn)程傳輸信道更加多樣,包括:衛(wèi)星信道、地面射頻信道、地面有線網(wǎng)信道等。在這種多對(duì)多的通信模式下,轉(zhuǎn)發(fā)設(shè)備具有紐帶作用。在多平臺(tái)、多信道、大數(shù)據(jù)量的傳輸過(guò)程中,顯示控制程序?qū)υO(shè)備管理者動(dòng)態(tài)管理網(wǎng)內(nèi)資源具有重要作用。
本文提出了一種基于Qt的轉(zhuǎn)發(fā)設(shè)備顯控軟件的設(shè)計(jì)與實(shí)現(xiàn)方法,實(shí)現(xiàn)信道管理、設(shè)備狀態(tài)監(jiān)控、消息統(tǒng)計(jì)、數(shù)據(jù)記錄等功能。
轉(zhuǎn)發(fā)設(shè)備使用中最重要的是高穩(wěn)定性與高實(shí)時(shí)性,界面友好易用,另外需要具有良好的可擴(kuò)展性,以滿足日益變化的接口需求?;谝陨显瓌t,設(shè)備硬件采用PowerPC為主處理器加現(xiàn)場(chǎng)可編程門陣列(FPGA)的硬件架構(gòu)。設(shè)備外圍具有2路以太網(wǎng)口與網(wǎng)內(nèi)平臺(tái)連接,3路RS422串口與信道設(shè)備及時(shí)間處理模塊連接。硬件細(xì)節(jié)與信道業(yè)務(wù)非本文重點(diǎn)略去不表。軟件采用Vxworks6.8系統(tǒng),Qt 4.8.5 圖形用戶界面(GUI)開發(fā)環(huán)境。其中Vxworks是美國(guó)風(fēng)河公司開發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)[2],具有良好的可靠性與卓越的實(shí)時(shí)性,作為設(shè)備后臺(tái)軟件,主要處理接口數(shù)據(jù),為顯控提供數(shù)據(jù)支撐。Qt是基于C++的跨平臺(tái)圖形用戶界面應(yīng)用程序開發(fā)框架[3],通過(guò)其快速開發(fā)工具Qt Designer,開發(fā)者可以方便地進(jìn)行可視化編程。在構(gòu)建與Vxworks交叉編譯環(huán)境后,可以生成嵌入式界面應(yīng)用程序。
顯控系統(tǒng)設(shè)計(jì)包含操作界面設(shè)計(jì)、接口數(shù)據(jù)采集與解析、狀態(tài)信息上顯三大部分?;竟δ苋鐖D1所示。
2.1 操作界面設(shè)計(jì)
操作界面是設(shè)備與用戶交互的重要通道。轉(zhuǎn)發(fā)設(shè)備采用18.33 cm(5.5寸)16:9屏幕,前面板配備了觸摸板及簡(jiǎn)易鍵盤。界面交互輸入即采用鼠標(biāo)、鍵盤的方式。通過(guò)設(shè)置對(duì)應(yīng)按鍵的鼠標(biāo)、鍵盤響應(yīng)事件,完成操作功能。界面采用640×480分辨率無(wú)邊框設(shè)計(jì),在Qt Designer設(shè)計(jì)中,以主界面為例,先創(chuàng)建QWidget界面類,在生成的.ui文件中布局按鈕并修改對(duì)應(yīng)名稱、大小、位置等屬性,最后編輯clicked()槽對(duì)應(yīng)的事件處理函數(shù),添加子界面的功能。在主界面中子界面按鈕分列兩側(cè)。界面結(jié)構(gòu)分解如圖2所示。
其中工作模式子界面主要有設(shè)置設(shè)備編號(hào)、工作模式等輸入項(xiàng)。時(shí)統(tǒng)信息子界面用于展示當(dāng)前日期與準(zhǔn)確時(shí)間、經(jīng)緯高度、授時(shí)類型等參數(shù)。信道管理子界面對(duì)應(yīng)各個(gè)子信道,分別進(jìn)行通信速率等參數(shù)輸入,同時(shí)展示信道質(zhì)量。連通狀態(tài)用于顯示轉(zhuǎn)發(fā)設(shè)備與平臺(tái)、信道之間的鏈路通斷情況及通信質(zhì)量。設(shè)備狀態(tài)子界面展示設(shè)備內(nèi)部各硬件板卡工作狀態(tài)。消息統(tǒng)計(jì)子界面展示轉(zhuǎn)發(fā)設(shè)備各接口收發(fā)條數(shù)及統(tǒng)計(jì)清零輸入。數(shù)據(jù)記錄界面用于導(dǎo)出記錄文件,幫助界面羅列操作快捷鍵及對(duì)各子界面輸入輸出項(xiàng)進(jìn)行說(shuō)明。
在編輯完成所有操作界面后,可采用css文件對(duì)各種控件進(jìn)行統(tǒng)一美化,使界面整體形成統(tǒng)一的風(fēng)格。Qt中每個(gè)控件實(shí)例都具有setStyleSheet()風(fēng)格表設(shè)置子函數(shù),通過(guò)該函數(shù),輸入固定格式的功能字符串作為參數(shù)即可實(shí)現(xiàn)控件外觀的變化。以顯控中所有的按鈕QPushButton為例,在css文件中,設(shè)置按鈕類控件外觀參數(shù)為:
QPushButton{
background-color: rgb(255, 255, 255);//按鈕背景色,白色
border-radius:1px;//邊框半徑1px
border:1px solid black;//邊框黑色}
然后在每個(gè)子界面類的實(shí)例化過(guò)程中只需讀取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);//聲明一個(gè)文件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)閉文件
在每個(gè)子界面中重復(fù)以上過(guò)程即可實(shí)現(xiàn)按鈕QPushButton的統(tǒng)一美化,同理標(biāo)簽QLabel、窗體QWidget等均可采用此方式美化。按照此方式不斷設(shè)計(jì)并修改,顯控界面總體風(fēng)格統(tǒng)一,明朗易用。
2.2 接口數(shù)據(jù)接收與解析
顯控作為與用戶交互的通道,是轉(zhuǎn)發(fā)設(shè)備應(yīng)用層的頂端, Qt本身并不支持面向驅(qū)動(dòng)級(jí)的接口處理,需要后臺(tái)程序Vxworks鏡像及功能模塊程序?qū)ζ溥M(jìn)行數(shù)據(jù)支持。后臺(tái)程序通過(guò)調(diào)用標(biāo)準(zhǔn)串口、網(wǎng)口接收發(fā)送函數(shù),完成接口數(shù)據(jù)的第1層處理。在匯總了所有接口數(shù)據(jù)后,通過(guò)歸一化軟接口msgQSend()、msgQReceive()與顯控程序交互,將接口數(shù)據(jù)添加分類報(bào)頭后透明傳輸給顯控,顯控根據(jù)各個(gè)接口數(shù)據(jù)協(xié)議進(jìn)行第2層解析處理,上顯信息到界面,界面顯控按照協(xié)議封包下發(fā)應(yīng)答信息及界面操作信息。
msgQSend()與msgQReceive()是Vxworks線程間進(jìn)行通信的消息隊(duì)列函數(shù)。轉(zhuǎn)發(fā)設(shè)備的顯控程序都是作為一個(gè)線程與后臺(tái)程序共同工作的。消息隊(duì)列函數(shù)有4個(gè)輸入?yún)?shù),分別是消息隊(duì)列ID、消息內(nèi)容句柄、發(fā)送或接收消息內(nèi)容長(zhǎng)度、消息隊(duì)列超時(shí)等待時(shí)間。對(duì)于第1個(gè)參數(shù)消息隊(duì)列ID已經(jīng)在后臺(tái)程序聲明,Qt程序需要對(duì)其進(jìn)行外部調(diào)用,其使用過(guò)程如圖3所示。
轉(zhuǎn)發(fā)設(shè)備外部主要由2路以太網(wǎng)口及3路路串口組成。接口數(shù)據(jù)主要由后臺(tái)程序接收后按照類型添加報(bào)頭,通過(guò)msgqsend函數(shù)統(tǒng)一發(fā)送給顯控程序。顯控端只需要單獨(dú)啟動(dòng)1個(gè)Qthread線程類監(jiān)聽msgqsend發(fā)送來(lái)的數(shù)據(jù),再根據(jù)后臺(tái)-顯控接口協(xié)議解析出不同接口的數(shù)據(jù)。最后,對(duì)于不同接口數(shù)據(jù),根據(jù)其對(duì)應(yīng)的消息協(xié)議進(jìn)行解析,用于信息上顯。
2.3 狀態(tài)信息上顯
在進(jìn)行接口程序接收與解析后,需要實(shí)時(shí)將要上顯的數(shù)據(jù)傳遞到用戶界面。如果使用全局變量向界面?zhèn)鬟f消息內(nèi)容,需要界面不斷刷新,界面顯示的實(shí)時(shí)性會(huì)降低,還會(huì)占用大量的隨機(jī)存儲(chǔ)器(RAM)空間,面對(duì)復(fù)雜數(shù)據(jù),需要聲明大量全局結(jié)構(gòu)體變量,使程序運(yùn)行效率降低。Qt中提供了不同對(duì)象間通信的策略即信號(hào)槽機(jī)制,可基于該機(jī)制,進(jìn)行狀態(tài)信息上顯的實(shí)現(xiàn)。
時(shí)間信息是轉(zhuǎn)發(fā)設(shè)備的時(shí)間及精度敏感性較高的信息,一方面需要通過(guò)界面展示給用戶,另一方面需要為界面下發(fā)的指令消息添加時(shí)間戳,便于信息在到達(dá)信宿后解算消息時(shí)延?;谏鲜?種機(jī)制的時(shí)間信息秒上顯過(guò)程對(duì)比如圖4所示。
信號(hào)槽機(jī)制在信息上顯時(shí)更具有實(shí)時(shí)性優(yōu)勢(shì)。信號(hào)槽機(jī)制由三部分組成:信號(hào)(SIGNAL)、槽(SLOT)、信號(hào)與槽的連接(CONNECT)。每個(gè)類都可以定義自己的信號(hào)與槽,在對(duì)象狀態(tài)改變時(shí),可以發(fā)射信號(hào)(emit)以提供給其他對(duì)象連接使用,當(dāng)信號(hào)與槽通過(guò)connect()函數(shù)連接后,被連接的其他對(duì)象槽函數(shù)在收到信號(hào)后,可以像收到中斷一樣進(jìn)入處理過(guò)程,使觸發(fā)過(guò)程大大簡(jiǎn)化,同時(shí)具有極高的實(shí)時(shí)性。
信號(hào)的發(fā)射可以傳遞信號(hào)本身,也可以傳遞指定數(shù)據(jù)。本文使用一種傳遞指定數(shù)據(jù)至目標(biāo)對(duì)象的方法。首先將目標(biāo)數(shù)據(jù)結(jié)構(gòu)體化,然后對(duì)結(jié)構(gòu)體類型進(jìn)行元類型聲明:以時(shí)間信息報(bào)文結(jié)構(gòu)體TestInfoTag為例,在其定義頭文件中還需:
Q_DECLARE_METATYPE(TimeInfoTag);//元類型聲明
結(jié)構(gòu)體類型的元類型注冊(cè)旨在向Qt編譯器告知一種由用戶自定義的信號(hào)量參數(shù)類型,未經(jīng)元類型聲明的結(jié)構(gòu)體無(wú)法作為參數(shù)通過(guò)SIGNAL信號(hào)函數(shù)發(fā)送。再經(jīng)過(guò)元類型注冊(cè)后,對(duì)象想要使用該信號(hào)連接還需要在實(shí)例化時(shí)進(jìn)行注冊(cè):
qRegisterMetaType< TimeInfoTag >();//元類型注冊(cè)
元類型注冊(cè)旨在向Qt編譯器告知該對(duì)象將使用此類型作為參數(shù)的信號(hào)進(jìn)行連接操作。在準(zhǔn)備工作妥當(dāng)后,連接信號(hào)與槽,即可在槽函數(shù)的處理中添加顯控界面控件的上顯操作。這種方式有兩大優(yōu)點(diǎn):基于信號(hào)與槽的方式可以實(shí)時(shí)顯示數(shù)據(jù)接收線程中接收到的數(shù)據(jù)信息;用于信號(hào)傳遞的結(jié)構(gòu)體變量在槽函數(shù)處理結(jié)束后即釋放,極大節(jié)省了程序的運(yùn)行RAM空間,特別是在時(shí)間位置信息的顯示上,具有較高的效率。
信號(hào)槽使用過(guò)程如圖5所示。
在經(jīng)過(guò)不斷的完善與調(diào)整之后,顯控軟件逐步適應(yīng)了轉(zhuǎn)發(fā)設(shè)備的功能需求,經(jīng)過(guò)測(cè)試能夠穩(wěn)定、持續(xù)地運(yùn)行,滿足了轉(zhuǎn)發(fā)設(shè)備顯示控制的基本需要。然而,距離一個(gè)功能完善、界面友好的控制軟件來(lái)說(shuō),還有很多工作要做。比如繼續(xù)進(jìn)行界面控件的美化與調(diào)整;根據(jù)用戶的需求增添操作界面;設(shè)計(jì)本地嵌入式數(shù)據(jù)庫(kù);對(duì)數(shù)據(jù)記錄進(jìn)行分析等??偟膩?lái)說(shuō),通過(guò)本顯控,大大提升了系統(tǒng)效能,使得原本固定的傳輸拓?fù)淠軌蚧陲@控實(shí)時(shí)改變,其設(shè)計(jì)與實(shí)現(xiàn)過(guò)程具有很大參考意義。
[1] 邱洪云,關(guān)慧,田莉,等.衛(wèi)星戰(zhàn)術(shù)數(shù)據(jù)鏈的應(yīng)用及發(fā)展[J].空間電子技術(shù),2012,9(3):1-4.
[2] 美國(guó)風(fēng)河系統(tǒng)北京辦事處.風(fēng)河與Digia合作為VxWorks平臺(tái)提供Qt Commercial支持[J].工業(yè)控制計(jì)算機(jī),2012(3):44.
[3] 范新剛,姚新,胡海燕.VxWorks環(huán)境下基于Qt的聲納信息顯示設(shè)計(jì)[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