From 08d8933d3fe66fb83f1e2e7e4038e62b3c5143e1 Mon Sep 17 00:00:00 2001
From: cpT <1@123>
Date: 星期四, 19 六月 2025 11:10:43 +0800
Subject: [PATCH] #改造

---
 src/main/java/com/zy/core/thread/RgvThread.java |  287 +++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 226 insertions(+), 61 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index c823915..602cae6 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -66,6 +66,7 @@
 
     private boolean connectRgv = false;
     private boolean delRgvTask = false;
+    private short wrkSign = 0;
 
     public RgvThread(RgvSlave slave) {
         this.slave = slave;
@@ -94,7 +95,7 @@
         new Thread(this::taskIssued).start();
 
         // 鍚姩婕父绾跨▼
-//        new Thread(this::taskWalkIssued).start();
+        new Thread(this::taskWalkIssued).start();
 //        new Thread(this::taskWalkIssued2).start();
 
         // 鍚姩浠诲姟瀹屾垚绾跨▼
@@ -130,8 +131,17 @@
     private void readStatusRgv() {
         while (true) {
             try {
+                if(!connectRgv){
+                    try {
+                        Thread.sleep(1000L);
+                    } catch (Exception e){
+
+                    }
+                    initRgv();
+                    continue;
+                }
                 Thread.sleep(20);
-//                System.out.println("璇荤嚎绋�"+ slave.getId());
+//                System.out.println("璇荤嚎绋�,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis());
 
                 readStatus();
 
@@ -157,15 +167,25 @@
     private void taskComplete() {
         while (true) {
             try {
+                if(!connectRgv){
+                    try {
+                        Thread.sleep(1000L);
+                    } catch (Exception e){
+
+                    }
+                    continue;
+                }
                 if (delRgvTask){
                     writeDelRgvTask();
                     delRgvTask = false;
                     continue;
                 }
-                Thread.sleep(40);
+                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);
                 }
             } catch (Exception e) {
@@ -250,46 +270,62 @@
     /**
      * 婕父
      */
-//    private void taskWalkIssued() {
-//        while (true) {
-//            try {
-//                // 浼戠湢 1 绉�
-//                Thread.sleep(100);
-//
-//                if (!deviceDetection()) {
-//                    continue;
-//                }
-//                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
-//                if (rgvTaskProtocol == null) {
-//                    initRgv();
-//                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
-//                }
-//                if (rgvTaskProtocol.getAvoid() != 1) {
-//                    continue;
-//                }
-//                TaskProtocol issued = new TaskProtocol();
-//                issued.setTaskNo(32222L);
-//                issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination());
-//                issued.setTaskStatus(1);
-//                issued.setDirection(true);
-//                write(issued);
-//                rgvTaskProtocol.setAvoid(0);
-//
+    private void taskWalkIssued() {
+        while (true) {
+            try {
+                if(!connectRgv){
+                    try {
+                        Thread.sleep(1000L);
+                    } catch (Exception e){
+
+                    }
+                    continue;
+                }
+                // 浼戠湢 1 绉�
+                Thread.sleep(100);
+
+                if (!deviceDetection()) {
+                    continue;
+                }
+                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+                if (rgvTaskProtocol == null) {
+                    initRgv();
+                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+                }
+                if (rgvTaskProtocol.getAvoid() != 1) {
+                    continue;
+                }
+                TaskProtocol issued = new TaskProtocol();
+                issued.setTaskNo(32222L);
+                issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination());
+                issued.setTaskStatus(1);
+                issued.setDirection(true);
+                write(issued);
+                rgvTaskProtocol.setAvoid(0);
+
 //                Thread.sleep(200);
-//                RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
-//
-//            } catch (Exception e) {
-//                log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�" + e.getMessage());
-////                e.printStackTrace();
-//            }
-//        }
-//    }
+                RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+
+            } catch (Exception e) {
+                log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�" + e.getMessage());
+//                e.printStackTrace();
+            }
+        }
+    }
 
     /**
      * 浠诲姟涓嬪彂
      */
     private void taskIssued() {
         while (true) {
+            if(!connectRgv){
+                try {
+                    Thread.sleep(1000L);
+                } catch (Exception e){
+
+                }
+                continue;
+            }
             RgvRunProtocol rgvRun = RgvRunCache.getRgvRun();
             if (!rgvRun.getRgvNo().equals(slave.getId())){
                 continue;
@@ -300,13 +336,13 @@
 //                System.out.println(JSON.toJSON(rgvRun));
 
                 // 浼戠湢 1 绉�
-                if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 1000) {
-                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 100) {
+                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                 } else {
                     continue;
                 }
                 if (!deviceDetection()) {
-                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                     rgvRun.setRgvNo(slave.getOtherId());
                     RgvRunCache.updateRgvStatus(rgvRun);
                     if (!errorRgv.equals("鏃�")){
@@ -323,34 +359,20 @@
                     rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                 }
                 if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)){
-                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                     rgvRun.setRgvNo(slave.getOtherId());
                     RgvRunCache.updateRgvStatus(rgvRun);
                     continue;
                 }
                 if (rgvProtocol.getLoaded() == -1){
-                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                     rgvRun.setRgvNo(slave.getOtherId());
                     RgvRunCache.updateRgvStatus(rgvRun);
                     RgvErrCache.updateRgvErr(slave.getId(),"灏忚溅鎺㈢墿鐗╃姸鎬佸紓甯�");
                     continue;
                 }
                 if (rgvTaskProtocol.getAvoid() != 0) {
-                    if (rgvTaskProtocol.getAvoid() == 1) {
-                        TaskProtocol issued = new TaskProtocol();
-                        issued.setTaskNo(32222L);
-                        issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination());
-                        issued.setTaskStatus(1);
-                        issued.setDirection(true);
-                        write(issued);
-                        RgvErrCache.updateRgvErr(slave.getId());
-                        rgvTaskProtocol.setAvoid(0);
-
-//                        try{Thread.sleep(50L);} catch (Exception e){}
-
-                        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
-                    }
-                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                     rgvRun.setRgvNo(slave.getOtherId());
                     RgvRunCache.updateRgvStatus(rgvRun);
                     continue;
@@ -438,7 +460,7 @@
                         }
                     }
                 }
-                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                 rgvRun.setRgvNo(slave.getOtherId());
                 RgvRunCache.updateRgvStatus(rgvRun);
             } catch (Exception e) {
@@ -450,7 +472,7 @@
 //                    log.error("e2:"+e2.getMessage());
                 }
                 rgvRun = RgvRunCache.getRgvRun();
-                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+10;
                 rgvRun.setRgvNo(slave.getOtherId());
                 RgvRunCache.updateRgvStatus(rgvRun);
                 continue;
@@ -537,6 +559,10 @@
 
     public boolean otherRgvAvoid(Long targetPosition) {
         RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+        long onePos = Math.abs(targetPosition - rgvProtocol.getRgvPos());
+        if (onePos<50){
+            return true;
+        }
         RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
 
         RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
@@ -594,6 +620,66 @@
                                 }
                             }
                         }
