【基于Java的串口通信設計17000字(論文)】_第1頁
【基于Java的串口通信設計17000字(論文)】_第2頁
【基于Java的串口通信設計17000字(論文)】_第3頁
【基于Java的串口通信設計17000字(論文)】_第4頁
【基于Java的串口通信設計17000字(論文)】_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基于Java的串口通信設計摘要隨著計算機技術和通信技術的不斷發(fā)展與融合,一方面,計算機與其它終端設備的性能不斷提高,處理數(shù)據(jù)的速度不斷增大;另一方面,計算機和其它終端設備之間的通信速度要求越來越高,調制解調器處理信號的速度也越來越快。連接終端與調制解調器進行串并數(shù)據(jù)格式轉換和信號控制的電路是串口通信接口電路。對于普通的串口通信電路,當由于緩存數(shù)據(jù)的容量較小,就會導致在高速的通信系統(tǒng)下,接口電路頻繁向終端發(fā)送中斷請求,這樣就會降低終端設備處理器的工作效率,同時也降低整個通信系統(tǒng)的速度,不利于實現(xiàn)高速的通信。本論文所涉及的實驗,改進了傳統(tǒng)的串口通信電路緩存容量小的缺點。結合自動進樣檢測系統(tǒng)的開發(fā)實踐,研究了一種基于Java串口通信的檢測系統(tǒng)的設計和實現(xiàn)方法,并對系統(tǒng)的結構設計及系統(tǒng)實現(xiàn)中Java串口通信做了介紹。在計算機或終端設備與接口電路之間加入FIFO(先入先出)存儲器,用來緩存要存儲的數(shù)據(jù)。由于基于Java的邏輯器件設計的電路具有低功耗,高性能,設計方便,可擴展,可重復等優(yōu)點,本實驗對整個電路的設計都采用Java可編程的方式。分別基于Java設計異步高速FIFO存儲器,串口通信接收與發(fā)送電路的各個模塊。再對整個電路進行綜合與仿真,得到了較為理想的結果。關鍵詞:Java;串口通信設計;存儲器;接口目錄3257第一章緒論 1308051.1研究背景及研究意義 123441.2國內外研究現(xiàn)狀 229201.3論文主要內容 36001第二章論文采用的主要相關技術和理論 5266652.1Zigbee技術 5204702.1.1技術說明 585412.1.2技術特點 537572.1.3應用實例 6282542.2USB技術 7132762.2.1USB技術發(fā)展歷史 7254442.2.2軟件結構 930012.2.3硬件結構 1023382.2.4數(shù)據(jù)傳輸 1071972.3密鑰協(xié)商和加密算法 11138822.3.1密鑰協(xié)商 11206442.3.2加密算法 11249152.4已有方案分析 132402.4.1方案一 1363552.4.2方案二 13271142.4.3方案比較 1330100第三章系統(tǒng)總體設計 15149073.1系統(tǒng)的需求分析 15184393.2總體框架 1549433.2.1上位機程序 15316483.2.2下位機硬件結構 16111663.3詳細方案設計 17190803.3.1硬件方案設計 17256143.3.2下位機軟件方案設計 20276143.3.3上位機軟件方案設計 21291073.4方案實現(xiàn)及驗證 21309993.4.1安裝NetBeansIDE環(huán)境 2115873.4.2安裝RXTX串口包 22274463.4.3編寫上位機程序 23298443.4.4安裝IAR環(huán)境 27222633.5系統(tǒng)運行結果 3432070第四章總結與展望 38926參考文獻 40第一章緒論1.1研究背景及研究意義自上個世紀四十年代第一臺計算機問世以來,計算機便以驚人的速度發(fā)展著,而且滲透到各行各業(yè)中,從各個角度影響著人們的生活。工業(yè)控制作為人們工業(yè)生產的重要組成部分,計算機的應用自然也十分廣泛。然而,由于工業(yè)現(xiàn)場面臨的情況越來越多樣化、復雜化,人們需要一種可以界面更加自由、友好的軟件以應對復雜多樣的工業(yè)現(xiàn)場。組態(tài)軟件便應運而生[1-3]。組態(tài)軟件是伴隨著DCS(DistributedControlSystem,集散控制系統(tǒng))[4]的出現(xiàn)走進工業(yè)自動化應用領域的,并逐漸發(fā)展成為第三方獨立的自動化應用軟件,尤其是Windows操作系統(tǒng)的廣泛應用,有力地推動了基于個人計算機的組態(tài)軟件的發(fā)展和普及[5,6]。目前,大量的工業(yè)過程控制系統(tǒng)采用上位計算機加可編程程序控制器(SCADA-PLC)[7]的方案以實現(xiàn)分散控制和集中管理。其中,安裝了組態(tài)軟件的上位計算機主要完成數(shù)據(jù)通信、網絡管理、人機交互和數(shù)據(jù)處理的功能;數(shù)據(jù)采集和設備的控制一般有Java等完成。Java是計算機發(fā)展到一定程度的產物,是一種專門應用在工業(yè)控制中的計算機。自從上個世紀70年代第一代Java在德國誕生以來,由于其靈活的構成、很強的可擴展性、以及簡單方便的使用方法,使得Java在工業(yè)控制中的應用迅速的廣泛起來。串口通信是一種簡便的信號傳輸方式,普遍使用于PC機和很多工業(yè)設備當中,其簡單的遠距離傳輸使得其在工業(yè)生產當中的應用有很大優(yōu)勢。使用串口通信來做組態(tài)軟件的通信基礎,用于上位機和下位機之間的通信是十分合適的[8]。目前,大部分用于工業(yè)自動化控制的下位機設備都可以使用串口通信這樣一種簡單穩(wěn)定的通信方式,設計一種基于串口通信的組態(tài)軟件可以應用廣泛且設計簡單,既提高了效率,又降低了成本。目前市面上其他的組態(tài)軟件如組態(tài)王KingView,WinCC等,已經十分普及,但是普遍成本過高,且不能針對目標客戶定制,但這恰是本產品的優(yōu)勢之一。在過程控制的實時檢測和監(jiān)控系統(tǒng)中,溫度的采集是很普遍的??焖倏煽康牟杉焦I(yè)現(xiàn)場中的高精度溫度數(shù)據(jù)可以為過程控制系統(tǒng)提供可靠的依據(jù)。而傳統(tǒng)的測溫方法多以熱電阻和熱電偶等為溫度敏感元件,但這些溫度傳感器構成的測溫系統(tǒng)必須經過A/D轉換環(huán)節(jié)獲得數(shù)字信號后才能與Java等微處理器接口,使得硬件電路結構復雜,制作成本較高。而用美國DALLAS公司生產的DS18B20數(shù)字溫度傳感器集溫度測量和A/D轉換于一體,直接輸出數(shù)字量,硬件電路結構簡單,與Java接口幾乎不需要外圍元件。廣泛使用于距離遠、節(jié)點分布多的場合,具有較強的推廣應用價值。本次設計的目的就是以數(shù)字傳感器DS18B20作為前端,采集溫度經過單片機處理后,通過LCD1602液晶顯示器將溫度顯示出來,且采用串口通信,把溫度顯示在VB邊界的PC機界面上,實現(xiàn)與PC機的通信。新型數(shù)字化、網絡化傳感器在工程中的應用具有極其重要的意義,這類傳感器是各種參量送入計算機系統(tǒng),進行智能監(jiān)測、控制的最前端。隨著科技的發(fā)展,數(shù)字化、網絡化傳感器應用日益廣泛,以其傳統(tǒng)方式不可比擬的優(yōu)勢漸漸成為技術的趨勢和主流。1.2國內外研究現(xiàn)狀在數(shù)字通信應用領域,RS-232、I2C和SPI是三種常用的串口通信總線接口。作為其中一種串行數(shù)據(jù)傳輸?shù)耐ㄐ艠藴?,RS-232串行接口是1969年由美國EIA與BELL公司、Modem廠家及相關的計算機終端生產商聯(lián)合制定的一種典型的通信接口,它被廣泛應用于監(jiān)視系統(tǒng)和控制系統(tǒng)設備中。它的使用非常方便,接口的設備驅動程序由操作系統(tǒng)提供,只需在程序設計中將傳輸數(shù)據(jù)位、奇偶檢驗位、停止位、傳輸波特率通過相關系統(tǒng)函數(shù)的調用就可以實現(xiàn)RS-232與外圍設備的通信。飛利浦和摩托羅拉兩家公司出于不同背景和市場需求制定的另外兩種標準通信協(xié)議I2C和SPI應用也比較普遍。這兩個協(xié)議都非常適合集成電路,用于板載外設近距離之間的通信。Philips實驗室為了盡可能的滿足節(jié)省微控制器的引腳和和邏輯芯片、使PCB板更簡單、降低成本的要求,于1982年研發(fā)出了一種I2C通信總線,只需兩根線就可實現(xiàn)自身設備與外圍設備的連接和通信,其初衷是為了提供一種簡便的方式將電視機內的CPU和外圍芯片互聯(lián)起來?,F(xiàn)在I2C總線根據(jù)傳輸速度劃分共分為標準、快速和高速三種模式。標準模式的I2C總線出現(xiàn)于20世紀80年代,當時它7位地址編碼,規(guī)定的最高傳輸速率為100kb/s。由于現(xiàn)代設備在功能和性能上的要求越來越高,I2C總線為了滿足現(xiàn)代設備的需求,它的地址位和速率的相關規(guī)范被不斷升級,現(xiàn)在已有10位尋址模式,根據(jù)模式不同位速率可達400kb/s和3.4Mb/s(薛長斌,2010)。SPI總線是一種微控制器四線型的外部環(huán)形結構總線。1979年由摩托羅拉公司開發(fā),并且將它集成在了他們公司第一支改自68000微處理器的微控制器芯片上。區(qū)別于I2C總線的標準規(guī)定不同,SPI總線只是作為一種事實上的標準,抽象的描述設備間交互的實現(xiàn),芯片制造者和相關驅動開發(fā)人員通過datasheets和applicationnotes溝通實現(xiàn)上的細節(jié)。SPI總線接口傳輸數(shù)據(jù)的速率大小與所選取的SPI硬件緊密相關,例如Xicor公司生產的SPI串行器件傳輸速率能夠達到5Mbit/s(張文超等,2005;Agaretal.,2014)。利用創(chuàng)新USB系統(tǒng)實現(xiàn)通用的數(shù)據(jù)傳輸接口技術,在國內尚無先例,但國際上對于通用USB的探索卻沒有停止,只要抓住這一契機,利用FPGA設計創(chuàng)新USB系統(tǒng),克服目前數(shù)據(jù)傳輸所存在的速率受限、幀長受限、同步復雜的缺點,避免不同數(shù)據(jù)格式間的轉換,最終實現(xiàn)真正意義上的通用的串行總線。目前USB芯片技術受國外控制,國內使用沒有自己的知識產權,需要額外付費,增加應用芯片成本。研制創(chuàng)新USB可獲得自主知識產權,對推動我國在該領域的技術發(fā)展具有積極的意義。在農業(yè)生產過程中,為了提高農業(yè)生產的技術含量,提高生產管理的現(xiàn)代化水平,有許多來自溫室的實時數(shù)據(jù)(如溫度、濕度、CO2、光照等)需要采集、記錄、處理及顯示以便及時掌握動植物生長環(huán)境。隨著電子技術水平的不斷提高,溫室控制不斷向智能化方向發(fā)展。串口通信線路簡單,應用靈活,方便、可靠,占用系統(tǒng)資源少,所以在溫室智能控制系統(tǒng)(GICS)中與下位機的通信方式選擇了RS232串口通信,結合數(shù)據(jù)庫的數(shù)據(jù)維護及統(tǒng)計等優(yōu)點,根據(jù)實時數(shù)據(jù)庫和專家數(shù)據(jù)庫來反饋控制溫室環(huán)境,有利于動植物科學生長,促進農業(yè)增產增收。最早的溫度計是在1593年由意大利科學家伽利略(1564~1642)發(fā)明的。后來又相繼出現(xiàn)華氏溫度計、列式溫度計、攝氏溫度計,均用水銀和酒精等制作,現(xiàn)在英、美國家多用華氏溫度計,德國多用列氏溫度計,而世界科技界和工農業(yè)生產中,以及我國、法國等大多數(shù)國家則多用攝氏溫度計。隨著科學技術的發(fā)展和現(xiàn)代工業(yè)技術的需要,測溫技術也在不斷地改進和提高。由于測溫范圍變得越來越廣,根據(jù)不同的要求,又制造出不同的測溫儀器:氣體溫度計、電阻溫度計、溫差電偶溫度計、高溫溫度計等。而本設計研究的是數(shù)字溫度計,它是通過一定的電路和溫度傳感器進行測控,將溫度用數(shù)字準確的顯示出來。數(shù)據(jù)顯示比較直觀而且測量精度也比較高,范圍也比較大。Java程序語言具有面向對象、平臺無關、開放性、安全等特性,是一種理想的的編程語言。應用JavaCommunicationAPI簡化了串口通信程序的開發(fā)。多線程技術能很好地解決各種邏輯并發(fā)性和物理并行性問題,改善系統(tǒng)的各項性能。本文結合多線程技術及數(shù)據(jù)庫技術開發(fā)出了基于Java串口通信的數(shù)據(jù)采控系統(tǒng)。1.3論文主要內容論文共分為五章,主要研究內容及章節(jié)安排如下:第一章對Java技術測溫系統(tǒng)做了概覽介紹,討論了課題研究的意義,國內外研究的動態(tài)。第二章首先簡述了論文應用到的相關理論,介紹了系統(tǒng)的設計方案,接著對系統(tǒng)的硬件進行選型。第三章首先介紹了系統(tǒng)的結構框圖,接著詳細地介紹了系統(tǒng)的硬件設計,最后給出了系統(tǒng)連接圖,并分析了系統(tǒng)的工作原理。第四章在軟件方面對整體和各模塊的程序進行了設計。第五章總結了本文的設計特點和創(chuàng)新點,并指出了今后待研究的問題。第二章論文采用的主要相關技術和理論2.1串口通信技術串口是計算機上一種非常通用設備通信的協(xié)議。大多數(shù)計算機包含兩個基于RS232的串口。串口同時也是儀器儀表設備通用的通信協(xié)議;很多GPIB兼容的設備也帶有RS-232口。同時,串口通信協(xié)議也可以用于獲取遠程采集設備的數(shù)據(jù)。串行接口是一種可以將接受來自CPU的并行數(shù)據(jù)字符轉換為連續(xù)的串行數(shù)據(jù)流發(fā)送出去,同時可將接受的串行數(shù)據(jù)流轉換為并行的數(shù)據(jù)字符供給CPU的器件。一般完成這種功能的電路,我們稱為串行接口電路。2.1.1基本原理串口通信(SerialCommunications)的概念非常簡單,串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時用另一根線接收數(shù)據(jù)。它很簡單并且能夠實現(xiàn)遠距離通信。比如IEEE488定義并行通行狀態(tài)時,規(guī)定設備線總長不得超過20米,并且任意兩個設備間的長度不得超過2米;而對于串口而言,長度可達1200米。典型地,串口用于ASCII碼字符的傳輸。通信使用3根線完成,分別是地線、發(fā)送、接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時在另一根線上接收數(shù)據(jù)。其他線用于握手,但不是必須的。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗。對于兩個進行通信的端口,這些參數(shù)必須匹配。a,波特率:這是一個衡量符號傳輸速率的參數(shù)。指的是信號被調制以后在單位時間內的變化,即單位時間內載波參數(shù)變化的次數(shù),如每秒鐘傳送240個字符,而每個字符格式包含10位(1個起始位,1個停止位,8個數(shù)據(jù)位),這時的波特率為240Bd,比特率為10位*240個/秒=2400bps。一般調制速率大于波特率,比如曼徹斯特編碼)。通常電話線的波特率為14400,28800和36600。波特率可以遠遠大于這些值,但是波特率和距離成反比。高波特率常常用于放置的很近的儀器間的通信,典型的例子就是GPIB設備的通信。b,數(shù)據(jù)位:這是衡量通信中實際數(shù)據(jù)位的參數(shù)。當計算機發(fā)送一個信息包,實際的數(shù)據(jù)往往不會是8位的,標準的值是6、7和8位。如何設置取決于你想傳送的信息。比如,標準的ASCII碼是0~127(7位)。擴展的ASCII碼是0~255(8位)。如果數(shù)據(jù)使用簡單的文本(標準ASCII碼),那么每個數(shù)據(jù)包使用7位數(shù)據(jù)。每個包是指一個字節(jié),包括開始/停止位,數(shù)據(jù)位和奇偶校驗位。由于實際數(shù)據(jù)位取決于通信協(xié)議的選取,術語"包"指任何通信的情況。c,停止位:用于表示單個包的最后一位。典型的值為1,1.5和2位。由于數(shù)據(jù)是在傳輸線上定時的,并且每一個設備有其自己的時鐘,很可能在通信中兩臺設備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數(shù)越多,不同時鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率同時也越慢。d,奇偶校驗位:在串口通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當然沒有校驗位也是可以的。對于偶和奇校驗的情況,串口會設置校驗位(數(shù)據(jù)位后面的一位),用一個值確保傳輸?shù)臄?shù)據(jù)有偶個或者奇?zhèn)€邏輯高位。例如,如果數(shù)據(jù)是011,那么對于偶校驗,校驗位為0,保證邏輯高的位數(shù)是偶數(shù)個。如果是奇校驗,校驗位為1,這樣就有3個邏輯高位。高位和低位不真正的檢查數(shù)據(jù),簡單置位邏輯高或者邏輯低校驗。這樣使得接收設備能夠知道一個位的狀態(tài),有機會判斷是否有噪聲干擾了通信或者是否傳輸和接收數(shù)據(jù)是否不同步。圖2.1串行通信2.1.2結構特點串口通信是指外設和計算機間,通過數(shù)據(jù)信號線、地線、控制線等,按位進行傳輸數(shù)據(jù)的一種通訊方式。這種通信方式使用的數(shù)據(jù)線少,在遠距離通信中可以節(jié)約通信成本,但其傳輸速度比并行傳輸?shù)?。串口是計算機上一種非常通用的設備通信協(xié)議。大多數(shù)計算機(不包括筆記本電腦)包含兩個基于RS-232的串口。串口同時也是儀器儀表設備通用的通信協(xié)議;很多GPIB兼容的設備也帶有RS-232口。同時,串口通信協(xié)議也可以用于獲取遠程采集設備的數(shù)據(jù)。RS-232(ANSI/EIA-232標準)是IBM-PC及其兼容機上的串行連接標準??捎糜谠S多用途,比如連接鼠標、打印機或者Modem,同時也可以接工業(yè)儀器儀表。用于驅動和連線的改進,實際應用中RS-232的傳輸長度或者速度常常超過標準的值。RS-232只限于PC串口和設備間點對點的通信。RS-232串口通信最遠距離是50英尺。圖2.2串口通信程序框圖2.2USB技術USB,是英文Universal

