中国农业工程学会2005年学术年会论文集
61
VisualC++.NET平台上GPS串行通信的实现
姚岚,林建涵,张淼
(“现代精细农业系统集成研究”教育部重点实验室,中国农业大学,北京,100083)摘要:本文介绍了在VC++..NET环境下GPS数据采集的关键技术。提出了利用WindowsAPI通信函数、使用串口通信组件(ActiveX控件MSComm)、利用第三方提供或自己编写的通信类三种方法,在VC++.NET平台上实现对GPS全球定位系统定位信息的接收,并以GPGGA数据格式为例提供了对各定位参数数据的提取程序。关键词:VC++.NET;GPS;串口通信;WindowsAPI;MSComm中图分类号:S126,TP24
0引
言
语言。本文将介绍利用VC.NET编写计算机与GPS接收机的通信和GPS数据提取的应用程序。
GPS是全球定位系统英文名称GlobalPositioningSystem的缩写。GPS是美国从上一世纪70年代开始研制,历时20年,耗资200亿美元,于1994年全面建成,具有在海、陆、空进行全方位实时三维导航与定位能力的新一代卫星导航与定位系统。经近10年我国测绘等部门的使用表明,GPS具有全天候、高精度、自动化、高效益等显著特点,成功地应用于大地测量、工程测量、航空摄影测量、农业资源勘察等多种学科和农业、林业等生产领域,从而给农业领域带来一场深刻的技术革命。在“精细农业”技术体系中,DGPS的定位应用以及GIS的应用开发是实施“精细农业”实践的关键技术之一,即利用DGPS定位引导定量获取农田内作物产量和影响作物生长的环境因素的差异性信息,在GIS中利用各种空间分析方法生成差异性信息分布图,通过分析影响小区产量差异的原因,制定经济、合理的生产决策方案,生成作物管理处方图,指导农田定位作业。?GPS主要有3大组成部分,即空间星座部分、地面监控部分和用户设备部分。其中空间星座部分、地面监控部分局为美国所控制;GPS的用户设备主要由接收机硬件和处理软件组成,用户通过设备接收GPS卫星信号,经信号处理而获得用户位置、时间、高程、速度等信息,最终实现利用GPS进行导航和定位的目的。对于用户来说,最重要的关键设备就是用户接收机(GPS接收机)。很多情况下,用户都是用计算机和GPS接收机通信,将GPS信息导入计算机然后再处理。而VC由于其在和GPS接收机的通信及后面的数据处理应用方面的强大威力,成为许多用户开发GPS应用程序的首选开发
?
1定位导航信息的接收
开发GPS数据处理软件,首先要解决计算机和GPS接收机的串口通信。GPS接收机和计算机的数据传输在过程中,计算机的串行端口作为CPU和串行设备间的编码转换器,提供了计算机与GPS接收机之间的数据传输通道。作为数据终端设备,GPS接收机采用异步串行方式利用D型RS-232串行二进制数据交换电缆接口将采集到的数据通过串行端口传输给计算机[1],当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。而在接收数据时,串行的位被转换成为字节数据。VisualC++.NET封装了WindowsAPI函数,使得Windows应用程序的开发变得简单易学。利用VC++.NET开发Windows32位环境下计算机和GPS接收机的串口通信程序,可以直接利用WindowsAPI的通信函数,也可以利用VC提供的MSComm控件(即MicrosoftCommunicationControl),另外还可以利用第三方提供或自己编写的通信类。1.1WindowsAPI串行通信的文件读写方式与以往DOS下串行通信程序不同,在Win32中,所有的设备都被看成是文件。串口通信可以像访问普通文件那样通过API通信函数来实现,利用Windows操作系统提供的设备驱动程序来进行数据传递。Win32提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编写出符合不同需要的通信程序。通过程序可以具体实现GPS接收机的串口通信,按照事件驱动的方式进行读写的,同时利用多线程,将串口的读写放在一个用户自定义的线程中完成。在开始进行数据采集的时候打开这个有关串口通信的线程,然后串口的创建、[2]设置、读写都在这个线程中进行。1.2用MSComm控件设计串口通信程序VisualC++的微软基础类库和类向导在对话框中支
收稿日期:修订日期:项目基金:作者简介:姚岚(1980—),女(汉),黑龙江,硕士,主要从事“精细农业”智能信息技术与系统集成的研究。中国农业大学东区125信箱,100083。Email:3710167@qq.com通讯作者:姚岚(1980—),女(汉),黑龙江,硕士,主要从事“精细农业”智能信息技术与系统集成的研究。中国农业大学东区125信箱,100083。Email:3710167@qq.com
62
中国农业工程学会2005年学术年会论文集续帧内数据的组成结构,各帧均以回车符和换行符作为帧尾,标识一帧的结束。这里我们以GPGGA格式为例进行编程,可以获取时间、经纬度、卫星个数、高程等定位信息。该帧的结构及各字段含义如下:$GPGGA,HHMMSS.sss,DDMM.mmm,d,DDDMM.mmm,d,q,ss,h.h,a.a,z,,,,*CC
$NMEA语句开始GPGGA消息头HHMMSS.sss定位装置的通用协调时间HH时(00-24)MM:分(00-59)SS.sss秒(00.000-59.999)DDMM.mmmm,d纬度–N(+)/S(-)DD度(00-90)MM.mmmm分(00.0000-59.9999)d方向,N-北纬,S-南纬DDDMM.mmmm,d经度–E(+)/W(-)DDD度(00-180)MM.mmmm分(00.0000-59.9999)d方向,E-东经,W-西经GPS品质q0–装置不可用1–GPSSPS模式,有效2–DGPSSPS模式,有效3–GPSPPSS模式,有效ss可用卫星数(0-12)h.h水平经度(HDOP)a.a天线海拔高M天线海拔高单位(米)…*CC校验和合语句终止分隔符2.2GPS定位导航信息的提取由于帧内各数据段由逗号分割,因此在处理缓存数据时一般是通过搜寻ASCII码“$”来判断是否是帧头,在对帧头的类别进行识别后再通过对所经历逗号个数的计数来判断出当前正在处理的是哪一种定位导航参数,并作出相应的处理。下面就是对数据进行解帧处理的主要代码:voidCMainFrame::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefaultif(nIDEvent!=1)return;while((m_strReceived.Find(0x0d)!=-1)&;&;(m_strReceived.Find(0x0a)!=-1))
持ActiveX控件。ActiveX控件是一种软件模块,插入到VC程序中,与一般的Windows控件插入到程序中的方法一样。其中,MSComm控件为应用程序提供了串口通信的功能,允许通过串口来发送和接收数据。利用MSComm控件可以非常方便地实现对串口的访问以及计算机端口和外部设备的数据传输,使得编程的效率得到了大大提高[3]1.3利用第三方提供或自己编写的通信类提供串口通信底层支持,即通过编写串口底层类。以RemonSpekreijse设计的CSerialPort类为例,CSerialPort主要使用异步方式操作串口,并提供了使用其它方式操作串口的公共成员。其设计目的是提供封装串口通信细节、健壮高效的串口通信类,能支持多串口、多线程,并能在所有主流Windows系统下使用。CSerialPort类的用户只需要熟悉少数几个公共成员函数,就能轻易在自己的程序中加入串口支持[4]。由以上三种方法的介绍可以看出,使用MSComm控件,串口的很多属性都被封装到控件中,既免除了直接使用API函数时用户要编写的冗长的程序,又增加了程序的可读性。对于串口的读写,MSComm控件对事件的响应方式也大大简化了串口通信的编程,实现计算机和GPS接收机之间的数据传输更加快捷。而第三种方法使用面向对象技术封装Win32API函数,提供一个用于串行通信的类,只要理解这种类的几个成员函数就能方便使用,但编写能普遍应用的这种类相当困难。
2定位导航信息的提取
GPS接收机只要处于工作状态就会源源不断地把接收到的GPS信息通过串口传
上一篇:VC++NET中基于MSComm的通信软件设计与实现
下一篇:马原:环境保护与可持续发展论文(word)