使用Java jssc从rs-485读取数据

问题描述

我有一个体重指示器,可以通过rs-485协议发送数据,

我正在使用USB(串行转USB转换器)将其连接到计算机。 使用程序(串行通讯测试仪),我可以从中正确读取数据,并且可以正常工作。 现在我正尝试使用Java使用JSSC库读取此数据,这是我的代码

public class Test2 {

    /**
     * @param args the command line arguments
     */
    static SerialPort serialPort;

    public static void main(String[] args) {
        serialPort = new SerialPort("COM9");
        try {
            serialPort.openPort();//Open port
            serialPort.setParams(SerialPort.BAUdratE_115200,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);//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);
        }
    }

    public static class SerialPortReader implements SerialPortEventListener {

        String buffer = "";
        private void onMessage() {
                // constructing message  
                System.out.println("RECEIVED MESSAGE: " + buffer);
                buffer = "";
        }

        @Override
        public void serialEvent(SerialPortEvent event) {
            if (event.isRXCHAR() && event.getEventValue() > 0) {
                try {
                    String b = serialPort.readString(event.getEventType());
                    System.out.println("event:"+b);
                    if (b.equals("\n") ) {
                        onMessage();
                    } else {
                        buffer += b;
                    }
                } catch (SerialPortException ex) {
                    System.out.println("Error in receiving string from COM-port: " + ex);
                }
            }
        }
    }

}

这是数据的外观,在“串行通信测试器”中使用的选项应该会收到“ 50.46 KG NT” serial comm tester output

但是在Java中我无法正确读取它,请问有什么帮助吗? java output

请注意,在多个值发送之后,java程序显示了来自perperive数据的某些字符!

解决方法

您只是为readString()参数使用了错误的功能。
您应该使用getEventValue()而不是getEventType()

错误:

String b = serialPort.readString(event.getEventType());

正确:

String b = serialPort.readString(event.getEventValue());

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...