считывание данных с rs-485 с помощью Java jssc

#java #serial-port #rs485 #jssc

#java #последовательный порт #rs485 #jssc

Вопрос:

У меня есть устройство с индикатором веса, которое отправляет данные по протоколу rs-485,

Я подключаю его к компьютеру с помощью USB (последовательный конвертер в USB). используя программу (serial comm tester), я могу правильно считывать данные с нее, и она работает нормально. теперь я пытаюсь прочитать эти данные с помощью 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() amp;amp; 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);
                }
            }
        }
    }

}
  

вот как должны выглядеть данные и опция, используемая в «serial comm tester», я должен получить «50,46 кг NT»
вывод тестера последовательной связи

но в Java я не могу прочитать это правильно, любая помощь, пожалуйста? вывод Java

обратите внимание, что после отправки нескольких значений Java-программа показывает некоторый символ из временных данных!!

Ответ №1:

Вы просто используете неправильную функцию для readString() параметра.
Вы должны использовать getEventValue() вместо getEventType() .

неправильно:

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

правильно:

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