
![基于智能小車的信息采集系統(tǒng)-上位機數據接收模塊設計[畢業(yè)論文]_第1頁](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/16/21/75210d51-24a8-4ad7-9555-ad51b241beb9/75210d51-24a8-4ad7-9555-ad51b241beb91.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 本科畢業(yè)設計(論文)</p><p> 論文題目基于智能小車的信息采集系統(tǒng)-上位機數據接收模塊設計</p><p> (英文)Car-based information collection system-PC </p><p> data receiving module design</p><p> 所在學
2、院 </p><p> 專業(yè)班級 通信工程 </p><p> 學生姓名 學號 </p><p> 指導教師 職稱 </p><p> 完成日期
3、 年 月 日</p><p><b> 摘 要</b></p><p> 隨著現代信息技術的高速發(fā)展,數據采集方面的技術也在不斷地向前發(fā)展,并在信息技術中占有重要地住。溫度、濕度等環(huán)境參數在智能家居、工業(yè)控制、智能農業(yè)等方面都得到很高的重視。數據采集系統(tǒng)是據采集結合基于計算機的測量軟硬件產品來實現靈活的、用戶自定義的測量系統(tǒng)。如
4、何實時直觀準確地采集到溫度,亮度等數據成為了焦點。</p><p> 本次設計的上位機數據接收模塊,將實現如下功能:通過上位機Java程序讀取串口接收到的信息,并將數據保存到My SQL數據庫。</p><p> 由于實驗條件限制,本上位機接收模塊通過VSPD虛擬串口實現串口通信,再通過Java驅動串口通信方式接收無線收發(fā)模塊上采集的信息,并將其傳送到上住機(PC機),再通過Java程
5、序將各項數據保持到My SQL數據庫進行分析存儲。</p><p> 關鍵詞:Java;數據采集;上位機接收;My SQL; </p><p><b> Abstract</b></p><p> With the rapid development of modern information tech
6、nology, data acquisition technology are constantly move forward, and IT in the possession of an important living. Environmental parameters such as temperature, humidity, high attention in the smart home, industrial contr
7、ol, intelligent agriculture. The data acquisition system data acquisition combined with computer-based measurement hardware and software products to achieve a flexible, user-defined measurement system. How real-time visi
8、bility </p><p> Keywords:Java; data collection; to receive the host computer; My SQL;</p><p><b> 目錄 </b></p><p><b> 1引言- 1 -</b></p><p> 1.
9、1設計目的和意義- 1 -</p><p> 1.2設計內容- 1 -</p><p> 2系統(tǒng)使用技術綜述- 2 -</p><p> 2.1數據庫技術- 2 -</p><p> 2.2編程語言- 2 -</p><p> 2.3開發(fā)工具- 4 -</p><p>
10、2.3.1My SQL簡介- 4 -</p><p> 2.3.2 VSPD虛擬串口簡介- 5 -</p><p> 2.3.3 NetBeans 簡介- 6 -</p><p> 2.3.4串口調試助手簡介- 6 -</p><p> 3 系統(tǒng)設計- 8 -</p><p> 3.1上位機接收模塊
11、設計- 8 -</p><p> 3.2 My SQL數據庫表設計- 9 -</p><p> 3.2.1創(chuàng)建數據庫表- 9 -</p><p> 3.2.2表的結構實驗圖- 10 -</p><p> 3.3java接收串口數據- 11 -</p><p> 3.3.1VSPD虛擬串口通信的實現
12、- 11 -</p><p> 3.3.2JAVA實時讀取串口數據- 13 -</p><p> 3.4連接數據庫并導入數據- 17 -</p><p> 3.4.1Java連接數據庫- 17 -</p><p> 3.4.2導入數據庫表- 18 -</p><p> 3.5合并實現接收數據并存入數據
13、庫- 19 -</p><p> 4結論- 22 -</p><p> 參考文獻- 23 -</p><p> 附錄1 源程序代碼- 24 -</p><p> 附錄2 畢業(yè)設計作品說明書- 29 -</p><p><b> 1引言</b></p><
14、p> 1.1設計目的和意義</p><p> 在計算機廣泛應用的今天,數據采集的重要性已經變的尤為顯著了。數據采集系統(tǒng)是計算機與外部物理世界連接的橋梁,在計算機的各個領域都具有重要的作用和影響。數據采集,又稱數據獲取,是利用一種裝置,從系統(tǒng)外部采集數據并輸入到系統(tǒng)內部的一個接口[1]。</p><p> 數據采集已經被廣泛應用于互聯網及分布式領域,數據采集領域已經發(fā)生了重要的變
15、化。首先,分布式控制應用場合中的智能數據采集系統(tǒng)在國內外已經取得了長足的發(fā)展。其次,總線兼容型數據采集插件的數量不斷增大,與個人計算機兼容的數據采集系統(tǒng)的數量也在增加。國內外的各種數據采集機先后問世,將數據采集帶入了一個全新的時代。數據采集就是指從傳感器和其它待測設備等模擬和數字被測單元中自動采集信息的過程。數據采集系統(tǒng)是據采集結合基于計算機的測量軟硬件產品來實現靈活的、用戶自定義的測量系統(tǒng)[2]。 </p><p&
16、gt; 本次基于小車的數據采集系統(tǒng)的目的主要是為了探測小車周圍環(huán)境及測量溫度、亮度或速度等物理現象?;赑C的數據采集主要是通過模塊化硬件、應用軟件和計算機的結合,進行測量采集與接收。盡管數據采集系統(tǒng)根據不同的應用需求有不同的定義,但各個系統(tǒng)采集、分析和顯示信息的目的卻都相同。數據采集系統(tǒng)整合了信號、傳感器、激勵器、信號調理、數據采集設備和應用軟件等,本文主要對信息采集系統(tǒng)上位機接收部分進行設計以實現接收小車發(fā)送的數據并進行分析存儲。
17、 </p><p><b> 1.2設計內容</b></p><p> 設計一個上位機數據接收模塊,通過上位機Java程序讀取由串口接收到的信息,并將數據保存到My SQL數據庫。根據上位機接收系統(tǒng)的實際要求,本接收模塊設計的要求將實現以下功能:</p><p> 1、通過Java程序讀取串口數據;</p>
18、<p> 2、通過Java程序連接數據庫并把數據保存;</p><p><b> 2系統(tǒng)使用技術綜述</b></p><p><b> 2.1數據庫技術</b></p><p> 數據庫技術是信息系統(tǒng)的一個核心技術。是一種計算機輔助管理數據的方法,它研究如何組織和存儲數據,如何高效地獲取和處理數據。是
19、通過研究數據庫的結構、存儲、設計、管理以及應用的基本理論和實現方法,并利用這些理論來實現對數據庫中的數據進行處理、分析和理解的技術。數據庫技術是研究、管理和應用數據庫的一門軟件科學[3]。 </p><p> 數據庫是按照數據結構來組織、存儲和管理數據的倉庫,它產生于距今五十年前,隨著信息技術和市場的發(fā)展,特別是20世紀90年代以后,數據管理不再僅僅是存儲和管理數據,而轉變成為用戶所需要的各種數據管理的方式。數
20、據庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型數據庫系統(tǒng)都在各個方面都得到了大量廣泛的應用。</p><p> 目前,常用的數據庫管理系統(tǒng)有IBM的DB2、Oracle、Sybase、INFORMIX和INGRES。這些產品都支持多平臺,如 UNIX、VMS、Windows,但支持的程度不一樣。My SQL是一個小型關系型數據庫管理系統(tǒng),開發(fā)者為瑞典My SQL AB公司。由于其體
21、積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了My SQL作為網站數據庫。</p><p><b> 2.2編程語言</b></p><p> C#是一種由C和C++衍生出來的面向對象的編程語言,它在繼承C和C++強大功能的同時去掉了一些它們的復雜特性。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強
22、大的操作能力、優(yōu)雅的語法風格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET開發(fā)的首選語言。C#是微軟公司在2000年7月發(fā)布的一種全新且簡單、安全、面向對象的程序設計語言,是專門為.NET的應用而開發(fā)的語言。</p><p> Java是一種可以撰寫跨平臺應用軟件的面向對象的程序設計語言,是由Sun Microsystems公司于1995年5月推出的Java程序設計語言和Java平臺(即Java SE,
23、 Java EE, Java ME)的總稱。Java是一個純的面向對象的程序設計語言,它繼承了 C++ 語言面向對象技術的核心,Java 不同于一般的編譯執(zhí)行計算機語言和解釋執(zhí)行計算機語言。它首先將源代碼編譯成二進制字節(jié)碼(byte code),然后依賴各種不同平臺上的虛擬機來解釋執(zhí)行字節(jié)碼,從而實現了“一次編譯、到處執(zhí)行”的跨平臺特性。下面是2種編程語言的數據庫連接:</p><p> 1)C#數據庫連接:在
24、C#中使用ADO接口操縱SQL等數據庫。由于ADO數據源幾乎覆蓋了目前常見的數據源類型,對于ODBC所不支持的數據源,ADO無疑是唯一的選擇。而ADO的批更新功能,更是網絡環(huán)境下大數據量更新應用的重要因素。由于ADO缺乏大量的第三方廠商的支持,使得ADO目前遠不如ODBC普及,但其面向對象的特性將使ADO具有比較廣闊的發(fā)展前景[4]。</p><p> 2)Java數據庫連接:(Java Database Co
25、nnectivity,簡稱JDBC)是Java語言中用來規(guī)范客戶端程序如何來訪問數據庫的應用程序接口,提供了諸如查詢和更新數據庫中數據的方法。JDBC(Java Data Base Connectivity,java數據庫連接)是一種用于執(zhí)行SQL語句的Java API,可以為多種關系數據庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發(fā)人員能夠編寫數據庫應用程
26、序[5]。在關系數據庫的"對象/關系"映射中,表中的每行對應于類的一個實例,而每列的值對應于該實例的一個屬性,程序員可直接對 Java 對象進行操作;存取數據所需的 SQL 調用將在"掩蓋下"自動生成。此外還可提供更復雜的映射,例如將多個表中的行結合進一個 Java 類中[6]。</p><p> 通常通信的形式可以分為兩種,一種為并行數據通信,另一種為串行數據通信。通信
27、的主要目的是將數據從一端發(fā)送到另一端,來實現數據的交換。數據在到達正確目的地之前,可能需要經過一系列中間節(jié)點,這些中間節(jié)點負責數據的轉送工作,以送達目的地,這些中間節(jié)點稱為DSE(Data Switching Equipment,數據交換設備)。終端設備發(fā)送數據時,必須先將數據轉換為電氣信號,以便在線路上傳遞,而負責數據與電氣信號轉換的設備稱為DCE(Data Communication Equipment,數據通信設備)。DTE與DC
28、E間的數據傳輸線路通常使用RS-232串行通信,而DCE與DSE間的媒體則包括了雙絞線、同軸電纜、光纖或無線電等等 [7]。</p><p> 串口通信(Serial Communications)的概念非常簡單,串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數據的同時用另一根線接收數據。它能夠非常簡單的實現遠距離通信。典型地,串口用于ASCII碼字符的傳輸
29、。通信使用3根線完成:(1)地線,(2)發(fā)送,(3)接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數據同時在另一根線上接收數據[8]。其他線用于握手,但是不是必須的。串口通信最重要的參數是波特率、數據位、停止位和奇偶校驗。對于兩個進行通信的端口,這些參數必須匹配。波特率是一個衡量通信速度的參數。它表示每秒鐘傳送的bit的個數。數據位是衡量通信中實際數據位的參數。當計算機發(fā)送一個信息包,實際的數據不會是8位的,標準的值是5、7和8位。
30、如何設置取決于你想傳送的信息。停止位是用于表示單個包的最后一位。典型的值為1,1.5和2位。串口是計算機上一種非常通用設備通信的協議。大多數計算機包含兩個基于RS232的串口。串口同時也是儀器儀表設備通用的通信協議;很多GPIB兼容的設備也帶有RS-232口[8]。同時,串口通信協議也可以</p><p> 在C#中實現串口通信,我們有三種方法: 第一:通過MSCOMM控件這是最簡單的,最方便的方法。第二:微軟
31、在.NET新推出了一個串口控件,基于.NET的P/Invoke調用方法實現,第三:自己用API寫串口通信,可以方便實現想要的各種功能。</p><p><b> 2.3開發(fā)工具</b></p><p> 2.3.1My SQL簡介</p><p> My SQL是最受歡迎的開源SQL數據庫管理系統(tǒng),它由 My SQL AB開發(fā)、發(fā)布和支持
32、。My SQL AB是一家基于My SQL開發(fā)人員的商業(yè)公司,它是一家使用了一種成功的商業(yè)模式來結合開源價值和方法論的第二代開源公司。My SQL是My SQL AB的注冊商標。My SQL是一個真正的多用戶、多線程SQL數據庫服務器。SQL(結構化查詢語言)是世界上最流行的和標準化的數據庫語言。My SQL是以一個客戶機/服務器結構的實現,它由一個服務器守護程序My SQL和很多不同的客戶程序和庫組成[9]。My SQL 主要目標是快
33、速、強大和易用。最初是因為我們需要這樣一個SQL服務器,它能處理與任何可不昂貴硬件平臺上提供數據庫的廠家在一個數量級上的大型數據庫,但速度更快,My SQL就開發(fā)出來。自1996年以來,我們一直都在使用My SQL,其環(huán)境有超過 40 個數據庫,包含 10,000個表,其中500多個表超過7百萬行,這大約有100 個吉字節(jié)(GB)的關鍵應用數據與其他數據庫管理系統(tǒng)相比,My SQL具有以下優(yōu)勢:</p><p>
34、 1、My SQL是一個關系數據庫管理系統(tǒng)。</p><p> 2、My SQL是開源的。</p><p> 3、My SQL服務器是一個快速的、可靠的和易于使用的數據庫服務器。</p><p> 4、My SQL服務器工作在客戶/服務器或嵌入系統(tǒng)中。</p><p> 5、有大量的My SQL軟件可以使用。</p>
35、<p> 2.3.2 VSPD虛擬串口簡介</p><p> 本上位機數據接收模塊串口通信部分采用VSPD虛擬串口通信進行數據接收。該軟件可以將TCP/IP連接成本機的虛擬COM口,應用程序通過訪問虛擬窗口,就可以完成遠程控制、數據傳輸等功能。VSPD虛擬串口軟件具有如下的特性:</p><p> 1)多虛擬串口映射:VSPM可以同時映射出多個虛擬串口,這些串口可以相互獨立
36、,互不干擾;虛擬串口的最大數量僅受操作系統(tǒng)和電腦配置限制;每虛擬串口可以單獨設置參數;支持虛擬串口與串口服務器串口參數同步;</p><p> 2)多線程架構:每個虛擬串口同時具備收/發(fā)2個獨立線程;所有串口可以同時工作;此架構可以確保在大數據量吞吐下,仍可以保持較高的系統(tǒng)穩(wěn)定性;可以獨立設置虛擬串口線程的優(yōu)先級,以取得更高的性能;</p><p> 3)自動連接、自動重新連接:當虛擬
37、串口被打開時,VSPD會自動與遠程設備建立TCP/IP連接(Client模式下);如果發(fā)送數據到遠程設備失敗,VSPD會自動與遠程設備建立TCP/IP連接;</p><p> 4)數據監(jiān)控:實時顯示虛擬串口的配置參數、數據傳輸狀態(tài)、傳輸數據等;</p><p><b> 5)3種工作模式:</b></p><p> Server模式,軟件
38、處于監(jiān)聽狀態(tài),等待客戶模式的設備發(fā)出的TCP/IP連接;Client模式,軟件會根據設置,主動與其他服務器模式設備建立TCP/IP連接;</p><p> UDP廣播模式,將使用UDP廣播模式傳輸數據,通常用于組建大規(guī)模的半雙工網絡;</p><p> 軟件在同一時刻只能運行在一種模式下,3種模式切換運行;</p><p> 2.3.3 NetBeans 簡介
39、</p><p> NetBeans 由Sun公司在2000年創(chuàng)立,它是開放源運動以及開發(fā)人員和客戶社區(qū)的家園,旨在構建世界級的Java IDE。NetBeans當前可以在Solaris、Windows、Linux和Macintosh OS X平臺上進行開發(fā),并在SPL(Sun公用許可)范圍內使用。 </p><p> NetBeans IDE 的開發(fā)環(huán)境下可以編寫,編譯,調試工具和使
40、用程序。程序用 Java 書寫,但是能夠支持包括 C, C++ 的許多編程語言, XML, HTML 和更多。程序也包括有對代碼完成,注解,宏和自動缺口的支持突出代碼編輯的句法。NetBeans IDE是一個屢獲殊榮的集成開發(fā)環(huán)境,可以很方便的在Windows,Mac,Linux和Solaris等平臺中運行。NetBeans包括開源的開發(fā)環(huán)境和應用平臺,NetBeans IDE可以使開發(fā)人員利用Java平臺能夠快速創(chuàng)建Web、企業(yè)、桌面
41、以及移動的應用程序,NetBeans IDE目前支持PHP、Ruby、JavaScript、Ajax、Groovy、Grails和C /C + +等開發(fā)語言。NetBeans項目由一個活躍的開發(fā)社區(qū)提供支持, NetBean開發(fā)環(huán)境提供了豐富的產品文檔和培訓資源以及大量的第三方插件[11]?!?lt;/p><p> 2.3.4串口調試助手簡介</p><p> 一個小巧的串口調試助手,支持
42、常用的300-115200bps波特率,能設置校驗、數據位和停止位,能以ASCII碼或十六進制接收或發(fā)送任何數據或字符(包括中文),可以任意設定自動發(fā)送周期,并能將接收數據保存成文本文件,能發(fā)送任意大小的文本文件。硬件連接方面,傳統(tǒng)臺式PC機支持標準RS232接口,當下帶有串口的PC已經很少見了,所以需要usb/232轉換接口,并且安裝相應驅動程序才可以[12]。串口調試助手的主要功能如下:</p><p>
43、1.定時發(fā)送數據; </p><p> 2.自動搜索串口,并打開串口; </p><p> 3.可以以十六進制或ASCII格式,向指定串口發(fā)送數據;</p><p> 4.接收數據時,光標始終顯示在最后一行; </p><p> 5.接收數據可以進行十六進制和ASCII切換; </p><p> 6.串口打開
44、過程中,可修改通訊參數,如波特率,停止位等; </p><p> 7.自動記錄上次操作參數,如串口號,波特率,校驗位等;</p><p> 8.可以發(fā)送專用指令讀寫B(tài)OAST數字傳感器內碼,修改地址等;</p><p> 9.線程中監(jiān)控串口事件,無數據時,不接收; </p><p> 10.接收數據可以保存為文件,也可打開已保存數據文
45、件; </p><p><b> 3 系統(tǒng)設計</b></p><p> 3.1上位機接收模塊設計</p><p> 通過智能監(jiān)控系統(tǒng)中上位機的控制模塊,主要內容為設計系統(tǒng)圖形界面、建立數據庫及java數據庫連接等部分。上位機能通過無線串口傳輸模塊與智能小車進行通信連接,以上位機接收模塊進行數據分析及存儲,通過上位機控制模塊進行數據調用及
46、顯示,以此來實現對小車的精確控制并在圖形界面中顯示所采集的數據。主要目標使小車在運行過程中,能夠自動檢測到障礙物且能避開障礙物運行,自動采集溫度,速度等數據存入數據庫中并通過數據庫調用顯示。本系統(tǒng)總體設計圖為3-1所示。</p><p> 圖3-1智能小車系統(tǒng)總體設計框圖</p><p> 本文主要介紹上位機的數據接收模塊設計部分,其中主要內容為VSPM模擬串口通信接收、Java連接數
47、據庫及導入數據庫和數據圖形界面顯示等部分。上位機通過無線串口傳輸模塊與下位機進行通信連接,以上位機接收模塊進行數據分析及存儲,通過上位機控制模塊進行數據調用及顯示,以此來實現對小車各個數據及狀態(tài)的檢測與控制。上位機接收模塊通過實現串口通信接收來自無線USB模塊的數據再把數據導入數據庫分析存儲,如圖3-2所示。</p><p> 圖3-2 上位機接收模塊框圖</p><p> 3.2
48、My SQL數據庫表設計</p><p> My SQL是一個真正的多用戶、多線程SQL數據庫服務器。本上位機系統(tǒng)安裝了mysql-5.5.19-win32至WIN7系統(tǒng)作為后臺數據庫運行。安裝時設置密碼為123。輸入密碼后正式啟動My SQL服務,再在NeatBeans7.1.1上通過JDBC啟動服務數據庫輸入My SQL安裝時設定的密碼123即可連接。</p><p> 3.2.1
49、創(chuàng)建數據庫表</p><p> (1)在MY SQL中輸入create database YJMS,創(chuàng)建數據庫YJMS,如圖3-3所示:</p><p> 圖3-3 創(chuàng)建數據庫YJMS</p><p> (2)在數據庫YJMS中創(chuàng)建數據表t1和數據表t2。</p><p> 創(chuàng)建t1表的Sql語句為:create table t1(t
50、1_number int(2) not null primary key auto_increment,hours date not null,direction int(4) not null,distance float not null);如圖3-4所示:</p><p> 圖3-4 創(chuàng)建t1表sql語句</p><p> 創(chuàng)建t2表的Sql語句為:create table t2
51、(t2_number int(2) not null, num int(2) not null, kind char(8) not null, much float not null, foreign key(num) references t1(number) on delete cascade on update cascade);如圖3-5所示:</p><p> 圖3-5 創(chuàng)建t2表sql語句</
52、p><p> 3.2.2表的結構實驗圖</p><p> 表的結構實驗圖如圖3-6和3-7所示:</p><p> 圖3-6 t1數據表結構類型</p><p> 圖3-7 t2數據表結構類型</p><p> 使用sql語句查看下t1,t2兩個表格的類型,如圖3-8,3-9所示:</p>&l
53、t;p><b> 圖3-8 t1表</b></p><p><b> 圖3-9 t2表</b></p><p> 3.3java接收串口數據</p><p> 3.3.1VSPD虛擬串口通信的實現</p><p> 1)下載支持win7的虛擬串口VSPD(Configure Virt
54、ual Serial Port Driver)并運行加載COM1和COM2兩個虛擬串口,設置其波特率,數據位等數值一致,如圖3-10所示:</p><p> 圖3-10 VSPD界面</p><p> 2)運行串口調試助手V2.3設置COM1波特率為9600,校驗位為None,數據位為8,停止位為One,進行數據輸入并打開串口進行數據自動發(fā)送,時間間隔為2000ms,各數據設置和Jav
55、a讀取串口數據代碼一致,并輸入數據。</p><p> 3)用調試助手V2.3對虛擬串口進行調試,在COM1發(fā)送如下格式數據如圖3-11所示:</p><p> 圖3-11COM1發(fā)送數據</p><p> 4)則COM2接收到的數據如圖3-12所示:</p><p> 圖3-12 COM2接收數據</p><p&
56、gt; 3.3.2JAVA實時讀取串口數據</p><p> 安裝NeatBeans7.1.1前需安裝jdk1.6包,因在WIN7上安裝所以需設置環(huán)境變量。首先確定jdk和自己的系統(tǒng)一致:X86對應32,X64對應64。具體步驟為右鍵計算機 ——> 屬性 ——> 左邊的“高級系統(tǒng)設置” ——> “高級”選項卡 ——> 下面“環(huán)境變量”,點擊系統(tǒng)變量->新建-> 變量名:JA
57、VA_HOME 。變量值:C:/Program Files/Java/jdk1.6.0_18。系統(tǒng)變量->編輯->(這個一般是有的)變量名:Path 在變量值的最前面加上: %JAVA_HOME%/bin; (注意符號) 粗體字內容若已經有Path項無須另外新建,直接在后面加,但需用;與前面已有的項分隔開) 系統(tǒng)變量->新建->(這個要新建的) 變量名:CLASSPATH 變量值: .;%JAVA_HOME%/
58、lib;%JAVA_HOME%/lib/dt.jar;%JAVA_HOM E%/lib/tools.jar; (注意符號)在運行 java命令正常則為成功。</p><p> 1)在JavaApplication/classes下新建Java類命名為SimpleRead.java。因為本次所運行JAVA讀取串口數據源代碼中要運用到javax.commm包。所以從網上下載了javax.commm包,并將文件com
59、m.jar拷貝到%JAVA_HOME%\jre\lib\ext;文件 javax.comm. properties拷貝到%JAVA_HOME%\jre\lib; 文件win32comm.dll拷貝到%JAVA_HOME%\bin。注意%JAVA_HOME%是jdk的路徑,而非jre。在NeatBeans下對SimpleRead.java調試運行,使得NeatBeans與COM2相連接接收來自COM1發(fā)送來的數據,如圖3-13所示:<
60、;/p><p> 圖3-13 Java讀取串口數據</p><p> 2)其實現命令的主要代碼是:</p><p> import java.io.*;</p><p> import java.util.*;</p><p> import javax.comm.*;</p><p>
61、 public class SimpleRead implements Runnable, SerialPortEventListener {</p><p> static CommPortIdentifier portId;</p><p> static Enumeration portList;//枚舉類</p><p> InputStream in
62、putStream;</p><p> SerialPort serialPort;</p><p> Thread readThread;</p><p> public static void main(String[] args) {</p><p> portList = CommPortIdentifier.getPortI
63、dentifiers();/*不帶參數的getPortIdentifiers方法獲得一個枚舉對象,該對象又包含了系統(tǒng)中管理每個端口的CommPortIdentifier對象。注意這里的端口不僅僅是指串口,也包括并口。這個方法還可以帶參數。getPortIdentifiers(CommPort)獲得與已經被應用程序打開的端口相對應的CommPortIdentifier對象。 getPortIdentifier(String portNam
64、e)獲取指定端口名(比如“COM1”)的CommPortIdentifier對象。*/</p><p> while (portList.hasMoreElements()) {</p><p> portId = (CommPortIdentifier) portList.nextElement();</p><p> if (portId.getPortT
65、ype() == CommPortIdentifier.PORT_SERIAL)/*getPortType方法返回端口類型*/ {</p><p> if (portId.getName().equals("COM2"))/* 找Windows下的第一個串口*/ {</p><p> // if (portId.getName().equals("/de
66、v/term/a"))/*找Unix-like系統(tǒng)下的第一個串口*/ {</p><p> SimpleRead reader = new SimpleRead();</p><p><b> }</b></p><p><b> }</b></p><p><b> }
67、</b></p><p><b> }</b></p><p> public SimpleRead() {</p><p><b> try {</b></p><p> serialPort = (SerialPort) portId.open("SimpleRea
68、dApp", 2000);/* open方法打開通訊端口,獲得一個CommPort對象。它使程序獨占端口。如果端口正被其他應用程序占用,將使用 CommPortOwnershipListener事件機制,傳遞一個PORT_OWNERSHIP_REQUESTED事件。每個端口都關聯一個 InputStream 何一個OutputStream。如果端口是用open方法打開的,那么任何的getInputStream都將返回相同的數據
69、流對象,除非有close 被調用。有兩個參數,第一個為應用程序名;第二個參數是在端口打開時阻塞等待的毫秒數。*/</p><p> } catch (PortInUseException e) {}</p><p><b> try {</b></p><p> inputStream = serialPort.getInputStrea
70、m();/*獲取端口的輸入流對象*/</p><p> } catch (IOException e) {}</p><p><b> try {</b></p><p> serialPort.addEventListener(this);/*注冊一個SerialPortEventListener事件來監(jiān)聽串口事件*/</p>
71、;<p> } catch (TooManyListenersException e) {}</p><p> serialPort.notifyOnDataAvailable(true);/*數據可用*/</p><p><b> try {</b></p><p> serialPort.setSerialPortPa
72、rams(9600,</p><p> SerialPort.DATABITS_8,</p><p> SerialPort.STOPBITS_1,</p><p> SerialPort.PARITY_NONE);/*設置串口初始化參數,依次是波特率,數據位,停止位和校驗*/</p><p> } catch (Unsupporte
73、dCommOperationException e) {}</p><p> readThread = new Thread(this);</p><p> readThread.start();</p><p><b> }</b></p><p> public void run() {</p>
74、<p><b> try {</b></p><p> Thread.sleep(20000);</p><p> } catch (InterruptedException e) {}</p><p><b> }</b></p><p><b> //串口事件&l
75、t;/b></p><p> public void serialEvent(SerialPortEvent event) {</p><p> switch(event.getEventType()) {</p><p> case SerialPortEvent.BI:/*Break interrupt,通訊中斷*/</p><p
76、> case SerialPortEvent.OE:/*Overrun error,溢位錯誤*/</p><p> case SerialPortEvent.FE:/*Framing error,傳幀錯誤*/</p><p> case SerialPortEvent.PE:/*Parity error,校驗錯誤*/</p><p> case Ser
77、ialPortEvent.CD:/*Carrier detect,載波檢測*/</p><p> case SerialPortEvent.CTS:/*Clear to send,清除發(fā)送*/</p><p> case SerialPortEvent.DSR:/*Data set ready,數據設備就緒*/</p><p> case SerialPort
78、Event.RI:/*Ring indicator,響鈴指示*/</p><p> case SerialPortEvent.OUTPUT_BUFFER_EMPTY:/*Output buffer is empty,輸出緩沖區(qū)清空*/</p><p><b> break;</b></p><p> case SerialPortEven
79、t.DATA_AVAILABLE:/*Data available at the serial port,端口有可用數據。讀到緩沖數組,輸出到終端*/</p><p> byte[] readBuffer = new byte[20];</p><p><b> try {</b></p><p> while (inputStream.
80、available() > 0) {</p><p> int numBytes = inputStream.read(readBuffer);</p><p><b> }</b></p><p> System.out.print(new String(readBuffer));</p><p> }
81、catch (IOException e) {}</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p&g
82、t; 3.4連接數據庫并導入數據</p><p> 3.4.1Java連接數據庫</p><p> Java數據庫連接(JDBC)由一組用Java編程語言編寫的類和接口組成.JDBC為工具/數據庫開發(fā)人員提供了一個標準的API,使他們能夠用純Java API來編寫數據庫應用程序,JDBC是執(zhí)行SQL語句的Java,使用JDBC可以很容易的把SQL語句傳送到任何關系型數據庫中。JDBC
83、基本功能體現為建立與數據庫的連接,然后發(fā)送SQL語,最后處理結果。Java 連接數據庫一般都是六步,以 My SQL 數據庫為例: </p><p> 1.加載數據庫驅動 </p><p><b> try {</b></p><p> Class.forName("com.mysql.jdbc.Driver"); &
84、lt;/p><p> } catch (Exception e) { </p><p> e.printStackTrace();</p><p><b> } </b></p><p><b> 2.連接數據庫 </b></p><p><b> try{
85、</b></p><p> conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/yjms","root","123");//獲得數據庫連接,用戶名,密碼,db數據庫名稱 </p><p> }catch(Exception e){ </p
86、><p> e.printStackTrace(); </p><p><b> } </b></p><p><b> 3.創(chuàng)建執(zhí)行語句 </b></p><p> Statement stmt=conn.createStatement(); </p><p> 3.
87、4.2導入數據庫表</p><p> 4.Sql語句:導入數據表t1相應變量的數據。</p><p> String sql = ("insert into t1 (t1_number,hours,direction,distance) values("6","2012-03-08","50","50&qu
88、ot;)");</p><p><b> 5.返回結果。 </b></p><p> ResultSet rs=stmt.createStatement("select * from db.table"); </p><p><b> 6.處理結果 </b></p><
89、;p> while(rs.next()) {</p><p> rs.getString("username"); </p><p> rs.getString("password"); } </p><p> 7.關閉所有連接(先打開的連接后關閉) </p><p> rs.close
90、(); </p><p> conn.close();</p><p> 經過上面的了解,連接mysql數據庫localhost為3306 ,用戶名為root,密碼為123,可以得出連接數據庫并導入數據的具體代碼為:</p><p> public class JavaApplication1 {</p><p> private s
91、tatic String driver;</p><p> public static void main(String[] args) {</p><p> Connection conn = null; </p><p> Statement stmt = null; </p><p> ResultSet rs = null;&
92、lt;/p><p><b> try{</b></p><p> Class. forName("com.mysql.jdbc.Driver"); </p><p> conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/YJMS",
93、"root","123"); </p><p> stmt = (Statement) conn.createStatement();</p><p> String sql = ("insert into t1 (t1_number,hours,direction,distance) values("6""
94、;,"2012-03-08","50","50")"); </p><p> rs = stmt.executeQuery(sql); </p><p> while(rs.next()) </p><p> rs.close(); </p><p> conn.c
95、lose(); </p><p> } catch(Exception e) {</p><p> System.out.print(e); </p><p><b> }</b></p><p><b> }</b></p><p><b> }<
96、;/b></p><p> 在NetBeans IDE上新建java類為javaapplication1.java,加載導入數據代碼,調試運行文件。如圖3-14所示:</p><p> 圖3-14 導入數據成功</p><p> 3.5合并實現接收數據并存入數據庫</p><p> 將SimpleRead.java和JavaAp
97、plication1.java合成一個代碼DataReceive.java實現自動接收并導入數據庫。合成的代碼如下:</p><p> while (inputStream.available() > 0) {</p><p> int numBytes = inputStream.read(readBuffer);</p><p> String ho
98、urs1="";</p><p> String direction="";</p><p> String distance="";</p><p> int numd=0;</p><p> String[][] a=null;</p><p>
99、 for(int j=0;j<numBytes;j++){</p><p><b> if(j<8){</b></p><p> hours1=hours1+Byte.toString(readBuffer[j]);</p><p><b> }</b></p><p><b
100、> else</b></p><p><b> {</b></p><p><b> if(j==8){</b></p><p> direction=Byte.toString(readBuffer[j]);</p><p><b> }</b>&
101、lt;/p><p><b> else</b></p><p><b> {</b></p><p><b> if(j==9){</b></p><p> distance=Byte.toString(readBuffer[j]);</p><p>
102、;<b> }</b></p><p><b> else{</b></p><p> if(j==10){</p><p> numd=Integer.parseInt(Byte.toString(readBuffer[j]));</p><p> a=new String[numd][
103、2];</p><p><b> }</b></p><p><b> else{</b></p><p> for(int k=0;k<numd;k++){</p><p> a[k][0]=Byte.toString(readBuffer[j]);</p><p
104、><b> j++;</b></p><p> a[k][1]=Byte.toString(readBuffer[j]);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>&l
105、t;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> Connection conn = null; </p><p> Statement stmt = null;
106、</p><p> ResultSet rs = null;</p><p><b> try{</b></p><p> Class. forName("com.mysql.jdbc.Driver"); </p><p> conn=DriverManager.getConnection(&
107、quot;jdbc:mysql://localhost:3306/YJMS","root","123"); </p><p> stmt = (Statement) conn.createStatement();</p><p> String sql = "insert into t1 (t1_number,hours,di
108、rection,distance) values(8,'"+hours1+"',"+direction+","+distance+")"; </p><p> rs = stmt.executeQuery(sql); </p><p> rs.close(); </p><p>
109、; conn.close(); </p><p><b> } </b></p><p> catch(Exception e) {</p><p> System.out.print(e); </p><p><b> }</b></p><p><b&g
110、t; }</b></p><p><b> 4結論</b></p><p> 本設計方案按照任務書的要求通過上位機的接收模塊,上位機模塊為通過無線USB接收模塊采集到的信息在上位機上實時顯示,從而得到所需各項數據和小車運行狀況。本上位機接收模塊通過Java驅動串口通信方式接收無線收發(fā)模塊上采集的信息,并將其傳送到上住機(PC機),再通過Java程序將
111、各項數據導入My SQL數據庫進行分析存儲。</p><p> 經過幾個月的努力,在不斷的尋找突破和程序調試下,本人設計的上位機接收模塊能實現VSPD虛擬串口通信,在NetBeans IDE上通過JAVA程序連接COM2讀取COM1接收到的數據并將接收到數據按格式導入到數據庫進行分析存儲。</p><p> 在設計中我們遇到了很多問題,但通過隊員們的團結合作、認真分析問題,以及老師的認
112、真輔導,我們設計出來的小車已經能夠達到設計要求。由于技術的有限,目前完成的上位機系統(tǒng)還存在有一些缺陷,希望在以后的工作中能進一步完善。</p><p><b> 參考文獻</b></p><p> [1]徐大勝.3-RSS/S踝關節(jié)康復機器人康復評價系統(tǒng)的研究[D].河北工業(yè)大學,2009.</p><p> [2]謝鑫.船舶管路泄露實驗
113、臺架的設計與實現[D].重慶交通大學,2011.</p><p> [3]劉松靄等.數據庫應用技術[J].教育界,2011.</p><p> [4]周虹.在Visual C++中用活動數據對象(ADO)操縱數據庫[J].蘇州城建環(huán)保學院學報,2001.</p><p> [5]熊鶯.Java分布式技術在公路工程建設管理系統(tǒng)中的研究與應用[D].中國石油大學(
114、北京),2005.</p><p> [6]呂劍光.一種基于MVC模式的網吧實名制管理系統(tǒng)的設計與實現[D].北京大學,2008.</p><p> [7]范逸之等.Visual Basic與RS-232串行通信控制[M].北京:北京航空航天大學出版社,2002.</p><p> [8]羅文鋒.基于LabVIEW與PLC的船舶電站監(jiān)控系統(tǒng)的研究[D].武漢理
115、工大學,2009.</p><p> [9]詹永豐.軍隊士兵體質評測支持系統(tǒng)[D].大連理工大學,2005.</p><p> [10]陰璽.心電遠程監(jiān)護系統(tǒng)的數據庫系統(tǒng)設計與數據壓縮算法研究[D].重慶大學,2007.</p><p> [11]百度百科. netbeans百科知識[EB/OL][2012-4-19]..</p><p&g
116、t; [12]百度百科. 串口調試助手百科知識[EB/OL][2012-4-19]..</p><p> [13]C.John,R.Hong.Dynamic Caching and ADO datasets.Dr.Dobb’s Journal,2004,29(12):86-89</p><p> [14]F.Alex,E.Natalia.Advanced Delphi Develop
117、er’s Guide to ADO.wordwaare publishing 2000:128-139</p><p> [15] JG John.OPtimi Zation of Control Parameters of GA.IEEE Transon SMC[J],1994,3,24(4):l~20.</p><p> 附錄1 源程序代碼</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于智能小車的信息采集系統(tǒng)-上位機數據接收模塊設計[開題報告]
- 基于智能小車的信息采集系統(tǒng)-上位機數據接收模塊[文獻綜述]
- 基于智能小車的信息采集系統(tǒng)-上位機數據接收模塊設計[任務書]
- 基于智能小車的信息采集系統(tǒng)-控制單元模塊設計[畢業(yè)論文]
- 基于智能小車的信息采集系統(tǒng)-控制單元模塊設計[開題報告]
- 基于單片機的數據采集系統(tǒng)設計畢業(yè)論文
- 基于單片機的智能小車設計畢業(yè)論文
- 基于單片機的智能小車的設計 畢業(yè)論文
- 基于單片機的智能小車設計-電子信息工程畢業(yè)論文
- 基于單片機的智能小車的設計-畢業(yè)論文
- 基于單片機的智能小車設計-電子信息工程畢業(yè)論文
- 基于智能小車的信息采集系統(tǒng)-控制單元模塊設計[任務書]
- 基于單片機的智能循跡小車設計畢業(yè)論文
- 基于單片機的智能小車設計-畢業(yè)論文.doc
- 基于單片機的智能小車設計-畢業(yè)論文.doc
- 基于單片機的多路數據采集系統(tǒng)設計畢業(yè)論文
- 基于單片機的多功能智能小車設計-畢業(yè)論文
- 基于單片機的多路數據采集系統(tǒng)設計畢業(yè)論文
- 基于單片機的wifi智能小車畢業(yè)論文
- 基于單片機的智能避障小車設計【畢業(yè)論文】
評論
0/150
提交評論