刘庆元,邹 磊
(中南大学 地球科学与信息物理学院,湖南 长沙 410083)
GPS-OEM板因其体积小、功耗低、性能优良而且价格低廉的优势而被广泛使用。然而,由于各种GPS-OEM板的生产厂商不同,其输出的数据包格式也不尽相同,使得不同芯片或者接口的GPSOEM板无法组合使用。虽然美国国家海洋电子协会制定了通用的NMEA-0183协议,但是由于该格式的局限性,无法胜任测量工作[1]。不同GPSOEM芯片有不同的通讯接口,使得芯片的跨平台混合使用变得很困难,而且数据处理程序专一性很强,一旦芯片数据输出格式或者接口发生变化,数据处理程序便无法再使用。
为解决上述矛盾,本文设计编写了服务程序,运行于用户的软件和GPS芯片硬件之间,来统一数据包格式和数据的通讯方式,使得需要GPS观测原始数据的测量型用户能获取到统一的、与芯片无关的、可靠的数据,同时,不需要GPS原始数据的用户还能像以前一样,不受任何影响的使用。
数据处理程序工作模式如图1所示,服务器端处理程序可以运行于任何系统中(可以是计算机,也可以是PDA甚至是单片机),设计有多种数据接收模块,可以接收各种数据,并且按照扩展的NMEA-0183协议转发到固定端口的UDP连接上。用户端程序同样可以运行于各种平台,只要能连接Internet(没有Internet连接时,可以连接本机),便可以接收到GPS观测数据[2],无需关心数据来自哪一种GPS-OEM芯片,这样就可以实现不同芯片的跨平台使用。
图1 GPS数据处理服务工作模式
NMEA-0183协议是美国国家海洋电子协会(National Marine Electronics Association)为统一海洋导航规范而制定的标准,是GPS接收机应当遵守的标准协议,也是目前GPS接收机上使用最广泛的协议[3-4]。
NMEA-0183格式数据串的所有数据都采用ASCII文本字符表示,数据传输以“$”开头,语句头由5个字母组成,前两个一般为“GP”,表示该语句是属于何种系统,后3个字母表示“语句ID”,表示该语句是关于何方面的数据。语句头后是数据体,包含不同的数据体字段,语句末尾为校验码(可选),以回车换行符<CR><LF>结束。每行语句最多包含82个字符。数据字段以逗号分隔识别,空字段保留逗号。常用语句及其含义如表1所列。
表1 NMEA-0183协议的语句及含义
然而,NMEA-0183协议常用的定位信息仅能输出定位的最终结果信息,却无法输出GPS的观测数据信息,而对测量来说这恰恰是最重要的数据。
目前一些厂商生产的GPS-OEM芯片可以输出GPS观测数据,比如卫星星历、伪距等数据,但是数据包一般遵守厂商自定义的数据格式,因此,不同芯片的GPS-OEM板便不能通用。当前的GPSOEM测量数据处理程序,由于数据包格式不同,仅能针对特定型号的GPS-OEM板,无法实现不同芯片的混合使用。
综上,不同GPS-OEM厂商定义了不同的数据包,共同遵循的NMEA-0183协议又无法输出GPS测量的全部数据,因此,有必要提出一个相互协调的方案。
要扩展NMEA-0183协议满足测量需要,则必须可以输出伪距观测值(目前大多数GPS-OEM板可以输出伪距信息)和卫星星历[5]。本文在保留了原有NMEA-0183协议语句的基础上,按照该协议对语句的要求,增加伪距输出GPPSD语句和卫星星历输出GPEPHF、GPEPHS和GPEPHT语句(星历数据较多,固分3条语句)。一条GPPSD语句可以输出多个伪距信息,但顾忌到数据包长度限制,最多允许3个观测值。卫星星历数据量较大,需要分3个数据包发送,具体格式说明如下:
格式:$GPPSD,<1>,<2>,<3>,<4>,<2>,<3>,<4>*hh<CR><LF>
举 例:$GPPSD,2,15,528348,24158712.5312,22,528348,20437393.1094*A3
<1>、本条语句包含的伪距个数
<2>、GPS卫星SV编号
<3>、伪距测量时间
<4>、卫星到接收机的伪距
$GPEPHF,<1>,<2>,<3>,<4>,<5>,<6>*hh<CR><LF>
举 例:$GPEPHF,02,5.1840E+05,5.153691E+03,8.247306E-03,3.041002E-01,-6.05476E-01*7B
<1>、GPS卫星SV编号;
<2>、参考时间toe;
<4>、轨道偏心率e;
<5>、参考时刻的轨道倾角i0;
<6>、参考时刻平近点角M0。
$GPEPHS,<1>,<2>,<3>,<4>,<5>,<6>*hh<CR><LF>
举 例:$GPEPHS,02,9.525346E-01,-8.267319E-01,1.439048E-09,-2.56977E-09,2.53049E-06*5C
<1>、GPS卫星SV编号;
<2>、近地点角距ω;
<3>、参考时刻的升交点赤经Ω0;
<4>、卫星平均角速度的改正数Δn;
<5>、升交点赤经变化率Ω-dot;
<6>、升交点正弦调和改正数Cus。
$GPEPHF,<1>,<2>,<3>,<4>,<5>,<6>*hh<CR><LF>
举例:$GPEPHF,02,-9.16621E-07,-6.22543E-08,-1.89728E-08,-5.65938E+01,2.21313E+02*2F
<1>、GPS卫星SV编号;
<2>、升交点余弦调和改正数Cuc;
<3>、轨道倾角正弦调和改正数Cis;
<4>、轨道倾角余弦调和改正数Cic;
<5>、轨道半径正弦调和改正数Crs;
<6>、轨道半径余弦调和改正数Crc。
不同GPS-OEM板发送的数据包所遵守的协议不同,必须要将其转换为扩展的NMEA-0183协议,统一不同GPS-OEM板是数据输出接口。用户程序仅需要按照扩展的NMEA-0183格式来解析数据包,就可以获取需要的数据,而无需知道GPS-OEM板原始的数据格式。
服务端程序通过通用的TCP/IP协议中用户数据包协议(UDP)来转发数据包。UDP是一个简单的面向数据包的传输层协议,为网络层以上和应用层以下提供了一个简单的接口。因TCP/IP协议的通用性,用户程序可以不受系统限制地从Internet上获取数据。在没有Internet连接的情况下,还可以连接本机,为本机的不同程序提供数据[2]。
考虑到跨平台特性,服务端程序采用了优秀的跨平台应用程序库Qt(关于Qt请参考相关文档)。Qt封装了对设备接口的输入输出类QIODevice类,利用该类打开串口等计算机外围接口。QIODevice类从外围接口中按字节读取数据,存放于QByteArray字节数组中,并转换为QString字符串对象,通过字符串处理函数,最终把读入的数据转换为扩展的NMEA-0183协议格式[6]。最后,通过Qt封装的QUdpSocket类,将转换好的数据包通过Socket连接发送到UDP端口。
为实现在各种系统平台上都能正常工作,本文选用跨平台的QT库编写数据包转换转发服务器程序。服务器端在Windows Xp下运行如图2所示。
图2 服务器端程序在Windows下运行
服务器端运行后,绑定本机IP地址127.0.0.1上的9228端口,同时从串口COM5中读取Trimble公司的Lassen IQ芯片发送的数据。Lassen IQ发送TSIP协议的数据包(关于TSIP协议的具体定义,请参考Trimble公司的说明),该数据包为二进制格式,服务器端程序提取TSIP数据包中的相关信息,生成扩展的NMEA-0183协议格式,发送到127.0.0.1(本机)的9228端口。
在命令行下编写程序模拟用户获取数据,连接本机的9228端口,读取服务器端发送来的数据,结果如图3所示,正确地读取了数据包。
图3 用户连接UDP端口获取的数据
同时,程序还在Linux(内核版本3.0)上进行了实验,服务器端同样将Lassen IQ数据包成功转换为扩展的NMEA-0183数据包。
本文提出了利用扩展NMEA-0183协议语句的办法,即满足了与其他软件的兼容性,又满足了测量型GPS数据的发送;通过数据包转发到UDP端口的办法,使得用户完全不必关心是何种设备、通过何种方式发送的何种数据包,只要能连接Internet就可以获取所需要的数据包。
本文通过实验,将Trimble公司的TSIP协议数据包成功地转换为扩展的NMEA-0183协议数据包,并通过UDP端口发送给用户,证明了方案的可行性。
[1]李征航,黄劲松.GPS测量原理及应用[M].武汉:武汉大学出版社,2005.
[2]谢希仁,计算机网络[M].5版.北京:电子工业出版社,2008.
[3]王若璞,张超.Windows CE下手持电脑对GPS OEM板设置与 通讯[J].测绘科学技术学报,2007,24(S0):22-24.
[4]袁德宝,崔希民,臧永强,等,基于VC++的GPS-OEM板串行通信关键算法的设计与实现[J].测绘科学,2008,33(6):170-172.
[5]刘庆元,余文坤,杨哲,等.GPS-OEM板原始数据向RINEX格式转换程序设计[J].矿山测量,2009(5):31-33.
[6]成洁,卢紫毅.Linux窗口程序设计—Qt4精彩实例分析[M].北京:清华大学出版社,2008.