From de480b42a379d1cf23e1703977c0169e837fa786 Mon Sep 17 00:00:00 2001
From: zzgtfwq <zzgtfwq>
Date: 星期三, 10 十二月 2025 13:17:50 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/RgvThread.java |  208 ++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 155 insertions(+), 53 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index caea4ec..f87315d 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -48,11 +48,11 @@
     //    private RgvProtocol rgvProtocol;
     private TaskProtocolCache taskProtocolCache = new TaskProtocolCache();
     // # 杞ㄩ亾鎬婚暱
-    private Long trackEntireLength = 224000L;
+    private Long trackEntireLength = 240000L;
     //# 杞ㄩ亾鍩哄噯鐐�
     private Long trackBenchmark = 1L;
     //  # 閬胯璺濈
-    private Long avoidDistance = 5000L;
+    private Long avoidDistance = 11200L;
     private String errorRgv = "-";
 
     /**
@@ -134,7 +134,7 @@
                     initRgv();
                     continue;
                 }
-                Thread.sleep(20);
+                Thread.sleep(100L);
 //                System.out.println("璇荤嚎绋�,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis());
 
                 readStatus();
@@ -176,11 +176,43 @@
                 }
                 Thread.sleep(50L);
 
-                OperateResultExOne<byte[]> result = siemensNet.Read("DB100.12", (short) 1);
-                boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 0, 1);
-                if (status[0]){
-                    Thread.sleep(500L);
-                    OperateResult result4 = siemensNet.Write("DB100.12.0", false);
+                // 鏋勫缓璁惧鐘舵�佸璞�
+                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+                if (rgvProtocol == null) {
+                    rgvProtocol = new RgvProtocol();
+                }
+                if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING) || rgvProtocol.getStatusType().equals(RgvStatusType.FETCHWAITING)){
+                    boolean sign = true;
+                    int i = 1;
+                    while (sign && i<5){
+                        i++;
+                        sign = false;
+                        OperateResult result2 = siemensNet.Write("DB100.2",(int) 0);
+                        OperateResult result14 = siemensNet.Write("DB100.14", (int) 0);
+                        OperateResult result6 = siemensNet.Write("DB100.6", (short) 0);
+                        OperateResult result8 = siemensNet.Write("DB100.8", (short) 0);
+                        OperateResult result10 = siemensNet.Write("DB100.10", (short) 0);
+                        OperateResult result12 = siemensNet.Write("DB100.12", (short) 0);
+                        Thread.sleep(10L);
+
+                        OperateResultExOne<byte[]> resultRead0 = siemensNet.Read("DB100.0", (short) 20);
+                        Integer i2 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 2);
+                        short i6 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 6);
+                        short i8 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 8);
+                        short i10 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 10);
+                        Integer i14 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 14);
+                        if (i2!=0 || i6 != (short) 0
+                                || i8!=(short)0 || i10 != (short) 0
+                                || i14!=0){
+                            sign = true;
+                        }
+                    }
+
+                    OperateResult result0 = siemensNet.Write("DB100.0", (short) 1);
+
+                    Thread.sleep(20L);
+
+                    OperateResult result00 = siemensNet.Write("DB100.0", (short) 0);
                 }
             } catch (Exception e) {
                 log.error("RGV鏁版嵁浠诲姟涓嬪彂澶嶄綅绾跨▼寮傚父锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
@@ -213,7 +245,7 @@
                     continue;
                 }
                 // 浼戠湢 1 绉�
-                Thread.sleep(100);
+                Thread.sleep(200L);
 
                 if (!deviceDetection()) {
                     continue;
@@ -281,6 +313,8 @@
                     }
                     continue;
                 }
+
+                Thread.sleep(50L);
 
                 RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
                 RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
@@ -666,7 +700,7 @@
                     RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
                     return false;
                 }
-            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)) {
+            } else if (!rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)) {
                 if ((rgvProtocolOther.getRgvPosDestination() - rgvProtocolOther.getCarBodyJiaoMing())
                         - (targetPosition + rgvProtocol.getCarBodyKunPeng())
                         > avoidDistance - 50) {//鏃犻渶閬胯
@@ -874,7 +908,7 @@
                     return false;
                 }
 
-            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)) {
+            } else if (!rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)) {
                 if ((targetPosition - rgvProtocol.getCarBodyJiaoMing())
                         - (rgvProtocolOther.getRgvPosDestination() + rgvProtocolOther.getCarBodyKunPeng())
                         > avoidDistance-50) {//鏃犻渶閬胯
@@ -1010,7 +1044,8 @@
      */
     private void readStatus() {
         try {
-            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 20);
+            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 36);
+            OperateResultExOne<byte[]> result100 = siemensNet.Read("DB100.0", (short) 18);
             if (result.IsSuccess) {
                 // 鏋勫缓璁惧鐘舵�佸璞�
                 RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
@@ -1021,14 +1056,16 @@
                 rgvProtocol.setCarBodyJiaoMing(slave.getCarBodyJiaoMing());
                 rgvProtocol.setCarBodyKunPeng(slave.getCarBodyKunPeng());
 
-                rgvProtocol.setRgvPos((long)siemensNet.getByteTransform().TransInt32(result.Content, 0));
-                rgvProtocol.setRgvPosDestination((long)siemensNet.getByteTransform().TransInt32(result.Content, 4));
+                rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));
+//                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 2));
+                rgvProtocol.setTaskNo((long)siemensNet.getByteTransform().TransInt32(result.Content, 4));
+                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 8));
+                rgvProtocol.setLoaded(siemensNet.getByteTransform().TransInt16(result.Content, 10));
+                rgvProtocol.setRgvPos((long)siemensNet.getByteTransform().TransInt32(result.Content, 32));
+                rgvProtocol.setRgvPosDestination((long)siemensNet.getByteTransform().TransInt32(result100.Content, 14));
                 if (rgvProtocol.getRgvPosDestination()==0L){
                     rgvProtocol.setRgvPosDestination(rgvProtocol.getRgvPos());
                 }
