基于智能小車的信息采集系統(tǒng)-上位機數(shù)據(jù)接收模塊設計[畢業(yè)論文]_第1頁
已閱讀1頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、<p>  本科畢業(yè)設計(論文)</p><p>  論文題目基于智能小車的信息采集系統(tǒng)-上位機數(shù)據(jù)接收模塊設計</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>  隨著現(xiàn)代信息技術(shù)的高速發(fā)展,數(shù)據(jù)采集方面的技術(shù)也在不斷地向前發(fā)展,并在信息技術(shù)中占有重要地住。溫度、濕度等環(huán)境參數(shù)在智能家居、工業(yè)控制、智能農(nóng)業(yè)等方面都得到很高的重視。數(shù)據(jù)采集系統(tǒng)是據(jù)采集結(jié)合基于計算機的測量軟硬件產(chǎn)品來實現(xiàn)靈活的、用戶自定義的測量系統(tǒng)。如

4、何實時直觀準確地采集到溫度,亮度等數(shù)據(jù)成為了焦點。</p><p>  本次設計的上位機數(shù)據(jù)接收模塊,將實現(xiàn)如下功能:通過上位機Java程序讀取串口接收到的信息,并將數(shù)據(jù)保存到My SQL數(shù)據(jù)庫。</p><p>  由于實驗條件限制,本上位機接收模塊通過VSPD虛擬串口實現(xiàn)串口通信,再通過Java驅(qū)動串口通信方式接收無線收發(fā)模塊上采集的信息,并將其傳送到上住機(PC機),再通過Java程

5、序?qū)⒏黜棓?shù)據(jù)保持到My SQL數(shù)據(jù)庫進行分析存儲。</p><p>  關(guān)鍵詞:Java;數(shù)據(jù)采集;上位機接收;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設計內(nèi)容- 1 -</p><p>  2系統(tǒng)使用技術(shù)綜述- 2 -</p><p>  2.1數(shù)據(jù)庫技術(shù)- 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串口調(diào)試助手簡介- 6 -</p><p>  3 系統(tǒng)設計- 8 -</p><p>  3.1上位機接收模塊

11、設計- 8 -</p><p>  3.2 My SQL數(shù)據(jù)庫表設計- 9 -</p><p>  3.2.1創(chuàng)建數(shù)據(jù)庫表- 9 -</p><p>  3.2.2表的結(jié)構(gòu)實驗圖- 10 -</p><p>  3.3java接收串口數(shù)據(jù)- 11 -</p><p>  3.3.1VSPD虛擬串口通信的實現(xiàn)

12、- 11 -</p><p>  3.3.2JAVA實時讀取串口數(shù)據(jù)- 13 -</p><p>  3.4連接數(shù)據(jù)庫并導入數(shù)據(jù)- 17 -</p><p>  3.4.1Java連接數(shù)據(jù)庫- 17 -</p><p>  3.4.2導入數(shù)據(jù)庫表- 18 -</p><p>  3.5合并實現(xiàn)接收數(shù)據(jù)并存入數(shù)據(jù)

13、庫- 19 -</p><p>  4結(jié)論- 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>  在計算機廣泛應用的今天,數(shù)據(jù)采集的重要性已經(jīng)變的尤為顯著了。數(shù)據(jù)采集系統(tǒng)是計算機與外部物理世界連接的橋梁,在計算機的各個領域都具有重要的作用和影響。數(shù)據(jù)采集,又稱數(shù)據(jù)獲取,是利用一種裝置,從系統(tǒng)外部采集數(shù)據(jù)并輸入到系統(tǒng)內(nèi)部的一個接口[1]。</p><p>  數(shù)據(jù)采集已經(jīng)被廣泛應用于互聯(lián)網(wǎng)及分布式領域,數(shù)據(jù)采集領域已經(jīng)發(fā)生了重要的變

