2024年3月19日发(作者:)

Information

信息通信

communications

&

境下

VC6.0

实现

GPS

差分定位中串口通信的

余志奇 沈琦/武汉大学测绘学院(武汉 430079)

摘 要:文章从对GPS的差分技术的概述开始,继而以加拿大Novatel公司生产的OEM4-G2L板卡为例,介绍了

NMEA0183协议及其中$GPGGA定位语句的格式,然后以详细的实例说明了基于VC6.0的计算机与GPS接收机

在差分定位中的串口通信程序。

关键词:GPS;NMEA0183;串口通信;MSComm控件

中图分类号:TN967.1 文献标识码:A 文章编号:

1673-1131(2007)01-0012-03

作者简介

余志奇

Author's profile

术方面引起了革命性的变化。用GPS同时测定三维坐标

的方法将传统定位技术从陆地和近海扩展到整个海洋和

外层空间,从静态扩展到动态,从单点定位扩展到网络

差分,从事后处理扩展到实时定位与导航,绝对和相对

精度扩展到米级、厘米级乃至亚毫米级,从而大大拓宽

了它的应用范围和在各行各业中的作用。它可以把动态

(1982-),男,湖北省武汉市人,武汉大学测绘学院2005级硕

士研究生,主要研究方向:卫星定位导航技术及其工程应用。

一、前言

GPS(Globle Position System,全球定位系统)作为一

种全新的现代空间卫星导航定位技术,已逐渐在越来

越多的领域取代了常规光学和电子测量仪器。自从上

世纪80年代以来,尤其是进入90年代后,GPS卫星定

位和导航技术与现代通讯技术相结合,在空间定位技

监测中的移动目标的位置状态等信息由接收机实时传送

至监测系统,然后再由我们进行实时处理。

随着现代数据通讯技术、计算机技术、电子技术

的日益发展和完善,实际工作中我们越来越多的需要

利用到GPS差分定位这种模式(即DGPS),GPS的差分

工作方式需要两台接收机,其中一台接收机的位置信

The Realization of GPS Receiver’s Serial Communications in

Difference Position under the Environment of VC6.0

YU Zhi Qi, SHEN Qi

(School of Geodesy and Geomatics at Wuhan University, Wuhan, 430079,China)

Abstract: This article from to the GPS difference technology outline start, subsequently the OEM4-G2L board which produces by

Canadian Novatel Corporation is an example, introduced the NMEA0183 agreement and its $GPGGA locate statement form, then the

author showed by the detailed example based on the VC6.0 computer and the GPS receiver in difference position string mouth signal

procedure.

Key words: GPS; NMEA0183 protocol; Serial communication; MSComm controls

12

2007 No.1

余志奇 沈琦/VC6.0环境下GPS差分定位中串口通信的实现

学术研究

Academic Research

息精确已知,作为基准站;另外一台通过基准站接收

机的位置来修正自己的位置,作为流动站,它们之间

通过无线电电台进行通讯。通过计算测量距离与真实

距离的误差,基准站能够立刻计算出卫星数据中由电

离层误差和星历表误差所产生的影响,将此信息传送

到流动站接收机,便能修正此误差,从而实时得到更

精确的位置坐标。其实时精度能够达到几个分米,事

后差分定位精度可以达到1到2个厘米。正是由于它

方便、快捷、精度高的优势,使GPS差分定位广泛应

用于勘测、监控及定位导航等领域中。

D6

D7

D8

D9

D10

GPS状态指示

捕获卫星数

水平精度因子

天线高程

大地水准高

有效期

标识

校验和

终止符

格  式

D1

D2

D3

D4

D5

定   义

起始位

UTC

纬度

北纬或南纬

经度

东经或西经

说    明

语句起始位

协调世界时(Hhmm.ss)

大地纬度(Ddmm.mmm)

纬度标识(N/S)

大地经度(Ddmm.mmm)

经度标识(E/W)

0=无效,1=GPS有效,

2=DGPS有效

00~12

HDOP(1.0~99.9)

自平均海平面的天线高程

