NMEA0183 协议

合集下载

NMEA0183协议

NMEA0183协议

NMEA0183协议
NMEA0183协议使用ASCII字符以串行方式传输数据。

每个数据帧由
一个起始字符“$”开始,后跟一个标识符字段,表示数据的类型,例如GPS数据、方位数据或速度数据。

“$”和标识符之间使用逗号分隔。


据字段之间也使用逗号分隔。

数据帧以回车符和换行符(CR/LF)结尾。

NMEA0183协议还支持一些控制语句,用于设备之间的通信和配置。

例如,GSA语句用于选择导航模式(自动、手动或二维/三维模式)和可
见卫星的PRN(伪随机噪声)码号。

GST语句用于配置GPS设备的系统设
置和状态。

NMEA0183协议的优点是其简单性和广泛的兼容性。

几乎所有的导航
设备和GPS接收器都支持该协议,并且可以轻松地与其他设备进行通信。

此外,它的ASCII字符格式使得数据可以轻松地通过串口传输,方便于数
据的记录和分析。

然而,NMEA 0183协议也存在一些缺点。

首先,它的数据传输速率相
对较低,通常为4800 bps(比特每秒),限制了数据的实时性和精度。

其次,由于数据格式的限制,它无法传输大量的数据或复杂的信息。

最后,由于协议的老化和限制,它逐渐被更先进的协议,如NMEA 2000所取代。

总之,虽然NMEA0183协议在GPS和导航领域依然很常见且有很多实
际应用,但它也存在一些局限性。

随着技术的发展和需求的变化,新的协
议和标准将逐渐取代NMEA0183,为GPS和导航设备的互操作性和数据传
输提供更好的解决方案。

NMEA0183 协议

NMEA0183 协议

NMEA0183 协议NMEA0183协议一、引言NMEA0183协议是一种用于海洋和航空导航设备之间进行数据交换的标准协议。

该协议定义了数据格式、数据内容和数据传输方式,以确保不同设备之间的数据交换的一致性和互操作性。

本协议旨在提供一种通用的数据交换标准,以便不同厂商的设备可以相互通信和交换信息。

二、范围本协议适用于所有符合NMEA0183协议标准的设备,包括但不限于GPS接收器、导航设备、自动驾驶仪、雷达、声纳等。

三、术语和定义3.1 NMEA0183协议:指本协议的标准规范。

3.2 数据帧:指按照NMEA0183协议规定格式组织的数据单元。

3.3 数据字段:指数据帧中的一个数据单元,用于表示特定的数据内容。

3.4 数据标识:指数据帧中用于标识数据类型的字段。

3.5 数据内容:指数据帧中存储的实际数据。

四、数据格式4.1 数据帧结构数据帧由美国国家海洋电子协会(NMEA)定义,采用ASCII字符编码。

数据帧的基本结构如下:$数据标识,数据字段1,数据字段2,...,数据字段n*校验和<回车><换行>其中,$表示数据帧的起始符,数据标识用于标识数据类型,数据字段用于存储实际数据,校验和用于验证数据的完整性。

4.2 数据标识数据标识用于标识数据帧的类型,以便接收设备正确解析数据。

数据标识由两个字母组成,例如GP表示GPS数据,GL表示GLONASS数据,GA表示伽利略数据等。

4.3 数据字段数据字段用于存储实际数据,每个数据字段由逗号分隔。

数据字段的内容根据具体数据类型而定,例如位置信息包括纬度、经度、海拔等。

4.4 校验和校验和用于验证数据的完整性,采用异或运算计算得到。

校验和位于数据字段之后,由一个星号和两个十六进制字符组成。

五、数据内容5.1 位置信息位置信息用于表示设备所在的地理位置,包括纬度、经度、海拔等。

纬度和经度使用度分秒格式表示,海拔使用米为单位。

5.2 时间信息时间信息用于表示设备接收到信号的时间,采用UTC(协调世界时)格式表示。

NMEA0183 协议

NMEA0183 协议

