【问题标题】:read data from rs-485 using java jssc使用 java jssc 从 rs-485 读取数据
【发布时间】:2020-09-10 19:54:38
【问题描述】:

我有使用 rs-485 协议发送数据的体重指示器设备,

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

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程序会显示一些来自旧数据的字符!

【问题讨论】:

    标签: java serial-port rs485 jssc


    【解决方案1】:

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

    错误:

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

    正确:

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

    【讨论】:

      猜你喜欢
      • 2017-06-21
      • 2023-03-29
      • 2019-10-10
      • 2016-05-15
      • 2011-09-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多