首页  |  u-blox简介 |  u-blox产品设计  | 软件下载 | 飞扬科技其他产品 |  GPS方案  |  样品采购  |   
 
最新资讯
122.gif


这是GPS史上第一次评测,我们收集国际市场最主流的行业资讯,对主流的GPS进行相应的评测,以帮助客户更透彻的了解这个变幻莫测的新市场.....


GPS设计的重点在哪里?成功的GPS产品有哪些共同的设计上的优势?我们将为你解开这个迷团



作为GPS数据回传的主要途径,GPRS模块发挥了重要的作用,我们将向大家介绍主流的GPRS模块采购与选型指南....



收集市场主流GPS导航用的LCD液晶屏资讯,进入液晶屏的丰富多彩的导航资讯生活新世界,资料收集整理中....


GPS附件零部件的性能往往是很多人忽略的,但是它会影响到整机的GPS性能,我们今天对它进行详细的了解....



这是GPS史上最浓重的一墨,也是u-blox公司沤心历血近三年最强悍的GPS模块,我们将对其进行最详细的说明,让读者一睹为快这款世界上最强大的民用级GPS产品的迷人风采.....



LEA-5H及AEK-5H正式版本到货,这预计u-blox的第五代GPS模块产品及ublox-5系列产品正式进入大批量的量产阶段,这将是2008年头条重磅新闻,GPS业界将进行新的革局.....

GPS技术网络文摘精华
122.gif

经飞扬科技编辑整理的GPS技术原理专辑

GPS原理
DGPS系统原理
GSP系统设计规则
VC++实现GPS全球定位系统定位数据的提取
用VB实现GPS信息处理
NMEA码详解
GPS与单片机实际应用
用VB实现GPS信息处理  
122.gif

这里将详细介绍如何利用VB来对NMEA码进行编程

版权声明:

以下文字及图片属于网络摘录,飞扬科技编辑及理理,版权所有仍由原创作人持有

-------------------------------------------------------------------------------------------------------
引 言
 
   目前,GPS 已在许多行业和领域得到广泛应用,但就如何将GPS 有关信息读入计算机以便进一步处理和应用,仍是大家普遍关心的问题。虽然目前GPS 接收仪的种类、功能各有差异,而且使用的通讯协议也比较多,但许多GPS 生产商都遵循NMEA0183 协议,并且这些GPS 都提供串行通讯接口。笔者试图从分析GPS 通讯NMEA0183 协议入手,以计算机实时读取、显示、存储、回放GPS信息为例,探讨用VB 实现GPS 信息处理的一些方法。
 
1  GPS 通讯的NMEA 协议
 
   GPS 的通讯协议比较多,其中NMEA (National Ma2rine Electronics Association) , 0183 协议为GPS 接收机和其他航海电子产品的导航数据输出格式,是目前普遍使用且为大多数生产商遵循的协议之一,以下为其基本通讯参数及报文格式。
 
1. 1  GPS 串行通讯参数
 
   波特率= 4800 ;无奇偶校验;数据位= 8 ;停止位= 1
 
1. 2  NMEA 0183 报文格式
 
   NMEA 0183 协议报文的语句串(ASCII 字符) 格式全部信息可如下表示[1] :$AAXXX,ddd. . . ddd , 3 hh < CR > < LF >
 
   具体内容为:
  
    $ 串头,表示串开始
 
    AA  识别符
 
    XXX 语句名
 
    ddd ⋯ddd  数据字段,字母或数字
 
    ,   逗号
 
    3  星号,串尾
 
    hh  $与3 之间所有字符代码的校验和
  
    < CR >  回车控制符
  
    < LF >  换行控制符
 
1. 3  报文示例说明
 
   在具体的GPS 应用中,不需要用到NMEA 的全部信息,而是根据具体的工作,从中选取所需的信息,忽略其他信息。在文献[ 1 ]中,给出了用NMEA0813 的$GPGGA语句的数据格式及示例,文中以GPS 推荐的最短数据$GPRMC 语句为例,具体讨论协议串中各数据段内容。
 
1. 3. 1  当GPS 接收仪和卫星的通讯正常时接收到的数据中就包含如下格式的RMC 语句:
 
