GPS数据采集分析器设计
2013-12-17刘文霞
雷 娟,刘文霞
(天津开发区职业技术学院电子信息系,天津 300457)
GPS数据采集分析器软件的开发建立在对GPS数据深入解析的基础上。GPS数据采集分析器上位机软件通过计算机串口与GPS接收机进行连接,将采集的GPS数据存储在文件中,并要求软件能够以读取串口数据和读取GPS数据文件两种方式工作,在GPS数据采集的基础上获取一条完整的GPS数据信息,依照NMEA[1]及UBX协议所规定的GPS数据格式对其进行语句分析,获得其中的定位信息、可视卫星信息等,并将解析得到的数据以运行轨迹图、卫星信噪图和星图的方式展示出来。
设计并实现上位机软件GPS数据采集分析器,主要实现以下功能:(1)对串口接收的GPS定位及星图数据解析。(2)对GPS数据存储。(3)对运行轨迹图像化显示。(4)对星图的图像化显示。(5)对采集回放功能。
1 方案论证
1.1 硬件连接方案
软件运行在使用Windows系列平台的计算机上,通过计算机串口读取AIS M4501输出的GPS数据。硬件连接如图1所示。
图1 硬件连接图
1.2 软件设计方案
编程语言:VC++[2-4]和 MFC。
编程环境:Windows系列平台,VC6.0编译环境。
软件总体架构如图2所示,软件分为GPS数据采集存储模块、GPS数据解析模块和绘图模块3大部分,GPS数据采集存储模块为GPS数据解析模块提供所要解析的GPS数据,GPS数据采集模块作为软件的核心部分实现对GPS数据的解析功能,绘图模块根据解析后的数据绘制相应的运行轨迹图、星图和卫星信噪比图。
2 专题设计
2.1 软件运行流程设计
图2 软件总体架构
GPS数据采集分析器可以工作在正常模式和采集回放模式下。在正常模式下,软件读取并解析处理所连接的串口数据,并将解析后的数据图形化显示;在采集回放模式下,软件读取用户指定文件中的GPS数据,并按帧解析数据及图形化显示。图3描述了软件基本运行流程,数据采集存储模块负责采集串口数据和文件中的GPS数据,并将数据发送到数据解析模块进行处理,处理后的数据发送到绘图模块用于运行轨迹图、可视卫星图和卫星信噪图的图形化显示。
图3 软件运行流程
2.2 主要类的设计
软件的主要类的设计及相互关系如图4所示,软件核心部分主要由CMainFrame、GPSParser两个类实现,其中CMainFrame类是主窗口类,控制程序的运行过程,其中包含了GPS数据信息,并定义了GPSParser类的实例。GPSParser类用于解析GPS数据,其中涉及到可视卫星的表示,使用 Satellite来描述。另外GPSTrackView、GPSSatelliteView、GPSSNRView、GPSInfoView、GPSStrView类分别用来显示运行轨迹图、可视卫星图、卫星信噪图、GPS信息以及GPS字符串。
2.3 代码编写及调试
在VC6.0环境下编写程序,并通过单步调试和代码走读调试通过。遇到的问题及解决方法:
(1)串口数据和文件数据统一化处理问题。软件工程要求尽量减少冗余代码,尽可能进行代码复用,因此软件设计时确定将串口数据和文件中读取的数据进行统一处理。但是在实际情况下,从文件中读取数据可以一次性处理完毕,但串口数据是实时的,只能实时处理。这就使得两种方式在处理上必然存在不同。为能采用尽量统一的方式处理数据,为解析器的解析函数添加一个表示工作模式的参数,在解析函数内部根据工作模式的不同在必要之处进行区分处理,实现统一的功能。具体实现方法是:在采集回放模式下一次处理一帧GPS数据,解析完成后调用绘图函数图形化显示;在正常模式下,实时解析GPS数据,每解析完成一句有用的GPS语句都调用绘图函数刷新显示。通过这种方式,控制代码只需将工作模式作为参数传递给解析器,就可以实现统一化处理。
(2)运行轨迹图实现。1)定位点的绘制。根据经度和纬度信息绘制表示位置的点,首先要确定绘图窗口所表示的区域,然后根据定位点与绘图区域的相对位置,计算确定点在屏幕上的坐标,然后将点显示出来。2)图像放大、缩小与拖拽操作。为能实现图像的放大缩小与拖拽操作,定义了一个结构体变量,用来记录当前显示区域中心位置所表示的实际经纬度信息,并分别定义了X方向放大系数xcoef和Y方向放大系数ycoef,当图像放大或缩小时,xcoef和ycoef产生变化,此时区域中心表示位置不变,运行轨迹上的各个点需要根据其所表示的定位点与中心点的相对位置重新计算在绘图区的坐标,刷新绘图区域重新绘制从而实现图像的放大缩小。由于绘图区域的所有轨迹点都是相对于中心点计算得到的,因此当使用鼠标左键拖拽图像时,只需要计算出新的中心点所表示的经纬度即可。
3 界面显示闪烁问题
软件需要从串口读取GPS数据并进行解析和图像化显示运行轨迹图、可视卫星图及卫星信噪图。由于串口数据是连续的GPS帧数据,因此,当得到新的GPS帧数据后需要将原来显示的图像擦除然后绘制新的图像。最简单的方法就是当得到新数据时,使用背景色的画刷绘制绘图窗口,然后再绘制新图像。但在调试过程中发现采用这种方式绘图会产生严重的屏幕闪烁。经过资料查找和程序调试最终确定了采用分别绘制背景和图像并只刷新图像的方式解决这一问题。具体的实现方法是:背景绘制函数负责绘制背景色及底图,图像绘制函数负责使用指定的画笔和特定的字体颜色绘制卫星和信噪。在窗口初始化和发生重绘事件时绘制背景,当得到新GPS数据时,首先使用反色画笔绘制旧图像,达到图像擦除的效果,然后使用普通画笔绘制新图像。经过试验,采用这种方式可以明显减少屏幕的闪烁。
图4 主要类的设计
4 人机交互问题
软件的人机交互尽量友好,其中主要包括两部分:一是软件界面友好,二是软件操作友好[5]。在运行轨迹的图像化显示中既要让用户有一个整体的位置概念,又要能够显示出小范围内的运动,这就要求能够放大和缩小运行轨迹图像。在初始状态下,运行轨迹图显示整个世界地图,用户可以通过放大缩小来显示所关心的特定的区域。通常情况下图像的放大缩小操作是通过鼠标滚轮来实现,但是采用鼠标滚轮来实现放大时不能一次放大较大的倍数,否则容易将用户所关心的区域移到显示区域之外,这种情况下将会影响用户对软件的印象。因此本软件设计的放大缩小方案为使用鼠标滚轮微调放大倍数,通过双击鼠标左键/右键来实现大范围的放大倍数变更。经过调试,最终确定当显示比例约为20/800时就可以表示小范围的运动,因此,设定每次单击鼠标右键时增大放大系数2 000,以方便用户操作。
5 软件可移植性问题
软件在编写过程中用到了VC++[2-4]控件CMSComm,该控件是ActiveX控件,需要加载mscomm32.ocx文件并对控件进行注册才可使用。在没有安装过VC6.0的计算机上程序运行时不能成功创建控件的实例,导致运行出错。解决这一问题的方法是在创建控件实例失败时,加载并注册mscomm32.ocx文件,并将控件信息添加到注册表中,然后重新创建控件实例。为防止目标计算机上没有mscomm32.ocx文件而导致加在注册失败,需要将mscomm32.ocx文件与程序可执行文件放到同一文件夹下。另外在调试过程中还发现,在一些计算机上由于缺少MFC相关的动态链接库而导致程序无法运行,将MFC42D.DLL、MFCO42D.DLL和MSVCRTD.DLL文件同样放到程序可执行文件所在文件夹下,可以解决这一问题。
6 软件测试
按照硬件连接图连接电脑、M4501主机和天线,测试程序的各项功能是否正常。按照图1所示连接设备,在计算机上运行软件,通过菜单项设置连接串口COM1,使用设置串口波特率为 38 400 bit·s-1。此时,软件能够图形化显示当前GPS信息。运行轨迹图显示如图5所示,图中使用圆圈和圆点标出了当前位置。
图5 运行轨迹图
可视卫星星图显示如图6所示,当前共11颗可视卫星,其中定位卫星,分别以编号 27、11、19、32、20、8、7表示;信噪为0的卫星,以编号17、28、24表示;未使用的可用卫星,以编号4表示。
图6 可视卫星图
卫星信噪图如图7所示,与图6相对应,分别显示了11颗卫星的信噪比信息。
图7 卫星信噪图
图8主要显示的是定位信息和方向速度等信息,当前位置为北纬 39.154 069°,东经 117.206 053°,由于GPS接收机静止,并且GPS数据存在误差,导致速度在0附近小范围波动。
图8 文字信息显示
7 结束语
介绍了GPS数据采集分析器设计过程,相比硬件实现的GPS数据采集分析,软件设计充分发挥了其软件的灵活性,完成的样机和设计文件均符合产品设计输入的要求。
[1]曹婷婷,高玉.GPS中NMEA-0183协议的应用[J].电子工程师,2006,32(10):8 -10.
[2]段智毅.Visual C++程序设计教程[M].北京:人民邮电出版社,2009.
[3]丁有和,郑阿奇.Visual C++应用教程[M].北京:人民邮电出版社,2008.
[4]马飞,诸昌钤.利用VC++实现GPS数据采集[J].计算机时代,2005,15(6):13 -15.
[5]袁会东,韩峻峰,潘盛辉,等.基于WinCE的GPS数据采集系统设计[J].现代电子技术,2012,35(19):165 -167.