-
-                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 8));
-//                rgvProtocol.setStatus((short)1);
 
                 //浣滀笟鍚姩涓�  瑙e喅浠诲姟涓嬪彂鍚庡皬杞︾姸鎬佹湭鏇存柊锛屽皬杞︾姸鎬佷笉鍙婃椂
                 if (this.wrkSign == 1 && rgvProtocol.getStatus()!=(short)1){
@@ -1038,26 +1075,22 @@
                     rgvProtocol.setStatus((short)110);
                 }
 
-                rgvProtocol.setTaskNo((long)siemensNet.getByteTransform().TransInt32(result.Content, 10));
-
-                rgvProtocol.setRgvNo((int)siemensNet.getByteTransform().TransInt16(result.Content, 14));
-                rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 16));
 //                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20));
 //                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28));
 //                rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40));
-//                rgvProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48));
+                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 16));
 
 //                OperateResultExOne<byte[]> result11 = siemensNet.Read("DB100.12", (short) 1);
-                boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 18, 2);
-                rgvProtocol.setLoaded(status[0]? (short)1:(short)0);
-                rgvProtocol.setErr1(status[8]);
-                rgvProtocol.setErr2(status[9]);
-                rgvProtocol.setErr3(status[10]);
-                rgvProtocol.setErr4(status[11]);
-                rgvProtocol.setErr5(status[12]);
-                rgvProtocol.setErr6(status[13]);
-                rgvProtocol.setErr7(status[14]);
-                rgvProtocol.setErr8(status[15]);
+//                boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 18, 2);
+//                rgvProtocol.setLoaded(status[0]? (short)1:(short)0);
+//                rgvProtocol.setErr1(status[8]);
+//                rgvProtocol.setErr2(status[9]);
+//                rgvProtocol.setErr3(status[10]);
+//                rgvProtocol.setErr4(status[11]);
+//                rgvProtocol.setErr5(status[12]);
+//                rgvProtocol.setErr6(status[13]);
+//                rgvProtocol.setErr7(status[14]);
+//                rgvProtocol.setErr8(status[15]);
 //                System.out.println("璇荤嚎绋�"+ slave.getId()+"---"+JSON.toJSONString(rgvProtocol));
 //                System.out.println("璇荤嚎绋�,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis()+"灏忚溅鏁版嵁锛�"+JSON.toJSONString(rgvProtocol));
                 OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId()));
