基于Qt的转发设备显控的设计与实现
2017-06-05崔宗星
崔宗星
(中国电子科技集团公司第二十研究所,陕西 西安 710068)
基于Qt的转发设备显控的设计与实现
崔宗星
(中国电子科技集团公司第二十研究所,陕西 西安 710068)
多个数据平台通过链路接入转发设备后具有通过不同信道进行转发通信的需求。通过显示控制界面对信道资源进行统一管理,并对设备状态进行实时监视具有重要意义。提出了一种在Vxworks下基于Qt的显控方案,结合实例详细描述了用户界面设计、接口数据处理、信息到界面的显示过程以及Qt信号槽机制及事件调用。
显控;界面美化;信号槽
0 引 言
随着无线通信技术的成熟应用,基于转发设备进行远距离广域组网通信成为新的趋势[1]。在局域网端,多个数据平台集中接入,转发设备对不同平台的不同协议标准的消息需要更强的适配性。在云端,转发设备需要集成的远程传输信道更加多样,包括:卫星信道、地面射频信道、地面有线网信道等。在这种多对多的通信模式下,转发设备具有纽带作用。在多平台、多信道、大数据量的传输过程中,显示控制程序对设备管理者动态管理网内资源具有重要作用。
本文提出了一种基于Qt的转发设备显控软件的设计与实现方法,实现信道管理、设备状态监控、消息统计、数据记录等功能。
1 系统开发环境构建
转发设备使用中最重要的是高稳定性与高实时性,界面友好易用,另外需要具有良好的可扩展性,以满足日益变化的接口需求。基于以上原则,设备硬件采用PowerPC为主处理器加现场可编程门阵列(FPGA)的硬件架构。设备外围具有2路以太网口与网内平台连接,3路RS422串口与信道设备及时间处理模块连接。硬件细节与信道业务非本文重点略去不表。软件采用Vxworks6.8系统,Qt 4.8.5 图形用户界面(GUI)开发环境。其中Vxworks是美国风河公司开发的一种嵌入式实时操作系统(RTOS)[2],具有良好的可靠性与卓越的实时性,作为设备后台软件,主要处理接口数据,为显控提供数据支撑。Qt是基于C++的跨平台图形用户界面应用程序开发框架[3],通过其快速开发工具Qt Designer,开发者可以方便地进行可视化编程。在构建与Vxworks交叉编译环境后,可以生成嵌入式界面应用程序。
2 显控系统设计
显控系统设计包含操作界面设计、接口数据采集与解析、状态信息上显三大部分。基本功能如图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所示。
3 结束语
在经过不断的完善与调整之后,显控软件逐步适应了转发设备的功能需求,经过测试能够稳定、持续地运行,满足了转发设备显示控制的基本需要。然而,距离一个功能完善、界面友好的控制软件来说,还有很多工作要做。比如继续进行界面控件的美化与调整;根据用户的需求增添操作界面;设计本地嵌入式数据库;对数据记录进行分析等。总的来说,通过本显控,大大提升了系统效能,使得原本固定的传输拓扑能够基于显控实时改变,其设计与实现过程具有很大参考意义。
[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