NMEA-0183协议详解
NMEA-0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式。目前业已成了GPS导航设备统一的RTCM(Radio Technical Commission for Maritime services )标准协议。
一.消息内容识别码
----+--------------+---+------------------------------------------+-----------------------
1. $GPGGA : 时间、位置、全球定位数据 最大帧长72
2. $GPGSA : 接收机模式和卫星PRN数据 最大帧长65
3. $GPGSV : 卫星状态信息 最大帧长210
4. $GPRMC : 速度、运输定位数据 最大帧长70
5. $GPVTG : 方位角与对地速度信息 最大帧长34
6. $GPGLL : 大地坐标信息
7. $GPZDA : UTC时间和日期
-----+--------------+----+----------------------------------------+-----------------------
△注释:发送次序$GPZDA ; $GPGGA ; $GPGLL ; $GPVTG ; $GPGSA ; $GPGSV*3 ; $GPRMC
协议帧总说明:
该协议采用ASCII码,其串行通信默认参数为:波特率=48000bps,数据位=8bit,开始位=1bit,停止位=1bit,无奇偶校验。
帧格式形如:$aaccc ,ddd ,ddd ,...... ,ddd*hh<CR><LF>
1、“$”——帧命令起始位
2、aaccc——地址域,前两位为识别符,后三位为语句名
3、ddd...ddd——数据
4、“*”——校验和前缀
5、hhh——校验和(check sum),$与*之间所有字符ASCII码的校验和(各字节做异或运算,得到校验和后,在转换16进制格式的ASCII字符。)
6、<CR><LF>——CR(Carriage Return)+ LF (Line Feed)帧结束,回车换行。
⑴ GPGGA
GPS固定数据输出语句,是一帧GPS定位的主要数据,也是使用最广的数据。
样例:
$GPGGA, 1661229.478 , 3723.2475 , N, 12158.3416 , W, 1 , 07 , 1.0 , 9.0 , M, 7.3 , M, , 0000*18
格式:
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>*<15><CR><LF>
解析:
$--GGA 消息ID, $GPGGA,GGA协议头。
<1> UTC时间,1661229.478, 格式为hhmmss.sss。
<2> 纬度, 3723.2475,格式:ddmm.mmmm(前导位数不足则补0)。
<3> N/S指示,纬度半球,N,格式:N或S(北纬或南纬)。
<4> 经度,12158.3416,格式:ddmm.mmmm(前导位数不足则补0)。
<5> E/W指示,经度半球,W,格式:E或W(东经或西经)。
<6> 定位质量指示,1, 0=定位无效, 1=定位有效。
<7> 可用卫星数目,07,范围:0~24(GPS+BDS)。
<8> HDOP(水平精确度),1.0,范围:0.5~99.9。
<9> 天线离海平面的高度,9.0,范围:-9999.9到9999.9米
<10> 高度单位,M,单位制 米。
<11> 大地椭球相对于海平面的高度,7.3,高程(海拔高度),范围:-999.9到9999.9米
<12> 高度单位,M,单位制 米。
<13> 差分GPS数据期限(RTCM SC-104),空格,最后设立RTCM传送的秒数量。
<14> 差分参考基站标号ID,0000,从0000到1023(前导位数不足则补0)。
<15> 校验和 ,*18
<CR><LF> 回车换行将消息结束。
⑵ GPGSA
接收机模式和卫星工作数据,包括位置和水平/竖直稀度精度等。
样例:
$GPGSA, A , 3 , 07 , 02 , 26 , 27 , 09 , 04 , 15 , , , , , , 1.8 , 1.0 , 1.5*33
格式:
$GPGSA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>,<16>,<17>*<18><CR><LF>
解析:
$--GSA 消息ID, $GPGSA,GSA协议头。
<1> 模式1:A,M = 手动, A = 自动。
<2> 模式2:3,定位型式1 = 未定位,2 = 二维定位, 3 = 三维定位。
<3> 第1信道正在使用的卫星PRN码编07,(Pseudo Random Noise,伪随机噪声码),01至32(前导位数不足则补0,最多可接收12颗卫星信息)。
<4> 第2信道正在使用的卫星PRN码编号02
<5> 第3信道正在使用的卫星PRN码编号26
<6> 第4信道正在使用的卫星PRN码编号27
<7> 第5信道正在使用的卫星PRN码编号 09
<8> 第6信道正在使用的卫星PRN码编号 04
<9> 第7信道正在使用的卫星PRN码编号 15
<10> 第8信道正在使用的卫星PRN码编号 .
<11> 第9信道正在使用的卫星PRN码编号 .
<12> 第10信道正在使用的卫星PRN码编号 .
<13> 第11信道正在使用的卫星PRN码编号 .
<14> 第12信道正在使用的卫星PRN码编号 .
<15> PDOP综合位置精度因子 1.8,(0.5 -- 99.9)
<16> HDOP水平精度因子 1.0, (0.5 -- 99.9)
<17> VDOP 垂直精度因子 1.5 ,(0.5 -- 99.9)
<18> 校验和
<CR><LF> 回车换行将消息结束。
⑶ GPGSV
可视卫星状态输出语句(接收机能接收到的卫星信息,包括卫星ID,仰角,方位角,信噪比(SNR)等)
样例:
①.$GPGSV, 2, 1, 07, 07, 79, 048, 42, 02, 51, 062, 43, 26, 36, 256, 42, 27, 27, 138, 42*71
②.$GPGSV, 2, 2, 07, 09, 23, 313, 42, 04, 19, 159, 41, 15, 12, 041, 42*41
格式:
$GPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,...,<4>,<5>,<6>,<7>*<8> <CR><LF>
△注释:需要注意的是这里的样例数据有2条,这是因为当前可见卫星一共有7个,但是每条语句最多包括四颗卫星的信息,所以分成了2条语句。每颗卫星的信息有四个数据项,即:<4>(卫星编号)、<5>(卫星仰角)、<6>(卫星方位角)、<7>(信噪比)。
解析:
$--GSV 消息ID, $GPGSV,GSV协议头。
<1> 本次GSV语句的总数目,2, 范围:1 -- 3
<2> 当前GSV语句序号,1 , 范围:1 -- 3
<3> 当前可见卫星总数,07, 范围:00 -- 12
<4> 卫星PRN码编号,07, 范围:01 -- 32
<5> 卫星仰角, 79, 范围:00 -- 90
<6> 卫星方位角,048, 范围:000 -- 359
<7> 信噪比,42,dbHz, 范围:00 --99
--------------------------------------------+-----------------------------
<4> 卫星PRN码编号,02, 范围:01 -- 32
<5> 卫星仰角, 51, 范围:00 -- 90
<6> 卫星方位角,062, 范围:000 -- 359
<7> 信噪比,43,dbHz, 范围:00 --99
--------------------------------------------+-----------------------------
<4> 卫星PRN码编号,26, 范围:01 -- 32
<5> 卫星仰角, 36, 范围:00 -- 90
<6> 卫星方位角,256, 范围:000 -- 359
<7> 信噪比,42,dbHz, 范围:00 --99
--------------------------------------------+-----------------------------
<4> 卫星PRN码编号,27, 范围:01 -- 32
<5> 卫星仰角, 27, 范围:00 -- 90
<6> 卫星方位角,138, 范围:000 -- 359
<7> 信噪比,42,dbHz, 范围:00 --99
<8> 校验和 ,71
<CR><LF> 回车换行将消息结束。
⑷ GPRMC
推荐最小数据量的GPS信息(Recommended Minimum Specific GPS/TRANSIT Data)
样例:
$GPRMC, 161229.487 , A , 3723.2475 , N , 12158.3416 , W , 0.13 , 309.62 , 120598 , , ,A*10
格式:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*<13><CR><LF>
解析:
$--RMC 消息ID, $GPRMC,RMC协议头。
<1> 定位点的UTC时间,161229.487,格式:hhmmss.sss
<2> 定位状态 ,A, A = 定位,V = 导航
<3> 纬度, 3723.2475,格式:ddmm.mmmm
<4> 纬度方向, N, N = 北纬;S = 南纬
<5> 经度, 12158.3416,格式:dddmm.mmmm
<6> 经度方向,W, W = 西经;E = 东经
<7> 对地航速,0.13,Knots,范围:000.0 -- 999.9 ,1Knot(节)=1852米/时
<8> 对地航向,309.62,度,范围:000.0 -- 359.9,以真北为参考基准。
<9> 定位点的UTC日期,120598,格式:ddmmyy(日月年)
<10> 磁偏角, (000.0 -- 180.0度,前面的0也将被传输)
<11> 磁偏角方向, E(东)或W(西)
<12> 模式指示,A(仅NMEA-0183 3.0版本以上输出,A=自主定位,D=差分,E=估算,N=无效数据)
<13> 校验和 ,*10
<CR><LF> 回车换行将消息结束。
⑸ GPVTG
地面速度信息(Track Made Good and Ground Speed)
样例:
$GPVTG, 309.62 , T , , M , 0.13 , N , 0.2 , K, A*6E
格式:
$GPVTG,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>*<10><CR><LF>
解析:
$--VTG 消息ID, $GPVTG,VTG协议头。
<1> 对地航向 ,309.62,度,以真北为参考基准,二维方向指向,相当于二维罗盘
<2> 参考方向,T, 真北参考系
<3> 磁偏角, 度,
<4> 参考方向,M,磁北参考系
<5> 对地航速,0.13,Knots,范围:000.0 -- 999.9
<6> 单位, N, 表示:节,Knots
<7> 水平运动速度, 0.2
<8> 单位, K, 表示:公里/时,km/h
<9> 模式指示, A, A=自主定位,D=差分,E=估计,N=数据无效
<10> 校验和 ,*6E
<CR><LF> 回车换行将消息结束。
⑹ GPGLL
地理定位信息(Geographic Position)
样例:
$GPGLL, 3723.2475 , N , 12158.3416 , W , 161229.487 , A*2C
格式:
$GPGLL,<1>,<2>,<3>,<4>,<5>,<6>*<7><CR><LF>
解析:
$--GLL 消息ID, $GPGLL,GLL协议头。
<1> 纬度, 3723.2475,格式:ddmm.mmmm
<2> 纬度方向, N, N = 北纬;S = 南纬
<3> 经度, 12158.3416,格式:dddmm.mmmm
<4> 经度方向,W, W = 西经;E = 东经
<5> 定位点的UTC时间,161229.487,格式:hhmmss.sss
<6> 数据状态,A, A=定位数据有效,V=定位数据无效
<7> 校验和 ,*2C
<CR><LF> 回车换行将消息结束。