Последовательный порт — Получение нежелательных значений из последовательного порта с использованием SerialPort.readBytes (значения int) в java

#java #serial-port

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

Вопрос:

Я получаю нежелательные значения от последовательного порта, используя serialPort.readBytes(int values) .

 serialPort.openPort();
serialPort.setParams(9600, 8, 1, 0);
byte[] buffer = null;
buffer = serialPort.readBytes(20);

if (null != buffer) {
    String employee_id_var = "";
    String no = new String(buffer);
    no = no.replaceAll("[^a-zA-Z0-9] ", ""); //removing garbage values comming from scaner serial input

    //for getting employee id
    if(no.length() > 6 amp;amp; no.length() < 10){
        no = no.substring(0, 6);
        System.out.println("EMPLOYEE NO- " no);
    }
}
  

Мне нужна четкая строка, которая была отсканирована сканером, но здесь я управляю ею, вызывая no.replaceAll("[^a-zA-Z0-9] ", "") для удаления нежелательных значений.

Это неосуществимое решение для моего варианта использования. Могу ли я получить чистую строку отсканированных данных из serialPort.readBytes(20) ?

Комментарии:

1. Вам нужно объяснить, каков формат данных, поступающих со сканера, и почему реализованное вами решение не работает.

2. Иногда данные, поступающие от сканера, имеют вид 72A4G6 ^-!-^ p * . таким образом, в этом случае p не удаляется из строки (на no.replaceAll(«[^a-zA-Z0-9] «, «»)) таким образом, конечный результат выглядит как 72A4G6 p, где 72A4G6 — это мой фактический результат сканирования, а ‘p’ — нежелательные данные.

3. Включен ли CRC или контрольная сумма в данные со сканера? Если нет, то вам будет сложно получить правильные данные, если вы получаете случайные символы от сканера. Если неверные символы всегда являются суффиксом к правильным данным, возможно, вы можете использовать этот факт. Вам нужно подробнее рассказать о характеристиках данных и шуме. Вам также необходимо поговорить с производителем сканера — возможно, в нем неисправность.

4. Нет, в данные из сканера не включен CRC или контрольная сумма. Могу ли я использовать другие методы (SerialPort.readHexString(20) вместо SerialPort.readBytes (20)) для получения данных сканера для уменьшения шума или удаления нежелательных данных (специальных символов).

5. Что вы знаете о формате данных, которые вы получаете? Если это определенная длина, то, возможно, вы можете игнорировать конечные символы. Если это только верхний регистр, то вы можете игнорировать символы нижнего регистра. Но, в конечном счете, у вас неисправное оборудование, и вы не можете определить, являются ли полученные вами данные действительными — это невозможно исправить программным обеспечением. Поговорите с поставщиком вашего сканера и попросите его исправить это.