@@ -1072,9 +1105,9 @@
 //                        }
 //                    }
 //                }
-                if (rgvProtocol.getAlarm$()!=0){
-                    RgvErrCache.updateRgvErr(slave.getId(),rgvProtocol.getAlarmM());
-                }
+//                if (rgvProtocol.getAlarm$()!=0){
+//                    RgvErrCache.updateRgvErr(slave.getId(),rgvProtocol.getAlarmM());
+//                }
 
                 try {
                     // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
@@ -1138,6 +1171,7 @@
      * 鍐欏叆鏁版嵁
      */
     private boolean write(TaskProtocol taskProtocol) throws InterruptedException {
+        Thread.sleep(50L);
         if (null == taskProtocol) {
             log.error("RGV鍐欏叆鍛戒护涓虹┖ ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
 
@@ -1149,25 +1183,67 @@
             }
             return false;
         }
+
+
+        this.wrkSign = 1;
 //        convertRow(command);
 //        taskProtocol.setRgvNo(slave.getId());
 //        Long[] array = new Long[11];
-        OperateResult result41 = siemensNet.Write("DB100.12.0", false);
+        OperateResult result0 = siemensNet.Write("DB100.0", (short) 0);
 //        array[0] = taskProtocol.getAckFinish1();
 //        array[1] = taskProtocol.getTaskNo();
 //        array[2] = taskProtocol.getTaskMode();
 //        array[4] = command.getDestinationStaNo();
 //        array[10] = taskProtocol.getCommand();
-        int taskStatus = taskProtocol.getTaskStatus();
+        int taskStatus = taskProtocol.getTaskStatus$();
+        int targetPositionStaNo = taskProtocol.getTargetPositionStaNo();
+        int targetPositionStaNoEnd = taskProtocol.getTargetPositionStaNoEnd();
+        boolean sign = true;
+        int i = 1;
+        while (sign && i<5){
+            i++;
+            sign = false;
+            OperateResult result2 = siemensNet.Write("DB100.2", taskProtocol.getTaskNo().intValue());
+            OperateResult result6 = siemensNet.Write("DB100.6", (short) taskStatus);
+            OperateResult result8 = siemensNet.Write("DB100.8", (short) targetPositionStaNo);
+            OperateResult result10 = siemensNet.Write("DB100.10", (short) targetPositionStaNo);
+            OperateResult result14 = siemensNet.Write("DB100.14", taskProtocol.getTargetPosition().intValue());
+            OperateResult result18 = siemensNet.Write("DB100.18", (short) targetPositionStaNoEnd);
+//        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級    true:宸�   false:鍙�
+            Thread.sleep(10L);
 
-        OperateResult result = siemensNet.Write("DB100.0", taskProtocol.getTargetPosition().intValue());
-        OperateResult result1 = siemensNet.Write("DB100.4", (short) taskStatus);
-        OperateResult result2 = siemensNet.Write("DB100.6", taskProtocol.getTaskNo().intValue());
-        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級    true:宸�   false:鍙�
-        Thread.sleep(20L);
+            OperateResultExOne<byte[]> resultRead0 = siemensNet.Read("DB100.0", (short) 20);
+            short i0 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 0);
+            Integer i2 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 2);
+            short i6 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 6);
+            short i8 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 8);
+            short i10 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 10);
+            Integer i14 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 14);
+            short i18 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 18);
+            if (i0 !=(short) 0 || i2!=taskProtocol.getTaskNo().intValue() || i6 != (short) taskStatus
+                    || i8!=(short)targetPositionStaNo || i10 != (short) targetPositionStaNo
+                    || i14!=taskProtocol.getTargetPosition().intValue() || i18 != (short) targetPositionStaNoEnd){
+                sign = true;
+            }
+        }
+        sign = true;
+        OperateResult result12 = siemensNet.Write("DB100.12", (short) 1);
+//
+        i = 1;
+        sign = true;
+        while (sign && i<5){
+            i++;
+            sign = false;
+//        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級    true:宸�   false:鍙�
+            Thread.sleep(10L);
 
-        OperateResult result4 = siemensNet.Write("DB100.12.0", true);
-        this.wrkSign = 1;
+            OperateResultExOne<byte[]> resultRead0 = siemensNet.Read("DB100.0", (short) 20);
+            short i12 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 12);
+            if (i12 != (short) 1 ){
+                sign = true;
+            }
+            result12 = siemensNet.Write("DB100.12", (short) 1);
+        }
 
 //        log.info("浠诲姟涓嬪彂绾跨▼,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis());
 
