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