Java串口通信總結

         最近在研究一個東西要用到串口的讀寫,通過讀取串口COM2獲取一個指令,然後根據該指令通過配置文件獲取其他的信息再通過串口COM1進行做下一步的一系列操作。

 

         java讀寫串口要用到的是javax擴展類庫javacomm,它是一系列的標準,該類庫在sun的官網上只提供linux版本。由於我所應用的平臺是win32,所以找了個win32的實現。在此過程中遇到了一系列的問題,後來終於解決問題並完成了通過讀寫串口進行通信的功能。在此對其java讀寫串口的情況做個簡要說明:

 

         首先下載javacomm包,然後將其解壓,解壓後需要做的就是配置串口通信相關東西,下面是自己使用的時候的配置:

         

         1.把javax.comm.properties文件拷貝到Java運行時環境的lib目錄中,即:
                C:\Program Files\Java\jdk1.5.0_12\lib\javax.comm.properties
                C:\Program Files\Java\jdk1.5.0_12\jre\lib\javax.comm.properties

         2.把win32com.dll拷貝到C:\windows\system32\ 和 C:\Program Files\Java\jdk1.5.0_12\jre\bin\下

         3.把comm.jar放到Java運行時環境的lib目錄中,即C:\Program Files\Java\jdk1.5.0_12\lib\comm.jar

         4.在"環境變量"的CLASSPATH中添加comm.jar,如:%JAVA_HOME%\lib\comm.jar;

 

         然後通過COM的API來實現串口的讀寫,其實API相當簡單,如下代碼:

        

CommPortIdentifier serialPortId = CommPortIdentifier.getPortIdentifier(“COM2”);
SerialPort  port = (SerialPort) serialPortId.open(“Read”, 30);//打開COM2串口,其中30參數是用來設置打開串口的超時時間。
port.setSerialPortParams(1200, 8, 1, 0);//設置COM2的波特率,數據位,停止位,校驗方式等

//從串口中得到輸入輸出流了
OutputStream out = port.getOutputStream();
out .write(buffer);
out .flush();

InputStream in = port.getInputStream();
in.read(data);//data是一個byte[]

        

         如果COM1通信要求的波特率是1200,而系統默認的波特率是9600,在系統的設備管理器中修改了COM1的波特率爲1200,那麼這個時候修改後程序不報錯誤,但是在串口裏獲取不到任何信息,也就是在設備管理器修改COM1的波特率是沒有用的,必須通過port.setSerialPortParams(1200, 8, 1, 0)來設置其波特率(之前這個問題一直困擾着我,以爲在設備管理器修改COM1的波特率就可以了)。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章