最近在研究一個東西要用到串口的讀寫,通過讀取串口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的波特率就可以了)。