15、化。首先,分布式控制應用場合中的智能數(shù)據(jù)采集系統(tǒng)在國內(nèi)外已經(jīng)取得了長足的發(fā)展。其次,總線兼容型數(shù)據(jù)采集插件的數(shù)量不斷增大,與個人計算機兼容的數(shù)據(jù)采集系統(tǒng)的數(shù)量也在增加。國內(nèi)外的各種數(shù)據(jù)采集機先后問世,將數(shù)據(jù)采集帶入了一個全新的時代。數(shù)據(jù)采集就是指從傳感器和其它待測設備等模擬和數(shù)字被測單元中自動采集信息的過程。數(shù)據(jù)采集系統(tǒng)是據(jù)采集結(jié)合基于計算機的測量軟硬件產(chǎn)品來實現(xiàn)靈活的、用戶自定義的測量系統(tǒng)[2]。 </p><p&

16、gt;  本次基于小車的數(shù)據(jù)采集系統(tǒng)的目的主要是為了探測小車周圍環(huán)境及測量溫度、亮度或速度等物理現(xiàn)象?;赑C的數(shù)據(jù)采集主要是通過模塊化硬件、應用軟件和計算機的結(jié)合,進行測量采集與接收。盡管數(shù)據(jù)采集系統(tǒng)根據(jù)不同的應用需求有不同的定義,但各個系統(tǒng)采集、分析和顯示信息的目的卻都相同。數(shù)據(jù)采集系統(tǒng)整合了信號、傳感器、激勵器、信號調(diào)理、數(shù)據(jù)采集設備和應用軟件等,本文主要對信息采集系統(tǒng)上位機接收部分進行設計以實現(xiàn)接收小車發(fā)送的數(shù)據(jù)并進行分析存儲。

17、 </p><p><b>  1.2設計內(nèi)容</b></p><p>  設計一個上位機數(shù)據(jù)接收模塊,通過上位機Java程序讀取由串口接收到的信息,并將數(shù)據(jù)保存到My SQL數(shù)據(jù)庫。根據(jù)上位機接收系統(tǒng)的實際要求,本接收模塊設計的要求將實現(xiàn)以下功能:</p><p>  1、通過Java程序讀取串口數(shù)據(jù);</p>

18、<p>  2、通過Java程序連接數(shù)據(jù)庫并把數(shù)據(jù)保存;</p><p><b>  2系統(tǒng)使用技術(shù)綜述</b></p><p><b>  2.1數(shù)據(jù)庫技術(shù)</b></p><p>  數(shù)據(jù)庫技術(shù)是信息系統(tǒng)的一個核心技術(shù)。是一種計算機輔助管理數(shù)據(jù)的方法,它研究如何組織和存儲數(shù)據(jù),如何高效地獲取和處理數(shù)據(jù)。是

19、通過研究數(shù)據(jù)庫的結(jié)構(gòu)、存儲、設計、管理以及應用的基本理論和實現(xiàn)方法,并利用這些理論來實現(xiàn)對數(shù)據(jù)庫中的數(shù)據(jù)進行處理、分析和理解的技術(shù)。數(shù)據(jù)庫技術(shù)是研究、管理和應用數(shù)據(jù)庫的一門軟件科學[3]。 </p><p>  數(shù)據(jù)庫是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫,它產(chǎn)生于距今五十年前,隨著信息技術(shù)和市場的發(fā)展,特別是20世紀90年代以后,數(shù)據(jù)管理不再僅僅是存儲和管理數(shù)據(jù),而轉(zhuǎn)變成為用戶所需要的各種數(shù)據(jù)管理的方式。數(shù)

20、據(jù)庫有很多種類型,從最簡單的存儲有各種數(shù)據(jù)的表格到能夠進行海量數(shù)據(jù)存儲的大型數(shù)據(jù)庫系統(tǒng)都在各個方面都得到了大量廣泛的應用。</p><p>  目前,常用的數(shù)據(jù)庫管理系統(tǒng)有IBM的DB2、Oracle、Sybase、INFORMIX和INGRES。這些產(chǎn)品都支持多平臺,如 UNIX、VMS、Windows,但支持的程度不一樣。My SQL是一個小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典My SQL AB公司。由于其體