NMEA0183 协议NMEA0183协议1. 引言NMEA0183协议是一种用于传输船舶和导航设备之间信息的通信协议。

该协议定义了一系列数据格式和通信规则,以确保不同设备之间的数据交换的一致性和可靠性。

本协议旨在提供一个标准化的数据交换方式,以便各种船舶和导航设备能够相互通信和共享信息。

2. 范围本协议适用于所有支持NMEA0183协议的船舶和导航设备。

它涵盖了数据格式、通信接口、数据传输速率以及错误处理等方面的要求。

3. 数据格式NMEA0183协议使用ASCII字符集,并定义了一种特定的数据格式。

每条数据以'$'字符开始,以回车换行符'\r\n'结束。

数据包括消息ID、数据字段和校验和。

消息ID标识了数据的类型,数据字段包含了具体的信息,而校验和用于验证数据的完整性。

4. 消息类型NMEA0183协议定义了一系列消息类型,包括位置信息、速度信息、方向信息、时间信息等。

每种消息类型都有特定的消息ID和数据字段格式。

例如,位置信息消息的ID为"$GPGGA",数据字段包括纬度、经度、海拔高度等。

5. 通信接口NMEA0183协议支持多种通信接口,包括串口、USB、以太网等。

设备之间通过这些接口进行数据交换。

每个接口都有特定的电气特性和物理连接要求,以确保数据的可靠传输。

6. 数据传输速率NMEA0183协议规定了数据传输速率的范围。

设备之间需要在同一速率下进行通信,以避免数据丢失或混乱。

常见的数据传输速率包括4800bps、9600bps、38400bps等。

7. 错误处理NMEA0183协议定义了一套错误处理机制,以确保数据的完整性和准确性。

当接收到错误数据时,设备应该忽略该数据,并进行错误处理。

错误处理方式包括重新请求数据、发送错误消息等。

8. 兼容性NMEA0183协议具有良好的兼容性,可以与不同厂商和型号的设备进行通信。

设备之间应该遵循协议规定的数据格式和通信规则,以确保数据的互通性和一致性。

NMEA0183协议说明

NMEA0183协议说明

NMEA0183协议说明NMEA0183是一种用于航海导航设备之间进行数据传输的标准协议。

它最初是由国际电气和电子工程师协会(IEEE)于1983年制定的,旨在使不同品牌和类型的设备能够进行互联,并以一致的格式和规范交换数据。

NMEA0183协议主要是通过串行通信进行数据传输。

在传输过程中,数据以ASCII字符形式进行编码,并通过串行连接的导航设备之间以特定的速率进行传输。

这一协议支持全双工通信,即设备可以同时发送和接收数据。

除了定位数据,NMEA0183协议还定义了其他常见的数据格式。

例如,$GPGLL格式用于传输经纬度信息;$GPRMC格式用于传输推荐最佳航线信息;$GPVTG格式用于传输船舶或车辆的速度和航向信息等。

NMEA0183协议还提供了一套校验机制以确保数据传输的准确性。

在数据的结尾,“*”之后会跟随一个校验和。

校验和是通过对数据中每个字符进行异或运算得到的。

接收方在接收到数据后,会重新计算校验和,然后将其与接收到的校验和进行比较,以判断数据是否传输正确。

NMEA0183协议已经成为了航海导航领域中最常用的数据交换标准之一、它具有广泛的适用性,并且被几乎所有的GPS接收器和导航设备所支持。

因此,在现代航海导航领域中,几乎可以使用NMEA0183协议进行数据的传输和交换。

总结起来,NMEA0183协议是一种用于航海导航设备之间进行数据传输的标准协议。

通过串行通信,设备可以以ASCII字符形式进行数据的编码和传输。

协议定义了一系列数据格式,包括位置信息、速度、航向、时间、日期等。

校验机制确保了数据的准确性。

NMEA0183协议广泛应用于航海导航领域,并且被几乎所有的GPS接收器和导航设备所支持。

NMEA0183 协议

