NMEA 0813标准数据格式的解释和模拟.docx

上传人:b****8 文档编号:9294643 上传时间:2023-02-04 格式:DOCX 页数:11 大小:41.51KB
下载 相关 举报
NMEA 0813标准数据格式的解释和模拟.docx_第1页
第1页 / 共11页
NMEA 0813标准数据格式的解释和模拟.docx_第2页
第2页 / 共11页
NMEA 0813标准数据格式的解释和模拟.docx_第3页
第3页 / 共11页
NMEA 0813标准数据格式的解释和模拟.docx_第4页
第4页 / 共11页
NMEA 0813标准数据格式的解释和模拟.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

NMEA 0813标准数据格式的解释和模拟.docx

《NMEA 0813标准数据格式的解释和模拟.docx》由会员分享,可在线阅读,更多相关《NMEA 0813标准数据格式的解释和模拟.docx(11页珍藏版)》请在冰豆网上搜索。

NMEA 0813标准数据格式的解释和模拟.docx

NMEA0813标准数据格式的解释和模拟

NMEA0813标准数据格式的解释和模拟

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

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

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

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

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

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

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

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

                                                                               图一

 

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

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

表1NMEA协议语句格式定义

符号(ASCII)

定义

“$”

语句起始位

aaccc

地址域,前两位为识别符,后三位为语句名

“,”

域分隔符

ddd…ddd

发送的数据容

“*”

效验和符号,后面的两位数是效验和

hh

效验和

/

终止符,回车或换行

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

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

  下面将介绍兼容性最广泛的6条NMEA语句

  

(1)$GPGGA语句

  GlobalPositioningSystemFixData(GGA),即GPS定位信息。

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

  其标准格式如下:

  $GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh

  各字段的含义和取值围见表2所示。

表2$GPGGA语句各字段的含义和取值围

字段

含义

取值围

<1>

UTC时间hhmmss.ss

000000.00~235959.99

<2>

纬度,格式:

ddmm.mmmm

000.00000~8959.9999

<3>

南北半球

N北纬;S南纬

<4>

经度格式dddmm.mmmm

00000.0000~17959.9999

<5>

东西半球

E表示东经;W表示西经

<6>

GPS状态

0=未定位,1=GPS单点定位固定解,2=差分定位,3=PPS解;4=RTK固定解;5=RTK浮点解;6=估计值;7=手工输入模式;8=模拟模式

<7>

应用解算位置的卫星数

00~12

<8>

HDOP,水平图形强度因子

0.500~99.000(大于6不可用)

<9>

海拔高度

-9999.9~99999.9

地球椭球面相对水准面的高度(高程异常)

-9999.9~99999.9

<11>

差分时间

从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空

<12>

参考站号

0000~1023;不使用DGPS时为空

  例句:

  $GPGGA,074529.82,2429.6717,N,11804.6973,E,1,8,1.098,42.110,M,,M,,*76

  

(2)$GPGSA语句

  GPSDOPandActiveSatellites(GSA)即当前卫星信息,其标准格式如下:

  $GPGSA,<1>,<2>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<4>,<5>,<6>*hh

  各字段的含义和取值围见表3所示。

表3$GPGSA语句各字段的含义和取值围

字段

含义

取值围

<1>

模式

M=手动,A=自动

<2>

定位类型

1=没有定位,2=2D定位,3=3D定位

<3>

PRN码(伪随机噪声码),正在用于解算位置的卫星号

01~32

<4>

PDOP位置精度因子

0.5~99.9

<5>

HDOP水平精度因子

0.5~99.9

<6>

VDOP垂直精度因子

0.5~99.9

  例句:

  $GPGSA,A,3,19,11,03,23,27,13,16,,,,,,3.43,1.67,2.99*0E

  (3)$GPGSV语句

  GPSSatellitesinView(GSV)可见卫星信息,反映GPS可见星的方位角、俯仰角、信噪比等。

  其标准格式如下:

  $GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,…<4>,<5>,<6>,<7>*hh

  各字段的含义和取值围见表4所示。

表4$GPGSV语句各字段的含义和取值围

字段

含义

取值围

<1>

总的GSV语句电文数

