基于UM220的北斗数据接收处理及简单应用
2017-09-08索菲
索菲
摘 要:文章以北斗2号和GPS双系统接收模块UM220为硬件平台,利用嵌入式C#二次开发BD2/GPS-OEM板的方法,开发出了能同时运行于PC和Windows CE的跨平台程序,实现了PDA与OEM板之间的串行通讯,同时对接收到的北斗数据进行简单的解析应用,如利用GDI+绘制北斗二维星空图、采集PDA终端运行轨迹等。
关键词:北斗2号;Windows CE 操作系统;PDA;串口通讯;网络通讯
中图分类号:TN967.1 文献标志码:A 文章编号:2095-2945(2017)24-0001-03
1 概述
北斗卫星导航系统是中国正在实施的自主研发、独立运行的全球卫星导航系统,是除美国的全球定位系统(GPS)、俄罗斯的GLONASS(GLOBAL NAVIGATION SATELLITE SYSTEM)之后第三個成熟的卫星导航系统。北斗卫星导航系统可在全球范围内为用户提供全天候、全天时、高精度的定位、导航、受时服务,并具有短报通信能力。近年来随着北斗导航系统的逐步建设完善,北斗巨大的经济效益已初具端倪,但是由于北斗导航系统建设不久,整体用户数量少,未形成一定规模的产业化机制,从而导致北斗系统的终端价格昂贵,所以如何将北斗数据有效接收加以广泛利用成为了当前中国卫星导航产业的关键课题[1]。
加快推进北斗民用化进程,不仅需要设备有较好的性能,而且具有便携、低功耗、低价格等特点。UM220接收机模块是目前市场上尺寸最小的BD2/GPS双系统模块,具有集成度高,启动时间快,功耗低,协议简单通用等特点,可用于车辆导航、车辆监控、气象探测、海洋渔业和电信电力受时等领域[2],特别适合北斗系统大规模应用的需求。
2 UM220接收机模块性能特点和通讯协议
作为BD/GPS接收机的核心部件,BD/GPS-OEM板接收来自BD/GPS天线单元的卫星信号,通过变频、放大、滤波等处理过程产生大量的数据信息,通过进一步的解析数据可以为地理信息系统、车载导航、气象探测等领域提供三维定位功能[3]。本文所用的UM220模块支持NMEA-0183通信标准格式,输入ASCII形式的数据信息。BD/GPS-OEM板输出的NMEA-0183语句有多种数据句型,每种句型包含的数据信息不同,通过解析提取可以得到所需要的数据,例如:经纬度、高程、方位角、地面速率、UTC时间、几何精度、卫星颗数、仰角、信噪比等。UM220模块提供的北斗语句有$BDGGA、$BDGLL、$BDGSA、$BDGSV、$BDRMC、$BDVTG等,每条语句都以特定的格式承载着不同的数据信息,例如$BDGSV语句,它的信息内容是当前卫星状态信息,其格式如下:
$BDGSV,NoMsg,MsgNo,NoSv,sv1,elv1,az1,cno1,sv2,elv2,az2,cno2,sv3,elv3,az3,cno3,sv4,elv4,az4,cno4*cs
其中:$为起始符;BD为信息来源;GSV为句型识别符;其后依次为GSV消息总数(NoMsg);本条GSV消息的编号(MsgNo);本系统可见卫星总数(NoSv);第一~第四颗卫星的卫星号(sv1~sv4);第一~第四颗卫星的仰角(sv1~sv4);第一~第四颗卫星的方位角(sv1~sv4);第一~第四颗卫星的信噪比(sv1~sv4);校验和(cs)。
3 PDA与BD/GPS-OEM之间的串行通讯
PDA终端软件是从串口接收数据,首先判断是否需要数据,如果不需要,则不进行缓存,仅仅显示数据,如果需要则将接收到的数据缓存起来,继续接收数据,与此同时异步调用缓存起来的数据。发送之前,需要先检验数据的完整性,如果不完整则将数据缓存起来,将下一次接收到的原始数据补充在不完整数据之后,接收校验数据的完整性。如果数据完整,则对数据进行校验,校验不通过,校验不通过的数据直接舍弃,若校验通过,则将数据发往各个子窗体,解析处理数据,数据流程图如图1所示。
由于.NET Framework 2.0类库中提供了Serial Port类,方便地实现了所需要串口通讯的多种功能。Serial Port中数据的读取与写入有较大不同。由于串口不知道数据何时到达,因此有两种方法可以实现串口数据的读取:一、线程实时读串口;二、事件触发方式实现。由于线程实时读串口的效率不是十分高效,因此本文采用事件触发的方式。在Serial Port类中有Data Received事件,当串口的读缓存有数据到达时则触发Data Received事件,需要注意的是Serial Port. Data Received事件运行在辅线程,不能与主线程中的显示数据控件直接进行数据传输,必须用间接的方式实现,本文采用了同步委托的方法Invoke[4],实现结果如图2所示。
{
int n = com.BytesToRead;
byte[] buf = new byte[n];
com.Read(buf, 0, n);
if(getBinaryData!=null&&com.IsOpen)
{
lock (thelock)
{
binaryData.Enqueue(buf);
}
}
stringbuilder.Remove(0, stringbuilder.Length);
this.Invoke((EventHandler)(delegate
{
stringbuilder.Append(Encoding.ASCII.GetString(buf, 0, n));endprint
this.txtShowData.Text+= stringbuilder.ToString();
}));
}
4 北斗数据简单应用
前面我们已经通过串口通讯获得了北斗数据,本文在移动终端开发出了一个简单的程序对获得的北斗卫星数据加以简单的分析利用。
本文所选的PDA终端操作系统为Windows Embedded CE 6.0,其设计的内核具有32,000个处理器的并发处理能力,每个处理有2GB虚拟内存寻址空间,同时还能保持系统的实时响应,这使得Windows Embedded CE 6.0具备更强的图形处理能力[5]。
GDI+(Graphics Device Interface Plus)也就是图形设备接口,它提供了各种丰富的图像处理功能,在Windows CE 6.0系统中,它充当应用程序和硬件设备之间的中间层,封装与硬件交互所需的低级API,这些API函数可用于绘制图形和文本。作为GDI的升级版,GDI+新增了诸如渐变画笔、基数样条、alpha混合等功能,并且实现了绘制边框和填充的分离,使得GDI+在绘图方面比GDI更加出色[6],使用GDI+的这些新特性可以轻松绘制出漂亮的卫星视图界面和PDA终端运行轨迹。
4.1 二维星空图的绘制
为了绘制星空图,首先需要对包含卫星方位信息数据的$BDGSV语句进行解析,以$BDGSV数据为例,$BDGSV,2,1,7,161,50,126,38,163,47,235,40,164,32,109,37,166,65,148,40*53
可以看出本系统中的GSV消息总数2,本条消息为1号消息,本系统可见的卫星总数为7颗,第1~第4颗卫星的卫星号依次為:161、163、164、166, 第1~第4颗卫星的仰角(0~90度)依次为:50、47、32、65,第1~第4颗卫星的方位角(0~359度)依次为:126、235、109、148,第1~第4颗卫星的信噪比(0~99dBHz)依次为:38、40、37、40。提取绘图所需的卫星的颗数以及各个卫星的卫星号、方位角、仰角、信噪比等信息,利用GDI+绘制出北斗二维星空图,实现结果如图3所示。程序运行绘制过程中为避免绘制时间过长或者星空图界面闪烁,采用了双倍缓冲的方法,即先把文本绘制到图像上,再在完成了所有的绘图操作后,把整个图像绘制到窗口中。
4.2 PDA移动终端的轨迹采集
当前基于卫星导航系统的巡检、监控和导航等软件已经非常成熟,但是大多都是基于美国的GPS系统的,基于北斗卫星导航系统的巡检监控软件刚开始发展不久,还处于起步阶段,而其中,PDA终端的轨迹采集无疑是这类应用软件中的核心功能之一,这类导航监控软件大部分的其他扩展应用功能都是建立在此基础之上完成的。因此本文对PDA终端的轨迹采集功能的实现原理进行了初步讨论并且编写了程序进行实现。
首先对$BDGGA数据进行解析,提取出经纬度等信息。以$BDGGA数据为例:$BDGGA,071437.000,2258.8881,N,11321.4923,E,1,5,0.702,48.137,M,0,M,*58
可以看出当前移动终端所处的位置是:北纬22度58.8881分,东经113度21.4923分,椭球高是48.173米,接收时间是7点14分37秒(UTC),参与定位的北斗卫星是5颗,定位状态为单点定位,这里每隔1秒接收一次数据,因此在进行跟踪定位时可以实时得到所处的位置。然后提取出精度、纬度信息,通过高斯正算转换为平面坐标,通过屏幕校正处理,利用GDI+将坐标绘制在终端屏幕上,继而得到终端的运行轨迹。
5 网络通讯
PDA终端作为客户端,通过IP地址和PC端服务器进行网络通信,将采集的卫星数据发送至PC服务端,这样可以利用PC机对卫星数据进行进一步的存储应用。为节省资源同时提高通信效率手持机端将数据重新组织按照自定义的格式发网PC服务端,自定义数据格式表1所示,PC服务器端接收自定义的定位数据进行相关的解析和应用。
本文采用Socket接口进行PDA端和PC端的网络通讯,Socket接口是TCP/IP网络的API,通常也称作“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求[7]。Socket接口定义了许多函数或例程,可以用它们来开发TCP/IP网络上的应用程序,程序根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。
PDA客户端:
socketSender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPHostEntry ipHost = Dns.GetHostEntry(ipaddress);
PAddress ipAddress = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, portnumber);
socketSender.Connect(ipEndPoint);//连接
socketSender.Send(bytesenddata);//发送组织好的数据
PC服务端:
listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
portnumber = int.Parse(txtPortNumber.Text.Trim());endprint
listener.Bind(new IPEndPoint(IPAddress.Any, portnumber));
listener.Listen(10);
byte[] receivedBytes = new byte[4096];
int bytesNum = socket.Receive(receivedBytes);
receivedValue = Encoding.ASCII.GetString(receivedBytes, 0, bytesNum);
6 结束语
本文讨论了在Windows CE6.0操作系统基础之上如何接收北斗卫星数据,实現了OEM板与PDA之间的通讯,并且对接收到的北斗数据进行解析,初步实现了对于北斗数据的简单应用,可进一步应用于车辆监控、车载导航、气象探测、海洋渔业和电信电力受时等领域,对推动实现北斗卫星导航系统民用化、产业化有着现实的意义。
参考文献:
[1]刘伟.基于“北斗一号”车载导航终端系统设计与实现[D].成都:电子科技大学,2010:1-80.
[2]刘兴,王德明,刘维亭.基于Windows CE的GPS-OEM板的数据接收与处理[J].华东船舶工业学院学报,2005,19(2):50-53.
[3]Zhou Jing translate. Visual C# 2005 From approaches to master. Beijing Tsinghua University presse [M].2006.
[4]李永隆.PDA程序设计[M].北京:清华大学出版社,2002.
[5]徐成,秦云川,刘彦.Windows CE内核定制与驱动程序开发[M].中国电力出版社,2011.
[6]John C.Database design and programming with access,SQL and visual C[M].[S1]:The MacGraw-Hill Co.Ltd,2002.
[7]Joan Daemen,Vincent Aijme. The Design of Rijindael:AES-the Advanced Eneryption Standard[J]. Springer Verlag, 2003:57-72.endprint