APP下载

基于Windows CE的GPS应用

2009-06-10宋园方

合作经济与科技 2009年12期
关键词:嵌入式系统串口

宋园方

提要本文介绍了Window CE串口读写以及GPS报文解析。阐述了串口读写数据的实现过程,并以GPRMC报文为例,说明从报文中提取有效数据的过程。

关键词:嵌入式系统;GPS报文;串口;Windows CE

中图分类号:F49文献标识码:A

嵌入式系统因为其拥有与应用紧密结合、系统体积小能够随意裁剪、实时处理的特点,现已成为生活、工业、服务业、消费电子各领域中不可或缺的一部分。嵌入式系统家族中成员不少,杰出的代表产品有VxWork、Linux、Windows CE等。其中,Windows CE出自微软,因为其继承了Windows的系统与应用程序相分离的特点,在嵌入式系统领域中抢占先机,独领风骚。GPS全球卫星定位系统,由美国国防部研制,具有在海、陆、空进行全方位实时三维导航与定位能力的新一代卫星导航与定位系统。随着全球定位系统的不断改进,硬软件的不断完善,应用领域不断地开拓,目前已遍及国民经济各部门,并开始逐步深入人们的日常生活。本文通过介绍Windows CE串口应用程序的实现以及GPS数据报文格式解析,实现了基于Windows CE的GPS应用。

一、基于Windows CE串口程序设计

因为串性传输受干扰小、传输速度快的优点,被大量应用到各种外设与CPU之间的通信上,所以,目前主流的GPS芯片与CPU之间也是采用串口通信的。Windows CE已经为开发者提供了现成的API。Windows CE中用于打开串口的API 函数为CreateFile,其原型为:

HANDLE CreateFile (

LPCTSTR lpFileName,//将要打开的串口逻辑名,如COM1 或COM2

DWORD dwAccess,//指定串口访问的类型,可以是读取、写入或两者并列

DWORD dwShareMode,//指定共享属性,由于串口不能共享,该参数必须置为0

LPSECURITY_ATTRIBUTES lpsa,//引用安全性属性结构,缺省值为NULL

DWORD dwCreate,//创建标志,对串口操作该参数必须置为OPEN EXISTING

DWORD dwAttrsAndFlags,//属性描述,用于指定该串口是否可进行异步操作

HANDLE hTemplateFile//指向模板文件的句柄,对串口而言该参数必须置为NULL

);

读串口的API为ReadFile,其原型为:

BOOL ReadFile(

HANDLE hFile,//要读串口的句柄

LPVOID lpBuffer,//接收数据buffer 的指针

DWORD nNumberOfBytesToRead,//读取数据的字节数

LPDWORD lpNumberOfBytesRead,//实际读取数据的字节数

LPOVERLAPPED lpOverlapped //重叠操作时该参数指向一个OVERLAPPED结构,同步操作时该参数为NULL

);

打开串口后,需要对串口进行一些初始化配置工作。这需要通过一个DCB结构来进行。DCB结构包含了诸如波特率、数据位数、奇偶校验和停止位数等信息。在查询或配置串口的属性时,都要用DCB结构来作为缓冲区。一般用CreateFile打开串口后,可以调用GetCommState函数来获取串口的初始配置。要修改串口的配置,应该先修改DCB结构,然后再调用SetCommState函数设置串口。

除了在BCD中的设置外,程序一般还需要设置I/O缓冲区的大小和超时。Windows CE同Windows系统一样,用I/O缓冲区来暂时存放串口输入和输出的数据。调用SetupComm函数可以设置串行口的输入和输出缓冲区的大小。

在读写串口时,由于硬件或是缓存等问题,会出现超时现象。在串口程序设计时,要有相应的处理。超时设置的作用是在规定的时间内没有读入或发送出指定数量的字符,则读或写的操作会终止。可以用GetCommTimeouts函数查询当前的超时设置,该函数会填充一个COMMTIMEOUTS结构。调用SetCommTimeouts可以用某一个COMMTIMEOUTS结构的内容来设置超时。

从串口读出数据后,我们就可以对GPS数据报文进行解析了。

二、GPS报文解析

GPS的数据有多种报文格式,分别有GPRMC、GPGSV、GPGSA、GPGGA。GPR-

MC为推荐定位信息,GPGSV为可视卫星状态输出语句,GPGSA为GPS精度指针及使用卫星格式GPGGA为GPS固定数据输出语句。

报文数据中有些数据是重复的,在解析GPS报文的时候,没有必要将所有的报文都解析,根据应用的需要,只解析所需数据即可。如本文涉及到的应用只需要经度、纬度,所以,我们只解析GPRMC报文就足够了。如下是GPRMC报文数据格式和描述。其他应用所需报文数据及其相关报文数据描述,本文不再赘述。

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

(1)标准定位时间(UTC time)格式:时时分分秒秒.秒秒秒(hhmmss.sss)

(2)定位状态,A=数据可用,V=数据不可用

(3)纬度,格式:度度分分.分分分分(ddmm.mmmm)

(4)纬度区分,北半球(N)或南半球(S)

(5)经度,格式:度度分分.分分分分

(6)经度区分,东(E)半球或西(W)半球

(7)相对位移速度,0.0至1851.8knots

(8)相对位移方向,000.0至359.9度

(9)日期,格式:日日月月年年(ddmmyy)

(10)磁极变量,000.0至180.0

(11)度数

(12)Checksum.(检查位)

因为串口收到的数据是GPS的全部报文,根据设计,我们只提取GPRMC报文。GPS报文数据是ASCⅡ码,在应用时,需要将其转换成数值,便于在程序中进行运算和对比。图1是从GPRMC报文中提取经度、纬度的具体流程,以及处理GPRMC报文,将维度、维度区分,经度、经度区分,提取出来部分代码。(图1)

得到经度和纬度后,可以简单地做些应用,但是要达到商用GPS应用要求还需要进一步完善,如在短时间内GPS没有定位,则需要经纬度推算等设计。

本文介绍了基于Windows CE串口读取数据以及GPS报文解析的实现。该设计成功用于某便携式导航产品的电子狗功能中,实现了系统根据当前经纬度对指定地点距离进行判断。串口读取GPS数据方案在嵌入式领域中应用很广泛,如车载、手持产品中都有应用。Windows CE已成为嵌入式系统的主流,其快速、模块化的开发方式,为开发者开发应用程序提供了规范、快速的框架。

(作者单位:西安欧亚学院信息工程学院)

参考文献:

[1]周毓林,宁杨,陆贵强,付林林.Windows CE.net内核定制及应用开发.北京:电子工业出版社,2005.2.

[2]龚建伟,熊光明.Visual C++/Turbo C串口通信编程实践(第2版).北京:电子工业出版社,2007.9.

猜你喜欢

嵌入式系统串口
浅谈AB PLC串口跟RFID传感器的通讯应用
嵌入式系统课程“中断、异常与事件”教学实践及启示
面向实践创新人才培养的嵌入式系统教学研究
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
基于并行控制的FPGA多串口拓展实现