читать данные из rs-485 с помощью java jssc

У меня есть индикатор веса, который отправляет данные по протоколу 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 кг NT serial вывод тестера связи

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

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


person MHArslan    schedule 10.09.2020    source источник


Ответы (1)


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

неправильный:

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

верный:

String b = serialPort.readString(event.getEventValue());
person kunif    schedule 11.09.2020