java - 使用 java jssc 从 rs-485 读取数据
问题描述
我有使用 rs-485 协议发送数据的重量指示器设备,
我正在使用 USB(串行到 USB 转换器)将它连接到计算机。使用程序(串行通信测试仪)我可以从中正确读取数据并且工作正常。现在我正在尝试使用 JSSC 库使用 java 读取这些数据,这是我的代码
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” 串行通讯测试仪输出
但是在java中我无法正确阅读,请帮忙? 爪哇输出
请注意,在发送多个值后,Java 程序会显示来自旧数据的某些字符!
解决方案
您只是为readString()
参数使用了错误的函数。
您应该使用getEventValue()
而不是getEventType()
.
错误的:
String b = serialPort.readString(event.getEventType());
正确的:
String b = serialPort.readString(event.getEventValue());
推荐阅读
- html - 根据自己的状态和另一个复选框保持复选框状态
- git - 如果 Git Workflow 具有增量版本控制的功能,为什么我们需要语义版本控制?
- c++ - 如何在 OpenGL 上使立方体面不透明?
- tensorflow - 较小的输出步幅和较大的空洞率会产生较大的热图
- java - 如何在 Java 中删除字符串中 Unicode 杂项符号的 Unicode 十进制值
- php - 移动音频上传返回八位字节/流
- java - 用 asdf 安装 erlang 没有 jinterface
- javascript - 如何在我的个人网站上合并我的播客 RSS 提要?
- android - 片段替换使根布局可见。怎么修?
- javascript - 选择当前选项卡打开的浏览器选项卡