21、積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了My SQL作為網(wǎng)站數(shù)據(jù)庫。</p><p><b>  2.2編程語言</b></p><p>  C#是一種由C和C++衍生出來的面向?qū)ο蟮木幊陶Z言,它在繼承C和C++強大功能的同時去掉了一些它們的復雜特性。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強

22、大的操作能力、優(yōu)雅的語法風格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET開發(fā)的首選語言。C#是微軟公司在2000年7月發(fā)布的一種全新且簡單、安全、面向?qū)ο蟮某绦蛟O計語言,是專門為.NET的應用而開發(fā)的語言。</p><p>  Java是一種可以撰寫跨平臺應用軟件的面向?qū)ο蟮某绦蛟O計語言,是由Sun Microsystems公司于1995年5月推出的Java程序設計語言和Java平臺(即Java SE,

23、 Java EE, Java ME)的總稱。Java是一個純的面向?qū)ο蟮某绦蛟O計語言,它繼承了 C++ 語言面向?qū)ο蠹夹g(shù)的核心,Java 不同于一般的編譯執(zhí)行計算機語言和解釋執(zhí)行計算機語言。它首先將源代碼編譯成二進制字節(jié)碼(byte code),然后依賴各種不同平臺上的虛擬機來解釋執(zhí)行字節(jié)碼,從而實現(xiàn)了“一次編譯、到處執(zhí)行”的跨平臺特性。下面是2種編程語言的數(shù)據(jù)庫連接:</p><p>  1)C#數(shù)據(jù)庫連接:在

24、C#中使用ADO接口操縱SQL等數(shù)據(jù)庫。由于ADO數(shù)據(jù)源幾乎覆蓋了目前常見的數(shù)據(jù)源類型,對于ODBC所不支持的數(shù)據(jù)源,ADO無疑是唯一的選擇。而ADO的批更新功能,更是網(wǎng)絡環(huán)境下大數(shù)據(jù)量更新應用的重要因素。由于ADO缺乏大量的第三方廠商的支持,使得ADO目前遠不如ODBC普及,但其面向?qū)ο蟮奶匦詫⑹笰DO具有比較廣闊的發(fā)展前景[4]。</p><p>  2)Java數(shù)據(jù)庫連接:(Java Database Co

25、nnectivity,簡稱JDBC)是Java語言中用來規(guī)范客戶端程序如何來訪問數(shù)據(jù)庫的應用程序接口,提供了諸如查詢和更新數(shù)據(jù)庫中數(shù)據(jù)的方法。JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應用程

26、序[5]。在關(guān)系數(shù)據(jù)庫的"對象/關(guān)系"映射中,表中的每行對應于類的一個實例,而每列的值對應于該實例的一個屬性,程序員可直接對 Java 對象進行操作;存取數(shù)據(jù)所需的 SQL 調(diào)用將在"掩蓋下"自動生成。此外還可提供更復雜的映射,例如將多個表中的行結(jié)合進一個 Java 類中[6]。</p><p>  通常通信的形式可以分為兩種,一種為并行數(shù)據(jù)通信,另一種為串行數(shù)據(jù)通信。通信

27、的主要目的是將數(shù)據(jù)從一端發(fā)送到另一端,來實現(xiàn)數(shù)據(jù)的交換。數(shù)據(jù)在到達正確目的地之前,可能需要經(jīng)過一系列中間節(jié)點,這些中間節(jié)點負責數(shù)據(jù)的轉(zhuǎn)送工作,以送達目的地,這些中間節(jié)點稱為DSE(Data Switching Equipment,數(shù)據(jù)交換設備)。終端設備發(fā)送數(shù)據(jù)時,必須先將數(shù)據(jù)轉(zhuǎn)換為電氣信號,以便在線路上傳遞,而負責數(shù)據(jù)與電氣信號轉(zhuǎn)換的設備稱為DCE(Data Communication Equipment,數(shù)據(jù)通信設備)。DTE與DC