NMEA0183 协议

NMEA0183 协议NMEA0183协议一、引言NMEA0183协议是一种用于航海和船舶导航设备之间进行数据交换的通信协议。

该协议定义了数据格式、语句结构和通信规则,旨在实现不同设备之间的互操作性和数据共享。

本协议旨在确保数据的准确性、一致性和可靠性,以提高航海安全和导航效率。

二、术语和定义1. NMEA:National Marine Electronics Association,美国国家海洋电子协会。

2. 数据帧:NMEA0183协议中的数据传输单位,由起始字符、数据字段和结束字符组成。

3. 语句:由数据帧组成的完整数据包,包含特定的数据类型和信息。

4. 起始字符:数据帧的第一个字符,用于标识数据帧的开始。

5. 数据字段:数据帧中包含的具体数据,根据数据类型和信息的不同而有所变化。

6. 结束字符:数据帧的最后一个字符,用于标识数据帧的结束。

三、协议规范1. 数据格式a. NMEA0183协议使用ASCII字符集进行数据传输。

b. 数据帧由起始字符、数据字段和结束字符组成,每个字段之间使用逗号分隔。

c. 数据字段可以是数字、字母或特殊字符的组合,根据数据类型和信息的不同而有所变化。

d. 数据帧的最大长度为82个字符,包括起始字符、数据字段、逗号和结束字符。

2. 数据语句a. NMEA0183协议定义了多种语句类型,用于传输不同类型的数据。

b. 每个语句以'$'字符作为起始字符,以回车换行符(CR/LF)作为结束字符。

c. 语句中的数据字段按照特定的顺序排列,每个字段的含义由协议规定。

d. 语句的类型由语句标识符(Sentence Identifier)确定,标识符通常由两个字符组成。

3. 数据校验a. 为了确保数据的完整性和准确性,NMEA0183协议使用校验和机制。

b. 校验和是一个两位的十六进制数,表示数据帧中所有字符的异或值。

c. 校验和紧跟在数据字段的结束字符之后,以'*'字符开始,后跟两位十六进制数。

nmea0183协议

nmea0183协议

NMEA0183协议1. 简介NMEA0183协议是一种用于海洋电子设备之间通信的标准协议。

它定义了一套规范,描述了数据的格式、交换方式和通信协议等内容。

NMEA0183协议广泛应用于航海、渔业、航空等领域,被许多设备制造商所采用。

2. NMEA0183协议的结构NMEA0183协议使用ASCII码表示数据,每个数据字段以逗号分隔。

一个完整的数据称为一条语句(Sentence),一条语句包含一个开始字符“$”、数据字段、星号和校验值。

数据字段的顺序是确定的,不同的语句类型有不同的数据字段。

3. 常用的NMEA0183语句3.1 GGA语句GGA语句(Global Positioning System Fix Data)提供了位置信息。

它包含了接收器的经度、纬度、海拔高度等数据。

GGA语句示例:$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*473.2 RMC语句RMC语句(Recommended Minimum Specific GNSS Data)提供了位置、速度和时间等数据。

它包含了接收器的经度、纬度、速度、航向等信息。

RMC语句示例:$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A3.3 VTG语句VTG语句(Course Over Ground and Ground Speed)提供了航向和地速信息。

它包含了接收器的航向、地速和速度单位等数据。

VTG语句示例:$GPVTG,054.7,T,034.4,M,005.5,N,010.2,K*483.4 GSA语句GSA语句(GNSS DOP and Active Satellites)提供了卫星状态和定位精度因子等信息。

它包含了接收器使用的卫星编号、定位精度因子和卫星信号强度等数据。

NMEA0183 协议

NMEA0183 协议

NMEA0183 协议NMEA0183协议一、引言NMEA0183协议是一种用于电子设备之间进行数据通信的标准协议。

该协议定义了数据格式、传输方式和通信规则,使得不同设备能够相互交换和解析数据。

本协议旨在确保设备之间的数据交换具有一致性和互操作性。

