问题描述
我正在使用USB(串行转USB转换器)将其连接到计算机。 使用程序(串行通讯测试仪),我可以从中正确读取数据,并且可以正常工作。 现在我正尝试使用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() && 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);
}
}
}
}
}
这是数据的外观,在“串行通信测试器”中使用的选项应该会收到“ 50.46 KG NT” serial comm tester output
但是在Java中我无法正确读取它,请问有什么帮助吗? java output
请注意,在多个值发送之后,java程序显示了来自perperive数据的某些字符!
解决方法
您只是为readString()
参数使用了错误的功能。
您应该使用getEventValue()
而不是getEventType()
。
错误:
String b = serialPort.readString(event.getEventType());
正确:
String b = serialPort.readString(event.getEventValue());