28、E間的數(shù)據(jù)傳輸線路通常使用RS-232串行通信,而DCE與DSE間的媒體則包括了雙絞線、同軸電纜、光纖或無線電等等 [7]。</p><p>  串口通信(Serial Communications)的概念非常簡單,串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時用另一根線接收數(shù)據(jù)。它能夠非常簡單的實現(xiàn)遠距離通信。典型地,串口用于ASCII碼字符的傳輸

29、。通信使用3根線完成:(1)地線,(2)發(fā)送,(3)接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時在另一根線上接收數(shù)據(jù)[8]。其他線用于握手,但是不是必須的。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗。對于兩個進行通信的端口,這些參數(shù)必須匹配。波特率是一個衡量通信速度的參數(shù)。它表示每秒鐘傳送的bit的個數(shù)。數(shù)據(jù)位是衡量通信中實際數(shù)據(jù)位的參數(shù)。當計算機發(fā)送一個信息包,實際的數(shù)據(jù)不會是8位的,標準的值是5、7和8位。

30、如何設置取決于你想傳送的信息。停止位是用于表示單個包的最后一位。典型的值為1,1.5和2位。串口是計算機上一種非常通用設備通信的協(xié)議。大多數(shù)計算機包含兩個基于RS232的串口。串口同時也是儀器儀表設備通用的通信協(xié)議;很多GPIB兼容的設備也帶有RS-232口[8]。同時,串口通信協(xié)議也可以</p><p>  在C#中實現(xiàn)串口通信,我們有三種方法: 第一:通過MSCOMM控件這是最簡單的,最方便的方法。第二:微軟

31、在.NET新推出了一個串口控件,基于.NET的P/Invoke調(diào)用方法實現(xiàn),第三:自己用API寫串口通信,可以方便實現(xiàn)想要的各種功能。</p><p><b>  2.3開發(fā)工具</b></p><p>  2.3.1My SQL簡介</p><p>  My SQL是最受歡迎的開源SQL數(shù)據(jù)庫管理系統(tǒng),它由 My SQL AB開發(fā)、發(fā)布和支持

32、。My SQL AB是一家基于My SQL開發(fā)人員的商業(yè)公司,它是一家使用了一種成功的商業(yè)模式來結(jié)合開源價值和方法論的第二代開源公司。My SQL是My SQL AB的注冊商標。My SQL是一個真正的多用戶、多線程SQL數(shù)據(jù)庫服務器。SQL(結(jié)構(gòu)化查詢語言)是世界上最流行的和標準化的數(shù)據(jù)庫語言。My SQL是以一個客戶機/服務器結(jié)構(gòu)的實現(xiàn),它由一個服務器守護程序My SQL和很多不同的客戶程序和庫組成[9]。My SQL 主要目標是快

33、速、強大和易用。最初是因為我們需要這樣一個SQL服務器,它能處理與任何可不昂貴硬件平臺上提供數(shù)據(jù)庫的廠家在一個數(shù)量級上的大型數(shù)據(jù)庫,但速度更快,My SQL就開發(fā)出來。自1996年以來,我們一直都在使用My SQL,其環(huán)境有超過 40 個數(shù)據(jù)庫,包含 10,000個表,其中500多個表超過7百萬行,這大約有100 個吉字節(jié)(GB)的關(guān)鍵應用數(shù)據(jù)與其他數(shù)據(jù)庫管理系統(tǒng)相比,My SQL具有以下優(yōu)勢:</p><p>

34、  1、My SQL是一個關(guān)系數(shù)據(jù)庫管理系統(tǒng)。</p><p>  2、My SQL是開源的。</p><p>  3、My SQL服務器是一個快速的、可靠的和易于使用的數(shù)據(jù)庫服務器。</p><p>  4、My SQL服務器工作在客戶/服務器或嵌入系統(tǒng)中。</p><p>  5、有大量的My SQL軟件可以使用。</p>