$GPRMC,055142,A,3603.3291,N,10346.3723,E,0.0,230.4,250503,1.3,W,A *3 02
 
   其中数据分别为:
 
    $GPRMC  串头,其中RMC 为定位语句
  
    055142 表示UTC 24 小时制的标准时间,格式为“时时/分分/秒秒”。根据任务还需要将其转换为北京时间格式
  
    A 或V 表示信号接收状态,其中A表示数据“OK,V表示一个警告
 
    3603.3291 表示纬度值,格式为“ddmm.mmmm”
 
    N 或S  标明南北半球,N为北半球(北纬)、S为南半球(南纬)
 
    10346.3723 表示经度值,格式为“dddmm.mmmm”

    E 或W 标明东西半球,E为东半球(东经)、W为西半球(西经)
 
    0.0 表示速度, (这里速度为0)
 
    230.4  方位角,范围为000.0 到359.9度
 
    250503  为UTC 的日期,格式为“日日/月月/年年”
  
    1. 3  地磁变化(磁偏角) ,从000.0 到180.0度
  
    W 地磁变化方向,为E或W
 
1. 3. 2 当没有和卫星取得联系时
 
   RMC 语句的显示格式如下:$GPRMC, ,V, , , , , , ,270503 ,1.3,W,N *2B
 
2  VB编程实现
 
   在应用VB 实现对GPS 数据接收和处理时,主要通过串行通讯方式,应用MSComm 控件完成。由于文中涉及内容较多,故只给出编程思想和核心程序段。
 
2. 1  MSComm 控件应用
 
2. 1. 1  端口设置
 
   由于GPS串行通讯参数是固定的“波特率=4800 ;无奇偶校验;数据位=8;停止位=1”,所以在编程时直接设置串口通讯参数就行了。其主要程序段如下[2] :
 
’NMEA 协议设置
 
   MSComm1.Settings= “4800,N,8,1”
 
2. 1. 2  数据采集
   
   OnComm 事件被用于捕获communications 事件及错误。因此可在MSComm 控件的OnComm 事件中加入处理函数,以便在文本框区实时显示、数据采集。
   

Private Static Sub MSComm1 - OnComm()
  ’事件信息
  Dim Buffer As Variant
  Buffer = MSComm1.Input
  ShowData txtTerm ,(StrConv(Buffer,vbUnicode))
’在文本框txtTerm 内显示接收到的GPS 信息
’ShowData 过程实现, 见2.2.4
End Sub
 
2. 2  GPS 信息显示的实现
 
   GPS 信息的显示实际包括两个方面,一是经过提取处理,显示需要的信息;二是在文本框内显示或记录全部信息(各种语句都显示) 。在程序实现上,为方便读取GPS信息, 并提高程序的复用性, 事先设计了两个类模块CparseUtils-wjh.cls,GPRMC-wjh.cls和一个标准模块modTransFun.bas ;同时也设计了一个在文本框区显示、采集数据的过程showdata。以下为主要功能或实现过程。
 
2. 2. 1  CparseUtils-wjh 类
  
该类主要用于求得语句串中数据段的数目和内容,包含两个函数:
  
Function Count Parts ( sString As String , Optional sDelim As String) As Byte  ’用于返回协议语句中用“,”分割的段数
  
Function Parse (ByVal sString As String , iReq As Integer , Op2tional sDelim As String) As String  ’用于分割数据段内容
 
2. 2. 2  GPRMC-wjh 类
 
   该类实现对接收到的语句进行判断,并确定各段字符的具体内容。除变量和其他属性定义外,最核心的一个方法,就是字串判断,下面列出其程序段:
  
Public Property Let Sentence (ByVal RMC - Sentence As String)
Dim Utils As New CparseUtils-wjh
’检查正确的协议语句串头,以保证为$GPRMC 串
If Utils.Parse (RMC- Sentence , 1) =“$GPRMC”Then
   ’变量定义部分从略
   mvarSentence = RMC - Sentence
’分析NMEA 并检查效果,如果不满足控制条件,返回并使变量值为空
   sUTC = Utils.Parse (mvarSentence , 2) ’UTC 时间
   If IsNumeric (sUTC) Then
    mvarUTC = sUTC
   End If
