From 924d0d98c49c324669ba9dc5158b2141416447cc Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期四, 21 八月 2025 16:26:44 +0800
Subject: [PATCH] #rgv同时下发工位1和工位2任务,标记优先级

---
 src/main/java/com/zy/core/thread/RgvThread.java |  294 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 216 insertions(+), 78 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 67269ed..4817eb5 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -57,6 +57,8 @@
     private boolean PakIn = true;
     //鍑哄簱鏍囪
     private boolean PakOut = true;
+    //鏍规嵁璺濈璺宠繃鍙栬揣
+    private boolean PakRgv = true;
 
     public RgvThread(RgvSlave slave) {
         this.slave = slave;
@@ -78,10 +80,10 @@
                     case 1:
                         readStatus();
                         break;
-//                    // 宸ヤ綅1銆�2鍐欏叆鏁版嵁
-//                    case 2:
-//                        write((RgvCommand) task.getData());
-//                        break;
+                    // 宸ヤ綅1銆�2鍐欏叆鏁版嵁
+                    case 2:
+                        write12((RgvCommand) task.getData());
+                        break;
                     //宸ヤ綅1鍐欏叆鏁版嵁
                     case 4:
                         write1((RgvCommand) task.getData());
@@ -102,6 +104,7 @@
                         command.setTaskStatus1(RgvTaskStatusType.NONE); // 浠诲姟妯″紡
                         command.setTargetPosition1( 0);     // 婧愮珯
                         command.setEndStaNo1(0);     // 鐩爣绔�
+                        command.setWrkTaskPri((short)0);
                         command.setCommand(false);
                         write1(command);
                         break;
@@ -116,8 +119,35 @@
                         command2.setTaskStatus2(RgvTaskStatusType.NONE); // 浠诲姟妯″紡
                         command2.setTargetPosition2( 0);     // 婧愮珯
                         command2.setEndStaNo2(0);     // 鐩爣绔�
+                        command2.setWrkTaskPri((short)0);
                         command2.setCommand(false);
                         write2(command2);
+                        break;
+                    case 7: //宸ヤ綅1鍙栬揣纭
+                        RgvCommand command3 = (RgvCommand) task.getData();
+                        if (null == command3) {
+                            command3 = new RgvCommand();
+                        }
+                        command3.setRgvNo(slave.getId()); // RGV缂栧彿
+                        command3.setAckFinish1(true);  // 浠诲姟瀹屾垚纭浣�
+                        command3.setTaskStatus1(RgvTaskStatusType.NONE); // 浠诲姟妯″紡
+                        command3.setTargetPosition1( 0);     // 婧愮珯
+                        command3.setCommand(false);
+                        command3.setWrkTaskPri((short)0);
+                        write1(command3);
+                        break;
+                    case 8 :
+                        RgvCommand command4 = (RgvCommand) task.getData();
+                        if (null == command4) {
+                            command4 = new RgvCommand();
+                        }
+                        command4.setRgvNo(slave.getId()); // RGV缂栧彿
+                        command4.setAckFinish2(true);  // 浠诲姟瀹屾垚纭浣�
+                        command4.setTaskStatus2(RgvTaskStatusType.NONE); // 浠诲姟妯″紡
+                        command4.setTargetPosition2( 0);     // 灏忚溅鐩爣绔欐竻闆�
+                        command4.setCommand(false);
+                        command4.setWrkTaskPri((short)0);
+                        write2(command4);
                         break;
                     // 鍥炲師鐐�  閬胯
                     case 9:
@@ -169,6 +199,7 @@
         rgvProtocol.setErr5(false);
         rgvProtocol.setErr6(false);
         rgvProtocol.setErr7(false);
+        rgvProtocol.setWrkTaskPri((short)0);
         //宸ヤ綅1鐘舵��
         rgvProtocol.setTaskNo1(0);
         rgvProtocol.setStatus1((short)-1);
@@ -216,7 +247,7 @@
      */
     private void readStatus(){
         try {
-            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 30);
+            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 27);
             if (result.IsSuccess) {
                 if (null == rgvProtocol) {
                     rgvProtocol = new RgvProtocol();
@@ -250,6 +281,7 @@
                 rgvProtocol.setErr5(status3[4]);
                 rgvProtocol.setErr6(status3[5]);
                 rgvProtocol.setErr7(status3[6]);
+
 
 //                rgvProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 12));
 //                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 14));
@@ -320,73 +352,179 @@
         }
     }
 
-//    /**
-//     * 宸ヤ綅1銆�2鍚屾椂鍐欏叆鏁版嵁
-//     */
-//    private boolean write(RgvCommand command) throws InterruptedException {
-//        if (null == command) {
-//            log.error("RGV鍐欏叆鍛戒护涓虹┖");
-//            return false;
-//        }
-////        convertRow(command);
-//        command.setRgvNo(slave.getId());
-//        short[] array = new short[11];
-//        array[0] = command.getAckFinish1();
-//        array[1] = command.getTaskNo1();
-//        array[2] = command.getTaskMode1();
-//        array[3] = command.getSourceStaNo1();
-//        array[4] = command.getDestinationStaNo1();
-////        array[0] = command.getAckFinish1();
-////        array[1] = command.getTaskNo1();
-////        array[2] = command.getTaskMode1();
-////        array[3] = command.getSourceStaNo1();
-////        array[4] = command.getDestinationStaNo1();
-////        array[5] = command.getAckFinish2();
-////        array[6] = command.getTaskNo2();
-////        array[7] = command.getTaskMode2();
-////        array[8] = command.getSourceStaNo2();
-////        array[9] = command.getDestinationStaNo2();
-////        array[10] = command.getCommand();
-//        OperateResult result = siemensNet.Write("DB100.0", array);
-//
-////        if (command.getAckFinish1() == 0 && command.getAckFinish2() == 0) {
-////            short commandFinish = 3;  //宸ヤ綅1銆�2浠诲姟鍚屾椂鍐欏叆
-////            Thread.sleep(100L);
-////            result = siemensNet.Write("DB100.20", commandFinish);
-////        }
-//
-//        try {
-//            // 鏃ュ織璁板綍
-//            BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
-//            BasRgvOpt basRgvOpt = new BasRgvOpt(
-//                    command.getTaskNo1().intValue(),
-//                    command.getTaskNo2().intValue(),
-//                    command.getRgvNo(),
-//                    new Date(),
-//                    command.getTaskModeType1().toString(),
-//                    command.getSourceStaNo1().intValue(),
-//                    command.getDestinationStaNo1().intValue(),
-//                    command.getSourceStaNo2().intValue(),
-//                    command.getDestinationStaNo2().intValue(),
-//                    null,
-//                    new Date(),
-//                    null
-//            );
-//            bean.insert(basRgvOpt);
-//        } catch (Exception ignore) {}
-//
-//        if (result != null && result.IsSuccess) {
-//            Thread.sleep(200);
-//            this.readStatus();
-//            log.info("RGV 鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
-//            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
-//            return true;
-//        } else {
-//            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戝啓鍏GV plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-//            log.error("鍐欏叆RGV plc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
-//            return false;
-//        }
-//    }
+    /**
+     * 宸ヤ綅1銆�2鍚屾椂鍐欏叆鏁版嵁
+     */
+    private boolean write12(RgvCommand command) throws InterruptedException {
+        if (null == command) {
+            log.error("RGV鍐欏叆鍛戒护涓虹┖");
+            return false;
+        }
+
+        OperateResultExOne<byte[]> result1 = siemensNet.Read("DB100.0", (short) 34);
+//        OperateResultExOne<byte[]> result4 = siemensNet.Read("DB100.10", (short) 2);
+        if (result1.IsSuccess){
+            RgvCommand one = new RgvCommand();
+            one.setTargetPosition1(siemensNet.getByteTransform().TransInt32(result1.Content, 0));
+            one.setEndStaNo1(siemensNet.getByteTransform().TransInt32(result1.Content, 4));
+            one.setTaskStatus1(siemensNet.getByteTransform().TransInt16(result1.Content, 8));
+            one.setTaskNo1(siemensNet.getByteTransform().TransInt32(result1.Content, 10));
+            one.setDirection1(siemensNet.getByteTransform().TransInt16(result1.Content, 14));
+            one.setTargetPosition2(siemensNet.getByteTransform().TransInt32(result1.Content, 16));
+            one.setEndStaNo2(siemensNet.getByteTransform().TransInt32(result1.Content, 20));
+            one.setTaskStatus2(siemensNet.getByteTransform().TransInt16(result1.Content, 24));
+            one.setTaskNo2(siemensNet.getByteTransform().TransInt32(result1.Content, 26));
+            one.setDirection2(siemensNet.getByteTransform().TransInt16(result1.Content, 30));
+
+            News.error("RGV鍛戒护涓嬪彂鍓嶈鍙栫姸鎬乕id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+        }
+        OperateResult result2 = siemensNet.Write("DB100.34", false);
+        if (result2.IsSuccess){
+            News.error("涓嬪彂鍓嶆妸杞﹀瓙纭浣嶇疆涓篺alse");
+        }
+        byte[] writeBytes = new byte[36];
+        command.setRgvNo(slave.getId());
+        siemensNet.getByteTransform().TransInt32(writeBytes, 0, command.getTargetPosition1());
+        siemensNet.getByteTransform().TransInt32(writeBytes, 4, command.getEndStaNo1());
+        siemensNet.getByteTransform().TransInt16(writeBytes, 8, command.getTaskStatus1());
+        siemensNet.getByteTransform().TransInt32(writeBytes, 10, command.getTaskNo1());
+        siemensNet.getByteTransform().TransInt16(writeBytes, 14, command.getDirection1());
+        setBool(writeBytes, 32, 0, command.getAckFinish1());
+        siemensNet.getByteTransform().TransInt32(writeBytes, 16, command.getTargetPosition2());
+        siemensNet.getByteTransform().TransInt32(writeBytes, 20, command.getEndStaNo2());
+        siemensNet.getByteTransform().TransInt16(writeBytes, 24, command.getTaskStatus2());
+        siemensNet.getByteTransform().TransInt32(writeBytes, 26, command.getTaskNo2());
+        siemensNet.getByteTransform().TransInt16(writeBytes, 30, command.getDirection2());
+        setBool(writeBytes, 32, 1, command.getAckFinish2());
+        siemensNet.getByteTransform().TransInt16(writeBytes, 36, command.getWrkTaskPri());
+
+        OperateResult result = siemensNet.Write("DB100.0", writeBytes);
+
+        if (!result.IsSuccess){
+            News.error("鍐欏叆RGVplc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===> [id:{}],{}",slave.getId(),JSON.toJSON(command));
+            MessageQueue.offer(SlaveType.Rgv,slave.getId(),new Task(2,command));
+            Thread.sleep(100);
+            readStatus();
+            return false;
+        }
+
+        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
+        Thread.sleep(400);
+        try {
+            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 36);
+            if (resultRead.IsSuccess){
+                RgvCommand one = new RgvCommand();
+                one.setDirection1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14));
+                one.setTaskNo1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 10));
+                one.setTaskStatus1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
+                one.setEndStaNo1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 4));
+                one.setTargetPosition1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 0));
+                one.setWrkTaskPri(siemensNet.getByteTransform().TransInt16(resultRead.Content, 36));
+                one.setDirection2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 30));
+                one.setTaskNo2(siemensNet.getByteTransform().TransInt32(resultRead.Content, 26));
+                one.setTaskStatus2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 24));
+                one.setEndStaNo2(siemensNet.getByteTransform().TransInt32(resultRead.Content, 20));
+                one.setTargetPosition2(siemensNet.getByteTransform().TransInt32(resultRead.Content, 16));
+                if (
+                        !command.getDirection1().equals(one.getDirection1()) ||
+                                !command.getTaskNo1().equals(one.getTaskNo1()) ||
+                                !command.getTaskStatus1().equals(one.getTaskStatus1()) ||
+                                !command.getEndStaNo1().equals(one.getEndStaNo1()) ||
+                                !command.getTargetPosition1().equals(one.getTargetPosition1()) ||
+                                !command.getDirection2().equals(one.getDirection2()) ||
+                                !command.getTaskNo2().equals(one.getTaskNo2()) ||
+                                !command.getTaskStatus2().equals(one.getTaskStatus2()) ||
+                                !command.getEndStaNo2().equals(one.getEndStaNo2()) ||
+                                !command.getTargetPosition2().equals(one.getTargetPosition2())
+                ) {
+                    try{
+                        News.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲け璐id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                    }catch (Exception e){
+                        try{
+                            News.error("鏃ュ織鎵撳嵃澶辫触锛�===>>鍙傛暟one鎶ラ敊 [id:{}],{}", slave.getId(), JSON.toJSON(command),JSON.toJSON(resultRead));
+                        }catch (Exception e1){
+                            News.error("鏃ュ織鎵撳嵃澶辫触锛�===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+                        }
+                    }
+                    News.error("Rgv鍛戒护鍥炶澶辫触鍚庯紝閲嶆柊娣诲姞浠诲姟鍒伴槦鍒� ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+                    MessageQueue.offer(SlaveType.Rgv, slave.getId(), new Task(4, command));
+                    Thread.sleep(100);
+                    readStatus();
+                    return false;
+                }else {
+                    News.info("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                }
+            }
+        }catch (Exception e){
+            News.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲嚭閿�");
+        }
+
+        if (command.getAckFinish1() || command.getAckFinish2()) {
+            if (result.IsSuccess) {
+                Thread.sleep(300);
+                //浠诲姟涓嬪彂娆℃暟
+                int writeCount2 = 0;
+
+                do {
+                    writeCount2++;
+                    boolean commandFinish = false;
+                    boolean commandFinish2 = false;
+                    result = siemensNet.Write("DB100.DBX32.0", commandFinish);
+                    OperateResult result3 = siemensNet.Write("DB100.DBX32.1", commandFinish);
+
+                    if(result.IsSuccess && result3.IsSuccess){
+                        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
+                        Thread.sleep(200);
+                        OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.32", (short) 2);
+                        if (resultRead.IsSuccess) {
+                            commandFinish=siemensNet.getByteTransform().TransBool(resultRead.Content, 0);
+                            commandFinish2=siemensNet.getByteTransform().TransBool(resultRead.Content, 1);
+
+                            if (!commandFinish && !commandFinish2) {
+                                News.error("RGV浠诲姟纭浣�"+commandFinish+"鍐欏叆鏁版嵁涓庡洖璇绘暟鎹笉涓�鑷达紒"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                            }else{
+                                //浠诲姟鍛戒护鍐欏叆鎴愬姛
+                                News.info("RGV浠诲姟纭浣�"+commandFinish+"鍥炶鎴愬姛锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                                break;
+                            }
+                        }else {
+                            News.error("RGV浠诲姟纭浣�"+commandFinish+"鍥炶澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                        }
+                    } else {
+                        News.error("RGV浠诲姟纭浣�"+commandFinish+"鍐欏叆澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                    }
+                }while (writeCount2<5);
+            }
+        }
+
+
+        try {
+            // 鏃ュ織璁板綍
+            BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
+            BasRgvOpt basRgvOpt = new BasRgvOpt(
+                    command.getTaskNo1(),
+                    command.getTaskNo2(),
+                    command.getRgvNo(),
+                    new Date(),
+                    command.getTargetPosition1()
+            );
+            bean.insert(basRgvOpt);
+        } catch (Exception ignore) {
+            log.error(ignore.getMessage());
+        }
+
+        if (result != null && result.IsSuccess) {
+            Thread.sleep(200);
+            this.readStatus();
+            log.info("RGV 宸ヤ綅1鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 宸ヤ綅12鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+            return true;
+        } else {
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戝啓鍏GV plc宸ヤ綅12鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+            log.error("鍐欏叆RGV plc宸ヤ綅1鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            return false;
+        }
+    }
 
     /**
      * 宸ヤ綅1鍐欏叆鏁版嵁
@@ -419,7 +557,7 @@
 
         OperateResult result2 = siemensNet.Write("DB100.34", false);
         if (result2.IsSuccess){
-            News.error("涓嬪彂鍓嶆妸杞﹀瓙纭浣嶇疆涓�0");
+            News.error("涓嬪彂鍓嶆妸杞﹀瓙纭浣嶇疆涓篺alse");
         }
         byte[] writeBytes = new byte[34];
         command.setRgvNo(slave.getId());
@@ -610,11 +748,11 @@
             OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 34);
             if (resultRead.IsSuccess){
                 RgvCommand one = new RgvCommand();
-                one.setDirection1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 30));
-                one.setTaskNo1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 26));
-                one.setTaskStatus1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 24));
-                one.setEndStaNo1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 20));
-                one.setTargetPosition1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 16));
+                one.setDirection2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 30));
+                one.setTaskNo2(siemensNet.getByteTransform().TransInt32(resultRead.Content, 26));
+                one.setTaskStatus2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 24));
+                one.setEndStaNo2(siemensNet.getByteTransform().TransInt32(resultRead.Content, 20));
+                one.setTargetPosition2(siemensNet.getByteTransform().TransInt32(resultRead.Content, 16));
                 if (
                         !command.getDirection2().equals(one.getDirection2()) ||
                                 !command.getTaskNo2().equals(one.getTaskNo2()) ||

--
Gitblit v1.9.1