2013-05-26 111 views
0

我試圖從一個java簡單串行connetor(jssc)rs232(讀卡器羅傑prt66lt),但它看起來像我沒有得到任何事件開始一些值。我正在使用示例代碼。讀卡器設置爲在讀取卡號時發送卡號。但我沒有得到任何事件開始因爲我沒有看到事件,System.out。我包含jssc.jar(來自2.5.0版本)及其連接到設備。這個版本的jssc不需要任何.dll嗎?我認爲它包含在其中?這個類似的代碼,但與RXTX庫工作正常,但我需要包括達到DLL文庫。爪哇JSSC rs232沒有事件

讀卡器給我十六進制值:02,10個字符數據,0D,0A,03

代碼:

import jssc.SerialPort; 
import jssc.SerialPortEvent; 
import jssc.SerialPortEventListener; 
import jssc.SerialPortException; 

public class Main { 

static SerialPort serialPort; 

public static void main(String[] args) { 
    serialPort = new SerialPort("COM4"); 
    try { 
     serialPort.openPort();//Open port 
     serialPort.setParams(9600, 8, 1, 0);//Set params 
     int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR;//Prepare mask 
     serialPort.setEventsMask(mask);//Set mask 
     serialPort.addEventListener(new SerialPortReader());//Add SerialPortEventListener 
    } 
    catch (SerialPortException ex) { 
     System.out.println(ex); 
    } 
} 

static class SerialPortReader implements SerialPortEventListener { 
    public void serialEvent(SerialPortEvent event) { 
System.out.println("Event started"); 
     if(event.isRXCHAR()){//If data is available 
      if(event.getEventValue() == 10){//Check bytes count in the input buffer 
       //Read data, if 10 bytes available 
       try { 
        byte buffer[] = serialPort.readBytes(10); 
       } 
       catch (SerialPortException ex) { 
        System.out.println(ex); 
       } 
      } 
     } 
     else if(event.isCTS()){//If CTS line has changed state 
      if(event.getEventValue() == 1){//If line is ON 
       System.out.println("CTS - ON"); 
      } 
      else { 
       System.out.println("CTS - OFF"); 
      } 
     } 
     else if(event.isDSR()){///If DSR line has changed state 
      if(event.getEventValue() == 1){//If line is ON 
       System.out.println("DSR - ON"); 
      } 
      else { 
       System.out.println("DSR - OFF"); 
      } 
     } 
    } 
} 
} 
+0

Gravian,我想,以確定是否所有串行庫需要的DLL。你可以運行沒有win32com.dll?我假設這是你提到的DLL。你有沒有考慮過你可以從麻省理工學院下載的舊罐子? – dougM

回答

0

的問題是,RTS和DTR線的默認設置爲高,我需要使用另一個setParams方法,並根據設備的需要將RTS行設置爲false。

解決方案:

serialPort.setParams(9600, 8, 1, 0, false, true);