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