0

我正在尝试使用 java 简单串行连接器(jssc)从 rs232(读卡器 Roger prt66lt)获取一些值,但看起来我没有启动任何事件。我正在使用示例代码。读卡器设置为读取时发送卡号。但是我没有启动任何事件,因为我没有看到 System.out 事件。我包括 jssc.jar(来自 2.5.0 版本)及其与设备的连接。这个版本的 jssc 不需要任何 .dll 吗?我认为它包含在其中?与此类似的代码,但使用 RXTX 库可以正常工作,但我需要包含附加的 dll 库。

读卡器向我发送 HEX 值:02、10 个字符 DATA、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");
            }
        }
    }
}
}
4

1 回答 1

0

问题是 RTS 和 DTR 线的默认设置是高,所以我需要使用另一个 setParams 方法并根据设备的需要将 RTS 线设置为 false。

解决方案:

serialPort.setParams(9600, 8, 1, 0, false, true);
于 2013-05-27T19:39:23.123 回答