Всем привет. Итак как Вы помните в предыдущей статье мы разобрали создание простого оконного приложения на Java, а именно окно, кнопку и текстовое поле. В этой статье мы научимся мониторить (слушать) COM-порт (последовательный или RS-232), встроим код в предыдущую программу (прошлой статьи) и выведем данные контроллера сбора данных уже в нашу программу: (как в статье №42, только на терминал) в текстовое поле оконного приложения по нажатию на кнопку.
Exception in thread «main» java.lang.UnsatisfiedLinkError: jssc.SerialNativeInterface.getSerialPortNames ()
Что говорит о том что не работает метод OpenPort. На рисунке ниже у нас положительный результат подключения библиотеки JSSC, в проводнике проекта, слева, а также результат небольшой программы по получению списка портов программы в виде массива строк методом getPortNames () класса SerialPortList. Данная библиотека не ведет опрос всех подряд портов, а берет данные из реестра
Если программа запускается из консоли, то необходимо перейти в директорию с программой и оттуда непосредственно производить запуск – jar jssc – файл.java. Либо библиотеку положить в директорию bin Java –машины.
Далее приведен код чтения данных из порта на 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 (обведенно красным). Теперь дополняем выше приведенный код, созданием окна, кнопки и текстового поля. Т.е. используем программу из предыдущей статьи. На рисунке ниже также вывод данных на консоль и в оконное приложение, а именно в текстовое поле метки. Здесь небольшая не доработка, где видно, что данные выводятся не на полную ширину поля, но самое главное мы добились поставленной цели, а именно чтение данных.
Исходник оконного приложения, с чтением данных из порта по нажатию на кнопку и вывод в текстовое поле.
В следующей статье мы с вами рассмотрим как сохранять информацию в текстовый файл, откуда потом сохраним ее в базу данных. Жду критики по программе и дополнений. Данная программа не претендует на «эталон качества». Здесь главной целью, как и всего проекта блога, является первые шаги в прикладном программировании в данном случае уже на Java. На этом мы сегодня и остановимся. Всем пока.
Спасибо очень познавательно. Хотя мне больше необходима библиотека rxtx.
Очень помогла информация. Спасибо.
Подскажите пожалуйста, скопипастил ваш код и на public class readLog ругается Error:(6,
java: class readLog is public, should be declared in a file named readLog.java. что не так?
Здравствуйте. Давненько я писал код. Если Вы скопировали из статьи код, то лучше возьмите код из ниже прикрепленного архива. Т.к. в статье он больше обобщенный. А так ошибка банальная readLog не объявлен в файле, может где символы не правильно скопированы, такое бывает при разных кодировках.
Спасибо за оперативный ответ. разобрался)
подскажите как сделать ,чтоб при нажатии кнопки на java в микроконтроллер отправлялись данные.
Спасибо!
Здравствуйте. Я думаю что надо использовать в приложении, обработка события по нажатию, метод serialPort.writeString (" "). А в самом мк принимать данные.