0~12

<2>

当前GSV语句号

1-3

<3>

可视卫星总数

00~12

<4>

卫星号

01~32

<5>

卫星仰角

00~90度

<6>

卫星方位角

000~359度

<7>

信噪比

00~99dB,没有跟踪到卫星时为空

  注:

<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语句

  RecommendedMinimumSpecificGPS/TRANSITData(RMC),即推荐定位信息。

  其标准格式如下:

  $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

  各字段的含义和取值围见表5所示。

表5$GPRMC语句各字段的含义和取值围

字段

含义

取值围

<1>

UTC时间,hhmmss.ss

000000.00~235959.99

<2>

定位状态

A=有效定位,V=无效定位

<3>

纬度,格式:

ddmm.mmmm

000.00000~8959.9999

<4>

南北半球

N表示北纬;S表示南纬

<5>

经度格式dddmm.mmmm

00000.0000~17959.9999

<6>

东西半球

E表示东经;W表示西经

<7>

地面速率

000.0~999.9节

<8>

地面航向

000.0~359.9,以真北为参考基准

<9>

UTC日期,格式:

ddmmyy

日月年

<10>

磁偏角

000.0~180.0度

<11>

磁偏角

E表示偏东;W表示偏西

<12>

模式指示(NMEA01833.00版本输出)

A=自主定位,D=差分,E=估算,N=数据无效

  例句:

  $GPRMC,074529.82,A,2429.6717,N,11804.6973,E,12.623,32.122,010806,,W,A*08

  (5)$GPVTG语句

  TrackMadeGoodandGroundSpeed(VTG),即地面速度信息。

其标准格式为:

  $GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh

  各字段的含义和取值围见表6所示。

表6$GPVTG语句各字段的含义和取值围

字段

含义

取值围

<1>

以真北为参考基准的地面航向

000~359度

<2>

以磁北为参考基准的地面航向

000~359度

<3>

地面速率

000.0~999.9节

<4>

地面速率

0000.0~1851.8公里/小时

<5>

模式指示(仅NMEA01833.00版本输出)

A=自主定位,D=差分,E=估算,N=数据无效

  例句:

  $GPVTG,257.314,T,257.314,M,10.739,N,19.888,K,A*2F

  (6)$GPGLL语句

  GeographicPosition(GLL),即定位地理信息。

其标准格式如下:

  $GPGLL,<1>,<2>,<3>,<4>,<5>,<6>,<7>*hh

  各字段的含义和取值围见表7所示。

表7$GPGLL语句各字段的含义和取值围

字段

含义

取值围

<1>

纬度,格式:

ddmm.mmmm

000.00000~8959.9999

<2>

南北半球

N表示北半球;S表示南半球

<3>

经度,格式:

dddmm.mmmm

00000.0000~17959.9999

<4>

东西半球

E表示东经;W表示西经

<5>

UTC时间,格式:

hhmmss

000000.00~235959.99

<6>

定位状态

A=有效定位,V=无效定位

<7>

模式指示(NMEA01833.00版本输出)

