我试图从rs232(读卡器Roger prt66lt)获得一些带有java简单串行连接器(jssc)的值,但它看起来我没有得到任何事件开始。我正在使用示例代码。读卡器设置为在读取时发送卡号。但我没有得到任何事件开始因为我没有看到System.out事件。我包括jssc.jar(从2.5.0版本)和它连接到divice。这个版本的jssc不需要任何.dll吗?我认为它包括在内吗?与此相似但使用RXTX库的代码工作正常,但我需要包含已获取的dll库。
读卡器发给我十六进制值: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");
}
}
}
}
}
答案 0 :(得分:0)
问题是RTS和DTR线的默认设置是高,所以我需要使用另一个setParams方法,并根据设备的需要将RTS线设置为false。
解决方案:
serialPort.setParams(9600, 8, 1, 0, false, true);