NMEA 0813标准数据格式的解释和模拟Word文件下载.docx
《NMEA 0813标准数据格式的解释和模拟Word文件下载.docx》由会员分享,可在线阅读,更多相关《NMEA 0813标准数据格式的解释和模拟Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
用户需要先弄清楚需要哪些信息,然后对照GPSOEM接收板的技术资料,寻找那些包括所需信息的NMEA语句。
下面将介绍兼容性最广泛的6条NMEA语句
(1)$GPGGA语句
GlobalPositioningSystemFixData(GGA),即GPS定位信息。
该语句中反映GPS定位主要数据,包括经纬度、质量因子、HDOP、高程、参考站号等字段。
其标准格式如下:
$GPGGA,<
1>
,<
2>
3>
4>
5>
6>
7>
8>
9>
,M,<
10>
11>
12>
*hh<
各字段的含义和取值围见表2所示。
表2$GPGGA语句各字段的含义和取值围
字段
含义
取值围
UTC时间hhmmss.ss
000000.00~235959.99
纬度,格式:
ddmm.mmmm
000.00000~8959.9999
南北半球
N北纬;
S南纬
经度格式dddmm.mmmm
00000.0000~17959.9999
东西半球
E表示东经;
W表示西经
GPS状态
0=未定位,1=GPS单点定位固定解,2=差分定位,3=PPS解;
4=RTK固定解;
5=RTK浮点解;
6=估计值;
7=手工输入模式;
8=模拟模式
应用解算位置的卫星数
00~12
HDOP,水平图形强度因子
0.500~99.000(大于6不可用)
海拔高度
-9999.9~99999.9
l0>
地球椭球面相对水准面的高度(高程异常)
差分时间
从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空
参考站号
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,<
各字段的含义和取值围见表3所示。
表3$GPGSA语句各字段的含义和取值围
模式
M=手动,A=自动
定位类型
1=没有定位,2=2D定位,3=3D定位
PRN码(伪随机噪声码),正在用于解算位置的卫星号
01~32
PDOP位置精度因子
0.5~99.9
HDOP水平精度因子
VDOP垂直精度因子
$GPGSA,A,3,19,11,03,23,27,13,16,,,,,,3.43,1.67,2.99*0E
(3)$GPGSV语句
GPSSatellitesinView(GSV)可见卫星信息,反映GPS可见星的方位角、俯仰角、信噪比等。
$GPGSV,<
,…<
各字段的含义和取值围见表4所示。
表4$GPGSV语句各字段的含义和取值围
总的GSV语句电文数
0~12
当前GSV语句号
1-3
可视卫星总数
卫星号
卫星仰角
00~90度
卫星方位角
000~359度
信噪比
00~99dB,没有跟踪到卫星时为空
注:
信息将按照每颗卫星进行循环显示,每条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,<
各字段的含义和取值围见表5所示。
表5$GPRMC语句各字段的含义和取值围
UTC时间,hhmmss.ss
定位状态
A=有效定位,V=无效定位
N表示北纬;
S表示南纬
地面速率
000.0~999.9节
地面航向
000.0~359.9,以真北为参考基准
UTC日期,格式:
ddmmyy
日月年
磁偏角
000.0~180.0度
E表示偏东;
W表示偏西
模式指示(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,<
,T,<
,N,<
,K,<
各字段的含义和取值围见表6所示。
表6$GPVTG语句各字段的含义和取值围
以真北为参考基准的地面航向
以磁北为参考基准的地面航向
0000.0~1851.8公里/小时
模式指示(仅NMEA01833.00版本输出)
$GPVTG,257.314,T,257.314,M,10.739,N,19.888,K,A*2F
(6)$GPGLL语句
GeographicPosition(GLL),即定位地理信息。
其标准格式如下:
$GPGLL,<
各字段的含义和取值围见表7所示。
表7$GPGLL语句各字段的含义和取值围
N表示北半球;
S表示南半球
经度,格式:
dddmm.mmmm
UTC时间,格式:
hhmmss
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;
boolisValidSatData;
//卫星数
//确定是否有有效的坐标数据发送到数据端口
boolhasCoordEverBeenValid;
};
classCNmeaParser
public:
CNmeaParser();
SENTENCE_STATUSParseSentence(constchar*sentence);
voidGetData(CNmeaData&
data)const;
voidResetData(){m_data.ResetData();
}
private:
boolParseDegrees(double&
degrees,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&
currentPosition)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&
SERIAL_RESULT_TYPEGetSettings(uint8&
comPort,uint32&
baudRate,
uint8&
dataBits,SETPARITY&
parity,STOPBITS&
stopBits)const;
unsignedlongGetThreadHandle()const{returnm_hThread;
BOOLIsConnected()const{returnm_isConnected;
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;