二、协议版本当前的NMEA0183协议版本为1.5。

本协议的所有规范和要求适用于该版本。

三、协议结构NMEA0183协议的数据格式采用ASCII码,每条数据以'$'字符开头,以回车换行符(CR/LF)结尾。

每条数据包含以下几个部分:1. 数据类型标识符:用于标识数据的类型,由两个字母组成,例如:GP(全球定位系统)、GL(GLONASS卫星导航系统)等。

2. 数据字段:包含了具体的数据信息,字段之间以逗号分隔。

3. 校验和:用于验证数据的完整性,以'*'字符开头,后跟两个十六进制数字。

四、数据类型NMEA0183协议定义了多种数据类型,包括但不限于以下几种:1. GGA(全球定位系统定位数据):提供了位置、时间和定位质量指示等信息。

2. RMC(推荐最小定位数据):提供了位置、速度和航向等信息。

3. GSA(GNSS DOP and Active Satellites):提供了卫星信息和定位精度因子等。

4. GSV(GNSS Satellites in View):提供了可见卫星的信息。

5. VTG(Course Over Ground and Ground Speed):提供了地面航向和速度等信息。

五、数据字段每种数据类型都包含一系列数据字段,字段的顺序和数量根据具体的数据类型而定。

以下是一些常见的数据字段:1. UTC时间:格式为HHMMSS.SSS。

2. 纬度:格式为ddmm.mmmm,其中dd表示度,mm.mmmm表示分钟。

3. 经度:格式为dddmm.mmmm,其中ddd表示度,mm.mmmm表示分钟。

4. 定位质量指示:表示定位的质量,例如0表示无效定位,1表示GPS定位,2表示DGPS定位等。

NMEA0183 协议

NMEA0183 协议

NMEA0183 协议NMEA0183协议一、引言NMEA0183协议是一种用于海洋电子设备之间通信的标准协议。

该协议定义了一系列语句格式,用于传输位置、导航、时间、气象等信息。

本协议旨在确保不同设备能够互相通信,并保证数据的准确性和一致性。

二、范围本协议适用于所有使用NMEA0183协议进行数据传输的设备和系统。

三、术语和定义1. NMEA:National Marine Electronics Association的缩写,意为“全国海洋电子协会”。

2. 语句:指符合NMEA0183协议定义的数据格式。

3. 发送器:指负责将数据发送到总线上的设备。

4. 接收器:指负责接收总线上的数据的设备。

四、协议规范1. 语句格式(1) 每个语句以"$"符号开头,以回车符和换行符"\r\n"结尾。

(2) 语句由逗号分隔的字段组成,字段之间不含空格。

(3) 第一个字段为语句类型标识,用于识别语句的类型。

(4) 最后一个字段为校验和,用于验证语句的完整性。

2. 语句类型(1) GGA:全球定位系统定位数据(2) GLL:地理定位信息(3) GSA:GNSS接收器操作模式、精度和可见卫星信息(4) GSV:可见卫星状态信息(5) RMC:推荐最小定位信息(6) VTG:地面速度信息(7) ZDA:时间和日期信息3. 字段定义(1) GGA语句字段:- UTC时间- 经度- 纬度- 定位质量指示- 使用卫星数量- HDOP(水平精度因子)- 天线离海平面的高度- 大地水准面的高度差- 差分GPS数据期限(2) GLL语句字段:- 纬度- 纬度半球- 经度- 经度半球- UTC时间- 定位模式指示(3) GSA语句字段:- 操作模式- 精度- 使用卫星PRN号- PDOP(位置精度因子) - HDOP(水平精度因子) - VDOP(垂直精度因子) (4) GSV语句字段:- 可见卫星总数- 卫星PRN号- 仰角- 方位角(5) RMC语句字段:- UTC时间- 定位状态- 纬度- 纬度半球- 经度- 经度半球- 地面速度(节)- 地面航向(度)- UTC日期- 磁偏角- 磁偏角方向(6) VTG语句字段:- 地面航向(度)- 地面航向修正(度) - 地面速度(节)- 地面速度修正(节) (7) ZDA语句字段:- 日期- 本地时区小时偏移量- 本地时区分钟偏移量4. 校验和计算(1) 校验和字段为一个字节,采用十六进制表示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GNSS NMEA 0813标准数据格式的解释和模拟廖永生梁绕(广西第一测绘院广西南宁530023)【摘要】对NMEA 0183格式的定位数据进行解释和数据模拟,为开发GNSS应用服务系统作了基础性研究,可作为未来GNSS各应用系统开发参考。