35、<p>  2.3.2 VSPD虛擬串口簡介</p><p>  本上位機數(shù)據(jù)接收模塊串口通信部分采用VSPD虛擬串口通信進行數(shù)據(jù)接收。該軟件可以將TCP/IP連接成本機的虛擬COM口,應用程序通過訪問虛擬窗口,就可以完成遠程控制、數(shù)據(jù)傳輸?shù)裙δ?。VSPD虛擬串口軟件具有如下的特性:</p><p>  1)多虛擬串口映射:VSPM可以同時映射出多個虛擬串口,這些串口可以相互獨立

36、,互不干擾;虛擬串口的最大數(shù)量僅受操作系統(tǒng)和電腦配置限制;每虛擬串口可以單獨設置參數(shù);支持虛擬串口與串口服務器串口參數(shù)同步;</p><p>  2)多線程架構(gòu):每個虛擬串口同時具備收/發(fā)2個獨立線程;所有串口可以同時工作;此架構(gòu)可以確保在大數(shù)據(jù)量吞吐下,仍可以保持較高的系統(tǒng)穩(wěn)定性;可以獨立設置虛擬串口線程的優(yōu)先級,以取得更高的性能;</p><p>  3)自動連接、自動重新連接:當虛擬

37、串口被打開時,VSPD會自動與遠程設備建立TCP/IP連接(Client模式下);如果發(fā)送數(shù)據(jù)到遠程設備失敗,VSPD會自動與遠程設備建立TCP/IP連接;</p><p>  4)數(shù)據(jù)監(jiān)控:實時顯示虛擬串口的配置參數(shù)、數(shù)據(jù)傳輸狀態(tài)、傳輸數(shù)據(jù)等;</p><p><b>  5)3種工作模式:</b></p><p>  Server模式,軟件

38、處于監(jiān)聽狀態(tài),等待客戶模式的設備發(fā)出的TCP/IP連接;Client模式,軟件會根據(jù)設置,主動與其他服務器模式設備建立TCP/IP連接;</p><p>  UDP廣播模式,將使用UDP廣播模式傳輸數(shù)據(jù),通常用于組建大規(guī)模的半雙工網(wǎng)絡;</p><p>  軟件在同一時刻只能運行在一種模式下,3種模式切換運行;</p><p>  2.3.3 NetBeans 簡介

39、</p><p>  NetBeans 由Sun公司在2000年創(chuàng)立,它是開放源運動以及開發(fā)人員和客戶社區(qū)的家園,旨在構(gòu)建世界級的Java IDE。NetBeans當前可以在Solaris、Windows、Linux和Macintosh OS X平臺上進行開發(fā),并在SPL(Sun公用許可)范圍內(nèi)使用。 </p><p>  NetBeans IDE 的開發(fā)環(huán)境下可以編寫,編譯,調(diào)試工具和使

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)境提供了豐富的產(chǎn)品文檔和培訓資源以及大量的第三方插件[11]?!?lt;/p><p>  2.3.4串口調(diào)試助手簡介</p><p>  一個小巧的串口調(diào)試助手,支持

42、常用的300-115200bps波特率,能設置校驗、數(shù)據(jù)位和停止位,能以ASCII碼或十六進制接收或發(fā)送任何數(shù)據(jù)或字符(包括中文),可以任意設定自動發(fā)送周期,并能將接收數(shù)據(jù)保存成文本文件,能發(fā)送任意大小的文本文件。硬件連接方面,傳統(tǒng)臺式PC機支持標準RS232接口,當下帶有串口的PC已經(jīng)很少見了,所以需要usb/232轉(zhuǎn)換接口,并且安裝相應驅(qū)動程序才可以[12]。串口調(diào)試助手的主要功能如下:</p><p>  

43、1.定時發(fā)送數(shù)據(jù); </p><p>  2.自動搜索串口,并打開串口; </p><p>  3.可以以十六進制或ASCII格式,向指定串口發(fā)送數(shù)據(jù);</p><p>  4.接收數(shù)據(jù)時,光標始終顯示在最后一行; </p><p>  5.接收數(shù)據(jù)可以進行十六進制和ASCII切換; </p><p>  6.串口打開

