材料一:
NMEA协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine Electronics Associa-tion)制定的一套通讯协议。GPS接收机根据NMEA-0183协议的标准规范,将位置、速度等信息通过串口传送到PC机、PDA等设备。
NMEA-0183协议是GPS接收机应当遵守的标准协议,也是目前GPS接收机上使用最广泛的协议,大多数常见的GPS接收机、GPS数据处理软件、导航软件都遵守或者至少兼容这个协议。
不过,也有少数厂商的设备使用自行约定的协议比如GARMIN的GPS设备(部分GARMIN设备也可以输出兼容NMEA-0183协议的数据)。软件方面,我们熟知的Google Earth目前也不支持NMEA-0183协议,但Google Earth已经声明会尽快实现对NMEA-0183协议的兼容。呵呵,除非你确实强壮到可以和工业标准分庭抗礼,否则你就得服从工业标准。
NMEA-0183协议定义的语句非常多,但是常用的或者说兼容性最广的语句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等。下面给出这些常用NMEA-0183语句的字段定义解释。
$GPGGA
例:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F
字段0:$GPGGA,语句ID,表明该语句为Global Positioning System Fix Data(GGA)GPS定位信息
字段1:UTC 时间,hhmmss.sss,时分秒格式
字段2:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段3:纬度N(北纬)或S(南纬)
字段4:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段5:经度E(东经)或W(西经)
字段6:GPS状态,0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算
字段7:正在使用的卫星数量(00 - 12)(前导位数不足则补0)
字段8:HDOP水平精度因子(0.5 - 99.9)
字段9:海拔高度(-9999.9 - 99999.9)
字段10:地球椭球面相对大地水准面的高度
字段11:差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
字段12:差分站ID号0000 - 1023(前导位数不足则补0,如果不是差分定位将为空)
字段13:校验值
$GPGSA
例:$GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A
字段0:$GPGSA,语句ID,表明该语句为GPS DOP and Active Satellites(GSA)当前卫星信息
字段1:定位模式,A=自动手动2D/3D,M=手动2D/3D
字段2:定位类型,1=未定位,2=2D定位,3=3D定位
字段3:PRN码(伪随机噪声码),第1信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段4:PRN码(伪随机噪声码),第2信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段5:PRN码(伪随机噪声码),第3信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段6:PRN码(伪随机噪声码),第4信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段7:PRN码(伪随机噪声码),第5信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段8:PRN码(伪随机噪声码),第6信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段9:PRN码(伪随机噪声码),第7信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段10:PRN码(伪随机噪声码),第8信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段11:PRN码(伪随机噪声码),第9信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段12:PRN码(伪随机噪声码),第10信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段13:PRN码(伪随机噪声码),第11信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段14:PRN码(伪随机噪声码),第12信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段15:PDOP综合位置精度因子(0.5 - 99.9)
字段16:HDOP水平精度因子(0.5 - 99.9)
字段17:VDOP垂直精度因子(0.5 - 99.9)
字段18:校验值
$GPGSV
例:$GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70
字段0:$GPGSV,语句ID,表明该语句为GPS Satellites in View(GSV)可见卫星信息
字段1:本次GSV语句的总数目(1 - 3)
字段2:本条GSV语句是本次GSV语句的第几条(1 - 3)
字段3:当前可见卫星总数(00 - 12)(前导位数不足则补0)
字段4:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)
字段5:卫星仰角(00 - 90)度(前导位数不足则补0)
字段6:卫星方位角(00 - 359)度(前导位数不足则补0)
字段7:信噪比(00-99)dbHz
字段8:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)
字段9:卫星仰角(00 - 90)度(前导位数不足则补0)
字段10:卫星方位角(00 - 359)度(前导位数不足则补0)
字段11:信噪比(00-99)dbHz
字段12:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)
字段13:卫星仰角(00 - 90)度(前导位数不足则补0)
字段14:卫星方位角(00 - 359)度(前导位数不足则补0)
字段15:信噪比(00-99)dbHz
字段16:校验值
$GPRMC
例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息
字段1:UTC时间,hhmmss.sss格式
字段2:状态,A=定位,V=未定位
字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段4:纬度N(北纬)或S(南纬)
字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段6:经度E(东经)或W(西经)
字段7:速度,节,Knots
字段8:方位角,度
字段9:UTC日期,DDMMYY格式
字段10:磁偏角,(000 - 180)度(前导位数不足则补0)
字段11:磁偏角方向,E=东W=西
字段16:校验值
$GPVTG
例:$GPVTG,89.68,T,,M,0.00,N,0.0,K*5F
字段0:$GPVTG,语句ID,表明该语句为Track Made Good and Ground Speed(VTG)地面速度信息
字段1:运动角度,000 - 359,(前导位数不足则补0)
字段2:T=真北参照系
字段3:运动角度,000 - 359,(前导位数不足则补0)
字段4:M=磁北参照系
字段5:水平运动速度(0.00)(前导位数不足则补0)
字段6:N=节,Knots
字段7:水平运动速度(0.00)(前导位数不足则补0)
字段8:K=公里/时,km/h
字段9:校验值
$GPGLL
例:$GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D
字段0:$GPGLL,语句ID,表明该语句为Geographic Position(GLL)地理定位信息
字段1:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段2:纬度N(北纬)或S(南纬)
字段3:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段4:经度E(东经)或W(西经)
字段5:UTC时间,hhmmss.sss格式
字段6:状态,A=定位,V=未定位
字段7:校验值
材料二:
NMEA-0183协议说明
V2.20 2004年1月
注:因本人水平有限,难免出现错,敬请修改。
1、NMEA输出报文
表1.1——NMEA输出报文
NMEA标记 | 说明 |
GGA | 全球定位系统固定数据 |
GLL | 地理信息——纬度/经度 |
GSA | GNSS DOP(定位点) 活动卫星 |
GSV | 可见GNSS(定位)卫星 |
RMC | 推荐的最小具体定位数据 |
VTG | 对地航向和对地速度 |
A.GGA –全球定位系统固定数据
$GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,,,,0000*18
表1.2——GGA数据格式
名称 | 举例 | 单位 | 说明 |
报文ID Message ID | $GPGGA | GGA报文头 | |
UTC坐标 UTC Position | 161229.487 | hhmmss.sss | |
纬度 Latitude | 3727.2475 | ddmm.mmmm | |
南北半球 N/S Indicator | N | N=north or S=south | |
经度 Longitude | 12158.3416 | dddmm.mmmm | |
东经西经 E/W Indicator | W | E=east or W=west | |
定位模式 Position fix indicator | 1 | 见表 1.3 | |
应用的卫星 Satellites used | 07 | 范围0 to 12 | |
HDOP | 1.0 | 水平精确度 Horizontal Dilution of Precision | |
海拔(平均海平面)高度 MSL Altitude | 9.0 | meters | |
单位 Units | M | meters | |
大地水准面距离 Geoid Separation | meters | ||
单位 Units | M | meters | |
误差修正 Age of Diff. Corr. | second | 不用DGPS时=Null | |
误差参考ID Dif. Ref. Station ID | |||
校验码 Checksum | *18 | ||
<CR><LF> | 终止符 |
表1.3——定位模式
值 | 说明 |
0 | 无效定位模式 |
1 | GPS SPS模式,有效定位模式 |
2 | 微分GPS SPS模式,有效定位模式 |
3 | GPS SPS模式,有效定位模式 |
B.GLL –地理信息——纬度/经度
$GPGLL,3723.2475,N,12158.3416,W,161229.487,A*2C
表1.4——GLL数据格式
名称 | 举例 | 单位 | 说明 |
报文ID Message ID | $GPGLL | GLL 报文头 | |
纬度 Latitude | 3723.2475 | ddmm.mmmm | |
南北半球 N/S Indicator | N | N=north or S=south | |
经度 Longitude | 12158.3416 | Dddmm.mmmm | |
东西半球 E/W indicator | W | E=east or W=west | |
UTC坐标 UTC position | 161229.487 | hhmmss.sss | |
状态 Status | A | A=数据有效 V=数据无效 | |
校验 Checksum | *2C | ||
<CR><LF> | 终止符 |
C.GSA –GNSSDOP(定位点)活动卫星
$GPGSA,A,3,07,02,26,27,09,04,15,,,,,,1.8,1.0,1.5*33
表1.5——GSA数据格式
名称 | 举例 | 单位 | 说明 |
报文ID Message ID | $GPGSA | GSA 报文头 | |
模式1 Mode 1 | A | 见表1.6 | |
模式2 Mode 2 | 3 | 见表1.7 | |
应用的卫星 Satellite used | 07 | 应用通道1(??) Sv on channel 1 | |
应用的卫星 Sateliite used | 02 | 通道2 Sv on channel 2 | |
... | |||
应用的卫星 Satellite used | 应用通道12 Sv on channel 12 | ||
PDOP | 1.8 | 位置精确度 Position dilution of precision | |
HDOP | 1.0 | 水平精确度 Horizontal dilution of precision | |
VDOP | 1.5 | 垂直精确度 Vertical dilution of precision | |
校验 Checksum | *33 | ||
<CR><LF> | 终止符 |
表1.6——模式2
值 | 说明 |
M | 手动——强制为2D或3D模式 |
A | 自动——允许自动选择2D或3D |
表1.7——模式1
值 | 说明 |
1 | 非法 |
2 | 2D |
3 | 3D |
(译者注:根据协议值,表1.6和表1.7应互换)
D. GSV –GNSS DOP(定位点) 活动卫星
$GPGSV,2,2,07,07,79,048,42,02,51,062,43,26,36,256,42,27,27,138,42*71
表1.8——GSV数据格式
名称 | 举例 | 单位 | 说明 |
报文ID Message ID | $GPGSV | GSV报文头 | |
报文号?? Number of messages | 2 | 范围1 to 3 | |
报文数?? Message number | 1 | 范围1 to 3 | |
可见卫星 Satellites to view | 07 | 可见卫星总数(00-12) | |
卫星ID Satellite ID | 01 | 信道1 (Range 1 to 32) | |
海拔 Elevation | 79 | degrees | 信道1 (最大90) |
方位角 Azimuth | 048 | degrees | 信道1 (True,范围0 to 359) |
信噪比 SNR (C/No) | 42 | dBHz | 范围0 to 99,无跟踪时=NULL |
.... | |||
卫星ID Satellite ID | 27 | 信道4 (范围 1 to 32) | |
海拔 Elevation | 27 | degreees | 信道4 (最大 90) |
方位角 Azimuth | 138 | degrees | 信道4 (True,范围 0 to 359) |
信噪比 SNR (C/No) | 42 | dBHz | 范围0 to 99, 无跟踪时=NULL |
校验 Checksum | *71 | ||
<CR><LF> | 终止符 |
E. RMC –推荐的最小具体定位数据
$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,,*10
表1.9——RMC数据格式
名称 | 举例 | 单位 | 说明 |
报文ID Message ID | $GPRMC | RMC报文头 | |
UTC坐标 UTC position | 161229.487 | hhmmss.sss | |
状态 Status | A | A=数据有效 V=数据无效 | |
纬度 Latitude | 3723.2475 | ddmm.mmmm | |
南北半球 N/S Indicator | N | N=北半球 S=南半球 | |
经度 Longitude | 12158.3416 | dddmm.mmmm | |
东西半球 E/W | W | E=东半球 W=西半球 | |
对地速度 Speed Over Ground | 0.13 | Knots(节) | |
对地航向 Course Over Ground | 309.62 | degrees | True |
日期 Date | 120598 | Ddmmyy | |
磁变 Magnetic Variation | degrees | E=east or W=west | |
Checksum | *10 | ||
<CR><LF> | 终止符 |
F. VTG –对地航向和对地速度
$GPVTG,309.62,T,,M,0.13,N,0,2,K*6E
表1.10——VGT格式
名称 | 举例 | 单位 | 说明 |
报文ID Message ID | $GPVTG | VTG 报文头 | |
航向 Course | 309.62 | degrees | 测量标题? Measured heading |
参照 Reference | T | True | |
航向 Course | degrees | 测量标题? Measured heading | |
参照 Reference | M | 地磁 Magnetic | |
速度 Speed | 0.13 | knots | 水平速度测量 Measured horizontal speed |
单位 Units | N | Knots | |
速度 Speed | 0.2 | km/hr | 水平速度测量 Measured horizontal speed |
单位 Units | K | kM/hr | |
校验 Checksum | *6E | ||
<CR><LF> | 终止符 |
2. NMEA 输入报文
NMEA输入报文提供了允许通过NMEA协议控制GPS的方法。
传输格式:
起始符 | 数据 | 校验码 | 终止符 |
$PSRF<MID>1 | DATA2 | *CKSUM3 | <CR><LF>4 |
1.起始符包含3个字节,从MID100开始(Message identifier consisting ofthree numeric characters. Input messages begin at MID 100.)。??????
2.具体数据,特定的数据序列<data>…<date>。
3.NMEA定义的校验是2个HEX的字符,适用于所有输入报文。
4.所有输入报文都以回车符(CR)和换行符<LF>结束,即\r\n,十六进制码为0D0A。因为\r\n是不可打印的ASCII字符,是示例字符串,但必须发送强制其作为输入报文的终止符。
输入报文SiRF:
报文 Message | 报文标识符(MID) Message Identifier(MID) | 说 明 Description |
设置串口 Set Serial Port | 100 | 设置口A参数和协议 Set port A parameters and protocol |
导航初始化 Navigation Initialization | 101 | 适用于以X/Y/Z 开始的参数Parameters required for start using X/Y/Z |
设置DGPS口 Set DGPS Port | 102 | 设置口B的用于DGPS输入的参数 Set PORT B paramaters for DGPS input |
查询/速率控制 Query/Rate Control | 103 | 查询标准的NMEA报文和设置输出速率 Query standard NMEA message and/or set output rate |
LLA 导航初始化 LLA Navigation Initialization | 104 | 适用于以Lat/Lon/Alt(输入必须与WGS84相匹配) 开始的参数 Parameters required for start using Lat/Lon/Alt (input coordinates must be WGS84) |
扩展数据开关 Development Data On/Off | 105 | 扩展数据开关 Development Data messages On/Off |
1、串口
这个命令用来设置通讯协议(SiRF或NMEA)和通讯参数(波特率、数据位、停止位、奇偶校验),每次接收到有效地设置,这些参数就存储在具有后备电池的SRAM中,GPS单元开始重启并应用这些参数。
表2.1——设置串口数据格式
名称 | 举例 | 单位 | 说明 |
报文ID Message ID | $PSRF100 | PSRF100报文头 PSRF100 protocol header | |
协议 Protocol | 0 | 0=RiRF二进制 1=NMEA 0=SiRF Binary 1=NMEA | |
波特率 Baud | 9600 | 4800, 9600, 19200, 38400 | |
数据位 Data bits | 8 | 8, 7 | |
停止位 Stop bits | 1 | 0, 1 | |
奇偶校验 Parity | 0 | 0=无,1=偶校验,2=奇校验 0=None, 1=Odd, 2=Even | |
校验码 Checksum | *0C | ||
<CR><LF> | 终止符 |
2、导航初始化
这个命令用于根据当前位置(XYZ坐标)初始化暖启动模式、时钟修正和时间,使GPS单元能根据正确的信号参数搜索正确的卫星信号,正确的初始化参数能保证GPS单元迅速的搜索到信号。
$PSRF101,-2686700,-4304200,3851624,95000,497260,921,12,3*22
表2.2——导航初始化数据格式
名称 | 举例 | 单位 | 说明 |
报文ID Message ID | $PSRF101 | PSRF101 protocol header | |
地心地固坐标X ECEF X | -2686700 | meters | X坐标位置 X coordinate position |
地心地固坐标Y ECEF Y | -4304200 | meters | Y坐标位置 Y coordinate position |
地心地固坐标Z ECEF Z | 3851624 | meters | Z坐标位置 Z coordinate position |
时钟补偿 ClkOffset | 95000 | Hz | GPS单元的时钟补偿(如果用上次存储有效的值则=0,如果无效将=默认值96000。) Clock Offset of GPS unit (use 0 for last saved value if available.If this in unavailable, a default value of 96,000 will be used) |
TimeOfWeek | 497260 | seconds | GPS Time Of Week |
WeekNo | 921 | GPS Week Number | |
通道数 ChannelCount | 12 | 范围1-12 Range 1 to 12 | |
复位配置 ResetCfg | 3 | 见表2.3 See table 2.3 | |
校验 Checksum | *22 | ||
<CR><LF> | 终止符 |
表2.3 – 复位配置
16进制 | 说明 |
0x01 | 数据有效——暖/热启动=1 Data Valid – Warm/Hot Starts=1 |
0x02 | 清除星历表——暖启动=1 Clear Ephemeris – Warm Start=1 |
0x04 | 清除存储器——冷启动=1 Clear Memory – Cold Start=1 |
3、设置DGPS口
这个命令控制串口B,串口B只能输入,用来接收RTCM差分修正,差分接收器根据差分修正参数能输出修正值,默认的口B差分通讯参数是9600波特率、8个数据位、1个停止位、无奇偶校验。如果DGPS接收器使用了差分通讯参数,这个命令将对数据进行正确的译码。每当接收到有效地报文,通讯参数将存储在具有后备电池的SRAM中,并且接收器重启以应用新参数。
$PSRF102,9600,8,1,0*3C
表2.4 –设置DGPS口数据格式
名称 | 举例 | 单位 | 说明 |
报文ID Message ID | $PSRF102 | PSRF102报文头 PSRF102 protocol header | |
波特率 Baud | 9600 | 4800, 9600, 19200, 38400 | |
数据位 Data bits | 8 | 8, 7 | |
停止位 Stop bits | 1 | 0, 1 | |
奇偶校验 Parity | 0 | 0=无,1=偶校验,2=奇校验 0=None, 1=Odd, 2=Even | |
校验码 Checksum | *3C | ||
<CR><LF> | 终止符 |
4、查询/速率控制
这个命令用来控制标准的NMEA报文GGA、GLL、GSA、GSV、RMC和VTG,使用这个命令NMEA标准报文将被戒掉一次或者设置成定期输出,校验码也将根据接收程序的需要置为有效或无效。NMEA报文设置将被存储在具有后备电池的存储器中
$PSRF103,00,01,00,01*25
表 2.5 –查询/速率控制数据格式
名称 | 举例 | 单位 | 说明 |
报文ID MessageID | $PSRF103 | PSRF103 报文头 PSRF103 protocol header | |
报文类型 Msg | 00 | 见表2.6 See table 2.6 | |
模式 Mode | 01 | 0=设置速率,1=查询 0=SetRate, 1=Query | |
速率 Rate | 00 | seconds | 输出——off=0,最大255 Output – off=0, max=255 |
校验有效性 CksumEnable | 01 | 0=校验失效,1=校验有效 0=Disable Checksum, 1=Enable Checksum | |
校验Checksum | *25 | ||
<CR><LF> | 终止符 |
表2.6 –报文类型
值 | 说明 |
0 | GGA |
1 | GLL |
2 | GSA |
3 | GSV |
4 | RMC |
5 | VTG |
5、LLA导航初始化
这个命令将根据当前位置(纬度、经度、高度)初始化暖启动模式、时钟修正和时间,根据正确的信号参数,能搜索到正确的卫星信号,正确地初始化参数能保证接收器迅速搜索到信号。
$PSRF104,37.3875111,-121.97232,0,95000,237759,922,12,3*3A
表2.7 – 导航初始化数据格式
名称 | 举例 | 单位 | 说明 |
报文ID Message ID | $PSRF104 | PSRF104报文头 PSRF104 protocol header | |
纬度 Lat | 37.3875111 | degrees | 纬度(90——-90) Latitude position (Range90 to –90) |
经度 Lon | -121.97232 | degrees | 经度(180——-180) Longitude position(Range 180 to –180) |
高度 Alt | 0 | meters | 高度 Altitude position |
时钟修正 ClkOffset | 95000 | Hz | GPS单元的时钟修正 Clock Offset of the GPS Unit |
TimeOfWeek | 237759 | seconds | GPS Time Of Week |
WeekNo | 922 | GPS Week Number | |
通道数 ChannelCount | 12 | 范围1——12 Range 1 to 12 | |
复位配置 ResetCfg | 3 | 见表2.8 See table 2.8 | |
校验码 Checksum | *3A | ||
<CR><LF> | 终止符 |
表2.8 –复位配置
16进制 | 说明 |
0x01 | 数据有效——暖/热启动=1 Data Valid – Warm/Hot Starts=1 |
0x02 | 清除星历表——暖启动=1 Clear Ephemeris – Warm Start=1 |
0x04 | 清除存储器——冷启动=1 Clear Memory – Cold Start=1 |
6、扩展开关
如果接受命令出现错误时,使用这个命令来获得扩展的数据信息,非法命令将产生错误信息,让用户确认命令失效的根源,通常输入命令失效原因在于非法的超出定义范围的校验码。
表2.9 –扩展数据开关报文格式
名称 | 举例 | 单位 | 说明 |
报文ID Message ID | $PSRF105 | PSRF105的报文头 PSRF105 protocol header | |
错误开关 Debug | 1 | 0=关闭,1=打开 0=Off, 1=On | |
校验码 Checksum | *3E | ||
<CR><LF> | 终止符 |