【关键词】NMEA 0183 GNSS数据解释模拟1 前言GNSS导航定位技术是目前应用得最广泛的空间定位技术之一,已被广泛应用于空间信息数据采集和服务等各个方面。

随着各地区域性CORS(Continously Operation Reference System)建成,差分GPS定位服务得到了不断深化。

随着GLONASS的完善和Galileo卫星导航定位系统的建成,GNSS导航定位技术将更加普及,将会对各行各业都产生重大影响。

数据格式问题一直是GNSS相关服务中的难题,特别是差分GNSS数据和静态GNSS数据格式之间的差异使普通GPS设备无法直接获得专业差分服务。

数据格式标准的统一,是实现GNSS相关服务的基础。

目前最通用的GNSS格式是NMEA 0183格式,NMEA 0183是最终定位格式,即将二进制定位格式转为统一标准定位格式,与卫星类型无关。

掌握NMEA 0183格式,对于推广GNSS应用服务和研究GNSS相关技术具有重要意义。

本文将对NMEA 0183格式进行概括说明,同时采用程序模拟NMEA 0183格式,作为NMEA 0183标准格式的技术探索。

2 NMEA 0183协议概述NMEA是“National Marine Electronics Association”(国际海洋电子协会)的缩写,同时也是数据传输标准工业协会,该协会定制的GNSS数据格式是NMEA 0183数据格式,它是一套定义接收机输出的标准信息,有几种不同的格式,每种都是独立相关的ASCII格式,逗点隔开数据流,数据流长度从30-100字符不等,通常以每秒间隔选择输出。

最常用的格式为“GGA”,它包含了定位时间、纬度、经度、高度、定位所用的卫星数、DOP值、差分状态和校正时段等,还有速度,跟踪,日期等。

GPS接收机根据NMEA 0183协议的标准规范,将位置、速度等信息通过串口传送到PC机、PDA等设备。

NMEA 实际上已成为所有的GNSS接收机和最通用的数据输出格式,同时它也被用于与GNSS接收机接口的大多数软件包里。

NMEA-0183协议是GNSS接收机应当遵守的标准协议,也是目前GPS接收机上使用最广泛的协议,大多数常见的GNSS接收机、GNSS数据处理软件、导航软件都遵守或者至少兼容这个协议。

3 NMEA 0183用途和结构NMEA 0813格式与专业RTCM2.3/3.0和CMR+的GNSS数据格式不同,NMEA 0813格式主要针对民用定位导航设备,通过NMEA 0183格式,可以实现GNSS接收机与PC或PDA之间的数据交换,可以通过USB和COM口等通用数据接口进行数据传输,其兼容性高,数据传输稳定。

同时NMEA 0183可以作为民用差分GPS服务解算基础数据,通过CORS参考站和GPRS/CDMA公网通讯,直接接收NMEA 0183兼容格式的差分信息,实现一般差分GNSS服务。

NMEA最基本的使用方式如图1所示。

图1 NMEA 0183格式基本使用途径目前以NMEA 0183为基础的服务正在应用于车辆导航、船只入港等方面的应用研究。

该研究将极大普及差分GPS的应用推广,同时扩大CORS的应用范围。

4 NMEA协议的语句NMEA-0183协议定义的语句非常多,但是常用的或者说兼容性最广的语句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等。

NMEA-0183 的每条语句的格式如下表1所示。

