鮑萍萍,陳光,,王朋,,王鵬輝
(東華大學(xué) 信息科學(xué)與技術(shù)學(xué)院 上海 201620)
摘要:針對(duì)傳統(tǒng)的在VC++平臺(tái)上實(shí)現(xiàn)的GPS定位數(shù)據(jù)的提取與存儲(chǔ)系統(tǒng)已經(jīng)不能滿足系統(tǒng)的實(shí)時(shí)性和可靠性等需求,,以及軟件方面存在擴(kuò)展性,、兼容性、移植性差等問(wèn)題,,運(yùn)用GPS定位技術(shù),、多線程串口通信處理技術(shù)和數(shù)據(jù)庫(kù)存儲(chǔ)訪問(wèn)技術(shù),應(yīng)用Java語(yǔ)言編寫(xiě),,在Eclipse開(kāi)發(fā)工具上設(shè)計(jì)并實(shí)現(xiàn)了一套GPS定位數(shù)據(jù)的實(shí)時(shí)提取與存儲(chǔ)系統(tǒng),。測(cè)試結(jié)果表明,該系統(tǒng)運(yùn)行穩(wěn)定,,實(shí)驗(yàn)數(shù)據(jù)有效可靠,,達(dá)到了預(yù)期的目標(biāo)。
關(guān)鍵詞:GPS,;多線程,;串口通信;數(shù)據(jù)存儲(chǔ),;Java
0引言
隨著衛(wèi)星導(dǎo)航定位技術(shù)的發(fā)展,全球衛(wèi)星定位系統(tǒng)(Global Position System,,GPS)成為目前最為常用的一種導(dǎo)航定位系統(tǒng),,其全方位、全天候,、全時(shí)段,、高精度等特點(diǎn)使得GPS的應(yīng)用遙遙領(lǐng)先,。其原理是用戶通過(guò)GPS接收機(jī)接收衛(wèi)星信號(hào),結(jié)合地理信息系統(tǒng)對(duì)信號(hào)進(jìn)行處理,,從而獲得用戶所需的經(jīng)緯度,、速度等信息,最終實(shí)現(xiàn)導(dǎo)航和定位 [1],。而GPS接收機(jī)中的數(shù)據(jù)提取與存儲(chǔ)是GPS定位中的重要組成部分,。
目前,GPS定位數(shù)據(jù)處理系統(tǒng)大多數(shù)在VC++平臺(tái)上實(shí)現(xiàn),,其擴(kuò)展性,、移植性、兼容性差,。為改善其性能,,2003年王緩緩等人[2]對(duì)GPS定位數(shù)據(jù)進(jìn)行提取,增強(qiáng)了系統(tǒng)的擴(kuò)展性和兼容性,,但仍然存在數(shù)據(jù)不能實(shí)時(shí)接收,、同步處理及存儲(chǔ)等問(wèn)題。2006年李新源等人基于Java語(yǔ)言的GPS接收機(jī)的串口通信程序設(shè)計(jì)[3],,整個(gè)系統(tǒng)結(jié)構(gòu)雖然較為清晰,,但其只是實(shí)現(xiàn)了GPS數(shù)據(jù)的提取,對(duì)數(shù)據(jù)的存儲(chǔ)并未研究,。
為改善已有GPS定位數(shù)據(jù)的提取與存儲(chǔ)功能,,有效提高數(shù)據(jù)的可靠性和實(shí)時(shí)性等要求,本文基于Java的跨平臺(tái)性,、開(kāi)放性與面向?qū)ο蟮忍攸c(diǎn)[3],,運(yùn)用GPS定位技術(shù)、多線程串口通信編程技術(shù)和數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù),,設(shè)計(jì)了一套GPS定位數(shù)據(jù)的提取與存儲(chǔ)系統(tǒng),。該系統(tǒng)能實(shí)時(shí)地接收、處理和存儲(chǔ)GPS數(shù)據(jù),。
1系統(tǒng)組成
GPS定位數(shù)據(jù)的提取與存儲(chǔ)系統(tǒng)主要包括GPS串口通信和GPS數(shù)據(jù)存儲(chǔ)兩部分,,其結(jié)構(gòu)圖如圖1所示。圖1系統(tǒng)架構(gòu)圖其中,,GPS串口通信部分主要實(shí)現(xiàn)多線程編程,、串口的打開(kāi)、串口數(shù)據(jù)的接收,、提取處理與串口的關(guān)閉等操作,;GPS數(shù)據(jù)存儲(chǔ)部分實(shí)現(xiàn)將提取處理后的數(shù)據(jù)保存在MySQL數(shù)據(jù)庫(kù)中 [24]。
2GPS串口通信
傳統(tǒng)的用Java實(shí)現(xiàn)串口通信通常采用串口API,它以獨(dú)立jar包的方式提供一個(gè)標(biāo)準(zhǔn)擴(kuò)展[5],。此系統(tǒng)中,,采用串口和并口通信的開(kāi)源Java類(lèi)庫(kù)RXTX,其提供了多操作系統(tǒng)下的兼容javax.comm串口通信包API的實(shí)現(xiàn),。在Windows操作系統(tǒng)下,,包含3個(gè)文件:RXTXcomm.jar、rxtxParallel.dll和rxtxSerial.dll,,其提圖2串口通信流程圖供了通信用的Java API及相應(yīng)的驅(qū)動(dòng)類(lèi)接口,。系統(tǒng)在串口通信前,必須對(duì)串口驅(qū)動(dòng)程序裝載,。其串口操作流程圖如圖2所示[6],。
2.1多線程技術(shù)
對(duì)串口進(jìn)行操作的過(guò)程中,為提高CPU的使用效率,,系統(tǒng)采用了多線程處理技術(shù),,很好地滿足了多任務(wù)和實(shí)時(shí)性的需求[78]。
Java有兩種實(shí)現(xiàn)多線程的方式:一是創(chuàng)建一個(gè)類(lèi)繼承Thread類(lèi),,并重寫(xiě)run()方法,;二是實(shí)現(xiàn)Runnable接口。本文采用繼承Thread類(lèi)的方式實(shí)現(xiàn)多線程,,主要涉及串口數(shù)據(jù)接收線程,、數(shù)據(jù)提取處理線程、數(shù)據(jù)存儲(chǔ)線程,,系統(tǒng)的關(guān)鍵是處理好線程之間的同步,、安全和死鎖[78]。
2.2多線程串口通信
?。?)串口數(shù)據(jù)接收
在對(duì)GPS串口數(shù)據(jù)接收之前,,必須明確GPS接收機(jī)的數(shù)據(jù)接收格式[24]。GPS接收機(jī)遵守NEMA0183標(biāo)準(zhǔn)協(xié)議,,該協(xié)議內(nèi)容包含GPS定位的經(jīng)緯度,、速度、日期時(shí)間,、地面航向,、衛(wèi)星狀況、磁偏角等信息,。本系統(tǒng)中,,使用NEMA0183協(xié)議中的“MYMGPRMC”幀格式進(jìn)行數(shù)據(jù)的提取處理。
在進(jìn)行數(shù)據(jù)接收前,,首先打開(kāi)串口并進(jìn)行參數(shù)設(shè)置,。然后,調(diào)用數(shù)據(jù)接收線程中的類(lèi)實(shí)例方法對(duì)串口數(shù)據(jù)進(jìn)行接收。為保證數(shù)據(jù)的可靠性和實(shí)時(shí)性,,系統(tǒng)中設(shè)置了串口事件監(jiān)聽(tīng)器。其部分關(guān)鍵代碼如下,,數(shù)據(jù)接收結(jié)果圖如圖3所示,。
(2)串口數(shù)據(jù)提取處理
在成功接收GPS數(shù)據(jù)串后,,要對(duì)其解析,,轉(zhuǎn)化成相應(yīng)的格式。其思路如下:首先,,判斷數(shù)據(jù)串中是否含有“MYMGPRMC”數(shù)據(jù),,若存在,則截取MYMGPRMC包含的70 B數(shù)據(jù),;其次,,對(duì)MYMGPRMC包含的GPS定位信息進(jìn)行提取,;最后,,對(duì)數(shù)據(jù)作進(jìn)一步的處理運(yùn)算并保存在GpsData對(duì)象中,提高了代碼的健壯性,。為了簡(jiǎn)化問(wèn)題,,本文只提取出日期時(shí)間、經(jīng)緯度,、狀態(tài),、速度信息[9]。其部分關(guān)鍵代碼如下所示[2],,數(shù)據(jù)提取處理圖如圖4,、圖5所示。
3數(shù)據(jù)庫(kù)存儲(chǔ)
對(duì)GPS定位數(shù)據(jù)進(jìn)行提取處理后,,需要將數(shù)據(jù)保存在數(shù)據(jù)庫(kù)中,,方便后期的使用。本設(shè)計(jì)將GPS定位數(shù)據(jù)存儲(chǔ)部分作為后臺(tái)數(shù)據(jù)庫(kù),,不僅作為定位數(shù)據(jù)的容器,,同時(shí)還可以隨時(shí)隨地地訪問(wèn)數(shù)據(jù)庫(kù)與進(jìn)行增、刪,、改,、查等操作[4]。
在本系統(tǒng)中,,將靈活可靠的MySQL作為后臺(tái)數(shù)據(jù)庫(kù),,應(yīng)用JDBC技術(shù)連接數(shù)據(jù)庫(kù)。下面從數(shù)據(jù)庫(kù)的配置設(shè)計(jì)、存儲(chǔ)和互聯(lián)來(lái)實(shí)現(xiàn)高效可靠的數(shù)據(jù)存儲(chǔ),。
3.1數(shù)據(jù)庫(kù)的配置與數(shù)據(jù)表的設(shè)計(jì)
對(duì)MySQL數(shù)據(jù)庫(kù)操作前,,需要對(duì)其配置。配置信息封裝在dbconfig.properties配置文件中,,如圖6所示,。
本系統(tǒng)采用JDBC方式連接數(shù)據(jù)庫(kù),在MySQL中,,需要新建一個(gè)數(shù)據(jù)庫(kù)命名為mydb1,,并添加一張數(shù)據(jù)表gpsdata用于存儲(chǔ)GPS定位數(shù)據(jù)。數(shù)據(jù)表的列分別命名為日期時(shí)間datetime,、定位狀態(tài)status,、緯度latitude、經(jīng)度longitude,、速度speed,,并設(shè)置相應(yīng)的列屬性,允許為NULL,。
3.2數(shù)據(jù)的存儲(chǔ)與互聯(lián)
數(shù)據(jù)的存儲(chǔ)與互聯(lián)技術(shù)是存儲(chǔ)系統(tǒng)設(shè)計(jì)的核心,。本設(shè)計(jì)中定義了兩個(gè)核心類(lèi):JdbcUtils工具類(lèi)和JdbcUtilsImpl類(lèi)。其中,,JdbcUtils類(lèi)主要用于實(shí)現(xiàn)加載配置文件,、加載驅(qū)動(dòng)類(lèi)與獲取連接操作;JdbcUtilsImpl類(lèi)主要用于向數(shù)據(jù)庫(kù)中存儲(chǔ)GPS數(shù)據(jù),、數(shù)據(jù)表的更新,、釋放等。其部分關(guān)鍵代碼如下所示,,圖7為數(shù)據(jù)存入情況,。
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結(jié)論
本系統(tǒng)在Eclipse開(kāi)發(fā)環(huán)境下,結(jié)合MySQL數(shù)據(jù)庫(kù)技術(shù),,對(duì)GPS定位數(shù)據(jù)進(jìn)行接收和提取處理,,并將其存入數(shù)據(jù)庫(kù)中,以供開(kāi)發(fā)者后期使用,。其中,,系統(tǒng)中利用了Java中的多線程技術(shù),將數(shù)據(jù)接收與提取處理高效地分離,,有效地提高了數(shù)據(jù)的處理能力,。同時(shí),系統(tǒng)中加入了數(shù)據(jù)存儲(chǔ)部分,,為數(shù)據(jù)的有效性和可靠性提供了保障,,更加體現(xiàn)了系統(tǒng)的整體性能,。
參考文獻(xiàn)
[1] 張帥帥, 崔紅霞. GPS數(shù)據(jù)的采集提取和顯示[J]. 科技創(chuàng)新導(dǎo)報(bào), 2013(25):2223.
?。?] 王緩緩, 李虎. 用Java實(shí)現(xiàn)GPS全球定位系統(tǒng)定位數(shù)據(jù)的提?。跩]. 計(jì)算機(jī)與現(xiàn)代化, 2004(11):8991.
[3] 李新源, 趙樹(shù)法, 魏宗壽,,等. 基于Java語(yǔ)言的GPS接收機(jī)的串口通信程序設(shè)計(jì)[J]. 鐵路計(jì)算機(jī)應(yīng)用, 2007, 16(5):46.
?。?] 徐涴砯, 陳光, 高孟茹. GPS船舶試航數(shù)據(jù)提取與存儲(chǔ)系統(tǒng)的開(kāi)發(fā)[J]. 微型機(jī)與應(yīng)用, 2013,32(23):8689.
?。?] 丁振凡, 王小明, 鄧建明,等. 基于Java的串口通信應(yīng)用編程[J]. 微型機(jī)與應(yīng)用, 2012, 31(13):8486.
[6] 牛立, 王景中. GPS導(dǎo)航數(shù)據(jù)提取的設(shè)計(jì)與研究[J]. 微型機(jī)與應(yīng)用, 2010, 29(20):13.
?。?] 李良, 朱善安. 基于Java的串口通信[J]. 電子器件, 2007, 30(2):714716,,720.
[8] 吳金鋒, 劉偉平, 黃紅斌. Java串口通信數(shù)據(jù)采控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 微計(jì)算機(jī)信息, 2010, 26(10):6566.
?。?] 袁林, 曹杰. 利用VC++實(shí)現(xiàn)GPS全球定位系統(tǒng)定位數(shù)據(jù)的提?。跩]. 現(xiàn)代電子技術(shù), 2004, 27(24):105107.