最近在寫java串口編程,網上一搜大多數就是JavaComm 、 RXTX資料;
起初Sun沒有爲Linux提供JavaComm的現實(從2006開始纔有的),導致了免費軟件RxTx庫的開發。
RxTx支持許多平臺而不僅僅是Linux。它可以與JavaComm結合起來使用(RxTx提供了特定硬件驅動),也可以獨立使用。
但是在使用的時候發現,我們引用RXTXcomm.jar 或者 comm.jar 但 對於64位和32位系統會引用不同xxx.dll文件,配置起來不方便,最終採用jssc.jar包
會自動選擇對應的系統,引用相應的配置,一個jar包搞定........
附上個人實例: 啓動串口,關閉
/**
*
* 打開串口
* 1 載波檢測 DCD(Data Carrier Detect)
* 2 接收數據 RXD(Received Data)
* 3 發送數據 TXD(Transmit Data)
* 4 數據終端準備好 DTR(Data Terminal Ready)
* 5 信號地 SG(Signal Ground)
* 6 數據準備好 DSR(Data Set Ready)
* 7 請求發送 RTS(Request To Send)
* 8 清除發送 CTS(Clear To Send)
* 9 振鈴提示 RI(Ring Indicator)
*
*/
public void open() {
serialPort=new SerialPort(_config.comName);
boolean b;
try {
b = serialPort.openPort();
if(!b) {
System.out.println("Open " + _config.comName + " failed....");
return;
}else{
System.out.println("Open " + _config.comName + " success......"+_config.comDtr+" RTS:"+_config.comRts);
}
serialPort.setParams(_config.getComRate(), _config.getComDataBit(),_config.getComStopBit(), _config.getComParity());
serialPort.addEventListener(this);
serialPort.setDTR(_config.comDtr);
serialPort.setRTS(_config.comRts);
} catch (SerialPortException e) {
isError=true;
message=ErrorLogger.getStackTrace(e);
_eLogger.Write("串口打開失敗:"+message);
System.err.println("串口打開失敗:"+message);
}
}
/**
*
* 關閉串口
*
*/
public void stop() {
if(null!=serialPort){
try {
serialPort.closePort();
} catch (SerialPortException e) {
isError=true;
message=ErrorLogger.getStackTrace(e);
_eLogger.Write("串口關閉失敗:"+message);
System.err.println("串口關閉失敗:"+message);
}
}
}
監聽數據 ; 實現 implements SerialPortEventListener 接口
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR()) {//If data is available
if (event.getEventValue() > 0) {
try {
byte[] data = serialPort.readBytes(event
.getEventValue());
resultStr=new String(data);
System.out.println("bytes: " + data.length + " Received : "+ resultStr);
} catch (SerialPortException e) {
isError=true;
message=ErrorLogger.getStackTrace(e);
_eLogger.Write("監聽數據異常:"+message);
System.err.println("監聽數據異常:"+message);
}
}
} else if (event.isCTS()) {
} else if (event.isDSR()) {
}
}