最近在研究一個東西要用到串口的讀寫通過讀取串口COM獲取一個指令然後根據該指令通過配置文件獲取其他的信息再通過串口COM進行做下一步的一系列操作
java讀寫串口要用到的是javax擴展類庫javacomm它是一系列的標准該類庫在sun的官網上只提供linux版本由於我所應用的平台是win所以找了個win的實現在此過程中遇到了一系列的問題後來終於解決問題並完成了通過讀寫串口進行通信的功能在此對其java讀寫串口的情況做個簡要說明
首先下載javacomm包然後將其解壓解壓後需要做的就是配置串口通信相關東西下面是自己使用的時候的配置
把mproperties文件拷貝到Java運行時環境的lib目錄中即
C:\Program Files\Java\jdk_\lib\mproperties
C:\Program Files\Java\jdk_\jre\lib\mproperties
把wincomdll拷貝到C:\windows\system\ 和 C:\Program Files\Java\jdk_\jre\bin\下
把commjar放到Java運行時環境的lib目錄中即C:\Program Files\Java\jdk_\lib\commjar
在環境變量的CLASSPATH中添加commjar如%JAVA_HOME%\lib\commjar;
然後通過COM的API來實現串口的讀寫其實API相當簡單如下代碼
Java代碼
CommPortIdentifier serialPortId = CommPortIdentifiergetPortIdentifier(COM);
SerialPort port = (SerialPort) serialPortIdopen(Read );//打開COM串口其中參數是用來設置打開串口的超時時間
portsetSerialPortParams( );//設置COM的波特率數據位停止位校驗方式等
//從串口中得到輸入輸出流了
OutputStream out = portgetOutputStream();
out write(buffer);
out flush();
InputStream in = portgetInputStream();
inread(data);//data是一個byte[]
CommPortIdentifier serialPortId = CommPortIdentifiergetPortIdentifier(COM); SerialPort port = (SerialPort) serialPortIdopen(Read );//打開COM串口其中參數是用來設置打開串口的超時時間 portsetSerialPortParams( );//設置COM的波特率數據位停止位校驗方式等 //從串口中得到輸入輸出流了 OutputStream out = portgetOutputStream(); out write(buffer); out flush(); InputStream in = portgetInputStream(); inread(data);//data是一個byte[]
如果COM通信要求的波特率是而系統默認的波特率是在系統的設備管理器中修改了COM的波特率為那麼這個時候修改後程序不報錯誤但是在串口裡獲取不到任何信息也就是在設備管理器修改COM的波特率是沒有用的必須通過portsetSerialPortParams( )來設置其波特率
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26266.html