44、過程中,可修改通訊參數(shù),如波特率,停止位等; </p><p>  7.自動記錄上次操作參數(shù),如串口號,波特率,校驗位等;</p><p>  8.可以發(fā)送專用指令讀寫B(tài)OAST數(shù)字傳感器內(nèi)碼,修改地址等;</p><p>  9.線程中監(jiān)控串口事件,無數(shù)據(jù)時,不接收; </p><p>  10.接收數(shù)據(jù)可以保存為文件,也可打開已保存數(shù)據(jù)文

45、件; </p><p><b>  3 系統(tǒng)設計</b></p><p>  3.1上位機接收模塊設計</p><p>  通過智能監(jiān)控系統(tǒng)中上位機的控制模塊,主要內(nèi)容為設計系統(tǒng)圖形界面、建立數(shù)據(jù)庫及java數(shù)據(jù)庫連接等部分。上位機能通過無線串口傳輸模塊與智能小車進行通信連接,以上位機接收模塊進行數(shù)據(jù)分析及存儲,通過上位機控制模塊進行數(shù)據(jù)調(diào)用及

46、顯示,以此來實現(xiàn)對小車的精確控制并在圖形界面中顯示所采集的數(shù)據(jù)。主要目標使小車在運行過程中,能夠自動檢測到障礙物且能避開障礙物運行,自動采集溫度,速度等數(shù)據(jù)存入數(shù)據(jù)庫中并通過數(shù)據(jù)庫調(diào)用顯示。本系統(tǒng)總體設計圖為3-1所示。</p><p>  圖3-1智能小車系統(tǒng)總體設計框圖</p><p>  本文主要介紹上位機的數(shù)據(jù)接收模塊設計部分,其中主要內(nèi)容為VSPM模擬串口通信接收、Java連接數(shù)

47、據(jù)庫及導入數(shù)據(jù)庫和數(shù)據(jù)圖形界面顯示等部分。上位機通過無線串口傳輸模塊與下位機進行通信連接,以上位機接收模塊進行數(shù)據(jù)分析及存儲,通過上位機控制模塊進行數(shù)據(jù)調(diào)用及顯示,以此來實現(xiàn)對小車各個數(shù)據(jù)及狀態(tài)的檢測與控制。上位機接收模塊通過實現(xiàn)串口通信接收來自無線USB模塊的數(shù)據(jù)再把數(shù)據(jù)導入數(shù)據(jù)庫分析存儲,如圖3-2所示。</p><p>  圖3-2 上位機接收模塊框圖</p><p>  3.2

48、My SQL數(shù)據(jù)庫表設計</p><p>  My SQL是一個真正的多用戶、多線程SQL數(shù)據(jù)庫服務器。本上位機系統(tǒng)安裝了mysql-5.5.19-win32至WIN7系統(tǒng)作為后臺數(shù)據(jù)庫運行。安裝時設置密碼為123。輸入密碼后正式啟動My SQL服務,再在NeatBeans7.1.1上通過JDBC啟動服務數(shù)據(jù)庫輸入My SQL安裝時設定的密碼123即可連接。</p><p>  3.2.1

49、創(chuàng)建數(shù)據(jù)庫表</p><p>  (1)在MY SQL中輸入create database YJMS,創(chuàng)建數(shù)據(jù)庫YJMS,如圖3-3所示:</p><p>  圖3-3 創(chuàng)建數(shù)據(jù)庫YJMS</p><p> ?。?)在數(shù)據(jù)庫YJMS中創(chuàng)建數(shù)據(jù)表t1和數(shù)據(jù)表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表的結(jié)構(gòu)實驗圖</p><p>  表的結(jié)構(gòu)實驗圖如圖3-6和3-7所示:</p><p>  圖3-6 t1數(shù)據(jù)表結(jié)構(gòu)類型</p><p>  圖3-7 t2數(shù)據(jù)表結(jié)構(gòu)類型</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接收串口數(shù)據(jù)</p><p>  3.3.1VSPD虛擬串口通信的實現(xiàn)</p><p>  1)下載支持win7的虛擬串口VSPD(Configure Virt

54、ual Serial Port Driver)并運行加載COM1和COM2兩個虛擬串口,設置其波特率,數(shù)據(jù)位等數(shù)值一致,如圖3-10所示:</p><p>  圖3-10 VSPD界面</p><p>  2)運行串口調(diào)試助手V2.3設置COM1波特率為9600,校驗位為None,數(shù)據(jù)位為8,停止位為One,進行數(shù)據(jù)輸入并打開串口進行數(shù)據(jù)自動發(fā)送,時間間隔為2000ms,各數(shù)據(jù)設置和Jav

