Невозможно выйти из цикла при чтении данных из последовательного порта связи (COM1) - PullRequest
0 голосов
/ 07 июня 2018

Я использую https://github.com/rm5248/JavaSerial и разработал проект для записи и чтения данных с последовательного порта.И то, и другое происходит совершенно нормально, но я не могу найти последний байт информации и выйти из цикла.

Любые указатели здесь высоко ценятся.

            portName = currPortId.getName();
        // This would be COM1, COM2, etc on Windows
        // SerialPort s = new SerialPort(portName);
        SerialPort s = new SerialPort("COM1");//, SerialPort.NO_CONTROL_LINE_CHANGE);
        InputStream is = s.getInputStream();
        OutputStream os = s.getOutputStream();

        String st = "";
        st = "5230" + 31 + String.format("%02X", new Object[] { Integer.valueOf(179) })
                + String.format("%02X", new Object[] { Integer.valueOf(83) });
        os.write(hexStringToByteArray(st + "0D"));

        System.out.println("Data written");

        byte[] dataRead = new byte[753];
        int bytesRead = 0;/* = is.read(dataRead); */
        while (bytesRead != -1 /*|| dataRead.equals("end")*//*equals("353535")*/) {
            /*
             * System.out.println("Data in string format is " + new
             * String(dataRead, "UTF-8").replace("\n", "").replace("\r",
             * "").trim());
             */
            // bytesRead = is.read(dataRead);

            bytesRead = is.read(dataRead);

            Thread.sleep(90L);

            System.out.println("bytesRead value is " + bytesRead);

            String theString = new String(dataRead, "UTF-8").replace("\n", "").replace("\r", "").trim();

            System.out.println("theString value is " + theString);

            /*
             * sb[0].append(theString); data.add(sb[0].toString()); if
             * (dataRead[(dataRead.length - 1)] == 13) {
             * data.add(sb[0].toString()); sb[0] = new StringBuilder(); }
             */
            data.add(theString);

            System.out.println("data value is " + data);
        }

Я попробовал несколькоиз вещей, как

  while (bytesRead != -1)
  while(dataRead.equals("end"))
  while(dataRead.equals("353535"))

Но не было полезно

1 Ответ

0 голосов
/ 09 июня 2018

InputStream, который вы получаете от SerialPort, следует тем же правилам, что и обычный InputStream, что означает, что is.read() является блокирующим вызовом.Единственный раз, когда is.read() вернет -1 для конца ввода, это когда последовательный порт закрыт.

Если вы хотите прочитать ровно 753 байта, вы должны выйти из цикла после того, как прочиталиэто количество байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...