#java #serial-port #rs485 #jssc
#java #последовательный порт #rs485 #jssc
Вопрос:
У меня есть устройство с индикатором веса, которое отправляет данные по протоколу rs-485,
Я подключаю его к компьютеру с помощью USB (последовательный конвертер в USB). используя программу (serial comm tester), я могу правильно считывать данные с нее, и она работает нормально. теперь я пытаюсь прочитать эти данные с помощью 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() amp;amp; 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);
}
}
}
}
}
вот как должны выглядеть данные и опция, используемая в «serial comm tester», я должен получить «50,46 кг NT»
вывод тестера последовательной связи
но в Java я не могу прочитать это правильно, любая помощь, пожалуйста? вывод Java
обратите внимание, что после отправки нескольких значений Java-программа показывает некоторый символ из временных данных!!
Ответ №1:
Вы просто используете неправильную функцию для readString()
параметра.
Вы должны использовать getEventValue()
вместо getEventType()
.
неправильно:
String b = serialPort.readString(event.getEventType());
правильно:
String b = serialPort.readString(event.getEventValue());