表1 NMEA协议语句格式定义不同的GPSOEM接收板提供的NMEA语句有很大差异,主要表现在字段的意义和位置上。

用户需要先弄清楚需要哪些信息,然后对照GPS OEM接收板的技术资料,寻找那些包括所需信息的NMEA语句。

下面将介绍兼容性最广泛的6条NMEA语句(1)$GPGGA语句Global Positioning System Fix Data(GGA),即GPS定位信息。

该语句中反映GPS定位主要数据,包括经纬度、质量因子、HDOP、高程、参考站号等字段。

其标准格式如下:$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF> 各字段的含义和取值范围见表2所示。

表2 $GPGGA语句各字段的含义和取值范围例句:$GPGGA,074529.82,2429.6717,N,11804.6973,E,1,8,1.098,42.110,M,,M,,*76(2)$GPGSA语句GPS DOP and Active Satellites(GSA)即当前卫星信息,其标准格式如下:$GPGSA,<1>,<2>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<4>,<5>,<6>*hh<CR><LF> 各字段的含义和取值范围见表3所示。

表3 $GPGSA语句各字段的含义和取值范围例句:$GPGSA,A,3,19,11,03,23,27,13,16,,,,,,3.43,1.67,2.99*0E(3)$GPGSV语句GPS Satellites in View(GSV)可见卫星信息,反映GPS可见星的方位角、俯仰角、信噪比等。

其标准格式如下:$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,…<4>,<5>,<6>,<7>*hh<CR><LF>各字段的含义和取值范围见表4所示。

表4 $GPGSV语句各字段的含义和取值范围注:<4>,<5>,<6>,<7>信息将按照每颗卫星进行循环显示,每条GSV语句最多可以显示4颗卫星的信息。

其他卫星信息将在下一序列的NMEA0183语句中输出。

例句:$GPGSV,3,1,11,1,83,54,32,3,19,192,28,6,26,57,36,7,51,140,37*7D$GPGSV,3,2,11,14,40,136,34,16,64,266,36,20,21,293,,22,2,168,*4C$GPGSV,3,3,11,23,10,321,,25,53,7,40,30,2,46,*48(4)$GPRMC 语句Recommended Minimum Specific GPS/TRANSIT Data(RMC),即推荐定位信息。

其标准格式如下:$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>各字段的含义和取值范围见表5所示。

表5 $GPRMC语句各字段的含义和取值范围例句:$GPRMC,074529.82,A,2429.6717,N,11804.6973,E,12.623,32.122,010806,,W,A*08 (5)$GPVTG 语句Track Made Good and Ground Speed(VTG),即地面速度信息。

其标准格式为:$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh<CR><LF>各字段的含义和取值范围见表6所示。

表6 $GPVTG 语句各字段的含义和取值范围例句:$GPVTG,257.314,T,257.314,M,10.739,N,19.888,K,A*2F(6)$GPGLL语句Geographic Position(GLL),即定位地理信息。

其标准格式如下:$GPGLL,<1>,<2>,<3>,<4>,<5>,<6>,<7>*hh<CR><LF>各字段的含义和取值范围见表7所示。

表7 $GPGLL语句各字段的含义和取值范围5 NMEA 0183数据模拟该源代码为VC++源代码,是对一个模拟NMEA数据的类的定义。