A=自主定位,D=差分,E=估算,N=数据无效

  5NMEA0183数据模拟

  该源代码为VC++源代码,是对一个模拟NMEA数据的类的定义。

  structCNmeaData

  {

  CNmeaData();

  voidResetData();

  //DataretrievedfromtheNMEAsentences.

  doublelat;//纬度,单位为度(正数为北纬,负数为南纬) doublelon;//经度,单位为度(正数为东经,负数为西经)

  doublealtitude;//海拔高度,米

  doublespeed;//速度,节

  doubletrack;//追踪卫星高度角,度

  doublemagVariation;//磁偏角,度

  doublehdop;//HDOP值

  intnumSats;//追踪卫星数

  intUTCYear;//UTC年

  intUTCMonth;//UTC月

  intUTCDay;//UTC日

  intUTCHour;//UTC时

  intUTCMinute;//UTC分

  intUTCSecond;//UTC秒

  CSatDatasatData[MAC_SATS];

  //卫星锁定数:

  //0=无效,1=卫星锁定,2=DGPS状态

  GPS_FIX_QUALITYlastFixQuality;

  //有效卫星数

  boolisValidLat;//纬度

  boolisValidLon;//经度

  boolisValidAltitude;//高程

  boolisValidSpeed;//速度

  boolisValidDate;//日期

  boolisValidTime;//时间

  boolisValidTrack;//追踪卫星角

  boolisValidMagVariation;//磁偏角变化

  boolisValidHdop;//HDOP值

  boolisValidSatData;//卫星数

  //确定是否有有效的坐标数据发送到数据端口

  boolhasCoordEverBeenValid;

  };

  classCNmeaParser

  {

  public:

  CNmeaParser();

  SENTENCE_STATUSParseSentence(constchar*sentence);

  voidGetData(CNmeaData&data)const;

  voidResetData(){m_data.ResetData();}

  private:

  boolParseDegrees(double°rees,constchar*degString)const;

  boolParseDate(int&year,int&month,int&day,

  constchar*dateString)const;

  boolParseTime(int&hour,int&minute,int&second,

  constchar*timeString)const;

  voidParseAndValidateAltitude(constchar*field,constcharunit);

  voidParseAndValidateDate(constchar*field);

  voidParseAndValidateFixQuality(constchar*field);

  voidParseAndValidateLat(constchar*field,constcharhem);

  voidParseAndValidateLon(constchar*field,constcharhem);

  voidParseAndValidateHdop(constchar*field);

  voidParseAndValidateSpeed(constchar*field);

  voidParseAndValidateMagVariation(constchar*field,

  constchardirection);

  voidParseAndValidateTime(constchar*field);

  voidParseAndValidateTrack(constchar*field);

  voidParseGGA(constchar*sentence);

  voidParseGLL(constchar*sentence);

  voidParseRMC(constchar*sentence);

  voidParseGSV(constchar*sentence);

  boolGetNextField(char*data,constchar*sentence,

  uint¤tPosition)const;

  boolIsValidSentenceType(constchar*sentence)const;

  boolIsCorrectChecksum(constchar*sentence)const;

  CNmeaDatam_data;

  //需要分解GSV语句

  intm_lastSentenceNumber;//确定结束语句

  intm_numSentences;//处理语句数

  intm_numSatsExpected;//分析捕获卫星数

  intm_numSatsLeft;//分析失锁卫星数

  intm_satArrayPos;//下一次捕获卫星位置预测

  CSatDatam_tempSatData[MAC_SATS];

  };

  classCNmeaSerial

  {public:

  CNmeaSerial();

  CNmeaSerial(HWNDhMsgWnd,DWORDtimeout);

  ~CNmeaSerial();

  SERIAL_RESULT_TYPECloseConnection();

  SERIAL_RESULT_TYPEOpenConnection();

  SERIAL_RESULT_TYPEOpenConnection(uint8comPort,uint32baudRate,

  uint8dataBits,SETPARITYparity,STOPBITSstopBits);

  SERIAL_RESULT_TYPEGetData(CNmeaData&data)const;

  SERIAL_RESULT_TYPEGetSettings(uint8&comPort,uint32&baudRate,

  uint8&dataBits,SETPARITY&parity,STOPBITS&stopBits)const;

  unsignedlongGetThreadHandle()const{returnm_hThread;}

  BOOLIsConnected()const{returnm_isConnected;}

  private:

  SERIAL_RESULT_TYPEInitThread();

  BOOLKillThread();

  BOOLLockData()const;

  voidSetDefaults();

  BOOLUnlockData()const;

  //元函数描述语句,并运行该语句

  //进入另外线程

  staticvoidProcessSentences(void*currentObject);

  uint8m_comPort;

  uint32m_baudRate;

  uint8m_dataBits;

  SETPARITYm_parity;

  STOPBITSm_stopBits;

  BOOLm_isConnected;

  DWORDm_timeout;

  unsignedlongm_hThread;

  HANDLEm_hPort;

  HANDLEm_hMutex;

  DWORDm_threadId;

  CNmeaParserm_parser;

  //接收描述信息窗口

  HWNDm_hMsgWnd;

  //如果值为True,则进行线程分析

  //否则结束状态

  BOOLm_terminateThread;}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1