+                        if (signNowPosRun){
+                            errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                            return false;
+                        }
+                    }
+                    TaskProtocol nowPosRunTask2 = taskProtocolCacheOther.getNowPosRunTask2();
+                    if (!Cools.isEmpty(nowPosRunTask2)){
+                        boolean signNowPosRun = true;
+                        boolean signNowPosA = true;
+                        if (targetPosition - rgvProtocol.getRgvPos()>0){
+                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()>0){
+                                if (rgvProtocol.getRgvPos()>rgvProtocolOther.getRgvPos()){
+                                    signNowPosA = false;
+                                    signNowPosRun = false;
+                                }
+                            }
+                        } else if (targetPosition - rgvProtocol.getRgvPos()<0){
+                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()<0){
+                                if (rgvProtocol.getRgvPos()<rgvProtocolOther.getRgvPos()){
+                                    signNowPosA = false;
+                                    signNowPosRun = false;
+                                }
+                            }
+                        }
+
+                        if (signNowPosA){
+                            if (nowPosRunTask2.getTaskStatus()==3){
+                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
+                                if (Math.abs(onePos - twoPos)>100){
+                                    if (onePos-50>twoPos+50){
+                                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask2.getTargetPositionStaNoPlcId());
+                                        StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask2.getTargetPositionStaNo());
+                                        if (staProtocol == null ) {
+                                            signNowPosRun =false;
+                                        }
+                                        if (signNowPosRun){
+                                            // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                                            if (staProtocol.isAutoing() && !staProtocol.isLoading()
+                                            ){
+                                                errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                                                return false;
+                                            }
+                                        }
+                                        signNowPosRun =false;
+                                    }
+                                }
+                            } else {
+                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
+                                if (twoPos<100){
+                                    errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                                    return false;
+                                }
+                                if (Math.abs(onePos - twoPos)>100){
+                                    if (onePos-50>twoPos+50){
+                                        signNowPosRun =false;
+                                    }
+                                }
+                            }
+                        }
+
                         if (signNowPosRun){
                             errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
                             return false;
@@ -740,6 +826,67 @@
                                 }
                             }
                         }
