2013-05-26 2 views
0

자바 간단한 직렬 connetor (jssc) rs232 (카드 판독기 Roger prt66lt)에서 일부 값을 얻으려고하지만 모든 이벤트가 시작 얻을 것 같습니다. 예제 코드를 사용하고 있습니다. 카드 리더는 카드를 읽을 때 카드 번호를 보내도록 설정되어 있습니다. 하지만 나는 어떤 이벤트도 시작하지 못한다. 나는 System.out 이벤트를 보지 못한다. jssc.jar (2.5.0 버전부터)와 divice에 연결하는 중입니다. jssc의이 버전은 .dll이 필요합니까? 나는 그것에 포함 된 것 같아? 이 하나의 비슷한 코드지만 RXTX 라이브러리와 잘 작동하지만 attahed dll 라이브러리를 포함해야합니다.자바 JSSC rs232 이벤트 없음

카드 리더는 나에게 HEX 값을 보내 : 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이라고 가정합니다. MIT에서 다운로드 할 수있는 오래된 항아리를 고려 했습니까? – dougM

답변

0

문제는 RTS와 DTR 라인의 기본 설정이 너무 높은 것입니다 것을 다른 setParams 메서드를 사용하고 장치에서 필요에 따라 RTS 줄을 false로 설정해야합니다.

솔루션 :

serialPort.setParams(9600, 8, 1, 0, false, true); 
관련 문제