sLatitude = Utils.Parse (mvarSentence , 4) ’纬度
   If IsNumeric (sLatitude) Then
    mvarLatitude = sLatitude
   End If
sLatHemis = Utils.Parse (mvarSentence , 5) ’南、北纬
   If sLatHemis =“S”Or sLatHemis =“N”Then
    mvarLatHemis = sLatHemis
   End If
sLongitude = Utils. Parse (mvarSentence , 6) ’经度
   If IsNumeric (sLongitude) Then
    mvarLongitude = sLongitude
   End If
sLonHemis = Utils. Parse (mvarSentence , 7) ’东、西经
   If sLonHemis = “E”Or sLonHemis = ”W”Then
    mvarLonHemis = sLonHemis
   End If
sSpeed = Utils. Parse (mvarSentence , 8) ’速度
   If IsNumeric (sSpeed) Then
    mvarSpeed = sSpeed
   End If
sUTDate = Utils. Parse (mvarSentence , 10) ’日期
   If IsNumeric (sUTDate) Then
    mvarUTDate = sUTDate
   End If
’⋯⋯其他判断类似,此处从略
End If
  Set Utils = Nothing
End Property

 
2. 2. 3  modTransFun 功能模块
  
   该模块给出了坐标格式转换函数及GPS 信息显示函数,它们分别为:
 
Public Function DM2DD(DegreeMinutes As String) As Double
 
’坐标格式转换函数,转换NMEA 协议的“度分”坐标格式为十进制“度度”格式
 
’实现方法读者可自己完成
  
下面主要介绍用于GPS 数据显示、回放时要用到的playNMEA 过程的实现方法:
 
Public Sub playNMEA(sArray As Variant )
’直接显示GPS 数据流,或回放已存在的NMEA 文件
Dim rmc As GPRMC-wjh
Dim Utils As New CparseUtils - wjh
Dim Sentence As Integer
For Sentence = 0 To sCnt - 1
  If Utils. Parse (sArray(Sentence) , 1) =“$GPRMC”Then
  Set rmc = New GPRMC - wjh
DoEvents
With rmc
  . Sentence = sArray(Sentence)
  If Not Val ( . Longitude) = 0 Then
’lblX、lblY、lblSpeed、lblUTC、lblDate 分别为用于显示X、Y
坐标,
’速度,日期,时间的标签(Label) 控件
’这里只示例了$GPRMC 中几个主要信息的提取,其他信息可如法炮制
lblX. Caption = “X: ” & Format (DM2DD ( . Longitude ) ,“000. 0000”) &“”& . LonHemis
lblY. Caption =“Y: ”& Format (DM2DD( . Latitude) ,“ 00.0000”) &“”& . LatHemis
  lblSpeed. Caption =“速度: ”& . Speed &“ Km/ h”
  lblDate. Caption =“日期: ”& . UTDate
  lblUTC. Caption =“时间: ”& . UTC ’这个时间为UTC时间
’根据任务可转换成北京时间
  Else
MsgBox“接收卫星数太少,不能定位!”
’⋯⋯
’赋给lblX、lblY、lblSpeed、lblUTC、lblDate 空串
  Exit Sub
  End If
End With
  End If
Next Sentence
End Sub
 
’如果需要记录数据到文件
 
If hLogFile Then
  i = 2
  Do
    Err = 0
    Put hLogFile , , Data
    Dim data0 As String
    If Err Then
     i = MsgBox( Error $, 21)
     If i = 2 Then
       mnuCloseLog - Click
     End If
    End If
  Loop While i < > 2
End If
Term. SelStart = Len ( Term. Text ) ’定位信息显示部分开始
InString = Data
cnt = Utils. Count Parts ( InString , Chr (10) )
   For n = 0 To cnt - 1
    tempStr = Utils. Parse ( InString , n , Chr (10) )
     ReDim Preserve sArray(n)
     sArray(n) = tempStr
   Next n
   Set Utils = Nothing
   sCnt = cnt
   Call playNMEA(sArray) ’显示部分结束