struct CNmeaData{CNmeaData ();void ResetData ();// Data retrieved from the NMEA sentences.double lat;// 纬度,单位为度(正数为北纬,负数为南纬)double lon;// 经度,单位为度(正数为东经,负数为西经)double altitude;// 海拔高度,米double speed;// 速度,节double track;//追踪卫星高度角,度double magVariation;// 磁偏角,度double hdop;// HDOP值int numSats; // 追踪卫星数int UTCYear;// UTC年int UTCMonth;// UTC月int UTCDay;// UTC日int UTCHour;// UTC时int UTCMinute;// UTC分int UTCSecond;// UTC秒CSatData satData[MAC_SATS];// 卫星锁定数:// 0 = 无效,1 = 卫星锁定, 2 = DGPS状态GPS_FIX_QUALITY lastFixQuality;// 有效卫星数bool isValidLat;// 纬度bool isValidLon;// 经度bool isValidAltitude;// 高程bool isValidSpeed;// 速度bool isValidDate;// 日期bool isValidTime;// 时间bool isValidTrack;// 追踪卫星角bool isValidMagVariation;// 磁偏角变化bool isValidHdop;// HDOP值bool isValidSatData;// 卫星数// 确定是否有有效的坐标数据发送到数据端口bool hasCoordEverBeenValid;};class CNmeaParser{public:CNmeaParser ();SENTENCE_STATUS ParseSentence (const char* sentence);void GetData (CNmeaData& data)const;void ResetData (){m_data.ResetData ();}private:bool ParseDegrees (double& degrees,const char* degString)const;bool ParseDate (int& year,int& month,int& day,const char* dateString)const;bool ParseTime (int& hour,int& minute,int& second,const char* timeString)const;void ParseAndValidateAltitude (const char* field,const char unit);void ParseAndValidateDate (const char* field);void ParseAndValidateFixQuality (const char* field);void ParseAndValidateLat (const char* field,const char hem);void ParseAndValidateLon (const char* field,const char hem);void ParseAndValidateHdop (const char* field);void ParseAndValidateSpeed (const char* field);void ParseAndValidateMagVariation(const char* field,const char direction);void ParseAndValidateTime (const char* field);void ParseAndValidateTrack (const char* field);void ParseGGA (const char* sentence);void ParseGLL (const char* sentence);void ParseRMC (const char* sentence);void ParseGSV (const char* sentence);bool GetNextField (char* data,const char* sentence,uint& currentPosition)const;bool IsValidSentenceType (const char* sentence)const;bool IsCorrectChecksum (const char* sentence)const;CNmeaData m_data;// 需要分解GSV语句int m_lastSentenceNumber;// 确定结束语句int m_numSentences;// 处理语句数int m_numSatsExpected;// 分析捕获卫星数int m_numSatsLeft;// 分析失锁卫星数int m_satArrayPos;// 下一次捕获卫星位置预测CSatData m_tempSatData[MAC_SATS];};class CNmeaSerial{public:CNmeaSerial ();CNmeaSerial (HWND hMsgWnd,DWORD timeout);~CNmeaSerial ();SERIAL_RESULT_TYPE CloseConnection ();SERIAL_RESULT_TYPE OpenConnection ();SERIAL_RESULT_TYPE OpenConnection (uint8 comPort,uint32 baudRate,uint8 dataBits,SETPARITY parity,STOPBITS stopBits);SERIAL_RESULT_TYPE GetData (CNmeaData& data)const;SERIAL_RESULT_TYPE GetSettings (uint8& comPort,uint32& baudRate,uint8& dataBits,SETPARITY& parity,STOPBITS& stopBits)const;unsigned long GetThreadHandle ()const {return m_hThread;}BOOL IsConnected ()const {return m_isConnected;}private:SERIAL_RESULT_TYPE InitThread ();BOOL KillThread ();BOOL LockData ()const;void SetDefaults ();BOOL UnlockData ()const;// 元函数描述语句,并运行该语句// 进入另外线程static void ProcessSentences (void* currentObject);uint8 m_comPort;uint32 m_baudRate;uint8 m_dataBits;SETPARITY m_parity;STOPBITS m_stopBits;BOOL m_isConnected;DWORD m_timeout;unsigned long m_hThread;HANDLE m_hPort;HANDLE m_hMutex;DWORD m_threadId;CNmeaParser m_parser;// 接收描述信息窗口HWND m_hMsgWnd;// 如果值为True,则进行线程分析// 否则结束状态BOOL m_terminateThread;}掌握NMEA 0183数据的基本原理和格式,并实现模拟NMEA 0183数据,对于开发GNSS服务和应用系统,扩展GNSS服务范围和服务方式等,都有重要意义。

相关文档
最新文档