55、a讀取串口數(shù)據(jù)代碼一致,并輸入數(shù)據(jù)。</p><p>  3)用調(diào)試助手V2.3對虛擬串口進行調(diào)試,在COM1發(fā)送如下格式數(shù)據(jù)如圖3-11所示:</p><p>  圖3-11COM1發(fā)送數(shù)據(jù)</p><p>  4)則COM2接收到的數(shù)據(jù)如圖3-12所示:</p><p>  圖3-12 COM2接收數(shù)據(jù)</p><p&

56、gt;  3.3.2JAVA實時讀取串口數(shù)據(jù)</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; (注意符號) 粗體字內(nèi)容若已經(jīng)有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讀取串口數(shù)據(jù)源代碼中要運用到javax.commm包。所以從網(wǎng)上下載了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調(diào)試運行,使得NeatBeans與COM2相連接接收來自COM1發(fā)送來的數(shù)據(jù),如圖3-13所示:<

60、;/p><p>  圖3-13 Java讀取串口數(shù)據(jù)</p><p>  2)其實現(xiàn)命令的主要代碼是:</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();/*不帶參數(shù)的getPortIdentifiers方法獲得一個枚舉對象,該對象又包含了系統(tǒng)中管理每個端口的CommPortIdentifier對象。注意這里的端口不僅僅是指串口,也包括并口。這個方法還可以帶參數(shù)。getPortIdentifiers(CommPort)獲得與已經(jīng)被應用程序打開的端口相對應的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事件。每個端口都關(guān)聯(lián)一個 InputStream 何一個OutputStream。如果端口是用open方法打開的,那么任何的getInputStream都將返回相同的數(shù)據(jù)

69、流對象,除非有close 被調(diào)用。有兩個參數(shù),第一個為應用程序名;第二個參數(shù)是在端口打開時阻塞等待的毫秒數(shù)。*/</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);/*數(shù)據(jù)可用*/</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);/*設置串口初始化參數(shù),依次是波特率,數(shù)據(jù)位,停止位和校驗*/</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,數(shù)據(jù)設備就緒*/</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,端口有可用數(shù)據(jù)。讀到緩沖數(shù)組,輸出到終端*/</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連接數(shù)據(jù)庫并導入數(shù)據(jù)</p><p>  3.4.1Java連接數(shù)據(jù)庫</p><p>  Java數(shù)據(jù)庫連接(JDBC)由一組用Java編程語言編寫的類和接口組成.JDBC為工具/數(shù)據(jù)庫開發(fā)人員提供了一個標準的API,使他們能夠用純Java API來編寫數(shù)據(jù)庫應用程序,JDBC是執(zhí)行SQL語句的Java,使用JDBC可以很容易的把SQL語句傳送到任何關(guān)系型數(shù)據(jù)庫中。JDBC