Exit Sub
Handler :
MsgBox Error $
Resume Next
End Sub

 
2. 3  实时记录和保存GPS 数据
 
   程序运行时,如执行“打开记录文件”,则打开要记录的文件和端口,在GPS 信息区实时显示接收到的GPS 报文 ,并录入到记录文件中;若执行“关闭记录文件”,则关闭记录文件(但文本框中仍然显示GPS 信息) 。
 
Private Sub mnuOpenLog - Click()
’执行“打开记录文件”
  Dim replace
  On Error Resume Next
  With OpenLog ’CommonDialog 控件
     . Flags = cdlOFNHideReadOnly Or cdlOFNExplorer
     . CancelError = True    ’从用户处获得记录文件名称
     . DialogTitle = “打开记录文件”
     . Filter = “文件格式1 ( 3 . LOG) | 3 . log| 文件格式2 ( 3 . txt) | 3 . txt| 文件格式3 ( 3 . 3 ) | 3 . 3 ”
  End With
  Do
    OpenLog. FileName = “”
    OpenLog. ShowOpen
    If Err = cdlCancel Then Exit Sub
    Temp = OpenLog. FileName
    ’如果文件已经存在, 询问用户是否希望覆盖此文件或在此文件基础上添加内容
    Ret = Len (Dir $( Temp) )
    If Err Then
     MsgBox Error $, 48
     Exit Sub
    End If
    If Ret Then
     replace = MsgBox(“代替存在的- ”+ Temp +“吗?”, 35)
    Else
     replace = 0
    End If
  Loop While replace = 2
  ’用户单击“确定”按钮, 则删除此文件
  If replace = 6 Then
    Kill Temp
    If Err Then
     MsgBox Error $, 48
     Exit Sub
    End If
  End If
  ’打开记录文件
  hLogFile = FreeFile
  Open Temp For Binary Access Write As hLogFile
  If Err Then
    MsgBox Error $, 48
    Close hLogFile
    hLogFile = 0
    Exit Sub
  Else
    ’到文件结尾处来添加新数据
    Seek hLogFile , LOF(hLogFile) + 1
  End If
End Sub
Private Sub mnuCloseLog - Click()
’执行“关闭记录文件”
   Close hLogFile
   hLogFile = 0
End Sub

 
2. 4  回放GPS 数据
 
   GPS 数据的回放,是将存有GPS 信息的文件打开,并重新读取、显示其信息的过程。它包括一个打开过程和一个播放过程。具体实现代码如下(要用到前面给出的模块中的方法) :

Private Sub mnuOpenBFile - Click()
’读取存有GPS 信息的回放文件
   Dim sFile As String
Dim Sentence
On Error GoTo errorhandle
With OpenBFile
     ’从用户处获得回放文件名称
     . DialogTitle = “打开回放文件”
     . Filter = “文件格式1 ( 3 . LOG) | 3 . log| 文件格式2 ( 3 . txt) | 3 . txt| 文件格式3 ( 3 . 3 ) | 3 . 3 ”
     . ShowOpen
     If Len( . FileName) = 0 Then
       Exit Sub
     End If
       sFile = . FileName
     End With
     Open sFile For Input As # 1
     sCnt = 0
      Do While Not EOF (1)
        Line Input # 1 , Sentence
        ReDim Preserve sArray(sCnt)
        sArray(sCnt) = Sentence
        sCnt = sCnt + 1
      Loop
Close # 1
  Exit Sub
errorhandle :
   Close # 1
   MsgBox“打开文件错误!”
End Sub
Private Sub mnuPlayBFile - Click()
’播放GPS 记录文件
Call playNMEA(sArray)
End Sub

 
3  结 论
 
   通过对GPS 通讯NMEA 协议的分析,以RMC 语句的“$GPRMC”串为例,给出了开发GPS 数据处理的方法。该方法具有简单、高效、实用的特点。需要说明的是,用RMC 语句不能读取高程数据,如果要在应用中读取高程数据, 可应用文中的方法, 再编写一个读GGA 语句(“$GPGGA”串) 的类,其中第9 个数据段就是高程信息。





粤ICP备06076881号