(-9999.9~9999.9)

-999.9~999.9

差分GPS改正数有效期

(无差分则无效)

差分基准站标识(0000~1023)

校验和

语句结束符,回车换行

二、OEM板与计算机的串口通信

GPS接收机的小型化OEM(Original EquipmentM anufacture)

产品是GPS接收机的核心部件,它可以接收来自GPS天

线单元的卫星信号,通过变频、放大、滤波等处理过

程,产生诸如星历、位置、时间速度等大量的数据信

息。下面以世界上OEM板的最大生产厂商加拿大Novatel

公司生产的OEM4-G2L板卡为例,简要介绍其结构功

能和数据格式。

OEM4-G2L板卡的长和宽仅为100mm和60mm,重

量仅为56g。接收机支持许多先进的性能,包括波特率

最高可达921600bps和230400bps的两个串行端口、一个

USB端口、可设置的PPS输出和事件打标输入,功耗典

型值仅为1.6W。它提供24通道“全视野”跟踪;集

成了脉冲孔径相关(PAC)技术,可以在实时动态差分定

位中实现厘米级精度。此外,它具有NovAtel的应用程

序接口(API),用户可以使用标准的VC/C++开发环境

和API库在OEM4-G2L上开发自己的应用程序软件,这

样就可以省去系统硬件,对于商业用户来说还可以减

少开发成本和进入市场的时间。

与其他型号的板卡一样,OEM4-G2L采用的也是

NMEA(National Marine Electronics Association)0183通信标

准格式,它是美国航海电子协会委员会制定的航海电

子设备接口的标准,OEM4-G2L板的串口通讯协议为:

主串口波特率与电台串口波特率一致即可;无奇偶校

验;8个数据位;1个起始位,1个停止位,它的内容包

括卫星的经度、纬度、高程、速度、时间、载波相位、

卫星状况(卫星数量、编号、方位角)等信息。对于我

们测量中做差分定位实时监控系统的程序开发来说,

我们关心的更多是其中的位置信息,也就是其中的

¥GPGGA定位数据语句,该语句格式如下表:

D11

D12

hh

〈CR〉〈LF〉

表1 ¥GPGGA语句格式说明

OEM4-G2L板卡有COM1和COM2两个串口,差分

模式中,COM1口传送GPS定位数据及其他原始的卫星

信号数据,同时也接收用户的控制信号。COM2口一般

用来与电台相连,接收或发送差分格式的GPS数据,而

测得的位置坐标最后经主串口输出定位数据。

串行端口的本质功能是作为CPU和串行设备间的

编码转换器。当数据从CPU经过串行端口发送出去时,

字节数据转换为串行的位。在接收数据时,串行的位

被转换为字节数据。在Windows环境下,串口是系统

资源的一部分。应用程序要使用串口进行通信,必须在

使用之前向操作系统提出资源申请要求,通信完成后必

须释放资源。整个通信程序的思路大致分为1)添加控件

进行串口初始化;2)储存信息到数组;3)提取串口信息

中测量所需的位置数据并转存。下面,我们就按照这个

思路利用VC6.0中的串口控件设计串口应用程序。

三、差分定位中串口通信程序的编制

下面我给出关键的程序代码较为详细的讲解如何一

步步的通过程序使电脑与GPS的串口进行通信,并提取

到其中我们测量所需要的关键信息。

3.1 加入MSComm通信控件

打开VC++6.0后建立项目,选择Project菜单下Add

To Project子菜单中的Components and Controls…选项,在弹

出的对话框中双击Registered ActiveX Controls项,选择

Microsoft Communications Control,version 6.0,单击Insert

2007 No.1

余志奇 沈琦/VC6.0环境下GPS差分定位中串口通信的实现

13

In

信息通信

formation

&

communications

按钮将它插入到Project中来,接受缺省的选项。这时在下面程序是从接收到的NMEA-0183数据格式中提取

ClassView视窗中就可以看到CMSComm类了,将控件工我们测量所需的位置信息,即经度、纬度和大地高。主