83、基本功能體現(xiàn)為建立與數(shù)據(jù)庫的連接,然后發(fā)送SQL語,最后處理結(jié)果。Java 連接數(shù)據(jù)庫一般都是六步,以 My SQL 數(shù)據(jù)庫為例: </p><p>  1.加載數(shù)據(jù)庫驅(qū)動 </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.連接數(shù)據(jù)庫 </b></p><p><b>  try{

85、</b></p><p>  conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/yjms","root","123");//獲得數(shù)據(jù)庫連接,用戶名,密碼,db數(shù)據(jù)庫名稱 </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導入數(shù)據(jù)庫表</p><p>  4.Sql語句:導入數(shù)據(jù)表t1相應變量的數(shù)據(jù)。</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.返回結(jié)果。 </b></p><p>  ResultSet rs=stmt.createStatement("select * from db.table"); </p><p><b>  6.處理結(jié)果 </b></p><

89、;p>  while(rs.next()) {</p><p>  rs.getString("username"); </p><p>  rs.getString("password"); } </p><p>  7.關(guān)閉所有連接(先打開的連接后關(guān)閉) </p><p>  rs.close

90、(); </p><p>  conn.close();</p><p>  經(jīng)過上面的了解,連接mysql數(shù)據(jù)庫localhost為3306 ,用戶名為root,密碼為123,可以得出連接數(shù)據(jù)庫并導入數(shù)據(jù)的具體代碼為:</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,加載導入數(shù)據(jù)代碼,調(diào)試運行文件。如圖3-14所示:</p><p>  圖3-14 導入數(shù)據(jù)成功</p><p>  3.5合并實現(xiàn)接收數(shù)據(jù)并存入數(shù)據(jù)庫</p><p>  將SimpleRead.java和JavaAp

97、plication1.java合成一個代碼DataReceive.java實現(xiàn)自動接收并導入數(shù)據(jù)庫。合成的代碼如下:</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結(jié)論</b></p><p>  本設計方案按照任務書的要求通過上位機的接收模塊,上位機模塊為通過無線USB接收模塊采集到的信息在上位機上實時顯示,從而得到所需各項數(shù)據(jù)和小車運行狀況。本上位機接收模塊通過Java驅(qū)動串口通信方式接收無線收發(fā)模塊上采集的信息,并將其傳送到上住機(PC機),再通過Java程序?qū)?/p>

111、各項數(shù)據(jù)導入My SQL數(shù)據(jù)庫進行分析存儲。</p><p>  經(jīng)過幾個月的努力,在不斷的尋找突破和程序調(diào)試下,本人設計的上位機接收模塊能實現(xiàn)VSPD虛擬串口通信,在NetBeans IDE上通過JAVA程序連接COM2讀取COM1接收到的數(shù)據(jù)并將接收到數(shù)據(jù)按格式導入到數(shù)據(jù)庫進行分析存儲。</p><p>  在設計中我們遇到了很多問題,但通過隊員們的團結(jié)合作、認真分析問題,以及老師的認

112、真輔導,我們設計出來的小車已經(jīng)能夠達到設計要求。由于技術(shù)的有限,目前完成的上位機系統(tǒng)還存在有一些缺陷,希望在以后的工作中能進一步完善。</p><p><b>  參考文獻</b></p><p>  [1]徐大勝.3-RSS/S踝關(guān)節(jié)康復機器人康復評價系統(tǒng)的研究[D].河北工業(yè)大學,2009.</p><p>  [2]謝鑫.船舶管路泄露實驗

113、臺架的設計與實現(xiàn)[D].重慶交通大學,2011.</p><p>  [3]劉松靄等.數(shù)據(jù)庫應用技術(shù)[J].教育界,2011.</p><p>  [4]周虹.在Visual C++中用活動數(shù)據(jù)對象(ADO)操縱數(shù)據(jù)庫[J].蘇州城建環(huán)保學院學報,2001.</p><p>  [5]熊鶯.Java分布式技術(shù)在公路工程建設管理系統(tǒng)中的研究與應用[D].中國石油大學(

114、北京),2005.</p><p>  [6]呂劍光.一種基于MVC模式的網(wǎng)吧實名制管理系統(tǒng)的設計與實現(xiàn)[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]詹永豐.軍隊士兵體質(zhì)評測支持系統(tǒng)[D].大連理工大學,2005.</p><p>  [10]陰璽.心電遠程監(jiān)護系統(tǒng)的數(shù)據(jù)庫系統(tǒng)設計與數(shù)據(jù)壓縮算法研究[D].重慶大學,2007.</p><p>  [11]百度百科. netbeans百科知識[EB/OL][2012-4-19]..</p><p&g

116、t;  [12]百度百科. 串口調(diào)試助手百科知識[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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論