From 1e18cc519d1f36319b1e4d31176b499850dab276 Mon Sep 17 00:00:00 2001 From: MTing Date: Fri, 19 Sep 2025 15:33:37 +0800 Subject: [PATCH] 485 fix --- .../main/java/com/ouxuan/oxface/device/Ox485.java | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/app/src/main/java/com/ouxuan/oxface/device/Ox485.java b/app/src/main/java/com/ouxuan/oxface/device/Ox485.java index 7a390da..fd119b5 100644 --- a/app/src/main/java/com/ouxuan/oxface/device/Ox485.java +++ b/app/src/main/java/com/ouxuan/oxface/device/Ox485.java @@ -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); + } } \ No newline at end of file