Java获取波特率为9600,地址位为0x50的modbus数据失败
使用jSerialComm库来读取波特率为9600,地址位为0x50的Modbus数据。无效果,port.readBytes报错
SerialPort port = SerialPort.getCommPort("COM3"); // 请替换为你的串口名称
port.setComPortParameters(9600, 8, 1, 0);
port.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);
if (port.openPort()) {
try {
// 这里你可以调用Modbus的读取函数,例如读取保持寄存器
// 假设我们要读取从地址0x00开始的1个寄存器
InputStream inputStream = port.getInputStream();
byte[] response = port.readBytes(new byte[]{0x01, (byte)0x83, 0x00, 0x00, 0x00, 0x01, 0x50}, 1000);
if (response != null && response.length > 2) {
// 检查响应中的CRC是否正确
if (response[response.length - 2] == 0 && response[response.length - 1] == 0) {
// 数据长度检查和地址匹配
if (response[1] == 3 && response[2] == (byte)0x83) {
// 获取数据,这里我们假设只读取一个字节的数据
byte registerValue = response[3];
System.out.println("Register value: " + registerValue);
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
port.closePort();
}
} else {
System.out.println("Unable to open port!");
}
}