您的位置 首页 芯闻

GPS导航数据提取的规划与研讨

解决盲用定位模块在嵌入式平台下实现的问题,根据串口通信同步方式实现Windows CE 5.0操作系统下GPS导航数据的提取,并对获得的数据提出一种格式转换的方法。以PXA270嵌入式系统平台实现系统

Windows CE 是一个敞开的、可裁剪的、32位实时嵌入式窗口操作体系,具有牢靠性好、实时性高、内核体积小的特色,广泛应用于各种智能式设备的开发。体系经过微软供给的Platform Builder定制需求的Windows CE5.0体系,运转在硬件渠道上。硬件渠道选用博创科技PXA270试验箱,该试验箱嵌入式处理器是依据ARMV5E的Xscale中心PXA270,并支撑串口通讯。

GPS导航芯片选用天宝iQ 46240,将接纳到的数据经过串口发送给处理器。串口是核算机体系与外部串行设备之间的数据传输通道,是嵌入式通讯最牢靠、最通用的通讯办法。程序员运用Windows API函数可以编写出高效、可移植性的应用程序。Windows CE不支撑Windows下常用的串行通讯异步I/O办法(Overlapped,非堵塞),因而在嵌入式环境下选用了同步I/O办法的通讯程序规划办法。

试验规划依据GPS导航数据有用性承认的规范,对提取的数据进行处理,把缓存中接纳到的GPS数据格局转化为电子地图上常用的浮点型格局。此规划已应用于智能阅读器盲用定位模块中。

1 串口通讯同步I/O办法的程序规划

串口通讯是串行通讯的一种,串行通讯的形式一般分为上位机和下位机通讯。上位机可以读取下位机的状况数据,也可以设置下位机的状况。一般串行通讯协议可分为两类,即读和写。读写协议的描绘如图1所示,常用的效验码有异或、累加和、CRC等[1]。


在试验规划中,GPS接纳设备作为下位机只担任供给固定格局的数据,试验箱作为上位机不用发送指令,只担任守时读取GPS接纳设备发送的数据。即可以简化通讯协议,进步工作效率。

1.1 规划开发环境

在Windows NT/ME环境下设备eVC4.0编程环境,设置次序如下:

(1)设备同步软件Microsoft ActiveSync 4.0;
(2)设备eVC4.0;
(3)运用PB(Platform Builder5.0)定制Wince体系对应的SDK并设备;
(4)运用PB将定制的wince体系下载到试验箱上,并与PC机同步[2]。

1.2 同步I/O办法读取的规划办法

为完结串口通讯同步I/O办法程序规划,分为三个部分,每个部分有一个函数完结其对应的功用[3]。函数原型为:

OnOpenCom(); //翻开并设置串口
ReadThreadFunc(LPVOID lparam); //串口接纳线程
OnSeriesRead(CWnd *pWnd, BYTE *buf, int bufLen);
//串口接纳数据成功回调函数

串口接纳的具体流程图如图2所示,图中对应了串口设置的三个功用函数。

1.3 程序规划的中心代码完成

1.3.1 翻开并设置通讯串口参数

以同步读取办法翻开串口COM1

m_hComm=CreateFile(_T(COM1:), GENERIC_READ|GENER%&&&&&%_READ, 0, NULL, OPEN_EXISTING, 0, NULL);

//装备串口,得到翻开串口的当时特点参数,修改后再从头设置串口。

DCB portDCB;
portDCB.DCBlength=sizeof(DCB); //DCB结构巨细
portDCB.BaudRate=CBR_4800; //波特率
portDCB.ByteSize=8; //字符位
portDCB.Parity=NOPARITY; //奇偶校验位
portDCB.StopBits=ONESTOPBIT; //中止位
//设置串口读写时刻,装备超时
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts(m_hComm,CommTimeouts);
CommTimeouts.ReadIntervalTimeout= MAXDWORD;
CommTimeouts.ReadTotalTimeoutMultiplier=0;
CommTimeouts.ReadTotalTimeoutConstant=0;
//指定端口监测的事情集
SetCommMask (m_hComm, EV_RXCHAR);
//分配设备缓冲区
SetupComm(m_hComm,512,512);
//初始化缓冲区中的信息
PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_
RXCLEAR);
m_hReadCloseEvent=CreateEvent(NULL,TRUE,FALSE,
NULL);

1.3.2 GPS定位信息的接纳

在成功翻开并设置通讯口后,在主程序中创立线程函数ReadThreadFunc(LPVOID lparam):