Serial

Bus(通用串行總線)的縮寫,是一個外部總線標準,用于規(guī)范電腦與外部設備的連接和通訊。是應用在PC領域的接口技術。USB接口支持設備的即插即用和熱插拔功能。USB是在1994年底由英特爾、康柏、IBM、Microsoft等多家公司聯(lián)合提出的。下一代USB接口將會有改動方向,下一代的Type-C

USB接口,可支持正反兩面插,并且傳輸數(shù)據(jù)信號強,但目前(2014年)生產商有限。截至2015年12月26日,國內眾多廠商已經大規(guī)模在自己生產的手機設備商使用基于該標準的數(shù)據(jù)線。2.2.1USB技術發(fā)展歷史從1994年11月11日發(fā)表了USBV0.7版本以后,USB版本經歷了多年的發(fā)展,已經發(fā)展為3.1版本,成為二十一世紀電腦中的標準擴展接口。當前(2016年)主板中主要是采用USB2.0和USB3.0接口,各USB版本間能很好的兼容。USB用一個4針(USB3.0標準為9針)插頭作為標準插頭,采用菊花鏈形式可以把所有的外設連接起來,最多可以連接127個外部設備,并且不會損失帶寬。USB需要主機硬件、操作系統(tǒng)和外設三個方面的支持才能工作。二十一世紀的主板一般都采用支持USB功能的控制芯片組,主板上也安裝有USB接口插座,而且除了背板的插座之外,主板上還預留有USB插針,可以通過連線接到機箱前面作為前置USB接口以方便使用(注意,在接線時要仔細閱讀主板說明書并按圖連接,千萬不可接錯而使設備損壞)。而且USB接口還可以通過專門的USB連機線實現(xiàn)雙機互連,并可以通過Hub擴展出更多的接口。USB具有傳輸速度快,使用方便,支持熱插拔,連接靈活,獨立供電等優(yōu)點,可以連接鼠標、鍵盤、打印機、掃描儀、攝像頭、充電器、閃存盤、MP3機、手機、數(shù)碼相機、移動硬盤、外置光驅/軟驅、USB網卡、ADSLModem、CableModem等,幾乎所有的外部設備。理論上USB接口可用于連接多達127個外設,如鼠標、調制解調器和鍵盤等。USB自從1996年推出后,已成功替代串口和并口,并成為二十一世紀個人電腦和大量智能設備的必配的接口之一。表2.1USB發(fā)展歷史USB版本理論最大傳輸速率速率稱號最大輸出電流推出時間USB1.01.5Mbps(192KB/s)低速(Low-Speed)5V/500mA1996年1月USB1.112Mbps(1.5MB/s)全速(Full-Speed)5V/500mA1998年9月USB2.0480Mbps(60MB/s)高速(High-Speed)5V/500mA2000年4月USB3.05Gbps(500MB/s)超高速(Super-Speed)5V/900mA2008年11月/2013年12月USB3.1Gen210Gbps(1280MB/s)[1]超高速+(Super-speed+)20V/5A2013年12月圖2.1USB數(shù)據(jù)線2.2.2軟件結構每個USB只有一個主機,它包括以下幾層:總線接口USB總線接口處理電氣層與協(xié)議層的互連。從互連的角度來看,相似的總線接口由設備及主機同時給出,例如串行接口機(SIE)。USB總線接口由主控制器實現(xiàn)。USB系統(tǒng)用主控制器管理主機與USB設備間的數(shù)據(jù)傳輸。它與主控制器間的接口依賴于主控制器的硬件定義。同時,USB系統(tǒng)也負責管理USB資源,例如帶寬和總線能量,這使客戶訪問USB成為可能。USB系統(tǒng)還有三個基本組件:主控制器驅動程序(HCD)這可把不同主控制器設備映射到USB系統(tǒng)中。HCD與USB之間的接口叫HCDI,特定的HCDI由支持不同主控制器的操作系統(tǒng)定義,通用主控制器驅動器(UHCD)處于軟結構的最底層,由它來管理和控制主控制器。UHCD實現(xiàn)了與USB主控制器通信和控制USB主控制器,并且它對系統(tǒng)軟件的其他部分是隱蔽的。系統(tǒng)軟件中的最高層通過UHCD的軟件接口與主控制器通信。USB驅動程序(USBD)它在UHCD驅動器之上,它提供驅動器級的接口,滿足現(xiàn)有設備驅動器設計的要求。USBD以I/O請求包(IRPs)的形式提供數(shù)據(jù)傳輸架構,它由通過特定管道(Pipe)傳輸數(shù)據(jù)的需求組成。此外,USBD使客戶端出現(xiàn)設備的一個抽象,以便于抽象和管理。作為抽象的一部分,USBD擁有缺省的管道。通過它可以訪問所有的USB設備以進行標準的USB控制。該缺省管道描述了一條USBD和USB設備間通信的邏輯通道。主機軟件在某些操作系統(tǒng)中,沒有提供USB系統(tǒng)軟件。這些軟件本來是用于向設備驅動程序提供配置信息和裝載結構的。在這些操作系統(tǒng)中,設備驅動程序將應用提供的接口而不是直接訪問USBDI(USB驅動程序接口)結構。USB客戶軟件它是位于軟件結構的最高層,負責處理特定USB設備驅動器??蛻舫绦驅用枋鏊兄苯幼饔糜谠O備的軟件入口。當設備被系統(tǒng)檢測到后,這些客戶程序將直接作用于外圍硬件。這個共享的特性將USB系統(tǒng)軟件置于客戶和它的設備之間,這就要根據(jù)USBD在客戶端形成的設備映像由客戶程序對它進行處理。主機各層有以下功能:檢測連接和移去的USB設備。管理主機和USB設備間的數(shù)據(jù)流。連接USB狀態(tài)和活動統(tǒng)計??刂浦骺刂破骱蚒SB設備間的電氣接口,包括限量能量供應。HCD提供了主控制器的抽象和通過USB傳輸?shù)臄?shù)據(jù)的主控制器視角的一個抽象。USBD提供了USB設備的抽象和USBD客戶與USB功能間數(shù)據(jù)傳輸?shù)囊粋€抽象。USB系統(tǒng)促進客戶和功能間的數(shù)據(jù)傳輸,并作為USB設備的規(guī)范接口的一個控制點。USB系統(tǒng)提供緩沖區(qū)管理能力并允許數(shù)據(jù)傳輸同步于客戶和功能的需求。2.2.3硬件結構USB采用四線電纜,其中兩根是用來傳送數(shù)據(jù)的串行通道,另兩根為下游(Downstream)設備提供電源,對于任何已經成功連接且相互識別的外設,將以雙方設備均能夠支持的最高速率傳輸數(shù)據(jù)。USB總線會根據(jù)外設情況在所兼容的傳輸模式中自動地由高速向低速動態(tài)轉換且匹配鎖定在合適的速率。USB是基于令牌的總線。類似于令牌環(huán)網絡或FDDI基于令牌的總線。USB主控制器廣播令牌,總線上設備檢測令牌中的地址是否與自身相符,通過接收或發(fā)送數(shù)據(jù)給主機來響應。USB通過支持懸掛/恢復操作來管理USB總線電源。USB系統(tǒng)采用級聯(lián)星型拓撲,該拓撲由三個基本部分組成:主機(Host),集線器(Hub)和功能設備。主機,也稱為根,根結或根Hub,它做在主板上或作為適配卡安裝在計算機上,主機包含有主控制器和根集線器(RootHub),控制著USB總線上的數(shù)據(jù)和控制信息的流動,每個USB系統(tǒng)只能有一個根集線器,它連接在主控制器上,一臺計算機可能有多個根集線器。集線器是USB結構中的特定成分,它提供叫做端口(Port)的點將設備連接到USB總線上,同時檢測連接在總線上的設備,并為這些設備提供電源管理,負責總線的故障檢測和恢復。集線可為總線提供能源,亦可為自身提供能源(從外部得到電源)。功能設備通過端口與總線連接。USB同時可做Hub使用。2.2.4數(shù)據(jù)傳輸主控制器負責主機和USB設備間數(shù)據(jù)流的傳輸。這些傳輸數(shù)據(jù)被當作連續(xù)的比特流。每個設備提供了一個或多個可以與客戶程序通信的接口,每個接口由0個或多個管道組成,它們分別獨立地在客戶程序和設備的特定終端間傳輸數(shù)據(jù)。USBD為主機軟件的現(xiàn)實需求建立了接口和管道,當提出配置請求時,主控制器根據(jù)主機軟件提供的參數(shù)提供服務。USB支持四種基本的數(shù)據(jù)傳輸模式:控制傳輸,等時傳輸,中斷傳輸及數(shù)據(jù)塊傳輸。每種傳輸模式應用到具有相同名字的終端,則具有不同的性質??刂苽鬏旑愋椭С滞庠O與主機之間的控制,狀態(tài),配置等信息的傳輸,為外設與主機之間提供一個控制通道。每種外設都支持控制傳輸類型,這樣主機與外設之間就可以傳送配置和命令/狀態(tài)信息。等時(lsochronous)傳輸類型(或稱同步傳輸)支持有周期性,有限的時延和帶寬且數(shù)據(jù)傳輸速率不變的外設與主機間的數(shù)據(jù)傳輸。該類型無差錯校驗,故不能保證正確的數(shù)據(jù)傳輸,支持像計算機-電話集成系統(tǒng)(CTI)和音頻系統(tǒng)與主機的數(shù)據(jù)傳輸。中斷傳輸類型支持像游戲手柄,鼠標和鍵盤等輸入設備,這些設備與主機間數(shù)據(jù)傳輸量小,無周期性,但對響應時間敏感,要求馬上響應。數(shù)據(jù)塊(Bulk)傳輸類型支持打印機,掃描儀,數(shù)碼相機等外設,這些外設與主機間傳輸?shù)臄?shù)據(jù)量大,USB在滿足帶寬的情況下才進行該類型的數(shù)據(jù)傳輸。USB采用分塊帶寬分配方案,若外設超過當前帶寬分配或潛在的要求,則不能進入該設備。同步和中斷傳輸類型的終端保留帶寬,并保證數(shù)據(jù)按一定的速率傳送。集中和控制終端按可用的最佳帶寬來傳輸傳輸數(shù)據(jù)。2.3密鑰協(xié)商和加密算法2.3.1密鑰協(xié)商密鑰協(xié)商:兩個或多個實體協(xié)商,共同建立會話密鑰,任何一個參與者均對結果產生影響,不需要任何可信的第三方(TTP)。密鑰協(xié)商協(xié)議:會話密鑰由每個協(xié)議參與者分別產生的參數(shù)通過一定的計算得出。常見的密鑰協(xié)商協(xié)議,如IKE。密鑰協(xié)商協(xié)議的生成方式:可分為證書型和無證書型。證書型是指在會話密鑰的產生過程中,由一個可信的證書中心(CA)給參與密鑰協(xié)商的各方各分發(fā)一個證書,此證書中含有此方的公鑰,ID及其他信息。證書型密鑰協(xié)商協(xié)議的優(yōu)點是提供認證,目前PKI(公鑰密碼體制)廣泛部署,比較成熟,應用面廣,且由PKG管理公私鑰對有利于統(tǒng)一管理,缺點是計算代價大,需要一個可信的CA,同時證書還需要維護。無證書型是指各方在進行會話密鑰的協(xié)商過程中不需要證書的參與,這是目前密鑰協(xié)商協(xié)議的主流種類,優(yōu)點是不需要CA的參與,減少了計算量,尤其是在低耗環(huán)境下應用的更多,同時安全性也不比證書型弱。幾乎沒有明顯的缺點,只是設計一個安全的更加低耗的無證書密鑰協(xié)商方案不是很容易。2.3.2加密算法數(shù)據(jù)加密的基本過程就是對原來為明文的文件或數(shù)據(jù)按某種算法進行處理,使其成為不可讀的一段代碼,通常稱為“密文”,使其只能在輸入相應的密鑰之后才能顯示出本來內容,通過這樣的途徑來達到保護數(shù)據(jù)不被非法人竊取、閱讀的目的。