+                        if (signNowPosRun){
+                            errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                            return false;
+                        }
+                    }
+
+                    TaskProtocol nowPosRunTask2 = taskProtocolCacheOther.getNowPosRunTask2();
+                    if (!Cools.isEmpty(nowPosRunTask2)){
+                        boolean signNowPosRun = true;
+                        boolean signNowPosA = true;
+                        if (targetPosition - rgvProtocol.getRgvPos()>0){
+                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()>0){
+                                if (rgvProtocol.getRgvPos()>rgvProtocolOther.getRgvPos()){
+                                    signNowPosA = false;
+                                    signNowPosRun = false;
+                                }
+                            }
+                        } else if (targetPosition - rgvProtocol.getRgvPos()<0){
+                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()<0){
+                                if (rgvProtocol.getRgvPos()<rgvProtocolOther.getRgvPos()){
+                                    signNowPosA = false;
+                                    signNowPosRun = false;
+                                }
+                            }
+                        }
+
+                        if (signNowPosA){
+                            if (nowPosRunTask2.getTaskStatus()==3){
+                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
+                                if (Math.abs(onePos - twoPos)>100){
+                                    if (onePos-50>twoPos+50){
+                                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask2.getTargetPositionStaNoPlcId());
+                                        StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask2.getTargetPositionStaNo());
+                                        if (staProtocol == null ) {
+                                            signNowPosRun =false;
+                                        }
+                                        if (signNowPosRun){
+                                            // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                                            if (staProtocol.isAutoing() && !staProtocol.isLoading()
+                                            ){
+                                                errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                                                return false;
+                                            }
+                                        }
+                                        signNowPosRun =false;
+                                    }
+                                }
+                            } else {
+                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
+                                if (twoPos<100){
+                                    errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                                    return false;
+                                }
+                                if (Math.abs(onePos - twoPos)>100){
+                                    if (onePos-50>twoPos+50){
+                                        signNowPosRun =false;
+                                    }
+                                }
+                            }
+                        }
+
                         if (signNowPosRun){
                             errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
                             return false;
@@ -943,6 +1090,16 @@
                 }
 
                 rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 8));
+//                rgvProtocol.setStatus((short)1);
+
+                //浣滀笟鍚姩涓�  瑙e喅浠诲姟涓嬪彂鍚庡皬杞︾姸鎬佹湭鏇存柊锛屽皬杞︾姸鎬佷笉鍙婃椂
+                if (this.wrkSign == 1 && rgvProtocol.getStatus()!=(short)1){
+                    this.wrkSign = 0;
+                }
+                if (this.wrkSign == 1){
+                    rgvProtocol.setStatus((short)110);
+                }
+
                 rgvProtocol.setTaskNo((long)siemensNet.getByteTransform().TransInt32(result.Content, 10));
 
                 rgvProtocol.setRgvNo((int)siemensNet.getByteTransform().TransInt16(result.Content, 14));
@@ -961,8 +1118,10 @@
                 rgvProtocol.setErr4(status[11]);
                 rgvProtocol.setErr5(status[12]);
                 rgvProtocol.setErr6(status[13]);
+                rgvProtocol.setErr7(status[13]);
+                rgvProtocol.setErr8(status[13]);
 //                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()));
 //                // 宸ヤ綅1澶嶄綅淇″彿
 //                if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING)
@@ -1054,9 +1213,8 @@
         }
 //        convertRow(command);
 //        taskProtocol.setRgvNo(slave.getId());
-        Long[] array = new Long[11];
+//        Long[] array = new Long[11];
         OperateResult result41 = siemensNet.Write("DB100.12.0", false);
-
 //        array[0] = taskProtocol.getAckFinish1();
 //        array[1] = taskProtocol.getTaskNo();
 //        array[2] = taskProtocol.getTaskMode();
@@ -1068,8 +1226,13 @@
         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);
 
         OperateResult result4 = siemensNet.Write("DB100.12.0", true);
+        this.wrkSign = 1;
+
+//        log.info("浠诲姟涓嬪彂绾跨▼,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis());
+
 //        if (taskProtocol.getAckFinish1() == 0) {
 //            short commandFinish = 3;  //宸ヤ綅1銆�2浠诲姟鍚屾椂鍐欏叆
 //            Thread.sleep(100L);
@@ -1097,6 +1260,7 @@
         } catch (Exception ignore) {
         }
 
+        readStatus();
         if (result != null && result.IsSuccess) {
 //            Thread.sleep(50);
 //            this.readStatus();
@@ -1125,6 +1289,7 @@
         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:鍙�
+        log.info("浠诲姟瀹屾垚涓嬪彂绾跨▼,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis());
 
         try {
             // 鏃ュ織璁板綍

--
Gitblit v1.9.1