@@ -1189,7 +1265,7 @@
                     null,
                     null,
                     null,
-                    result.IsSuccess ? 1 : 0,
+                    result12.IsSuccess ? 1 : 0,
                     null,
                     new Date(),
                     null
@@ -1199,7 +1275,7 @@
         }
 
         readStatus();
-        if (result != null && result.IsSuccess) {
+        if (result12 != null && result0.IsSuccess) {
 //            Thread.sleep(50);
 //            this.readStatus();
             log.info("RGV 鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(taskProtocol));
@@ -1222,11 +1298,37 @@
 
     private boolean writeDelRgvTask() throws InterruptedException {
 //
-        OperateResult result = siemensNet.Write("DB100.12.0", false);
-        OperateResult result0 = siemensNet.Write("DB100.0", (int) 0);
-        OperateResult result1 = siemensNet.Write("DB100.4", (short) 0);
-        OperateResult result2 = siemensNet.Write("DB100.6", (int) 0);
-        OperateResult result3 = siemensNet.Write("DB100.10", (short) 0); // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級    true:宸�   false:鍙�
+        int i = 1;
+        boolean sign = true;
+        while (sign && i<5){
+            i++;
+            sign = false;
+            OperateResult result0 = siemensNet.Write("DB100.0", (short) 0);
+            OperateResult result2 = siemensNet.Write("DB100.2", 0);
+            OperateResult result6 = siemensNet.Write("DB100.6", (short) 0);
+            OperateResult result8 = siemensNet.Write("DB100.8", (short) 0);
+            OperateResult result10 = siemensNet.Write("DB100.10", (short) 0);
+            OperateResult result12 = siemensNet.Write("DB100.12",(short)0);
+            OperateResult result14 = siemensNet.Write("DB100.14",0);
+            OperateResult result18 = siemensNet.Write("DB100.18", (short) 0);
+//        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級    true:宸�   false:鍙�
+            Thread.sleep(10L);
+
+            OperateResultExOne<byte[]> resultRead0 = siemensNet.Read("DB100.0", (short) 20);
+            short i0 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 0);
+            Integer i2 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 2);
+            short i6 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 6);
+            short i8 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 8);
+            short i10 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 10);
+            short i12 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 12);
+            Integer i14 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 14);
+            short i18 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 18);
+            if (i0 !=(short) 0 || i2!=0 || i6 != (short) 0
+                    || i8!=(short)0 || i10 != (short) 0 || i12 != (short) 0
+                    || i14!=0 || i18 != (short) 0){
+                sign = true;
+            }
+        }
         log.info("浠诲姟瀹屾垚涓嬪彂绾跨▼,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis());
 
         try {
@@ -1241,7 +1343,7 @@
                     null,
                     null,
                     null,
-                    result.IsSuccess ? 1 : 0,
+                    sign ? 1 : 0,
                     null,
                     new Date(),
                     null
@@ -1250,7 +1352,7 @@
         } catch (Exception ignore) {
         }
 
-        if (result != null && result.IsSuccess) {
+        if (sign) {
 //            Thread.sleep(200);
 //            this.readStatus();
             log.info("RGV 鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON("null"));

--
Gitblit v1.9.1