首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java JSSC rs232无事件

Java JSSC rs232无事件
EN

Stack Overflow用户
提问于 2013-05-27 00:41:36
回答 1查看 4.4K关注 0票数 0

我试图用java简单串行连接器(jssc)从rs232 (读卡器Roger prt66lt)获取一些值,但看起来我没有启动任何事件。我使用的是示例代码。读卡器被设置为在他读取卡号时发送卡号。但我没有得到任何事件开始,因为我没有看到事件,System.out。我包括了jssc.jar (从2.5.0版本开始)和它与设备的连接。这个版本的jssc不需要任何.dll吗?我想它包含在里面了吧?与此类似的代码,但使用RXTX库运行良好,但我需要包含attahed dll库。

读卡器发送给我十六进制值: 02,10个字符数据,0D,0A,03

代码:

代码语言:javascript
复制
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");
            }
        }
    }
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-28 03:39:23

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

解决方案:

代码语言:javascript
复制
serialPort.setParams(9600, 8, 1, 0, false, true);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16761395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档