//创立串口接纳线程
hRecvThread=CreateThread(0, 0, CommRecvTread, this, 0, IDThread);
然后在线程函数中采纳事情触发办法进行接纳处理,经过等候EV_RXCHAR事情的发生来发动ReadFile函数完结对GPS定位信息的接纳:
while (TRUE){
if (evtMask EV_RXCHAR){
ClearCommError(m_hComm,dwReadErrors,cmState);
willReadLen = cmState.cbInQue ;
//接纳缓冲区中存储的待读取的字符数
readBuf = new BYTE[willReadLen+1];
ReadFile(m_hComm,readBuf,willReadLen,actualReadLen,0);
readBuf[willReadLen]=0; //假如读取的数据大于0,
if (actualReadLen>0){ //触发读取回调函数 m_OnSeriesRead(ceSeries->m_pPortOwner,readBuf,actualReadLen); }}
假如收到读线程退出信号,则退出线程
if(WaitForSingleObject(ceSeries->m_hReadCloseEvent,500) == WAIT_OBJECT_0) break;

2 对导航数据的格局进行处理

关于试验中所运用的iQ46240接纳芯片,其发送到核算机的数据(选用NEMA0183句子)首要由帧头、帧尾和帧内数据组成。依据数据帧的不同,帧头也不相同,首要有“$GPGGA”、“$GPGSA”、“$GPRMC”等。这些帧头标识了后续帧内数据的组成结构,各帧均以回车符和换行符作为帧尾辨认一帧的完毕。本文中,定位数据经纬度、速度、时刻等均可以从“$GPGGA”帧中获取得到。该帧的结构及各字段释义如下[4]:

$GPGGA,1>,2>,3>,4>,5>,6>,7>,8>,9>,10,11>,12>,13>,14>*hh
1>当时方位的格林尼治时刻
2>纬度值
3>纬度标识,N或许S(南北)
4>经度值
5>经度标识,E或许W(东西)
6>卫星接纳信号质量
7>正在运用卫星的数量

2.1 GPS导航数据有用性承认规范

GPS定位的基本原理是依据高速运动卫星的瞬间方位作为已知的起算数据,选用空间间隔后方交会的办法承认待测点的方位。假定t时刻在地上待测点安顿GPS接纳机,可以测定GPS信号抵达接纳机的时刻,加上接纳机所接纳到的卫星星历等其他数据可以承认以下4个方程式。卫星定位示意图如图3所示。


xi,yi,zi(i=1,2,3,4)别离代表卫星1、2、3、4在t时刻的空间直角坐标,可由卫星导航电文求得,Vti代表卫星钟差,Vt0为接纳机的钟差。

由以上4个方程式可核算出待测点的坐标x、y、z和接纳机的钟差Vt0。因而导航数据可以有用核算有必要确保接纳到4个卫星的星历。对固定格局的导航电码中提取卫星符号进行承认,假如满意4个卫星的接纳状况即可承认当时接纳的导航电码可用于数据处理。一般,3颗卫星可以在二维平面上得到经度纬度坐标,为准确起见,4颗卫星可以确保取得三维空间坐标。

2.2 有用数据提取和数据格局转化

有用数据的提取和数据格局转化都是在回调函数中进行的[5]。帧内各数据段由逗号切割,因而在处理缓存数据时,可以经过查找ASCII码“$”来判别是否是帧头。对帧头类别进行辨认后,再经过对所阅历逗号的个数计数来判别当时处理的是哪一种定位导航参数,并做相应的处理。eVC支撑CString类型格局,因为定位信息格局固定,本文先运用mbstowcs函数将缓存中的字符型数据转换为宽字符型,然后强制转化为字符串类型。

WCHAR wszbuf[512];
mbstowcs(wszbuf,(char*)buf,strlen((char*)buf));字符串类型进行处理,然后运用Find函数,查找$GPGGA,
strRecv.Find(_T($GPGGA),1);
state=strRecv.Mid(pos+37,1);
得到GPS 质量指示目标
strSatelliteNum=strRecv.Mid(pos+39,1) ;
得到接纳到的卫星数量字符,将卫星数量字符型转化为整型判别卫星数量是否大于4,作为判别是否为有用数据的规范。
int iSatelliteNum=atoi((LPSTR)(LPCTSTR)strSatelliteNum);
当iSatelliteNum>3 state = =‘1’时阐明接纳到的是有用数据,可对strRecv中的数据进行提取,并赋给经纬度和时刻变量。
strLatitude =strRecv.Mid(pos+16,8);
strLongitude=strRecv. Mid(pos+27,9);
将提取到得经度纬度字符型数据转化为浮点型数据,经过atof函数完成。
double Longitude_new = (atof(strLongitude))/100;
double Latitude_new = (atof(strLatitude))/100;
这样将经度纬度信息提取到GPS结构数组中,后续的处理和高层决议计划可依据该结构中存储的数据作出相应的处理。

3 程序运转成果剖析

程序运转后,在试验渠道上搜集的部分数据如表1所示。

对以上成果剖析,可知经过串口在不同时段接纳的数据是比较稳定的,可以以此为基础提取到有用的数据和定位信息,本体系结合超图格局(pwr,pmw)的北京市公交站点地图数据,在编写程序时调用超图接口函数翻开电子地图数据,将串口接纳到的数据读入,得到邻近的公交站点并以文本办法输出到界面。

本文结合相关程序代码陈说了依据eVC环境下串口通讯程序的规划,对GPS全球定位体系定位信息的接纳和数据提取进行了具体的剖析和评论。首要处理了EVC编程环境下完成串口通讯功用、对GPS定位信息的提取和处理的问题。试验对wince5.0自定义渠道下开发GPS接纳设备给出了代码样例供参阅,并已应用于智能阅读器项目中盲用定位模块。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/191781.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部