本文主要是介绍NMEA-0183协议介绍以及常见报文解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
介绍
NMEA 协议是一种用于海上和航空领域的数据通信协议。它的全称是 National Marine Electronics Association (美国国家海洋电子协会),是一种标准化的数据格式,用于传输位置、速度、时间等信息。在船舶导航和 GPS 接收器中经常使用 NMEA 协议来实现设备之间的数据交换和通信。NMEA 协议最常见的是 0183 版本,除此还有其他版本:
1. NMEA 0183: 这是最常见和广泛使用的NMEA协议版本,定义了一系列标准数据格式,用于在不同海洋电子设备之间进行数据交换,如GPS接收器、雷达、自动驾驶系统等。2. NMEA 2000: 这是 NMEA 协议的更新版本,也称为 NMEA 2000,采用基于控制器局域网(CAN)的通信协议,提供更高的数据传输速度和更好的可靠性,用于连接船舶上的各种电子设备。3. NMEA 0183 HS: 这是NMEA 0183协议的高速版本,用于支持更快的数据传输速度,适用于需要更高精度和更快更新率的应用。
本文主讲 NMEA 0183 版本,0183协议有多个版本包括 V1.0、V1.5、V2.0、V3.0 和最新的 V4.11 ,等等,协议向前兼容。
由于未找到 4.11 版本,本文主要讲 4.10 版本,协议结构来源参考英文原版《NMEA 0183-Standard for Interfacing Marine Electronic Devices(June 2012 VERSION 4.10)》。
本文主要介绍整体的协议结构组成和常见的 NMEA 报文,NMEA 还包含了其他大量的报文格式,但相对都少用,有兴趣的可以去看原版协议。
帧格式和分类
协议帧说明
$aaccc ,ddd ,ddd ,...... ,ddd*hh<CR><LF>1、“$”——帧命令起始位
2、aaccc——地址域,前两位为识别符,后三位为语句名
3、ddd...ddd——数据
4、“*”——校验和前缀
5、hh——校验和(check sum),$与*之间所有字符ASCII码的校验和(各字节做异或运算,得到校验和后,在转换16进制格式的ASCII字符。)
6、<CR><LF>——CR(Carriage Return)+ LF (Line Feed)帧结束,回车换行。
NMEA 协议可以分为通用语句和专用语句。
分类-通用语句
通用语句包括:GGA、RMC、GSV、GSA、VTG、GLL、ZDA 、TXT 等,GPS 系统还含有一些未在此列出的其它信号,这里不多做列举。
通用语句还需要加上所使用的定位系统前缀,具体如下表:
GNSS 系统 | GNSS系统发送器标识(NMEA3.01) | GNSS系统发送器标识(V4.1) |
---|---|---|
Galileo | GA | GA |
BeiDou | BD | GB |
GPS | GP | GP |
QZSS | GP | GQ |
NAVIC | IR | GI |
GLONASS | GL | GL |
Combination of Multiple Satellite Systems | GN | GN |
分类-专用语句
专用语句是各个接收机生产商自定义的语句,以$P开头,如$PSTM、$PMTK、$PQ
等。
$PMTK104*37
$PQEPE,W,1,1*2A
本文只介绍通用的语句,下面对几个常见的语句进行解析介绍。
GGA-GPS定位信息
GGA(Global Positioning System Fix Data)GPS 定位信息,格式如下:
$XXGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>
<1> UTC 时间,hhmmss(时分秒)格式,和北京时间差 8 个小时。
<2> 纬度 ddmm. mmmm(度分)格式(前面的 0 也将被传输)
<3> 纬度半球 N(北半球)或 S(南半球)
<4> 经度 dddmm. mmmm(度分)格式(前面的 0 也将被传输)
<5> 经度半球 E(东经)或 W(西经)
<6> GPS 状态:0=未定位,1=单点定位,2=SBAS 差分定位,4=RTK 固定解,5=RTK 浮点解,6=惯导定位,7=手动输入模式,8=模拟模式
<7> 正在使用解算位置的卫星数量(00~12)(前面的 0 也将被传输)
<8> HDOP 水平精度因子(0.5~99.9)
<9> 海拔高度(-9999.9~99999.9)M :单位,米
<10> 地球椭球面相对大地水准面的高度M :单位,米
<11> 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
<12> 差分站 ID 号 0000~1023(前面的 0 也将被传输,如果不是差分定位将为空)
例子:
$GPGGA,1661229.478,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,7.3,M,,0000*18
RMC-推荐定位信息
RMC(Recommended Minimum Specific GNSS Data)推荐定位信息,4.10 相比 3.0增加<13>导航状态标识字段,具体格式如下:
// 3.0
$XXRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
// 4.1
$XXRMC,<1>,<2>,<3>,<4
这篇关于NMEA-0183协议介绍以及常见报文解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!