具栏中出现了电话图标拖到对话框中,这样就完成了通要程序代码如下:

信控件的添加。{while((m_strReceived.Find(0x0d)!=-1)&&

3.2 串口初始化(m_strReceived.Find(0x0a)!=-1))//循环读取GPGGA定

一般的串口通信只需要使用到串口COM1,而对于位语句

差分定位中,COM1和COM2都要分别传送数据。{//startLF 缓冲区中第一个GPS语句结束标志LF的

CDialog::OnInitDialog();位置就是下一个GPS开始的标志

{//打开串口1接收GPS数据ints tartLF=m_strReceived.Find(0x0a);

if(m_ctrlComm1.GetPortOpen())int endCR=m_strReceived.Find(0x0d);

m_ctrlComm1.SetPortOpen(FALSE);//endCR 第一个GPS语句结束标志CR的位置

m_ctrlComm1.SetCommPort(1);        //选择com1if(startLF>endCR) //找到GPS语句

if( !m_ctrlComm1.GetPortOpen())endCR=m_strReceived.Find(0x0d,startLF);

m_ctrlComm1.SetPortOpen(TRUE);//打开串口CString msg=m_strReceived.Mid(startLF+1,

m_ctrlComm1.SetSettings("32400,n,8,1");endCR-startLF-1);

//波特率32400,无校验,8个数据位,1个停止位//复制这个GPS语句,

m_ctrlComm1.SetRThreshold(1);m_strReceived.Delete(0,endCR+1);

//参数1表示每当串口接收缓冲区中有多于或等//从缓冲区删去上个结束标志LF到本句结束标志

于1个字符时将引发一个接收数据的OnComm事件CR间的数据。

//打开串口2 发送差分信息//判断是否是¥GPGGA语句,不是则跳过本次循环,

if(m_ctrlComm2.GetPortOpen())是则删除¥GPGGA,继续处理本句其他语句

m_ctrlComm2.SetPortOpen(FALSE);if(msg.Left(6).Compare("¥GPGGA")!=0)continue;

m_ctrlComm2.SetCommPort(2);       //选择com2       msg.Delete(0,msg.Find(',')+1);

if( !m_ctrlComm2.GetPortOpen())//获取纬度信息

m_ctrlComm2.SetPortOpen(TRUE);//打开串口      CString latidegree=msg.Left(2);

else        CString laticent=msg.Mid(2,7);

m_ctrlComm2.SetSettings("9600,n,8,1"); }//获取经度信息

3.3 接受并储存数据      CString longidegree=msg.Left(3);

接收GPS串口传来的信息,并把数据存入数组。程        CString longicent=msg.Mid(3,7);

序主要代码如下://获取大地高

if(m_ctrlComm1.GetCommEvent()==2) CString height=msg.Left(7);

//事件值为2表示接收缓冲区内有字符 double high=atof(height);

{  variant_inp=m_ctrlComm1.GetInput();    }}

        safearray_inp=variant_inp;

//VARIANT型变量转换为ColeSafeArray型变量

四、结论

        len=safearray_inp.GetOneDimSize();在WindowsXP下,利用MSComm控件在GPS差分定

//得到有效数据长度

位中实现了GPS接收机与计算机之间的串口通信。

        for(k=0;k<len;k++)

        s afearray_inp.GetElement(&k,rxdata+k);

参考文献

//转换为BYTE型数组1、 李洪涛,许国昌,薛鸿印等.GPS应用程序设计

for(k=0;k<len;k++)

[M].北京:科学出版社,1999

//将数组转换为Cstring型变量加入到对应字符串中2、 龚建伟,熊光明. Visual C++串口通信编程实

        {BYTE bt=*(char*)(rxdata+k);

践[M].电子工业出版社,2005

    m_strReceived+=char(bt); }}3、 陈曙光. 利用ActiveX控件实现对计算机串口

3.4 提取GPS信息

的通信管理[J].合肥工业大学学报(自然科学版),2000(6)

14

2007 No.1

余志奇 沈琦/VC6.0环境下GPS差分定位中串口通信的实现