GrabDuck

COM-порт. Опрос и вывод данных на JAVA. | Прикладное программирование с нуля.

:

Всем привет. Итак как Вы помните в предыдущей статье мы разобрали создание простого оконного приложения на Java, а именно окно, кнопку и текстовое поле. В этой статье мы научимся мониторить (слушать) COM-порт (последовательный или RS-232), встроим код в предыдущую программу (прошлой статьи) и выведем данные логгера уже в нашу программу: (как в статье №42, только на терминал) в текстовое поле оконного приложения по нажатию на кнопку.

Для работы с COM-портом  существуют такие библиотеки, как javax.com, rxtx, giovynet, jssc. Я использовал последнюю. Итак что же такое JSSC (Java Simple serial Connector) – Java библиотека для простой работы с  COM-портом, которая распространяется с 2010 года под лицензией LGPL. Библиотека скачивается архивным файлом расширением.jar  и содержит в себе 7- классов, динамическую библиотеку под операционную систему.  Для запуска, библиотеку необходимо подключить в Eclipse следующим образом: в меню Eclipse -> выбираем вкладку Project –> Properties –> Java Build Path –> Add External JARs –> jssc.jar. Так при неправильно подключенной библиотеки очень часто происходит похожая ошибка:

Exception in thread «main» java.lang.UnsatisfiedLinkError:           jssc.SerialNativeInterface.getSerialPortNames ()

Что говорит о том что не работает метод OpenPort. На рисунке ниже у нас положительный результат подключения библиотеки, в проводнике проекта, слева,  а также результат небольшой программы по получению списка портов программы в виде массива строк методом getPortNames () класса SerialPortList. Данная библиотека не ведет опрос всех подряд портов, а берет данные из реестраОпрос COM-порта на JAVA

Если программа запускается из консоли, то необходимо перейти в директорию с программой и оттуда непосредственно производить запуск – jar jssc –файл.java.  Либо библиотеку положить в директорию bin Java –машины.

Далее приведен код чтения данных из порта.

import jssc.SerialPort;  /*Импорт классов библиотеки jssc*/
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;

public class readLog {  /*Класс чтения из порта*/
   private static SerialPort serialPort; /*Создаем объект типа SerialPort*/
   public static void main (String[] args) {  /* Точка входа в программу*/
        serialPort = new SerialPort («COM3»); /*Передаем в конструктор суперкласса имя порта с которым будем работать*/
        try {
            serialPort.openPort (); /*Метод открытия порта*/
            serialPort.setParams (SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); /*Задаем основные параметры протокола UART*/
            serialPort.setEventsMask (SerialPort.MASK_RXCHAR); /*Устанавливаем маску или список события на которые будет происходить реакция. В данном случае это приход данных в буффер порта*/
            serialPort.addEventListener (new EventListener ()); /*Передаем экземпляр класса EventListener порту, где будет обрабатываться события. Ниже описан класс*/
        }
        catch (SerialPortException ex) {
            System.out.println (ex);
        }
    }

    private static class EventListener implements SerialPortEventListener { /*Слушатель срабатывающий по появлению данных на COM-порте*/
        public void serialEvent (SerialPortEvent event) {
            if (event.isRXCHAR () && event.getEventValue () > 0){ /*Если происходит событие установленной маски и количество байтов в буфере более 0*/
                try {
                          String data = serialPort.readString (event.getEventValue ()); /*Создаем строковую переменную  data, куда и сохраняем данные*/
                          System.out.print (data);/*Выводим данные на консоль*/
                       }
                catch (SerialPortException ex) {
                          System.out.println (ex);
                }
            }
        }
    }
}

На рисунке ниже результат вывода данных с порта на консоль Eclipse (обведенно красным).Вывод данных из COM-порта на JAVA Теперь дополняем выше приведенный код, созданием окна, кнопки и текстового поля. Т.е. используем программу из предыдущей статьи. На рисунке ниже также вывод данных на консоль и в оконное приложение, а именно в текстовое поле метки. Здесь небольшая не доработка, где видно, что данные выводятся не на полную ширину поля, но самое главное мы добились поставленной цели, а именно чтение данных.

Чтение COM-порта на JAVA в приложение

Исходник оконного приложения, с чтением данных из порта по нажатию на кнопку и вывод в текстовое поле.

Чтение из COM-порта данных на JAVA ( Скачали: 598 чел. ) 

В следующей статье мы с вами рассмотрим как сохранять информацию в текстовый файл, откуда потом сохраним ее в базу данных.  Жду критики по программе и дополнений. Данная программа не претендует на «эталон качества». Здесь главной целью, как и всего проекта блога, является первые шаги в прикладном программировании в данном случае уже на Java. На этом мы сегодня и остановимся. Всем пока.

Просмотрено 10225 раз.