|
|
@ -191,6 +191,12 @@ public class Ox485 { |
|
|
|
String hexData = ByteUtils.bytesToHexString(bytes); |
|
|
|
LogManager.logInfo(TAG, "Ox485接收到数据: " + hexData + ", 字节数组: " + java.util.Arrays.toString(bytes)); |
|
|
|
|
|
|
|
// 数据包过滤:只处理以[15, 3, 4, 0]开头的正常响应数据包 |
|
|
|
if (!isNormalResponsePacket(bytes)) { |
|
|
|
LogManager.logInfo(TAG, "Ox485接收到非正常响应数据包,已过滤: " + hexData); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 取消超时处理 |
|
|
|
cancelTimeout(); |
|
|
|
|
|
|
@ -598,4 +604,21 @@ public class Ox485 { |
|
|
|
} |
|
|
|
return data; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 检查是否为正常的485响应数据包 |
|
|
|
* 只处理以[15, 3, 4, 0]开头的正常响应数据包 |
|
|
|
* @param bytes 接收到的字节数组 |
|
|
|
* @return true表示是正常响应数据包,false表示是其他数据包 |
|
|
|
*/ |
|
|
|
private boolean isNormalResponsePacket(byte[] bytes) { |
|
|
|
// 数据校验 |
|
|
|
if (bytes == null || bytes.length < 4) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
// 检查是否以[15, 3, 4, 0]开头 |
|
|
|
// 15: 0x0F, 3: 0x03, 4: 0x04, 0: 0x00 |
|
|
|
return (bytes[0] == 15 && bytes[1] == 3 && bytes[2] == 4 && bytes[3] == 0); |
|
|
|
} |
|
|
|
} |