My Visual Basic NMEA Parser.

 

 
    follow me on Twitter
    I recently bought a bluetooth GPS receiver for my IPAQ Pocket PC, and I wanted to experiment with using a PC serial port to read the data, and interpret the NMEA sentences.

    I searched the Internet for VB Source code, but could only find NMEA Parsers written for Java, C++ Linux etc, but nothing useful for VB.

    So I decided to write my own. It is a VB Module at the moment, but I'm hoping to create a Dll version pretty soon.

    GPS Receivers generally communicate using NMEA -0183 sentences. These are strings of data separated by commas. They have a starting identifier, which indicates what the data is for, data separated by commas, and a terminator & checksum to identify the end.

    The data is usually available via a serial port at around 4800,N,8,1. My Module uses the MsComm control to read the data on the required port into a buffer. The software then breaks the data down to 4 Major types defined by VB User Types, and their particular properties. The types and properties are as below:-
    For example:-
    To show the UTCTime in text1 textbox, use
    Text1.text=GGA.strUttcTime
     
    You can download an example of using the module here. The windows binary PBGPS.exe is in this zip.
    If you want to drop me a line click my name below.
    Paul Bartlett
     
    Sentence Description
    $GPGGA Global positioning system fixed data
    $GPGSA GNSS DOP and active satellites
    $GPGSV GNSS satellites in view
    $GPVTG Course over ground and ground speed
     

    $GPGGA Sentence (Fix data)

    Example (signal not acquired): $GPGGA,235947.000,0000.0000,N,00000.0000,E,0,00,0.0,0.0,M,,,,0000*00
    Example (signal acquired): $GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F

    Field Example Comments GGA Property
    Sentence ID $GPGGA    
    UTC Time 092204.999 hhmmss.sss strUttcTime
    Latitude 4250.5589 ddmm.mmmm varLatitude
    N/S Indicator S N = North, S = South strNSIndicator
    Longitude 14718.5084 dddmm.mmmm varLongitude
    E/W Indicator E E = East, W = West strEWIndicator
    Position Fix 1 0 = Invalid, 1 = Valid SPS, 2 = Valid DGPS, 3 = Valid PPS strPositionfix
    Satellites Used 04 Satellites being used (0-12) strSatsUsed
    HDOP 24.4 Horizontal dilution of precision strIIDOP
    Altitude 19.7 Altitude in meters according to WGS-84 ellipsoid strAltitude
    Altitude Units M M = Meters strAltUnits
    Geoid Seperation   Geoid seperation in meters according to WGS-84 ellipsoid strGeoid
    Seperation Units   M = Meters strSepUnits
    DGPS Age   Age of DGPS data in seconds strDgpsAge
    DGPS Station ID 0000   strDspgid
    Checksum *1F    
    Terminator CR/LF    
     

    $GPGSA Sentence (Active satellites)

    Example (signal not acquired): $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30
    Example (signal acquired): $GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A

    Field Example Comments GSA Property
    Sentence ID $GPGSA    
    Mode 1 A A = Auto 2D/3D, M = Forced 2D/3D strMode
    Fix Type 3 1 = No fix, 2 = 2D, 3 = 3D strFixType
    Satellite used 1 01 Satellite used on channel 1 strSat1
    Satellite used 2 20 Satellite used on channel 2 strSat2
    Satellite used 3 19 Satellite used on channel 3 strSat3
    Satellite used 4 13 Satellite used on channel 4 strSat4
    Satellite used 5   Satellite used on channel 5 strSat5
    Satellite used 6   Satellite used on channel 6 strSat6
    Satellite used 7   Satellite used on channel 7 strSat7
    Satellite used 8   Satellite used on channel 8 strSat8
    Satellite used 9   Satellite used on channel 9 strSat9
    Satellite used 10   Satellite used on channel 10 strSat10
    Satellite used 11   Satellite used on channel 11 strSat11
    Satellite used 12   Satellite used on channel 12 strSat12
    PDOP 40.4 Position dilution of precision strPDOP
    HDOP 24.4 Horizontal dilution of precision strHDOP
    VDOP 32.2 Vertical dilution of precision strVDOP
    Checksum *0A    
    Terminator CR/LF    
     

    $GPGSV Sentence (Satellites in view)

    Example (signal not acquired): $GPGSV,1,1,01,21,00,000,*4B
    Example (signal acquired): $GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70

    Field Example Comments GSV Property
    Sentence ID $GPGSV    
    Number of messages 3 Number of messages in complete message (1-3) strNoMessages
    Sequence number 1 Sequence number of this entry (1-3) strSeq
    Satellites in view 10   strSatsInView
    Satellite ID 1 20 Range is 1-32 strSatId1
    Elevation 1 78 Elevation in degrees (0-90) strElevation1
    Azimuth 1 331 Azimuth in degrees (0-359) strAzimuth1
    SNR 1 45 Signal to noise ration in dBHZ (0-99) strSNR1
    Satellite ID 2 01 Range is 1-32 strSatId2
    Elevation 2 59 Elevation in degrees (0-90) strElevation2
    Azimuth 2 235 Azimuth in degrees (0-359) strAzimuth2
    SNR 2 47 Signal to noise ration in dBHZ (0-99) strSNR2
    Satellite ID 3 22 Range is 1-32 strSatId3
    Elevation 3 41 Elevation in degrees (0-90) strElevation13
    Azimuth 3 069 Azimuth in degrees (0-359) strAzimuth3
    SNR 3   Signal to noise ration in dBHZ (0-99) strSNR3
    Satellite ID 4 13 Range is 1-32 strSatId4
    Elevation 4 32 Elevation in degrees (0-90) strElevation4
    Azimuth 4 252 Azimuth in degrees (0-359) strAzimuth4
    SNR 4 45 Signal to noise ration in dBHZ (0-99) strSNR4
    Checksum *70    
    Terminator CR/LF    
     

    $GPVTG Sentence (Course over ground)

    Example (signal not acquired): $GPVTG,,T,,M,,N,,K*4E
    Example (signal acquired): $GPVTG,89.68,T,,M,0.00,N,0.0,K*5F

    Field Example Comments VTG Property
    Sentence ID $GPVTG    
    Course 89.68 Course in degrees strCourse1
    Reference 89.68 T = True heading strReference1
    Course   Course in degrees strCourse2
    Reference 89.68 M = Magnetic heading strReference2
    Speed 0.00 Horizontal speed strSpeed1
    Units N N = Knots strSpeedUnit1
    Speed 0.00 Horizontal speed strSpeed2
    Units K K = KM/h strSpeedUnit2
    Checksum *5F    
    Terminator CR/LF    
       
    Hit Counter  
    Starter