該過程的逆過程為解密,即將該編碼信息轉化為其原來數(shù)據(jù)的過程。加密技術通常分為兩大類:"對稱式"和"非對稱式"。折疊對稱式加密技術對稱式加密就是加密和解密使用同一個密鑰,通常稱之為"SessionKey"這種加密技術在當今被廣泛采用,如美國政府所采用的DES加密標準就是一種典型的"對稱式"加密法,它的SessionKey長度為56bits。折疊非對稱式加密技術非對稱式加密就是加密和解密所使用的不是同一個密鑰,通常有兩個密鑰,稱為"公鑰"和"私鑰",它們兩個必需配對使用,否則不能打開加密文件。這里的"公鑰"是指可以對外公布的,"私鑰"則不能,只能由持有人一個人知道。它的優(yōu)越性就在這里,因為對稱式的加密方法如果是在網絡上傳輸加密文件就很難不把密鑰告訴對方,不管用什么方法都有可能被別竊聽到。而非對稱式的加密方法有兩個密鑰,且其中的"公鑰"是可以公開的,也就不怕別人知道,收件人解密時只要用自己的私鑰即可以,這樣就很好地避免了密鑰的傳輸安全性問題。折疊算法一個加密系統(tǒng)S可以用數(shù)學符號描述如下:S={P,C,K,E,D}其中P--明文空間,表示全體可能出現(xiàn)的明文集合,C--密文空間,表示全體可能出現(xiàn)的密文集合,K--密鑰空間,密鑰是加密算法中的可變參數(shù),E--加密算法,由一些公式、法則或程序構成,D--解密算法,它是E的逆。當給定密鑰k?K時,各符號之間有如下關系:C=Ek(P),對明文P加密后得到密文CP=Dk(C)=Dk(Ek(P)),對密文C解密后得明文P如用E-1表示E的逆,D-1表示D的逆,則有:Ek=Dk-1且Dk=Ek-1因此,加密設計主要是確定E,D,K。RSA是Rivest、Shamir和Adleman提出來的基于數(shù)論非對稱性(公開鑰)加密算法。大整數(shù)的素因子難分解是RSA算法的基礎。RSA在國外早已進入實用階段,已研制出多種高速的RSA的專用芯片。盡管RSA的許多特性并不十分理想,但迫于信息安全的實際需要,許多重要的信息系統(tǒng)還是采用RSA作為基礎加密機制。從RSA提出不久,我國有關部門就一直對它進行研究。從應用的角度看,軟件實現(xiàn)的RSA已經開始用于計算機網絡加密,用來完成密鑰分配、數(shù)字簽名等功能。除了RSA之外,還有DES(數(shù)據(jù)加密標準)。盡管DES公開了其加密算法并曾被美國列為"標準",但很快被廢棄。加密技術又回歸到"算法保密"的傳統(tǒng)上。2.4已有方案分析該系統(tǒng)主要由溫度測量和數(shù)據(jù)采集兩部分電路組成,實現(xiàn)的方法有很多種,下面將列出兩種在日常生活中和工農業(yè)生產中經常用到的實現(xiàn)方案。2.4.1方案一采用熱電偶溫差電路測量溫度,溫度檢測部分可以使用低溫熱偶,熱電偶由兩個焊接在一起的異金屬導線所組成,熱電偶產生的熱電勢由兩種金屬的接觸電勢和單一導體的溫差電勢組成。通過將參考結點保持在已知溫度并測量該電壓,便可推斷出檢測結點的溫度。數(shù)據(jù)采集部分則使用帶有A/D通道的單片機,在將隨被測溫度變化的電壓或電流采集過來,進行A/D轉換后,就可以用單片機進行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來。熱電偶的優(yōu)點是工作溫度范圍非常寬,且體積小,但是它們也存在著輸出電壓小,容易遭受來自導線環(huán)路的噪聲影響以及漂移較高的缺點,并且這種設計需要用到A/D轉換電路,感溫電路比較麻煩。2.4.2方案二采用數(shù)字溫度芯片DS18B20測量溫度,輸出信號全數(shù)字化。便于單片機處理及控制,省去傳統(tǒng)的測溫方法的很多外圍電路。DS18B20的最大優(yōu)點是之一是采用了單總線的數(shù)據(jù)傳輸,由數(shù)字溫度計DS18B20和微控制器AT89S52構成的溫度測量裝置,它直接輸出溫度的數(shù)字信號,可直接與計算機連接。這樣,測溫系統(tǒng)的結構就比較簡單,體積也不大。采用Java控制,軟件編程的自由度大,可通過編程實現(xiàn)各種各樣的算術算法和邏輯控制,且體積小,硬件實現(xiàn)簡單,安裝方便。2.4.3方案比較從以上兩種方案,很容易看出方案一的測溫裝置可測溫度范圍寬、體積小,但是線性誤差較大,外圍電路復雜。而方案二的測溫裝置電路簡單、精確度較高、實現(xiàn)方便、軟件設計也比較簡單,故本次設計采用方案二。本系統(tǒng)利用AT89S52芯片控制溫度傳感器DS18B20進行實時溫度檢測并顯示,能夠實現(xiàn)快速測量環(huán)境溫度,獲得的溫度可以通過MAX232芯片與PC機的RS-232接口進行串口通信,方便采集和整理溫度數(shù)據(jù)。

