鲍萍萍,陈光,王朋,王鹏辉
(东华大学 信息科学与技术学院 上海 201620)
摘要:针对传统的在VC++平台上实现的GPS定位数据的提取与存储系统已经不能满足系统的实时性和可靠性等需求,以及软件方面存在扩展性、兼容性、移植性差等问题,运用GPS定位技术、多线程串口通信处理技术和数据库存储访问技术,应用Java语言编写,在Eclipse开发工具上设计并实现了一套GPS定位数据的实时提取与存储系统。测试结果表明,该系统运行稳定,实验数据有效可靠,达到了预期的目标。
关键词:GPS;多线程;串口通信;数据存储;Java
0引言
随着卫星导航定位技术的发展,全球卫星定位系统(Global Position System,GPS)成为目前最为常用的一种导航定位系统,其全方位、全天候、全时段、高精度等特点使得GPS的应用遥遥领先。其原理是用户通过GPS接收机接收卫星信号,结合地理信息系统对信号进行处理,从而获得用户所需的经纬度、速度等信息,最终实现导航和定位 [1]。而GPS接收机中的数据提取与存储是GPS定位中的重要组成部分。
目前,GPS定位数据处理系统大多数在VC++平台上实现,其扩展性、移植性、兼容性差。为改善其性能,2003年王缓缓等人[2]对GPS定位数据进行提取,增强了系统的扩展性和兼容性,但仍然存在数据不能实时接收、同步处理及存储等问题。2006年李新源等人基于Java语言的GPS接收机的串口通信程序设计[3],整个系统结构虽然较为清晰,但其只是实现了GPS数据的提取,对数据的存储并未研究。
为改善已有GPS定位数据的提取与存储功能,有效提高数据的可靠性和实时性等要求,本文基于Java的跨平台性、开放性与面向对象等特点[3],运用GPS定位技术、多线程串口通信编程技术和数据库存储技术,设计了一套GPS定位数据的提取与存储系统。该系统能实时地接收、处理和存储GPS数据。
1系统组成
GPS定位数据的提取与存储系统主要包括GPS串口通信和GPS数据存储两部分,其结构图如图1所示。图1系统架构图其中,GPS串口通信部分主要实现多线程编程、串口的打开、串口数据的接收、提取处理与串口的关闭等操作;GPS数据存储部分实现将提取处理后的数据保存在MySQL数据库中 [24]。
2GPS串口通信
传统的用Java实现串口通信通常采用串口API,它以独立jar包的方式提供一个标准扩展[5]。此系统中,采用串口和并口通信的开源Java类库RXTX,其提供了多操作系统下的兼容javax.comm串口通信包API的实现。在Windows操作系统下,包含3个文件:RXTXcomm.jar、rxtxParallel.dll和rxtxSerial.dll,其提图2串口通信流程图供了通信用的Java API及相应的驱动类接口。系统在串口通信前,必须对串口驱动程序装载。其串口操作流程图如图2所示[6]。
2.1多线程技术
对串口进行操作的过程中,为提高CPU的使用效率,系统采用了多线程处理技术,很好地满足了多任务和实时性的需求[78]。
Java有两种实现多线程的方式:一是创建一个类继承Thread类,并重写run()方法;二是实现Runnable接口。本文采用继承Thread类的方式实现多线程,主要涉及串口数据接收线程、数据提取处理线程、数据存储线程,系统的关键是处理好线程之间的同步、安全和死锁[78]。
2.2多线程串口通信
(1)串口数据接收
在对GPS串口数据接收之前,必须明确GPS接收机的数据接收格式[24]。GPS接收机遵守NEMA0183标准协议,该协议内容包含GPS定位的经纬度、速度、日期时间、地面航向、卫星状况、磁偏角等信息。本系统中,使用NEMA0183协议中的“MYMGPRMC”帧格式进行数据的提取处理。
在进行数据接收前,首先打开串口并进行参数设置。然后,调用数据接收线程中的类实例方法对串口数据进行接收。为保证数据的可靠性和实时性,系统中设置了串口事件监听器。其部分关键代码如下,数据接收结果图如图3所示。
(2)串口数据提取处理
在成功接收GPS数据串后,要对其解析,转化成相应的格式。其思路如下:首先,判断数据串中是否含有“MYMGPRMC”数据,若存在,则截取MYMGPRMC包含的70 B数据;其次,对MYMGPRMC包含的GPS定位信息进行提取;最后,对数据作进一步的处理运算并保存在GpsData对象中,提高了代码的健壮性。为了简化问题,本文只提取出日期时间、经纬度、状态、速度信息[9]。其部分关键代码如下所示[2],数据提取处理图如图4、图5所示。
3数据库存储
对GPS定位数据进行提取处理后,需要将数据保存在数据库中,方便后期的使用。本设计将GPS定位数据存储部分作为后台数据库,不仅作为定位数据的容器,同时还可以随时随地地访问数据库与进行增、删、改、查等操作[4]。
在本系统中,将灵活可靠的MySQL作为后台数据库,应用JDBC技术连接数据库。下面从数据库的配置设计、存储和互联来实现高效可靠的数据存储。
3.1数据库的配置与数据表的设计
对MySQL数据库操作前,需要对其配置。配置信息封装在dbconfig.properties配置文件中,如图6所示。
本系统采用JDBC方式连接数据库,在MySQL中,需要新建一个数据库命名为mydb1,并添加一张数据表gpsdata用于存储GPS定位数据。数据表的列分别命名为日期时间datetime、定位状态status、纬度latitude、经度longitude、速度speed,并设置相应的列属性,允许为NULL。
3.2数据的存储与互联
数据的存储与互联技术是存储系统设计的核心。本设计中定义了两个核心类:JdbcUtils工具类和JdbcUtilsImpl类。其中,JdbcUtils类主要用于实现加载配置文件、加载驱动类与获取连接操作;JdbcUtilsImpl类主要用于向数据库中存储GPS数据、数据表的更新、释放等。其部分关键代码如下所示,图7为数据存入情况。
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties");
props = new Properties();
props.load(in);
Class.forName(props.getProperty("driverClassName"));
DriverManager.getConnection(props.getProperty("url"),props.getProperty("username"),props.getProperty("password"));
String sql = "INSERT INTO gpsdata VALUES(?,?,?,?,?)";
pstmt=con.prepareStatement(sql);pstmt.setString(1, gpsdata.getDatetime());
......
pstmt.setDouble(4, gpsdata.getSpeed());
pstmt.executeUpdate();
4结论
本系统在Eclipse开发环境下,结合MySQL数据库技术,对GPS定位数据进行接收和提取处理,并将其存入数据库中,以供开发者后期使用。其中,系统中利用了Java中的多线程技术,将数据接收与提取处理高效地分离,有效地提高了数据的处理能力。同时,系统中加入了数据存储部分,为数据的有效性和可靠性提供了保障,更加体现了系统的整体性能。
参考文献
[1] 张帅帅, 崔红霞. GPS数据的采集提取和显示[J]. 科技创新导报, 2013(25):2223.
[2] 王缓缓, 李虎. 用Java实现GPS全球定位系统定位数据的提取[J]. 计算机与现代化, 2004(11):8991.
[3] 李新源, 赵树法, 魏宗寿,等. 基于Java语言的GPS接收机的串口通信程序设计[J]. 铁路计算机应用, 2007, 16(5):46.
[4] 徐涴砯, 陈光, 高孟茹. GPS船舶试航数据提取与存储系统的开发[J]. 微型机与应用, 2013,32(23):8689.
[5] 丁振凡, 王小明, 邓建明,等. 基于Java的串口通信应用编程[J]. 微型机与应用, 2012, 31(13):8486.
[6] 牛立, 王景中. GPS导航数据提取的设计与研究[J]. 微型机与应用, 2010, 29(20):13.
[7] 李良, 朱善安. 基于Java的串口通信[J]. 电子器件, 2007, 30(2):714716,720.
[8] 吴金锋, 刘伟平, 黄红斌. Java串口通信数据采控系统的设计与实现[J]. 微计算机信息, 2010, 26(10):6566.
[9] 袁林, 曹杰. 利用VC++实现GPS全球定位系统定位数据的提取[J]. 现代电子技术, 2004, 27(24):105107.