NMEA-0183协议介绍以及常见报文解析

2024-03-12 04:44

本文主要是介绍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)
GalileoGAGA
BeiDouBDGB
GPSGPGP
QZSSGPGQ
NAVICIRGI
GLONASSGLGL
Combination of Multiple Satellite SystemsGNGN

分类-专用语句

专用语句是各个接收机生产商自定义的语句,以$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协议介绍以及常见报文解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/800170

相关文章

使用EasyExcel实现简单的Excel表格解析操作

《使用EasyExcel实现简单的Excel表格解析操作》:本文主要介绍如何使用EasyExcel完成简单的表格解析操作,同时实现了大量数据情况下数据的分次批量入库,并记录每条数据入库的状态,感兴... 目录前言固定模板及表数据格式的解析实现Excel模板内容对应的实体类实现AnalysisEventLis

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

IDEA与JDK、Maven安装配置完整步骤解析

《IDEA与JDK、Maven安装配置完整步骤解析》:本文主要介绍如何安装和配置IDE(IntelliJIDEA),包括IDE的安装步骤、JDK的下载与配置、Maven的安装与配置,以及如何在I... 目录1. IDE安装步骤2.配置操作步骤3. JDK配置下载JDK配置JDK环境变量4. Maven配置下

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1