wangxichen 1 vecka sedan
förälder
incheckning
3bc43af4c0
2 ändrade filer med 17 tillägg och 11 borttagningar
  1. 4 4
      src/com/mes/tcp/MesClientHandler.java
  2. 13 7
      src/com/mes/tcp/MesMessageDecoder.java

+ 4 - 4
src/com/mes/tcp/MesClientHandler.java

@@ -119,12 +119,12 @@ public class MesClientHandler extends ChannelInboundHandlerAdapter {
 
     /**
      * 获取结果码
-     * 结果码位于固定位置72-74
+     * 结果码位于固定位置74-76(v2 协议 oprno 扩到 8 后整体后移 2)
      */
     private String getResult(String msg) {
-        // 固定位置解析(与OP150版本一致
-        if (msg.length() >= 74) {
-            return msg.substring(72, 74).trim();
+        // 固定位置解析(v2 位置 74-76
+        if (msg.length() >= 76) {
+            return msg.substring(74, 76).trim();
         }
         // 备用方案:查找RS字段
         int rsIndex = msg.indexOf("RS");

+ 13 - 7
src/com/mes/tcp/MesMessageDecoder.java

@@ -17,7 +17,7 @@ import java.util.List;
 public class MesMessageDecoder extends ByteToMessageDecoder {
     private static final Logger log = LoggerFactory.getLogger(MesMessageDecoder.class);
     
-    private static final int PACKET_SIZE = 48;       // 最短包长度(v2 oprno 扩到 8 后 +2
+    private static final int PACKET_SIZE = 46;       // 最短包长度(与 okng 对齐
     private static final int PACKET_MAX_SIZE = 1000; // 最长包长度
     private static final int FIXED_LENGTH = 98;      // 标准报文长度(v2 oprno 扩到 8 后 +2)
     private static final String SPLIT = "bbbbfffffARW";  // 报文分隔符
@@ -114,12 +114,22 @@ public class MesMessageDecoder extends ByteToMessageDecoder {
         str = SPLIT + str;
         int tpsize = 0;
         
+        // 协议 v2(oprno 6→8):SYNR/AXTW/ACLW 从 46→48,AQDW 类从 96→98
+        // MKSW/MSBW/MCSW 服务端未随 v2 扩展,仍为 96
         switch (msgType) {
             case "SYNR": // 同步
             case "AXTW": // 心跳
             case "ACLW": // 重连
-                if (str.length() >= 46) {
-                    tpsize = 46;
+                if (str.length() >= 48) {
+                    tpsize = 48;
+                }
+                break;
+            case "MKSW": // 开始工作(服务端 v2 未扩,仍 96)
+            case "MSBW":
+            case "MCSW":
+            case "AQRW": // 查询确认(与 okng 对齐,96)
+                if (str.length() >= 96) {
+                    tpsize = 96;
                 }
                 break;
             case "MCJW":
@@ -127,10 +137,6 @@ public class MesMessageDecoder extends ByteToMessageDecoder {
             case "MBDW":
             case "MJBW":
             case "MQDW":
-            case "MKSW":
-            case "MSBW":
-            case "MCSW":
-            case "AQRW":
             case "VLDW":
             default:
                 if (str.length() >= FIXED_LENGTH) {