基于Qt的卫星通信上位机软件架构设计
2018-08-24李敬李昕岳
李敬,李昕岳
(广州海格通信集团股份有限公司,广州 510663)
0 引言
Qt是桌面、嵌入式和移动的跨平台应用开发框架,支持的平台包括 Linux、Windows、VxWorks、Android等。Qt本身不是一种编程语言,它是一个用C++编程的框架。但它不仅仅只是一个GUI工具包,它提供了在网络、数据库、OpenGL、Web技术、传感器、通信协议、XML和JSON处理、打印、PDF生成等领域的跨平台开发模块[1-2]。Qt5采用新的模块化代码库,使得移植更加简单,只需移植所需模块即可。
上位机和下位机的操作方式为:上位机是指可以直接发出操控指令的计算机或软件,下位机是直接控制设备获取设备状况的计算机或软件。根据上位机界面上的触生成相应命令,此命令传输给下位机后,下位机再把命令翻译成相应时序信号来控制相应设备或机器。下位机不定时地获取设备状态数据,把数据转成数字信号,反馈给相应的上位机。本文讨论的上位机软件运行在PC上,主要功能是实现在PC机上控制卫星通信板卡,对板卡进行配置、状态查询、数据误码等测试。
1 上位机软件模型MVC架构
典型的MVC架构,如图1所示:
图1 MVC组件类型的关系和功能
MVC 的缩写为模型(Model)、视图(View)和控制器(Controller),分别指内部数据、数据表示和输入输出控制部分。
(1)模型(Model)
Model是整个MVC架构的核心,它是与问题相关数据的逻辑抽象,代表对象的内在属性。
Model的作用有:①抽象应用程序,把程序数据的结构和操作进行封装;②对Controller提供对程序功能的访问;③接受View对数据的查询请求;④当数据变化时,通知对此感兴趣的View。
(2)视图(View)
View是Model的外在表现,一个Model可以与一个或多个View对应。View是应用系统跟外界的接口,具有与外界进行交互的功能。
View的作用有:①对数据的表现部分进行抽象;②将数据展现给用户,获得用户输入;③将用户输入转发给Controller;④当接收到来自Model的“数据已更新”通知后,更新显示信息。
(3)控制器(Controller)
Controller是连接Model和View的纽带。
Controller的作用有:①把用户的交互和应用程序语义的映射抽象出来;②将用户输入命令翻译为应用程序可识别的动作,并转发给Model;③根据用户的输入命令和Model对程序动作的输出,选择适当的View来呈现数据。
MVC是模型用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑[3-4]。
Qt上位机的MVC将View与Controller结合在一起,添加了代理Delegate,组成了模型Model(表示数据)、视图View(表示用户界面)、代理Delegate(自定义数据条目item的显示与编辑方式)的模式。
图2中Model与数据(Data)通信,并提供接口,View从Model中获取Data条目索引,Delegate绘制Data条目。整个模型的通信方式为:信号&槽。此模型的工作方式为:Data改变时,Model发出信号给View;用户对界面进行操作时,View发出信号;Delegate发出信号告知Model和View编辑器目前的状态。
2 上位机软件系统架构设计
上位机系统需要满足高吞吐量的数据处理,同时需要适应多个通信体制,将上位机软件的收发数据、业务处理、视图分别单独剥离开来,统一模型、视图和控制器之间的交互接口,屏蔽不同通信体制内部处理的差异[5]。上位机软件系统架构设计如图3所示:
图2 Qt上位机模型与视图结构图
图3 上位机软件架构
不同体制均采用所示软件架构,线程1负责读取接口数据并将数据传递到“读缓存”,线程2负责从“读缓存”读取数据,并分发到各个“数据接收处理模块”,“数据接收处理模”块对相应消息进行响应,并更新“数据库”相应的状态。线程3中的“控制器”负责“视图”选择,将用户动作映射成业务“数据处理模块”状态,并进行更新;“视图”用于人机交互。线程4负责“数据发送处理”,由“控制器”传递过来的指令触发相应数据发送功能,需要发送的数据传递到“数据发送缓存”,并通过“数据库管理”更新“数据库”相应的状态。线程5负责从“数据发送缓存”读取数据并发送到接口。
2.1 上位机软件通信体制加载
对于不同通信体制,线程1和线程5对应的功能和数据结构不存在差异,可单独开发成一个独立的模块,适用于所有体制[6]。
该上位机为了兼容不同通信体制,线程2、线程3、线程4以及数据库针对不同体制需要进行差异化开发。针对不同体制,将线程2、线程3、线程4以及数据库进行单独开发,封装成DLL,在不同体制下进行加载。即在实现过程中整合各项目的上位机构架,把公共功能做成公共界面,特有功能做成风格统一的动态库加载的形式。这样不仅能够大大减少开发人员的工作量,提高工作效率,还能有效地增强程序的可维护性和可移植性,实现多项目资源共享,代码继承。同时统一界面风格,进一步提升用户体验。
2.2 上位机软件模块接口数据格式定义
为了保持各个模块的独立性,减少程序之间的耦合,提高程序的可移植性,降低开发难度,需规定各个核心功能模块之间数据交互格式[7]。定义了两种数据格式,如下所示:
接口交互数据格式1:
2.3 上位机软件收数据处理模块设计
上位机软件收数据处理模块设计如图4所示:
上位机软件接收数据按照功能划分7类,包括物理层接口处收发数据监控、接口性能测试、物理层功能模块监测、网络协议层功能模块监测、接入设备网络状态监控、接入设备参数监控和接收业务数据管理。不同体制均采用同样的功能模块划分,模块对外接口命名、参数类型均统一,屏蔽不同体制造成的内部处理的差异。
图4 上位机软件收数据处理模块
2.4 上位机软件发数据处理模块设计
上位机软件发送数据处理模块设计如图5所示:
图5 上位机软件发数据处理模块
上位机软件发数据处理模块按照功能分为5类,包括误码测试数据发送、单个参数配置/查询、接入设备信道资源配置、单个测试信令发送、业务数据发送。不同体制均采用同样的功能模块划分,模块对外接口命名、参数类型均统一,屏蔽不同体制造成的内部处理的差异。
2.5 上位机数据库设计
上位机数据库包括宏定义、数据结构定义、接入设备参量定义和管理等。数据库分为公共部分和针对不同体制的个性化定义部分。数据库通过统一的接口供所有开发人员调度,屏蔽对数据库参量的直接操作。“数据管理”主要管理接入设备参量和状态,对外提供对相应的更新和读取的接口。
3 结语
目前很多软件项目的功能测试都是通过上位机来配合,上位机作为应用中感知节点信息,进行显示和控制的应用控制台,在项目研发、调试、测试等阶段起着至关重要的作用。所以上位机操作界面的设计、开发、完善的过程都需要进行充分的验证,尤其误码、误帧统计等性能测试时,要求上位机给出实时、准确的显示结果,更需要上位机具备一套合理的架构,能够实现后续功能扩展的要求。