第三章系統(tǒng)總體設計3.1系統(tǒng)的需求分析1.利用Java設計一個上位機程序2.實現(xiàn)串口通信功能3.和MSP430或其他開發(fā)板進行通信,能夠驅動蜂鳴器,啟動18B20和5110的顯示4.Java上位機程序可對MSP430開發(fā)板發(fā)送指令并顯示在5110顯示屏上3.2總體框架主要分為三個部分來詳細論述系統(tǒng)的軟硬件結構。首先是上位機程序,然后是下位機硬件結構,最后是下位機程序結構。利用Java設計一個上位機程序實現(xiàn)串口通信功能和MSP430或其他開發(fā)板進行通信,能夠驅動蜂鳴器,啟動18B20和5110的顯示Java上位機程序可對MSP430開發(fā)板發(fā)送指令并顯示在5110顯示屏上3.2.1上位機程序上位機程序使用java語言進行編寫。為了便于用戶操作,提供了swingUI開發(fā)的界面提供圖形化的操作。程序主要負責搜尋管理上位機的串口,并在用戶選定了指定的串口以后,正確配置串口通訊參數(shù),與下位機通訊并同時接受來自下位機的狀態(tài)反饋。MSP430G255MSP430G255單片機電源5110LED液晶顯示板232接口DS18B20溫度探頭蜂鳴器硬件結構示意圖圖3.1系統(tǒng)硬件模塊示意圖3.2.2下位機硬件結構 下位機的硬件結構框架如圖3.2,利用MSP430作為MCU的處理能力,驅動5110LCD的顯示、蜂鳴器的顯示、驅動DS18B20的工作,同時處理來自上位機的指令。串口中斷串口中斷下位機軟件結構示意圖接受串口數(shù)據(jù)并存入隊列程序開始初始化外設刷新屏幕顯示讀取溫度信息檢查串口數(shù)據(jù)是否有數(shù)據(jù)顯示數(shù)據(jù)輸出蜂鳴音有無數(shù)據(jù)圖3.2系統(tǒng)軟件模塊示意圖3.3詳細方案設計3.3.1硬件方案設計總體設計思路系統(tǒng)的核心是一款MSP430G255的MCU,利用MCU的功能,完成系統(tǒng)功能。MSP430G255IPM是TI公司設計生產的一款超低功耗的16位單片機。具有低電壓、超低功耗;快速蘇醒;具有片內比較器等特點。LCD接口 NOKIA5110液晶板的核心是飛利浦在1999年推出的一款名為PCD8544的48×84點矩陣LCD控制/驅動IC。一般應用時,需要連接8個針腳,分別是:1-RST針腳,功能是重啟IC;2-CE針腳,功能是激活IC,類似于片選信號;3-DC針腳,用于標明輸入的是數(shù)據(jù)還是命令;4-DIN針腳,功能是串行數(shù)據(jù)輸入;5-CLK針腳,功能是外部時鐘源;6-Vcc針腳,電源引腳,標稱3.3V供電;7-BL針腳,功能是LED屏幕背光;8-GND針腳,電源地。 本文把LCD的功能引腳和MSP430G255的通用引腳P6相連,具體對應如下表所示:表3.1LCD顯示屏和MCU引腳對應表序號LCD屏幕引腳MCU引腳備注1RSTP6.02CEP6.13DCP6.24DINP6.35CLKP6.46VCC3.3V7BLP6.58GNDGNDDS18B20接口電路DS18B20是常用的數(shù)字溫度傳感器,具有體積小,硬件開銷低,抗干擾能力強,精度高的特點。DS18B20數(shù)字溫度傳感器接線方便,封裝成后可應用于多種場合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號多種多樣,有LTM8877,LTM8874等等。主要根據(jù)應用場合的不同而改變其外觀。封裝后的DS18B20可用于電纜溝測溫,高爐水循環(huán)測溫,鍋爐測溫,機房測溫,農業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設備數(shù)字測溫和控制領域。DS18B20采用單總線的接口方式與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。單總線具有經濟性好,抗干擾能力強,適合于惡劣環(huán)境的現(xiàn)場溫度測量,使用方便等優(yōu)點,使用戶可輕松地組建傳感器網絡,為測量系統(tǒng)的構建引入全新概念。 在單總線模式下,DS18B20只需要三根連線即可,分別為電源,信號,地線。其中電源和地線直接同電源相連,信號線連接MCU的P1.7口。串口接口電路 MSP430本身具有UART異步串口,可以方便的收發(fā)數(shù)據(jù)。但要和上位機通訊,必須符合RS232的規(guī)定。UART和RS232主要的區(qū)別在于電平,MSP430的UART接口輸出的電平最高只有3.3V,遠遠達不到RS232的要求。同時如果直接連接,RS232的高電平也會操作MSP430端口的耐壓極限,造成器件損壞。 這里使用MAX232芯片來解決這一問題,通過MAX232的匹配,我們可以使用MSP430的UART模塊來操作串口,收發(fā)數(shù)據(jù)。系統(tǒng)電源設計 系統(tǒng)電源采用雙電源冗余接口,可以使用5V的外接電源輸入,同時可以使用USB接口為系統(tǒng)供電。目前系統(tǒng)耗電較低,完全可以單獨使用USB系統(tǒng)進行供電。蜂鳴器設計 考慮蜂鳴器采用CMOS驅動,要得到頻率不同的聲音信號,還需要單片機輸出頻率不同的脈沖來驅動。這里蜂鳴器直接連接到單片機的UART模塊的TX腳,利用UART輸出的信號來替代脈沖信號,驅動蜂鳴器。時鐘源設計 MCU內部帶有時鐘源,但是外部時鐘源更加準確,所以采用外部時鐘源 外部8M的無源晶振采用兩個22pF的陶瓷電容耦合后連接到單片機對應引腳。3.3.2下位機軟件方案設計 首先我們討論本文中下位機主體程序的結構。本文沒有在MSP430上使用操作系統(tǒng),這也意味著我們的程序是順序運行的。在這個模式下,最有效的手段就是通過循環(huán)實現(xiàn)多種任務的協(xié)同處理。本文的下位機主要的工作就是通過循環(huán)來完成,配合中斷的輔助,完成既定功能。LCD顯示模塊 通過查閱PCD8544的數(shù)據(jù)手冊可以得知,LCD顯示主要通過修改PCD8544內部的數(shù)據(jù)寄存器實現(xiàn),但是直接修改數(shù)據(jù)寄存器來完成顯示功能不便于處理顯示中的需求,所以我們換一種實現(xiàn)方式,在單片機內部規(guī)劃出一個和液晶顯示區(qū)域對應的二位數(shù)組,數(shù)組內的內容就是對應位置液晶屏需要顯示的值。 48×84點矩陣LCD在加載8*6的點陣字庫以后,可以顯示6×16的一個字符增列。第一排數(shù)據(jù)我們規(guī)劃用來顯示溫度值,所以我們用于顯示串口數(shù)據(jù)內容的二位數(shù)組大小就是5*16.。 程序周期性的讀取二位數(shù)組的內容,并且把他們完整的投射到LED液晶屏上。而每次我們需要修改顯示內容時,則通過封裝好的函數(shù)修改二位數(shù)組的內容即可。UART通訊模塊 UART接收串口數(shù)據(jù)通過中斷完成,和主程序循環(huán)無關。MSP430是獨立中斷,并且本文只使用了UART終端,所以并不需要考慮終端嵌套的問題。終端處理的要求是盡量快,并且最好避免函數(shù)調用。在這個原則的指導下,本文設計使用一個隊列來存儲收到的數(shù)據(jù)。針對隊列溢出這種極端的情況,本文作了簡單的處理,丟棄原隊列中的全部內容,存儲最新收到的數(shù)據(jù)。DS18B20驅動模塊 DS18B20的驅動只需要一個IO就能完成,并且其通訊速率較慢,可以通過程序中順序控制時序來完成。蜂鳴器驅動模塊蜂鳴器需要一個脈沖隊列來驅動發(fā)聲。MSP430可以使用PWM模塊來驅動,也可以在軟件中模擬輸出方波來驅動。本文采用UART輸出的信號來代替方波驅動。例如輸出0x55是,就是一串占空比50%的方波信號。利用這一點,可以使蜂鳴器發(fā)出多種不同的聲音。3.3.3上位機軟件方案設計考慮到兼容性,使用java可以跨平臺的獲得最大的兼容性,使得我們的編碼工作以最小投入獲得最大收益。同時考慮操作方便,我們還是要求圖形界面。綜合考慮,java中隊圖形界面支持最好的IDE環(huán)境就是NetBeansIDE下的swing。本文既是利用swing編寫的圖形界面的上位機程序。在上位機程序中,我們使用了開源的RXTX,該項目提供了Windows,Linux,MacosX,Solaris操作系統(tǒng)下的兼容m串口通訊包API的實現(xiàn),為其他研發(fā)人員在此類系統(tǒng)下研發(fā)串口應用提供了相當?shù)姆奖?。程序只有一個頁面,按鈕采用事件驅動。串口接收則采用多線程驅動。額外創(chuàng)建的線程不停的掃描串口,一旦接收到串口數(shù)據(jù),則通知主界面修改顯示內容。3.4方案實現(xiàn)及驗證3.4.1安裝NetBeansIDE環(huán)境 首先安裝NetBeansIDE環(huán)境。NetBeans可以從java網站免費獲取,也可以免費使用。按照軟件提示一步一步安裝好以后即可。 需要安裝JavaSE開發(fā)工具包(JDK)7Update10(或更高版本)或JDK8才能安裝NetBeansIDE。您可以從以下網址下載JDK7和JDK8的最新更新:/technetwork/java/javase/downloads。PHP和C/C++NetBeans包僅要求安裝并運行Java運行時環(huán)境(JRE)7或8。如果您打算使用某項Java功能,則需要JDK7或8。 NetBeansIDE下載頁上提供了多種安裝程序,您可以下載其中的任何一種,每種安裝程序都包含基本IDE和一些附加工具。以下是可供選擇的安裝程序下載選項:JavaSE。支持所有標準的JavaSE開發(fā)功能以及NetBeans平臺開發(fā)和JavaFX2.2SDK(或更高版本)或JavaFX8SDK。JavaEE。提供了用于開發(fā)JavaSE和JavaEE應用程序的工具,并且支持NetBeans平臺開發(fā)和JavaFX2.2SDK(或更高版本)或JavaFX8SDK。此下載選項還包括GlassFishServerOpenSourceEdition4.1.1和ApacheTomcat8.0.27軟件。HTML5/JavaScript。提供用于開發(fā)HTML5/Javascript的工具。包含Java運行時環(huán)境,并且不需要單獨的Java安裝。PHP。提供了PHP5.x開發(fā)工具,并且支持Zend和Symfony框架。包含Java運行時環(huán)境,并且不需要單獨的Java安裝。C/C++。支持使用C、C++、Qt、Fortran和匯編語言進行開發(fā)。包含Java運行時環(huán)境,并且不需要單獨的Java安裝。全部。這是完整下載選項,其中包含NetBeansIDE的所有可用運行時和技術。3.4.2安裝RXTX串口包 RXTXcomm是一款開源的針對串口操作的java包,RXTX是個提供串口和并口通信的開源java類庫,由該項目發(fā)布的文檔均遵循LGPL協(xié)議。該項目的主頁位于/jarvi/rxtx/index.html。RXTX項目提供了Windows,Linux,MacosX,Solaris操作系統(tǒng)下的兼容m串口通訊包API的實現(xiàn),為其他研發(fā)人員在此類系統(tǒng)下研發(fā)串口應用提供了相當?shù)姆奖?。針對x86體系結構的Linux操作系統(tǒng)平臺,RXTX的部署包括下面幾個文檔:*RXTXcomm.jarRXTX自己的實現(xiàn)*librxtxSerial.so由調用的底層串口庫文檔*librxtxParallel.so由RXTXcomm.jar調用的底層并口庫文檔驅動的類配置文檔,內容是Driver=gnu.io.RXTXCommDriver這里僅介紹如何在window系統(tǒng)下進行安裝。在Netbeans界面中,在左邊得項目欄中右鍵點擊項目名-->屬性-->庫,點擊“添加JAR/文件夾”按鈕,選擇RXTXcomm.jar文件。接下來只需要確認:importgnu.io.*;是一個有效語句就可以了。 如果這時候運行,會得到運行時錯誤,因為rxtxSerial.DLL庫沒辦法找到。我需要右鍵點擊項目名-->屬性-->運行,在界面總添加VM參數(shù):-Djava.library.path="C:/where-ever-you-stuck-rxtxSerial.DLL-file;%PATH%例如:-Djava.library.path="C:/rxtx-2.1-7-bins-r2/Windows/i368-mingw32/;%PATH%"當然你也可以復制那個目錄下的所有dll文件到C:/Windows/System32/中,JAVA會自動找到它們的。注意。你不能在64bit的JRE中使用32bitDLL文件,不然你將會得到類似下文的錯誤:Can'tloadIA32-bit.dllonaAMD64-bitplatformthrownwhileloadinggnu.io.RXTXCommDriver解決這個問題的方式就是安裝32bitJDK,并在Netbeans中添加新平臺(工具-->JAVA平臺-->添加平臺)并且將項目設置切換到新的平臺,然后就可以輸入"importgnu.io.*",確認是否有效了。3.4.3編寫上位機程序 在成功安裝RXTX之后,就開始使用NetBeansIDE新建工程,并使用圖形化界面直接編輯窗口。本文中的串口主要有四個元素:下拉菜單 在計算機應用中,下拉式選單是選單的一種表現(xiàn)形式。具體表現(xiàn)為:當用戶選中一個選項后,該選單會向下延伸出具有其他選項的另一個選單。下拉式選單通常應用于把一些具有相同分類的功能放在同一個下拉式選單中,并把這個下拉式選單置于主選單的一個選項下。下拉菜單內的項目可以據(jù)需要設置為多選或單選,可以用來替代一組復選框(設置為多選)或單選框(設置為單選)。這樣比復選框組或單選框組的占用位置小,但不如它們直觀。 本文使用下拉菜單來顯示當前計算機所有的串口。所以在程序啟動時,就要掃描所有當前計算機所有存在的串口,并且加入下拉菜單://列出所有可以使用的串口publicvoidlistPort(){CommPortIdentifiercpid;Enumerationen=CommPortIdentifier.getPortIdentifiers();jComboBox1.removeAllItems();AddTextOut("nowtolistallPortofthisPC:"+en+"\r\n");while(en.hasMoreElements()){cpid=(CommPortIdentifier)en.nextElement();if(cpid.getPortType()==CommPortIdentifier.PORT_SERIAL){AddTextOut("FindCom:"+cpid.getName()+","+cpid.getCurrentOwner()+"\r\n");jComboBox1.addItem(cpid.getName());}}}打開按鈕 一旦用戶從下來菜單選擇一個串口之后,接下來的動作就是打開串口。打開串口意味著一系列的操作,首先是找到并且打開指定的串口;打開成功之后,這個按鈕便不能夠再被操作;最后,還要建立并啟動一個線程,這個線程不停的掃描打開的串口,接受串口數(shù)據(jù)并且在界面上顯示。privateSerialPortserialPort;privatevoidopenPort(StringPortName){CommPortIdentifiercpid;Enumerationen=CommPortIdentifier.getPortIdentifiers();//listallPortofthisPCwhile(en.hasMoreElements()){cpid=(CommPortIdentifier)en.nextElement();if(cpid.getPortType()==CommPortIdentifier.PORT_SERIAL){//AddTextOut("發(fā)現(xiàn)串口:"+cpid.getName()+","+cpid.getCurrentOwner());if(cpid.getName()==PortName){try{serialPort=(SerialPort)cpid.open("UART",500);//log("實例SerialPort成功!");}catch(PortInUseExceptione){serialPort=null;}if(null!=serialPort){//成功打開串口//jTextArea2.setText("成功打開串口:"+cpid.getName());jButton1.setText("OpenedCom:"+cpid.getName());jButton1.setEnabled(false);jButton2.setEnabled(true);try{//設置一下串口的波特率等參數(shù)serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);}catch(UnsupportedCommOperationExceptione){AddTextOut("ConfigError\r\n");}//開設新線程,接受串口數(shù)據(jù)finalThreadComRcvThread=newThread(newRunnable(){publicvoidrun(){InputStreamin=null;byte[]bytes=null;while(true){try{in=null;in=serialPort.getInputStream();intbufflenth=in.available();//獲取buffer里的數(shù)據(jù)長度if(bufflenth>0){bytes=newbyte[bufflenth];//初始化byte數(shù)組為buffer中數(shù)據(jù)的長度in.read(bytes);AddTextOut(newString(bytes));}else{Thread.sleep(1000);}}catch(Exceptione){}finally{try{if(in!=null){in.close();in=null;}}catch(IOExceptione){//thrownewSerialPortInputStreamCloseFailure();}}}}});ComRcvThread.start();}}}}}文本顯示區(qū)域 文本顯示區(qū)域是程序界面中最大的一塊區(qū)域,也是用戶關注的重點。任何一string結構的數(shù)據(jù)內容都可以被顯示在這個區(qū)域,在串口打開之前,他負責顯示一些程序的狀態(tài);在串口打開之后,這個區(qū)域就被用來專門顯示打開窗口的收發(fā)內容。本文對這個區(qū)域的顯示作了簡單的封裝:privatevoidAddTextOut(StringMessage2display){Stringo_content=jTextArea2.getText();o_content+=Message2display;//o_content+="\r\n";jTextArea2.setText(o_content);}文本輸入區(qū)域這個區(qū)域被用來輸入要先串口發(fā)送的數(shù)據(jù)內容。發(fā)送按鈕點擊【發(fā)送按鈕】之后,文本輸入區(qū)域的數(shù)據(jù)內容就被發(fā)送給打開的串口。同時清空文本輸入區(qū)域,等待新的數(shù)據(jù)。privatevoidcommitContent(){if(null!=serialPort){OutputStreamout=null;try{out=serialPort.getOutputStream();out.write(jTextField1.getText().getBytes());out.flush();}catch(IOExceptione){}finally{AddTextOut("\r\n[SEND]:"+jTextField1.getText()+"\r\n");jTextField1.setText(null);try{if(out!=null){out.close();out=null;}}catch(IOExceptione){}}}}3.4.4安裝IAR環(huán)境IAREW430軟件為收費軟件,不過IAR公司提供4K/8K的限制版,可以無限期使用,或者30天全功能版,用戶可以根據(jù)需要自行下載,編寫下位機程序。3.4.5編寫下位機程序下位機程序分為幾個部分:串口操作 首先是初始化串口UART模塊。MAX232不需要額外的初始化操作,只需要正確配置MSP430上的UART模塊即可正常工作://*****************************************************************//MSP430串口初始化//*****************************************************************voidUART_Init(){U0CTL|=SWRST;//復位SWRSTU0CTL|=CHAR;//8位數(shù)據(jù)模式U0TCTL|=SSEL1;//SMCLK為串口時鐘U0BR1=baud_h;//BRCLK=8MHZ,Baud=BRCLK/NU0BR0=baud_l;//N=UBR+(UxMCTL)/8U0MCTL=0x00;//微調寄存器為0,波特率9600bpsME1|=UTXE0;//UART1發(fā)送使能ME1|=URXE0;//UART1接收使能U0CTL&=~SWRST;IE1|=URXIE0;//接收中斷使能位P3SEL|=BIT4;//設置IO口為普通I/O模式P3DIR|=BIT4;//設置IO口方向為輸出P3SEL|=BIT5;}這里需要注意的是MSP430上的IO口都有方向寄存器,需要正確配置。接下來處理UART的接收功能//*************************************************************************//處理來自串口0的接收中斷//*************************************************************************ucharRCVBUF[32];ucharRCVPTR=0;#pragmavector=UART0RX_VECTOR__interruptvoidUART0_RX_ISR(void){//uchardata=0;RCVBUF[RCVPTR++]=U0RXBUF;//接收到的數(shù)據(jù)存起來//Send_Byte(data);//將接收到的數(shù)據(jù)再發(fā)送出去RCVPTR=RCVPTR%(sizeof(RCVBUF)/sizeof(RCVBUF[0]));} 上面的代碼的工作邏輯很簡單,首先建立一個32個字長的隊列,每次收到串口數(shù)據(jù)后,我們都會進入中斷,此時把接收到的數(shù)據(jù)放入隊列即可。同時注意處理隊列溢出的情況。對于發(fā)送,我們簡單對發(fā)送過程進行封裝://*************************************************************************//串口0發(fā)送數(shù)據(jù)函數(shù)//*************************************************************************voidSend_Byte(uchardata){while((IFG1&UTXIFG0)==0);//發(fā)送寄存器空的時候發(fā)送數(shù)據(jù)U0TXBUF=data;} 最后是處理,我們在主循環(huán)進行處理,并在處理結束后清理串口接收緩存數(shù)據(jù)的隊列。//RCVCMDfromCOMif(RCVPTR>0){處理數(shù)據(jù)RCVBUF[RCVPTR]=0;ScreenPrint(RCVBUF);RCVPTR=0;}LCD液晶屏操作首先還是初始化工作:voidLCD_init(void){P6DIR=0xff;//P3DIR=0xff;P6OUT=0xff;//P3OUT=0xff;lcd_write_byte(0x21,0);//初始化Lcd,功能設定使用擴充指令lcd_write_byte(0xd0,0);//設定液晶偏置電壓lcd_write_byte(0x20,0);//使用基本指令lcd_write_byte(0x0C,0);//設定顯示模式,正常顯示}此外我們封裝一些對LCD的操作函數(shù)voidlcd_write_byte(unsignedchartemp,unsignedcharmingmin){unsignedchari;CSL;if(mingmin==1)DCH;if(mingmin==0)DCL; for(i=0;i<8;i++){if(temp&0x80)DINH;if((temp&0x80)==0)DINL;CLKL;CLKH;temp=temp<<1;}}voidlcd_set_xy(unsignedcharX,unsignedcharY){lcd_write_byte(0x40|Y,0);//columnlcd_write_byte(0x80|X,0);//row}voidLCD_clear(void) //清屏{unsignedchart,k;lcd_set_xy(0,0);for(t=0;t<6;t++){for(k=0;k<84;k++){lcd_write_byte(0x00,1);}}} 最后我們建立一個數(shù)組,并且將數(shù)組內容和LCD屏幕內容對應,并且寫出維護對應的函數(shù),要求周期性執(zhí)行這個函數(shù):unsignedcharScreenPix[14*5];unsignedcharCursor=0;voidScreen_work(void){chari;lcd_set_xy(0,1);for(i=0;i<sizeof(ScreenPix)/sizeof(ScreenPix[0]);i++){LCD_write_char(ScreenPix[i]);}}此外,本文還準備了兩個函數(shù)用于顯示內容,一個是清空屏幕,一個是在屏幕已有的現(xiàn)實基礎上添加一個字符串顯示:voidScreenCl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論