GNSS接收机上位机软件设计
王冉1,邹永忠2
(1. 北京邮电大学信息与通信工程学院,北京100876;
5 10 15 20 25 30 35 40
2. 北京邮电大学计算机学院,北京100876)
摘要:本文以GNSS 导航接收机的研制为背景,在VC++ MFC AppWizard 环境下对上位机软件的开发进行了详细说明。首先介绍了NEMA-0183 协议、串口通信的实现及URAT-USB 的转换;然后重点讨论了数据解析算法,并通过与下位机连接,运行GNSS 导航接收程序验证了数据解析的精准性;最后阐述了上位机界面的显示方法,显示明了方便。这种上位机软
件的设计是多模可选的,通用性强,通过增加上位机侧的计算解决了DSP 侧的资源紧张的
问题,在各类GNSS 导航接收机的研制测试中具有很好的应用前景。
关键词:导航接收机;上位机软件;串口通信;数据解析
中图分类号:TN927
A Design of upper computer Software for GNSS Receiver
Wang Ran, Zou Yongzhong
(Information and communication engineering institute, BUPT, Beijing 100876)
Abstract: In this paper,we discuss the design of exploring the software on the upper computer for
the GNSS receiver. First introduced the NEMA-0183 agreement、the realization of the serial communication and the conversion from UA RT to USB; Then focused on the data analytical algorithm, and through the communication with DSP verified data navigation analytical precision; Finally expounds the PC interface display method which showed clear and convenient.This
software design is multimode optional, versatility, solved the resources shortage of DSP side by increasing the calculation of the upper computer,the software has a very good application
prospects in all kinds of GNSS navigation receivers tests.
Keywords: navigation receiver; upper computer software; serial communication; data analysi s
0引言
全球导航卫星系统(GNSS)是所有在轨工作的卫星导航系统的统称。现有的全球导航卫
星系统主要包括美国的GPS 系统、俄罗斯的GLONASS 系统、欧洲的Galileo 系统,以及正在研制和部署的我国北斗二代导航系统[1]。对于用户来说,最关键的设备就是接收机,很多
情况下,用户都是用计算机和GNSS 接收机通信,将信息导入计算机然后再处理。而VC++ 由于其在和GNSS 接收机的通信及后面的数据处理应用方面的强大能力,成为许多用户开发应用程序的首选语言。
传统的上位机软件,仅针对单一的模式,通用性不强,本文介绍的GNSS 接收机上位机软件,不仅适用于GPS 导航接收机,也通用于其它类型(BD/GLONASS)的导航接收机。
用户通过用户设备接收GNSS 卫星信号,经信号处理获得用户位置、速度等信息,最终实现利用GNSS 进行导航和定位的目的。上位机软件是验证导航接收机性能的重要部分,能够使用户对得到的测量数据直观可视,且它的设计不限于仅显示最终的用户位置、速度信息,还
可在接收机研发阶段对中间信息进行观测,如导航星位置信息、相关值、伪距、载噪比等等。为方便说明,本文以GPS 导航卫星为例,阐述接收机上位机软件的具体实现。
作者简介:王冉,(1987-),女,硕士,导航接收机的研究与研制。
通信联系人:邹永忠,男,讲师,导航接收机的研究与研制。E-mail:*********************
1上位机软件的功能需求及开发环境
根据GPS 导航接收机开发的特点,上位机软件在调试前期需要对功率峰值、接收频率、伪距、多普勒、导航电文等多种观测信息进行实时显示并绘制图形;在调试后期及定型阶段
45 50 55
60 65 70 需要对卫星的PVT(位置、速度、时间)信息、修正前及修正后的伪距观测量以及最终的用户
定位信息进行实时显示及绘图。对于一些重要观测数据,上位机软件还应具备数据的存储及
回放功能以备开发人员或用户事后分析。除此之外,还需对软件状态及操作等进行信息记录
和显示[2]。
本文选用了VC++6.0 版的MFC AppWizard 作为GPS 导航接收机的上位机软件的开发
环境,采用基于对话框模式作为软件结构框架,并出于使界面美观简洁的需求,视图类选用了
Form 类型。
2上位机软件设计开发
GPS 全球定位系统主要有三大组成部分,即空间星座部分、地面监控部分和用户设备
部分。GPS 的用户设备主要由接收机硬件、数据处理软件、微处理机和终端设备组成。
组合导航接收机是一个实时系统,上位机软件必须根据用户对数据的不同需要自动生成
特定的命令发送给下位机,还要能够让用户通过人机接口界面对接收机进行复位,信息注入,
初始设置等,同时实时接收下位机(DSP)回传的数据,并根据传输协议进行解析,显示[3]。
其软件结构以数据上传为基础来实现功能,如图 1 所示。
图 1 上位机通信结构
Fig. 1 The structure of upper computer communication
2.1 GPS通信的NEMA协议
NMEA-0183 是美国国家海洋电子协会(National Marine Electronics Association)为统一海
洋导航规范而制定的标准,该格式标准已经成为国际通用的一种格式,目前大多数GPS 接
收机都能输出符合NEMA-0183 标准的ASCII 码形式的数据信息[4]。
同其它通信协议类似,用户想要对GPS 进行定位信息提取,必须首先明确其帧结构。NEMA-0183 通信标准格式语句有数十种,各种数据句型均以$开头,数据主要由帧头、帧内
数据和帧尾组成。根据数据帧的不同,帧头也不相同,主要有:$GPGGA、$GPGLL、$GPGSA、$GPRMC、$GPVTG 等。每一个帧头后的内容包含着不同的GPS 的信息。这些帧头标识了
后续帧内数据的组成结构,各帧均以回车符和换行符<CR><LF>作为帧尾标识一帧的结束,
帧内数据之间以逗号隔开。输出的句型可以根据用户需要进行选择。以$GPRMC 为例,其
交换。GPS 与PC 机串口之间的通信连接如图所示。
数据传输格式具体如下:
75 $--RMC,hhmmss.ss,A,llll.ll,,a,x.x,x.x,ddmmyy,x.x,a,a*hh<CR><LF>
其中RMC 语句的逗号中部分的具体含义见表 1 所示:
表 1 RMC 指令格式说明
80
最后的校验码* hh 代表用来校验的数据,当大数据量进行传输时,为了保证语句的完整性和正确性,必须通过最后的检验码进行校验。校验的算法是以“$”和“*”之间的所有字
节按位异或求得两个校验字符,然后取所接收GPS 语句中“*”后的校验码,对比计算所得
校验码与接收到的校验码,如果两者相同,则说明语句完整,校验通过,处理接收到的字符85
90
95
100
以提取所需数据;如果不同表明接收到的该条GPS 语句有误,应丢弃该语句,重新读取直到获得新的完整语句为止[5]。
2.2串口通信实现数据传输
上位机软件与接收机DSP 的数据传输是通过串口通信实现的。数据传送分为同步串行传送和异步串行传送。同步GPS 串行传送是用单独的时钟信号来对传送的数据进行定时,因此要求有严格的时间控制和同步协议。异步串行传送不要求有严格的时间控制和同步协
议,但要求在电文中作一些规定。在数据传送之前送一个“开始”位,传送完一组数据后再
送一个“停止”位。因此异步串行传送是字符为基础的,在计算机与GPS 进行数据传送时,采用异步串行传送方式。
数据接口是提供GPS 接收机与外界进行交互的工具。利用RS-232 电缆接口进行数据
[6]
图 2 GPS 接收机与PC 机的串口通信
Fig. 2 The communication between GPS receiver and PC
具体的串口通信流程如图 3 所示
上位机软件开发培训图 3 串口通信流程图
Fig. 3 Serial interface communication flow chart
105 110 115 120 125
打开串口之后,初始化串口要设置事件驱动的类型,设置输入、输出缓冲区的大小、消除输人输出缓冲区的数据、设置串口的波特率、数据位的长度、停止位的长度、校验位的长度、优先级。这些参数要与GPS 接收机的参数一致。编写通信程序中的设置必须和“端口设置”中的设置完全符合才能实现正常的串口通讯。在串行通信中,可以用“波特率”来描
述数据的传输速率,对大多数串行接口电路的接收波特率和发送波特率也可以分别设置,但接收方的接收波特率必须与发送方的发送波特率相同,这样正确的通信才能建立。以下给出关键部分的代码。
m_hCom=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXI STING, FILE_FLA G_OVERLA PPED,NULL); file://以异步方式打开COM1 口SetCommMask (m_hCom, EV_RXCHAR ) ; file://添加或修改Windows 所报告的事件列表
SetupComm (m_hCom,REA DBUFLEN/*读缓冲*/,WRITEBUFLEN/*写缓冲*/); // 初始化通讯设备参数
// 清除缓冲信息
PurgeComm (m_hCom, PURGE_TXABORT | PURGE_RXA BORT | PURGE_TXCLEA R | PURGE_RXCLEA R) ;// 对异步I/O 进行设置
CommTimeOuts.ReadIntervalTimeout = MAXDWORD ; file://接收两连续字节的最大时
间间隔
CommTimeOuts.ReadTotalTimeoutMultiplier =0; file://接收每字节的平均允许时间
CommTimeOuts.ReadTotalTimeoutConstant = 0 ; file://接收时间常数
SetCommTimeouts (m_hCom , &CommTimeOuts) ;file://获取并设置串口
GetCommState ( m_hCom, &dcb) ;
dcb.BaudRate = CBR_115200;//设置串口通信速率
dcb.ByteSize = 8;
dcb.Parity = ODDPARITY;
130 135 140 145 150 155 160
dcb.StopBits = ONESTOPBIT ;
SetCommState( m_hCom, &dcb);
2.3 UART-USB转换实现数据的高速率传输
RS232 接口是UA RT 接口的一种,在串口通信的数据传输上有着广泛的应用。但其串
口支持的最高波特率局限于115200,对于高速传输的系统来说有局限性。USB 作为一种新
的PC 机互连协议,使外设到计算机的连接更加高效、便利。如果将USB 技术应用于DSP 与PC 机之间的数据通信,好处在于:PC 端的应用软件依然是针对RS232 串行端口编程的,外设也是以RS232 为数据通信通道,但从PC 端到外设之间的物理连接却是USB 总线,其上的数据通信也是USB 数据格式。这样可保护原有的软件开发投入,并使已开发成功的针
对RS232 外设的应用软件不加修改即可继续使用;另一方面充分利用了USB 总线的高传输速率和即插即用的特性,而且对于PC 机而言还可以节余一个RS232 串口为其它通信所用[7]。
传统的数据传输是基于FPGA编程修改管脚实现与UA RT 的串口数据传输。在实际的
研发过程中,选用通FT245BL 建立通信路径,将其芯片的八根管脚直接与接收机芯片相连
完成DSP 与PC 机的数据交互。FT245BL 芯片的最大优点是免去了复杂的固件编程和驱动
程序的编写。FTDI 公司免费提供虚拟串行口VCP 驱动程序和动态链接库D2XX 驱动程序。当USB 接口与主机连接后,在PC 机上安装FTDI 公司免费提供的驱动程序,该驱动程序兼容Windows 2000/XP/Vista/7 等操作系统。安装好驱动后,打开设备管理器,查看端口和通
用串行总线控制器,分别出现了“USB Serial Converter”和“USB Serial Port”,这样就完
成了USB 驱动的安装。FT245BL 芯片的使用,简化了USB 数据接口的设计,加快了USB 系统的开发进程。
2.4判别提取定位数据
处于工作状态的GPS 接收机会不停的将接收并计算出的GPS 导航定位信息通过串口传送到计算机中。从串口接收数据后将其放置于缓存,在没有进一步处理之前缓存中是一长串
字节流,这些信息在没有经过分类提取之前是无法加以利用的。因此,必须通过程序将各个
字段的信息从缓存字节流中提取出来,将其转化成可以供高层决策使用的定位信息数据[8]。
上位机要想正确的提取接收机的导航信息,首先需要进行语句判别。究竟这句是$GPGGA,还是$GPGSA,或者是$GPRMC,只有正确判别过后才能根据NMEA0183 协议
进行数据提取。在处理缓存数据时一般通过搜寻ASCII 码来判断是否是帧头,在对帧头的
类别进行识别后再分别进行提取信息。
完成了判别语句的步骤,就需要用编程实现定位语句的提取。由于解析的语句长度是不
确定的,因而分离想要的信息时,为了提高通用性,不能按照该信息在语句中所处的字符长
度来查,而是依据帧内数据段间的逗号分割,通过对所经历逗号个数的计数来判断出当前
正在处理的是哪一种定位导航参数,并做出相应的处理。图 4 是判别提取定位数据的具体算
法实现:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论