From fc86a263ca2ffdb0e701261ff3b1e730b2065542 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期四, 14 八月 2025 11:18:32 +0800
Subject: [PATCH] #RGV协议修改,rgv预调度,任务下发

---
 src/main/java/com/zy/core/thread/RgvThread.java             |  500 +++++++++++++-------
 src/main/java/com/zy/asrs/controller/RgvController.java     |  131 +++--
 src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java    |    6 
 src/main/java/com/zy/core/enums/RgvTaskStatusType.java      |   37 +
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  489 +++++++++++++-------
 src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java      |    2 
 src/main/java/com/zy/asrs/entity/BasRgvOpt.java             |   12 
 src/main/webapp/static/js/console.map.js                    |    8 
 src/main/java/com/zy/core/MainProcess.java                  |    7 
 src/main/java/com/zy/core/model/protocol/RgvProtocol.java   |  123 ++++
 src/main/java/com/zy/core/model/command/RgvCommand.java     |   80 +++
 src/main/java/com/zy/core/thread/SiemensDevpThread.java     |   34 
 12 files changed, 973 insertions(+), 456 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/RgvController.java b/src/main/java/com/zy/asrs/controller/RgvController.java
index 3be5b88..ee4a2ac 100644
--- a/src/main/java/com/zy/asrs/controller/RgvController.java
+++ b/src/main/java/com/zy/asrs/controller/RgvController.java
@@ -35,8 +35,10 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * RGV鎺ュ彛
@@ -70,44 +72,65 @@
 
     @PostMapping("/table/rgv/state")
     @ManagerAuth(memo = "RGV淇℃伅琛�")
-    public R rgvStateTable(){
+    public R rgvStateTable() {
         List<RgvStateTableVo> list = new ArrayList<>();
         List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
+
         for (BasRgv basRgv : rgvs) {
-            // 琛ㄦ牸琛�
             RgvStateTableVo vo = new RgvStateTableVo();
             vo.setRgvNo(basRgv.getRgvNo());   //  RGV鍙�
             list.add(vo);
+
             // 鑾峰彇RGV淇℃伅
             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo());
-            if (rgvThread == null) {
-                continue;
-            }
+            if (rgvThread == null) continue;
+
             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-            if (rgvProtocol == null) {
-                continue;
-            }
-            vo.setStatusType(rgvProtocol.modeType.desc);   //  妯″紡鐘舵��
-            vo.setStatus(rgvProtocol.getStatusType().desc);     //  鐘舵��
-            vo.setWorkNo1(rgvProtocol.getTaskNo1());  //  宸ヤ綅1浠诲姟鍙�
-            vo.setStatus1(rgvProtocol.getStatusType1().desc);  // 宸ヤ綅1鐘舵��
-            vo.setLoading1(rgvProtocol.getLoaded1()==1?"鏈夌墿":"鏃犵墿");  // 宸ヤ綅1鏈夌墿
+            if (rgvProtocol == null) continue;
+
+            vo.setStatusType(rgvProtocol.modeType.desc);   // 妯″紡鐘舵��
+            vo.setStatus(rgvProtocol.getStatusType().desc); // 鐘舵��
+            vo.setWorkNo1(rgvProtocol.getTaskNo1());      // 宸ヤ綅1浠诲姟鍙�
+            vo.setStatus1(rgvProtocol.getStatusType1().desc); // 宸ヤ綅1鐘舵��
+            vo.setLoading1(rgvProtocol.getLoaded1() ? "鏈夌墿" : "鏃犵墿"); // 宸ヤ綅1鏈夌墿
             vo.setRgvPos(rgvProtocol.getRgvPos());
             vo.setRgvPos1(rgvProtocol.getRgvPosI());
-            vo.setWalkPos(rgvProtocol.getWalkPos()==1?"鍦ㄥ畾浣�":"涓嶅湪瀹氫綅");
-            vo.setPakMk(rgvThread.isPakMk()?"鏃犻攣":"閿佸畾");
-//            vo.setWorkNo2(rgvProtocol.getTaskNo2());  //  宸ヤ綅2浠诲姟鍙�
-//            vo.setStatus2(rgvProtocol.getStatusType2().desc);  // 宸ヤ綅2鐘舵��
-//            vo.setLoading2(rgvProtocol.getLoaded2()==1?"鏈夌墿":"鏃犵墿");  // 宸ヤ綅2鏈夌墿
+            vo.setWalkPos(Objects.equals(rgvProtocol.getWalkPos(), 1) ? "鍦ㄥ畾浣�" : "涓嶅湪瀹氫綅");
+            vo.setPakMk(rgvThread.isPakMk() ? "鏃犻攣" : "閿佸畾");
+            vo.setWorkNo2(rgvProtocol.getTaskNo2());      // 宸ヤ綅2浠诲姟鍙�
+            vo.setStatus2(rgvProtocol.getStatusType2().desc); // 宸ヤ綅2鐘舵��
+            vo.setLoading2(rgvProtocol.getLoaded2() ? "鏈夌墿" : "鏃犵墿"); // 宸ヤ綅2鏈夌墿
 
-            vo.setWarnCode(String.valueOf(rgvProtocol.getAlarm()));
-            if (rgvProtocol.getAlarm() > 0) {
-                BasRgvErr rgvErr = basRgvErrMapper.selectById(rgvProtocol.getAlarm());
-                vo.setAlarm(rgvErr==null?"鏈煡寮傚父":rgvErr.getErrName());
+            // --- 閬嶅巻 errX 瀛楁鐢熸垚 warnCode 鍜� alarm ---
+            List<String> alarms = new ArrayList<>();
+            List<String> warnCodes = new ArrayList<>();
+            Field[] fields = rgvProtocol.getClass().getDeclaredFields();
+            for (Field field : fields) {
+                if (field.getName().startsWith("err") && field.getType().equals(Boolean.class)) {
+                    field.setAccessible(true);
+                    try {
+                        Boolean value = (Boolean) field.get(rgvProtocol);
+                        if (Boolean.TRUE.equals(value)) {
+                            String numPart = field.getName().substring(3);
+                            int errId = Integer.parseInt(numPart);
+                            warnCodes.add(String.valueOf(errId));
+
+                            BasRgvErr rgvErr = basRgvErrMapper.selectById(errId);
+                            alarms.add(rgvErr == null ? "鏈煡寮傚父(" + errId + ")" : rgvErr.getErrName());
+                        }
+                    } catch (IllegalAccessException e) {
+                        e.printStackTrace();
+                    }
+                }
             }
+
+            vo.setWarnCode(String.join(",", warnCodes));
+            vo.setAlarm(alarms.isEmpty() ? "" : String.join("锛�", alarms));
         }
+
         return R.ok().add(list);
     }
+
 
     @PostMapping("/table/rgv/msg")
     @ManagerAuth(memo = "RGV鏁版嵁琛�")
@@ -171,17 +194,17 @@
     public R rgvFetchPut(RgvOperatorParam param){
         RgvCommand command = new RgvCommand();
         command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
-        command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
-        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setAckFinish1(false);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1(0); // 宸ヤ綔鍙�
         command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
         command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
         command.setDestinationStaNo1(param.getStaNo1());  // 鐩爣绔�
-//        command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
-//        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
-//        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
-//        command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
-//        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
-        command.setCommand((short) 0);
+        command.setAckFinish2(false);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2(0); // 宸ヤ綔鍙�
+        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
+        command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
+        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
+        command.setCommand(true);
 
         return rgvControl(command)? R.ok(): R.error();
     }
@@ -191,17 +214,17 @@
     public R rgvFetch(RgvOperatorParam param){
         RgvCommand command = new RgvCommand();
         command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
-        command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
-        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setAckFinish1(false);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1(0); // 宸ヤ綔鍙�
         command.setTaskMode1(RgvTaskModeType.FETCH); // 浠诲姟妯″紡: 鍙栬揣
         command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
         command.setDestinationStaNo1(param.getStaNo1());  // 鐩爣绔�
-        command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
-        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
-        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
+        command.setAckFinish2(false);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2( 0); // 宸ヤ綔鍙�
+        command.setTaskMode2(RgvTaskModeType.FETCH); // 浠诲姟妯″紡: 鍙栨斁璐�
         command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
         command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
-        command.setCommand((short) 0);
+        command.setCommand(true);
 
         return rgvControl(command)? R.ok(): R.error();
     }
@@ -211,17 +234,17 @@
     public R rgvPut(RgvOperatorParam param){
         RgvCommand command = new RgvCommand();
         command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
-        command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
-        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setAckFinish1(false);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1(0); // 宸ヤ綔鍙�
         command.setTaskMode1(RgvTaskModeType.PUT); // 浠诲姟妯″紡: 鏀捐揣
         command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
         command.setDestinationStaNo1(param.getStaNo1());  // 鐩爣绔�
-        command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
-        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+        command.setAckFinish2(false);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2( 0); // 宸ヤ綔鍙�
         command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
         command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
         command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
-        command.setCommand((short) 0);
+        command.setCommand(true);
 
         return rgvControl(command)? R.ok(): R.error();
     }
@@ -233,17 +256,17 @@
     public R rgvTaskComplete(RgvOperatorParam param){
         RgvCommand command = new RgvCommand();
         command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
-        command.setAckFinish1((short) 1);  // 浠诲姟瀹屾垚纭浣�
-        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setAckFinish1(true);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1(0); // 宸ヤ綔鍙�
         command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
         command.setSourceStaNo1((short) 0); // 婧愮珯
         command.setDestinationStaNo1((short) 0);  // 鐩爣绔�
-        command.setAckFinish2((short) 1);  // 浠诲姟瀹屾垚纭浣�
-        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+        command.setAckFinish2(true);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2( 0); // 宸ヤ綔鍙�
         command.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡
         command.setSourceStaNo2((short) 0); // 婧愮珯
         command.setDestinationStaNo2((short) 0);  // 鐩爣绔�
-        command.setCommand((short) 0);
+        command.setCommand(true);
 
         return rgvControl(command)? R.ok(): R.error();
     }
@@ -256,17 +279,17 @@
         }
         RgvCommand command = new RgvCommand();
         command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
-        command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
-        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+        command.setAckFinish1(true);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo1( 0); // 宸ヤ綔鍙�
         command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
         command.setSourceStaNo1((short) 0); // 婧愮珯
         command.setDestinationStaNo1((short) 0);  // 鐩爣绔�
-        command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
-        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+        command.setAckFinish2(true);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskNo2(0); // 宸ヤ綔鍙�
         command.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡
         command.setSourceStaNo2((short) 0); // 婧愮珯
         command.setDestinationStaNo2((short) 0);  // 鐩爣绔�
-        command.setCommand((short) 0);
+        command.setCommand(true);
 
         return rgvControl(command)? R.ok(): R.error();
     }
@@ -292,9 +315,9 @@
                 RgvCommand Command = new RgvCommand();
                 Command.setRgvNo(rgv.getId()); // RGV缂栧彿
                 Command.setTaskMode1(RgvTaskModeType.NONE);
-                Command.setAckFinish1((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                Command.setAckFinish2((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                Command.setCommand((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                Command.setAckFinish1(true);  // 浠诲姟瀹屾垚纭浣�
+                Command.setAckFinish2(true);  // 浠诲姟瀹屾垚纭浣�
+                Command.setCommand(true);  // 浠诲姟瀹屾垚纭浣�
                 // 寤舵椂鍙戦��
                 Thread.sleep(1000L);
                 if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(4, Command))) {
diff --git a/src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java b/src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java
index 10191ba..dd6989b 100644
--- a/src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java
+++ b/src/main/java/com/zy/asrs/domain/vo/RgvMsgTableVo.java
@@ -13,7 +13,7 @@
     private Integer rgvNo;
 
     // 宸ヤ綔鍙�
-    private Short workNo = 0;
+    private Integer workNo = 0;
 
     // 鐘舵��
     private String status = "-";
diff --git a/src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java b/src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java
index a205d5d..020f874 100644
--- a/src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java
+++ b/src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java
@@ -18,7 +18,7 @@
     private String status = "-";
 
     // 浠诲姟鍙�
-    private Short workNo1 = 0;
+    private Integer workNo1 = 0;
 
     // 鐘舵��
     private String status1 = "-";
@@ -27,13 +27,13 @@
     private String loading1 = "-";
 
     // RGV浣嶇疆
-    private Short RgvPos = 0;
+    private Integer RgvPos = 0;
 
     // 璧拌瀹氫綅
     private String walkPos = "-";
 
     // 浠诲姟鍙�
-    private Short workNo2 = 0;
+    private Integer workNo2 = 0;
 
     // 鐘舵��
     private String status2 = "-";
diff --git a/src/main/java/com/zy/asrs/entity/BasRgvOpt.java b/src/main/java/com/zy/asrs/entity/BasRgvOpt.java
index 0db9725..9a422b2 100644
--- a/src/main/java/com/zy/asrs/entity/BasRgvOpt.java
+++ b/src/main/java/com/zy/asrs/entity/BasRgvOpt.java
@@ -181,6 +181,18 @@
         this.updateBy = updateBy;
     }
 
+    public BasRgvOpt(Integer wrkNo1,  Integer rgvNo, Date sendTime, String mode, Integer sourceSta, Integer posSta,  Integer response, Date updateTime, Long updateBy) {
+        this.wrkNo1 = wrkNo1;
+        this.rgvNo = rgvNo;
+        this.sendTime = sendTime;
+        this.mode = mode;
+        this.sourceSta = sourceSta;
+        this.posSta = posSta;
+        this.response = response;
+        this.updateTime = updateTime;
+        this.updateBy = updateBy;
+    }
+
 //    BasRgvOpt basRgvOpt = new BasRgvOpt(
 //            null,    // ID[闈炵┖]
 //            null,    // 浠诲姟鍙�
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index f091010..5dd7333 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -46,7 +46,6 @@
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -2699,13 +2698,13 @@
                 // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
                 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE &&
                     rgvProtocol.getModeType() == RgvModeType.AUTO
-                    && rgvProtocol.getLoaded1()==0  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
+                    && !rgvProtocol.isLoaded1ing()  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
                     && (rgvProtocol.getTaskNo1()==0)
                         &&rgvThread.isPakMk()
                 ) {
                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
 
-                    Integer rgvNoOther = basRgvMap.getRgvNoOther(rgvProtocol.getRgvNo());
+                    Integer rgvNoOther = basRgvMap.getRgvNoOther((int) rgvProtocol.getRgvNo());
                     RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNoOther);
                     RgvProtocol rgvProtocolOther = rgvThreadOther.getRgvProtocol();
                     if (rgvProtocolOther == null) {
@@ -2715,7 +2714,7 @@
                     }
                     if (rgvProtocolOther.getStatusType() == RgvStatusType.IDLE
                         && rgvProtocolOther.getModeType() == RgvModeType.AUTO
-                        && rgvProtocolOther.getLoaded1()==0
+                        && !rgvProtocolOther.isLoaded1ing()
                         && (rgvProtocolOther.getTaskNo1()==0)
                         &&rgvThreadOther.isPakMk()
                     ){
@@ -2788,7 +2787,22 @@
                         && (rgvProtocol.getStatusType() == RgvStatusType.WORKING1)
                 ){
                     log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol);
-                    if (rgvProtocol.getTaskNo1()!=0){
+                    if(rgvProtocol.getTaskNo1() == 9999){
+                        List<Integer> staNos = Arrays.asList( 1043, 1104);
+                        for (Integer staNo : staNos) {
+                            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                            StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                            boolean rgvComplete = false;
+                            if(!staProtocol.isLoading()){
+                                rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),3);//宸ヤ綅1澶嶄綅
+                            }
+                            if (!rgvComplete){
+                                log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛佺瓑寰呭叆搴撳彇璐�",rgvProtocol.getRgvNo());
+                                break;
+                            }
+                        }
+                    }
+                    if (rgvProtocol.getTaskNo1()!=0 && rgvProtocol.getTaskNo1()!=9999){
 //                        if (rgvProtocol.getTaskNo1()==32222){
 //                            boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
 //                            if (!rgvComplete){
@@ -2849,9 +2863,9 @@
 
                         //鍙屽伐浣嶅嚭鍏ュ簱涓嶅悓宸ヤ綅澶嶄綅
                         if((sourceSta >= 1001 && sourceSta <= 1035) || (sourceSta >= 2001 && sourceSta <= 2030)){
-                            rgvComplete = rgvComplete(rgvProtocol.getRgvNo(),6);
+                            rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),6);
                         }else{
-                            rgvComplete = rgvComplete(rgvProtocol.getRgvNo(),3);
+                            rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),3);
 
                         }
                         if (!rgvComplete){
@@ -2883,6 +2897,8 @@
     }
     /**
      * 鎵ц灏忚溅鎼繍浠诲姟
+     *
+     * @return
      */
     public synchronized boolean rgvRunWrkMastFullSta() {
         boolean wrkEnable = false;
@@ -2902,14 +2918,13 @@
                     continue;
                 }
 
-                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
+                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤  鍏ュ簱鍙栬揣
                 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
                         && rgvProtocol.getModeType() == RgvModeType.AUTO
-                        && rgvProtocol.getLoaded1() == 0
+                        && !rgvProtocol.isLoaded1ing()
                         && rgvProtocol.getTaskNo1() == 0
-                        && rgvProtocol.getTaskNo2() == 0
-                        && rgvProtocol.getLoaded2() == 0
                         && rgvThread.isPakMk()
+                        && rgvThread.isPakIn()
                 ) {
                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                     if (basRgvMap == null) {
@@ -2920,35 +2935,10 @@
                     basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
                     List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);
                     for (WrkMastSta wrkMastSta : wrkMastStaList){
-//                        if (wrkMastSta.getType()!=0 || wrkMastSta.getWrkType()!=3 || wrkMastSta.getWrkSts()!=0){//1:婊$増   3锛氬彇鏀�
-//                            continue;
-//                        }
-                        //鍒ゆ柇宸ヤ綔缁撴潫浣嶇疆鐘舵��
-//                        boolean signDev = false;
-//                        BasDevp devNo = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", wrkMastSta.getStaEnd()));
-//                        if (devNo.getDevNo()==113){
-//                            BasDevp devNo114 = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 114));
-//                            if (!Cools.isEmpty(devNo114)){
-//                                if (devNo114.getOutEnable().equals("Y")){
-//                                    signDev = true;
-//                                }
-//                            }
-//                        }
-//                        if (!Cools.isEmpty(devNo)){
-//                            if (devNo.getAutoing().equals("Y") && !devNo.getWrkNo().equals(0) && !devNo.getLoading().equals("N")){
-//                                continue;
-//                            }
-//                            if (!signDev && devNo.getDevNo()==113){
-//                                if (!devNo.getAutoing().equals("Y") || !devNo.getWrkNo().equals(0) || !devNo.getLoading().equals("N")){
-//                                    wrkEnable = true;
-//                                    continue;
-//                                }
-//                                if (!devNo.getOutEnable().equals("Y")){
-//                                    wrkEnable = true;
-//                                    continue;
-//                                }
-//                            }
-//                        }
+                        List<Integer> staNos = Arrays.asList(1042, 1105, 1038, 1036, 2037);//鍏ュ簱鍙�
+                        if (!staNos.contains(wrkMastSta.getStaStart())) {
+                            continue;
+                        }
                         boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //鍛戒护涓嬪彂
                         wrkEnable = true;
                         if (sign){
@@ -2960,12 +2950,13 @@
                                 log.error("鏇存柊灏忚溅浠诲姟澶辫触");
                             }
                             rgvThread.setPakMk(false);
+                            rgvThread.setPakOut(false);
                             boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526");
                             if (signMap){
                                 return wrkEnable;
 //                                break;
                             }else {
-                                log.error("3864琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
+                                log.error("璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
                                 Thread.sleep(500);
                             }
                         } else {
@@ -2976,15 +2967,132 @@
                     }
                 }
 
+                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤  鍑哄簱鍙栬揣
+                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && !rgvProtocol.isLoaded2ing()
+                        && rgvProtocol.getTaskNo2() == 0
+                        && rgvThread.isPakMk()
+                        && rgvThread.isPakOut()
+                ){
+                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                    if (basRgvMap == null) {
+                        log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
+                        continue;
+                    }
+                    List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());
+                    basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                    List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);
+                    for (WrkMastSta wrkMastSta : wrkMastStaList){
+                        List<Integer> staNos = Arrays.asList(1042, 1105, 1038, 1036, 2037);//鍏ュ簱鍙�
+                        if (staNos.contains(wrkMastSta.getStaStart())) {
+                            continue;
+                        }
+                        boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //鍛戒护涓嬪彂
+                        wrkEnable = true;
+                        if (sign){
+                            wrkMastSta.setWrkSts(1);
+                            try{
+                                wrkMastStaMapper.updateById(wrkMastSta);
+                                log.error("鏇存柊灏忚溅浠诲姟鎴愬姛");
+                            }catch (Exception e){
+                                log.error("鏇存柊灏忚溅浠诲姟澶辫触");
+                            }
+                            rgvThread.setPakMk(false);
+                            rgvThread.setPakOut(false);
+                            boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526");
+                            if (signMap){
+                                return wrkEnable;
+//                                break;
+                            }else {
+                                log.error("璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
+                                Thread.sleep(500);
+                            }
+                        } else {
+                            log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo());
+                            Thread.sleep(500);
+                        }
+                        break;
+                    }
+
+                }
+
             }
-//            if (!wrkEnable){
-//                rgvRunWrkMastEmptyStaAvoidance();
-//            }
         }catch (Exception e){
-            log.error("3875琛屾墽琛屽皬杞︽惉杩愪换鍔′笅鍙戝け璐�");
-            log.error("3875琛�"+e);
+            log.error("鎵ц灏忚溅鎼繍浠诲姟涓嬪彂澶辫触");
         }
         return wrkEnable;
+    }
+    /**
+     * 灏忚溅棰勮皟搴�
+     */
+    public synchronized  void rgvPreScheduling(){
+        try{
+            List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>());
+            for (BasRgvMap rgvSlave:basRgvMaps) {
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getRgvNo());
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    continue;
+                }else {
+                    rgvProtocol = rgvProtocol.clone();
+                }
+                BasRgv basRgv = basRgvService.selectById(rgvSlave.getRgvNo());
+                if (basRgv == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�4", rgvSlave.getRgvNo());
+                    continue;
+                }
+
+                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤  鎵嶈繘琛岄璋冨害
+                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && !rgvProtocol.isLoaded1ing()
+                        && rgvProtocol.getTaskNo1() == 0
+                        && !rgvProtocol.isLoaded2ing()
+                        && rgvProtocol.getTaskNo2() == 0
+                        && rgvThread.isPakMk()
+                ) {
+                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                    if (basRgvMap == null) {
+                        log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
+                        continue;
+                    }
+                    List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());
+                    basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                    // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+                    for (DevpSlave devp : slaveProperties.getDevp()) {
+                        // 閬嶅巻鍏ュ簱鍙�  鍏ュ簱棰勮皟搴�
+                        List<Integer> staNos = Arrays.asList(1042, 1043, 1105, 1104);
+                        for (Integer staNo : staNos) {
+                            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                            StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                            if(staProtocol.isLoading()){
+                                RgvCommand rgvCommand = new RgvCommand();
+                                rgvCommand.setRgvNo((int) rgvProtocol.getRgvNo()); // RGV缂栧彿
+                                rgvCommand.setAckFinish1(false);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+                                rgvCommand.setTaskNo1(9999); // 宸ヤ綅1宸ヤ綔鍙�
+                                rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡:  鍙栨斁璐�
+                                rgvCommand.setEndStaNo1(0);   //宸ヤ綅1 鏀捐揣鍚庤鍘荤殑浣嶇疆
+                                if(staNo == 1042 || staNo ==1043){
+                                    rgvCommand.setTargetPosition1(1042);   //宸ヤ綅1鐩爣绔欑偣
+                                }else{
+                                    rgvCommand.setTargetPosition1(1105);   //宸ヤ綅1鐩爣绔欑偣
+                                }
+                                rgvCommand.setCommand(true);   //宸ヤ綅1浠诲姟纭
+                                if (!MessageQueue.offer(SlaveType.Rgv, (int) rgvProtocol.getRgvNo(), new Task(4, rgvCommand))) {
+                                    //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                                    log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", (int) rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
+                                }
+                            }
+                        }
+
+                    }
+
+                }
+            }
+        }catch (Exception e){
+            log.error("鎵ц灏忚溅绉诲姩涓嬪彂澶辫触");
+        }
     }
     /**
      * 鎵ц灏忚溅鎼繍浠诲姟
@@ -3118,107 +3226,107 @@
     /*
      * 鏈変换鍔′絾鏈墽琛�  姝ゆ椂闇�瑕佽皟鏁村皬杞︿綅缃�
      * */
-    public synchronized void rgvRunWrkMastEmptyStaAvoidance() {
-        try{
-            Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//鏌ヨ鐘舵�佷负0鐨勪换鍔�
-            if (integer==0){
-                return;
-            }
-            List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>());
-            for (BasRgvMap rgvSlave:basRgvMaps) {
-                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getRgvNo());
-                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-                if (rgvProtocol == null) {
-                    continue;
-                }else {
-                    rgvProtocol = rgvProtocol.clone();
-                }
-                BasRgv basRgv = basRgvService.selectById(rgvSlave.getRgvNo());
-                if (basRgv == null) {
-                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�1", rgvSlave.getRgvNo());
-                    continue;
-                }
-
-                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
-                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
-                        && rgvProtocol.getModeType() == RgvModeType.AUTO
-                        && rgvProtocol.getLoaded1()==0  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
-                        && rgvProtocol.getTaskNo1()==0
-                        && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
-                        && rgvThread.isPakMk()
-//                        && rgvProtocol.getTaskNo2()==0
-                ){
-                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
-                    if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){
-                        continue;
-                    }
-//                    if (rgvProtocol.getRgvNo()==1 && rgvProtocol.getRgvPosI().equals(100)){
-//                        continue;
-//                    } else if (rgvProtocol.getRgvNo()==2 && rgvProtocol.getRgvPosI().equals(157)  ){
+//    public synchronized void rgvRunWrkMastEmptyStaAvoidance() {
+//        try{
+//            Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//鏌ヨ鐘舵�佷负0鐨勪换鍔�
+//            if (integer==0){
+//                return;
+//            }
+//            List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>());
+//            for (BasRgvMap rgvSlave:basRgvMaps) {
+//                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getRgvNo());
+//                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+//                if (rgvProtocol == null) {
+//                    continue;
+//                }else {
+//                    rgvProtocol = rgvProtocol.clone();
+//                }
+//                BasRgv basRgv = basRgvService.selectById(rgvSlave.getRgvNo());
+//                if (basRgv == null) {
+//                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�1", rgvSlave.getRgvNo());
+//                    continue;
+//                }
+//
+//                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
+//                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+//                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+//                        && !rgvProtocol.isLoaded1ing()  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
+//                        && rgvProtocol.getTaskNo1()==0
+//                        && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
+//                        && rgvThread.isPakMk()
+////                        && rgvProtocol.getTaskNo2()==0
+//                ){
+//                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+//                    if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){
 //                        continue;
 //                    }
-                    rgvAvoidanceXY(rgvProtocol.getRgvNo());
-                    rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2727");
-                }
-            }
-        }catch (Exception e){
-            log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触");
-            log.error("4109琛�"+e);
-        }
-    }
+////                    if (rgvProtocol.getRgvNo()==1 && rgvProtocol.getRgvPosI().equals(100)){
+////                        continue;
+////                    } else if (rgvProtocol.getRgvNo()==2 && rgvProtocol.getRgvPosI().equals(157)  ){
+////                        continue;
+////                    }
+//                    rgvAvoidanceXY((int) rgvProtocol.getRgvNo());
+//                    rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2727");
+//                }
+//            }
+//        }catch (Exception e){
+//            log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触");
+//            log.error("4109琛�"+e);
+//        }
+//    }
 
     /*
      * 灏忚溅XY绉诲姩  閬胯
      * */
-    public synchronized boolean rgvAvoidanceXY(Integer rgvId){
-        BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo(rgvId);
-        if (basRgvMap.getStartRoute() == 100 || basRgvMap.getStartRoute() == 101){
-            try{
-
-                //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                RgvCommand rgvCommand = new RgvCommand();
-                rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
-                rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
-                rgvCommand.setTaskNo1((short)32222); // 宸ヤ綅1宸ヤ綔鍙�
-                rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡:  鍥炲師鐐�
-                //basRgvMap.getLockStartRoute().shortValue()
-                rgvCommand.setSourceStaNo1(basRgvMap.getStartRoute().shortValue());
-                rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
-                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
-                    //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�   step=9锛屽洖鍘熺偣 9999浠诲姟鍙�
-                    log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
-                    return false;
-                } else {
-                    return true;
-                }
-            }catch (Exception e){
-                return false;
-
-            }
-        }else {
-            try{
-                //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                RgvCommand rgvCommand = new RgvCommand();
-                rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
-                rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
-                rgvCommand.setTaskNo1((short)32222); // 宸ヤ綅1宸ヤ綔鍙�
-                rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡:  鍥炲師鐐�
-                //basRgvMap.getLockStartRoute().shortValue()
-                rgvCommand.setSourceStaNo1(basRgvMap.getStartRoute().shortValue());
-                rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
-                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
-                    //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�   step=9锛屽洖鍘熺偣 9999浠诲姟鍙�
-                    log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
-                    return false;
-                } else {
-                    return true;
-                }
-            }catch (Exception e){
-                return false;
-
-            }
-        }
-    }
+//    public synchronized boolean rgvAvoidanceXY(Integer rgvId){
+//        BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo(rgvId);
+//        if (basRgvMap.getStartRoute() == 100 || basRgvMap.getStartRoute() == 101){
+//            try{
+//
+//                //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+//                RgvCommand rgvCommand = new RgvCommand();
+//                rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
+//                rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+//                rgvCommand.setTaskNo1((short)32222); // 宸ヤ綅1宸ヤ綔鍙�
+//                rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡:  鍥炲師鐐�
+//                //basRgvMap.getLockStartRoute().shortValue()
+//                rgvCommand.setSourceStaNo1(basRgvMap.getStartRoute().shortValue());
+//                rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+//                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
+//                    //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�   step=9锛屽洖鍘熺偣 9999浠诲姟鍙�
+//                    log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+//                    return false;
+//                } else {
+//                    return true;
+//                }
+//            }catch (Exception e){
+//                return false;
+//
+//            }
+//        }else {
+//            try{
+//                //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+//                RgvCommand rgvCommand = new RgvCommand();
+//                rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
+//                rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+//                rgvCommand.setTaskNo1((short)32222); // 宸ヤ綅1宸ヤ綔鍙�
+//                rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡:  鍥炲師鐐�
+//                //basRgvMap.getLockStartRoute().shortValue()
+//                rgvCommand.setSourceStaNo1(basRgvMap.getStartRoute().shortValue());
+//                rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+//                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
+//                    //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�   step=9锛屽洖鍘熺偣 9999浠诲姟鍙�
+//                    log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+//                    return false;
+//                } else {
+//                    return true;
+//                }
+//            }catch (Exception e){
+//                return false;
+//
+//            }
+//        }
+//    }
 
 
     /*
@@ -3229,39 +3337,80 @@
             int startSta = wrkMastSta.getStaStart();
             //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
             RgvCommand rgvCommand = new RgvCommand();
+            boolean pakIn1 = true;
+            boolean pakIn2 = true;
             rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
-            if((startSta >= 1001 && startSta <= 1035) || (startSta >= 2001 && startSta <= 2030)){//鍑哄簱RGV鍙栬揣
-                rgvCommand.setAckFinish2((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
-                rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙�
-                rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅2浠诲姟妯″紡:  鍙栨斁璐�
-                rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue());   //宸ヤ綅2璧风偣
-                rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue());   //宸ヤ綅2鐩爣绔欑偣
-                rgvCommand.setCommand((short) 2);   //宸ヤ綅1浠诲姟纭
-            }else{  //鍏ュ簱RGV鍙栬揣
-                rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
-                rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
-                rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡:  鍙栨斁璐�
-                rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue());   //宸ヤ綅1璧风偣
-                rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue());   //宸ヤ綅1鐩爣绔欑偣
-                rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
-            }
-            if(rgvCommand.getCommand() == 1){
-                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
-                    //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
-                    log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
-                    return false;
-                } else {
-                    return true;
+            if(wrkMastSta.getWrkSts() == 1){//鍙栬揣
+                if((startSta >= 1001 && startSta <= 1035) || (startSta >= 2001 && startSta <= 2030)){//鍑哄簱RGV鍙栬揣
+                    rgvCommand.setAckFinish2(false);  // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
+                    rgvCommand.setTaskNo2(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅2宸ヤ綔鍙�
+                    rgvCommand.setTaskMode2(RgvTaskModeType.FETCH); // 宸ヤ綅2浠诲姟妯″紡:  鍙栨斁璐�
+                    rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd());   //宸ヤ綅2 鏀捐揣鍚庤鍘荤殑浣嶇疆
+                    rgvCommand.setTargetPosition2(wrkMastSta.getStaStart());   //宸ヤ綅2鐩爣绔欑偣
+                    rgvCommand.setCommand(true);   //宸ヤ綅1浠诲姟纭
+                    pakIn1 = false;
+                }else{  //鍏ュ簱RGV鍙栬揣
+                    rgvCommand.setAckFinish1(false);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+                    rgvCommand.setTaskNo1(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅1宸ヤ綔鍙�
+                    rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡:  鍙栨斁璐�
+                    rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd());   //宸ヤ綅1 鏀捐揣鍚庤鍘荤殑浣嶇疆
+                    rgvCommand.setTargetPosition1(wrkMastSta.getStaStart());   //宸ヤ綅1鐩爣绔欑偣
+                    rgvCommand.setCommand(true);   //宸ヤ綅1浠诲姟纭
                 }
-            }else{
-                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
-                    //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
-                    log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
-                    return false;
-                } else {
-                    return true;
+                if(!pakIn1){
+                    if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
+                        //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                        log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                        return false;
+                    } else {
+                        return true;
+                    }
+                }else{
+                    if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
+                        //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                        log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                        return false;
+                    } else {
+                        return true;
+                    }
                 }
             }
+            if(wrkMastSta.getWrkSts() == 2) {//鏀捐揣
+                if((startSta >= 1001 && startSta <= 1035) || (startSta >= 2001 && startSta <= 2030)){//鍑哄簱RGV鍙栬揣
+                    rgvCommand.setAckFinish2(false);  // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
+                    rgvCommand.setTaskNo2(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅2宸ヤ綔鍙�
+                    rgvCommand.setTaskMode2(RgvTaskModeType.PUT); // 宸ヤ綅2浠诲姟妯″紡:  鍙栨斁璐�
+                    rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd());   //宸ヤ綅2 鏀捐揣鍚庤鍘荤殑浣嶇疆
+                    rgvCommand.setTargetPosition2(wrkMastSta.getStaEnd());   //宸ヤ綅2鐩爣绔欑偣
+                    rgvCommand.setCommand(true);   //宸ヤ綅1浠诲姟纭
+                    pakIn2 = false;
+                }else{  //鍏ュ簱RGV鍙栬揣
+                    rgvCommand.setAckFinish1(false);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+                    rgvCommand.setTaskNo1(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅1宸ヤ綔鍙�
+                    rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡:  鍙栨斁璐�
+                    rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd());   //宸ヤ綅1 鏀捐揣鍚庤鍘荤殑浣嶇疆
+                    rgvCommand.setTargetPosition1(wrkMastSta.getStaEnd());   //宸ヤ綅1鐩爣绔欑偣
+                    rgvCommand.setCommand(true);   //宸ヤ綅1浠诲姟纭
+                }
+                if(!pakIn2){
+                    if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
+                        //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                        log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                        return false;
+                    } else {
+                        return true;
+                    }
+                }else{
+                    if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
+                        //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                        log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                        return false;
+                    } else {
+                        return true;
+                    }
+                }
+            }
+            return true;
         }catch (Exception e){
             return false;
         }
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 62c85cc..3fa201d 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -124,12 +124,7 @@
                     // RGV  ===>>  灏忚溅浠诲姟浣滀笟涓嬪彂
                     try{
                         mainService.rgvRunWrkMastFullSta();
-//                        if (rgvIoExecuteSign){
-//                            k = 0;
-//                        } else if (k>4){
-//                            k = 0;
-//                            mainService.rgvRunWrkMastEmptyStaAvoidance();//閬胯
-//                        }
+                        mainService.rgvPreScheduling();
                     }catch (Exception e){
                         log.error("RGV  ===>>  灏忚溅浠诲姟浣滀笟涓嬪彂寮傚父"+e);
                     }
diff --git a/src/main/java/com/zy/core/enums/RgvTaskStatusType.java b/src/main/java/com/zy/core/enums/RgvTaskStatusType.java
new file mode 100644
index 0000000..d838ef3
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/RgvTaskStatusType.java
@@ -0,0 +1,37 @@
+package com.zy.core.enums;
+
+public enum RgvTaskStatusType {
+    NONE(0),//鏃�
+    X_MOVE(1),//琛岃蛋
+    FETCH(2),//鍙栬揣
+    PUT(3),//鏀捐揣
+    FETCH_PUT(4);//鍙栨斁璐�
+
+
+
+    public Integer id;
+    RgvTaskStatusType(Integer id) { this.id = id; }
+    public static RgvTaskStatusType get(Short id) {
+        if (null == id){
+            return null;
+        }
+        for(RgvTaskStatusType type : RgvTaskStatusType.values()){
+            if(type.id.equals(id.intValue())){
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static RgvTaskStatusType get(RgvTaskStatusType type) {
+        if (null == type){
+            return null;
+        }
+        for(RgvTaskStatusType rgvTaskStatusType : RgvTaskStatusType.values()){
+            if(rgvTaskStatusType == type){
+                return rgvTaskStatusType;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/zy/core/model/command/RgvCommand.java b/src/main/java/com/zy/core/model/command/RgvCommand.java
index 6d6eb39..6e9692d 100644
--- a/src/main/java/com/zy/core/model/command/RgvCommand.java
+++ b/src/main/java/com/zy/core/model/command/RgvCommand.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.zy.core.enums.RgvTaskModeType;
+import com.zy.core.enums.RgvTaskStatusType;
 import lombok.Data;
 
 import java.util.Calendar;
@@ -18,10 +19,10 @@
     private Integer rgvNo = 0;
 
     // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
-    private Short ackFinish1 = 0;
+    private Boolean ackFinish1 = true;
 
     // 宸ヤ綅1浠诲姟鍙�
-    private Short taskNo1 = 0;
+    private Integer taskNo1 = 0;
 
     /**
      * 浠诲姟妯″紡锛�
@@ -32,8 +33,16 @@
      */
     private Short taskMode1 = 0;
 
+    /**
+     * 浣滀笟妯″紡
+     */
+    private Short taskStatus1 = 0;
+
     @JSONField(serialize = false)
     private RgvTaskModeType taskModeType1;
+
+    @JSONField(serialize = false)
+    private RgvTaskStatusType taskStatusType1;
 
     /*
     宸ヤ綅1婧愮珯
@@ -45,12 +54,26 @@
      */
     private Short destinationStaNo1 = 0;
 
+    /**
+     * 宸ヤ綅1鐩爣浣嶇疆
+     */
+    private Integer targetPosition1 = 0;
+    /**
+     * RGV鏀捐揣鍚庤揣鐗╄鍘荤殑鐩殑鍦�
+     */
+    private Integer endStaNo1 = 0;
+
+    /**
+     * 鎵ц鏂瑰悜
+     */
+    private Short direction1 = 0;
+
     //////////////////////     宸ヤ綅2瀹氫箟   //////////////////////////////////////////////////
-    // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
-    private Short ackFinish2 = 0;
+    // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
+    private Boolean ackFinish2 = true;
 
     // 宸ヤ綅2浠诲姟鍙�
-    private Short taskNo2 = 0;
+    private Integer taskNo2 = 0;
 
     /**
      * 浠诲姟妯″紡锛�
@@ -61,8 +84,16 @@
      */
     private Short taskMode2 = 0;
 
+    /**
+     * 浣滀笟妯″紡
+     */
+    private Short taskStatus2 = 0;
+
     @JSONField(serialize = false)
     private RgvTaskModeType taskModeType2;
+
+    @JSONField(serialize = false)
+    private RgvTaskStatusType taskStatusType2;
 
     /*
     宸ヤ綅2婧愮珯
@@ -73,6 +104,21 @@
     宸ヤ綅2鐩爣绔�
      */
     private Short destinationStaNo2 = 0;
+
+    /**
+     * 宸ヤ綅2鐩爣浣嶇疆
+     */
+    private Integer targetPosition2 = 0;
+
+    /**
+     * RGV鏀捐揣鍚庤揣鐗╄鍘荤殑鐩殑鍦�
+     */
+    private Integer endStaNo2 = 0;
+
+    /**
+     * 鎵ц鏂瑰悜
+     */
+    private Short direction2 = 0;
     ///////////////////////////////////////////////////////////////////////////////////////
 
     /**
@@ -81,8 +127,10 @@
      * 1 = 宸ヤ綅1浠诲姟纭
      * 2 = 宸ヤ綅2浠诲姟纭
      * 3 = 宸ヤ綅1銆�2浠诲姟鍚屾椂纭
+     * false 鏈‘璁�
+     * true 鎵ц
      */
-    private Short command = 0;
+    private Boolean command = false;
 
     public void setTaskMode1(Short taskMode1){
         this.taskMode1 = taskMode1;
@@ -104,6 +152,26 @@
         this.taskMode2 = RgvTaskModeType.get(type2).id.shortValue();
     }
 
+    public void setTaskStatus1(Short taskStatus1){
+        this.taskStatus1 = taskStatus1;
+        this.taskStatusType1 = RgvTaskStatusType.get(taskStatusType1);
+    }
+
+    public void setTaskStatus1(RgvTaskStatusType type1) {
+        this.taskStatusType1 = type1;
+        this.taskStatus1 = RgvTaskStatusType.get(type1).id.shortValue();
+    }
+
+    public void setTaskStatus2(Short taskStatus2){
+        this.taskStatus2 = taskStatus2;
+        this.taskStatusType2 = RgvTaskStatusType.get(taskStatusType2);
+    }
+
+    public void setTaskStatus2(RgvTaskStatusType type2) {
+        this.taskStatusType2 = type2;
+        this.taskStatus2 = RgvTaskStatusType.get(type2).id.shortValue();
+    }
+
     public static void main(String[] args) {
         Date date = new Date();
         Calendar cal = Calendar.getInstance();
diff --git a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
index 1241c1d..eb177fa 100644
--- a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -5,6 +5,7 @@
 import com.zy.core.enums.RgvStatusType;
 import lombok.Data;
 
+import javax.swing.*;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -14,7 +15,7 @@
 @Data
 public class RgvProtocol implements Cloneable{
 
-    private Integer RgvNo;
+    private short RgvNo;
 
     /**
      * 1 = 鎵嬪姩妯″紡
@@ -26,12 +27,13 @@
     public RgvModeType modeType;
 
     /**
-     * RGV褰撳墠鐘舵��
+     * RGV褰撳墠鐘舵�佸伐浣�1
      * 0锛氱┖闂诧紝鏃犱换鍔�
      * 1锛氫綔涓氫腑
      * 2锛氭姤璀�
      */
     public Short status;
+
 
     /**
      * 鐘舵�佹灇涓�
@@ -41,7 +43,7 @@
     /**
      * 宸ヤ綅1浠诲姟鍙�
      */
-    public Short taskNo1 = 0;
+    public Integer taskNo1 = 0;
 
     /**
      * RGV宸ヤ綅1褰撳墠鐘舵��
@@ -60,12 +62,18 @@
     /**
      * 宸ヤ綅1鏈夌墿
      */
-    public Short loaded1;
+    public Boolean loaded1;
 
     /**
      * RGV褰撳墠浣嶇疆
      */
-    public Short RgvPos;
+    public Integer RgvPos;
+
+    /**
+     * RGV褰撳墠鐩殑浣嶇疆
+     */
+    public Integer RgvPosDestination;
+
 
     /**
      * 璧拌鍦ㄥ畾浣�
@@ -74,11 +82,46 @@
      */
     public Short walkPos;
 
+    /**
+     * 鎬ュ仠
+     */
+    public Boolean err1;
+
+    /**
+     * 鏈夌墿鏃犺祫鏂�
+     */
+    public Boolean err2;
+
+    /**
+     * 鏈夎祫鏂欐棤鐗�
+     */
+    public Boolean err3;
+
+    /**
+     * 鍛戒护閿欒璧拌鑱旇皟鍐茬獊
+     */
+    public Boolean err4;
+
+    /**
+     * 鐩爣涓鸿秴杩囪璧版瀬闄�
+     */
+    public Boolean err5;
+
+    /**
+     *  鍙橀鍣ㄥ紓甯�
+     */
+    public Boolean err6;
+
+    /**
+     * 鍏夌數寮傚父
+     */
+    public Boolean err7;
+
     //////////////////////     宸ヤ綅2瀹氫箟   //////////////////////////////////////////////////
     /**
      * 宸ヤ綅2浠诲姟鍙�
      */
-    public Short taskNo2 = 0;
+    public Integer taskNo2 = 0;
 
     /**
      * RGV宸ヤ綅2褰撳墠鐘舵��
@@ -97,7 +140,44 @@
     /**
      * 宸ヤ綅2鏈夌墿
      */
-    public Short loaded2;
+    public Boolean loaded2;
+
+//    /**
+//     * 鎬ュ仠
+//     */
+//    public Boolean err21;
+//
+//    /**
+//     * 鏈夌墿鏃犺祫鏂�
+//     */
+//    public Boolean err22;
+//
+//    /**
+//     * 鏈夎祫鏂欐棤鐗�
+//     */
+//    public Boolean err23;
+//
+//    /**
+//     * 鍛戒护閿欒璧拌鑱旇皟鍐茬獊
+//     */
+//    public Boolean err24;
+//
+//    /**
+//     * 鐩爣涓鸿秴杩囪璧版瀬闄�
+//     */
+//    public Boolean err25;
+//
+//    /**
+//     *  鍙橀鍣ㄥ紓甯�
+//     */
+//    public Boolean err26;
+//
+//    /**
+//     * 鍏夌數寮傚父
+//     */
+//    public Boolean err27;
+
+
     ///////////////////////////////////////////////////////////////////////////////////////
 
     /**
@@ -165,15 +245,24 @@
         this.status1 = RgvStatusType.get(type1).id.shortValue();
     }
 
-//    public void setStatus2(Short status2){
-//        this.status2 = status2;
-//        this.statusType2 = RgvStatusType.get(status2);
-//    }
-//
-//    public void setStatus2(RgvStatusType type2){
-//        this.statusType2 = type2;
-//        this.status2 = RgvStatusType.get(type2).id.shortValue();
-//    }
+    public void setStatus2(Short status2){
+        this.status2 = status2;
+        this.statusType2 = RgvStatusType.get(status2);
+    }
+
+    public void setStatus2(RgvStatusType type2){
+        this.statusType2 = type2;
+        this.status2 = RgvStatusType.get(type2).id.shortValue();
+    }
+
+    public boolean isLoaded1ing() {
+        return Boolean.TRUE.equals(this.loaded1);
+    }
+
+    public boolean isLoaded2ing() {
+        return Boolean.TRUE.equals(this.loaded2);
+    }
+
 
     /**
      * 鏈�杩戜竴娆″叆鍑哄簱绫诲瀷
@@ -188,7 +277,7 @@
             basRgv.setRgvErr(alarm.longValue());
         }
         basRgv.setWrkNo1(taskNo1.intValue());
-//        basRgv.setWrkNo2(taskNo2.intValue());
+        basRgv.setWrkNo2(taskNo2.intValue());
         return basRgv;
     }
 
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 127f483..3ce65ed 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -18,6 +18,7 @@
 import com.zy.core.cache.OutputQueue;
 import com.zy.core.enums.RgvStatusType;
 import com.zy.core.enums.RgvTaskModeType;
+import com.zy.core.enums.RgvTaskStatusType;
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.RgvSlave;
 import com.zy.core.model.Task;
@@ -52,6 +53,10 @@
 
     //閿佸畾鏍囪
     private boolean PakMk = true;
+    //鍏ュ簱鏍囪
+    private boolean PakIn = true;
+    //鍑哄簱鏍囪
+    private boolean PakOut = true;
 
     public RgvThread(RgvSlave slave) {
         this.slave = slave;
@@ -92,12 +97,12 @@
                             command = new RgvCommand();
                         }
                         command.setRgvNo(slave.getId()); // RGV缂栧彿
-                        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
-                        command.setAckFinish1((short) 1);  // 浠诲姟瀹屾垚纭浣�
-                        command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
-                        command.setSourceStaNo1((short)0);     // 婧愮珯
-                        command.setDestinationStaNo1((short)0);     // 鐩爣绔�
-                        command.setCommand((short)0);
+                        command.setTaskNo1(0); // 宸ヤ綔鍙�
+                        command.setAckFinish1(true);  // 浠诲姟瀹屾垚纭浣�
+                        command.setTaskStatus1(RgvTaskStatusType.NONE); // 浠诲姟妯″紡
+                        command.setTargetPosition1( 0);     // 婧愮珯
+                        command.setEndStaNo1(0);     // 鐩爣绔�
+                        command.setCommand(false);
                         write1(command);
                         break;
                     case 6:
@@ -106,33 +111,33 @@
                             command2 = new RgvCommand();
                         }
                         command2.setRgvNo(slave.getId()); // RGV缂栧彿
-                        command2.setTaskNo2((short) 0); // 宸ヤ綔鍙�
-                        command2.setAckFinish2((short) 1);  // 浠诲姟瀹屾垚纭浣�
-                        command2.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+                        command2.setTaskNo2(0); // 宸ヤ綔鍙�
+                        command2.setAckFinish2(true);  // 浠诲姟瀹屾垚纭浣�
+                        command2.setTaskStatus2(RgvTaskStatusType.NONE); // 浠诲姟妯″紡
                         command2.setSourceStaNo2((short)0);     // 婧愮珯
                         command2.setDestinationStaNo2((short)0);     // 鐩爣绔�
-                        command2.setCommand((short)0);
+                        command2.setCommand(false);
                         write2(command2);
                         break;
                     // 鍥炲師鐐�  閬胯
                     case 9:
-                        RgvCommand commandAvoidanceXY = (RgvCommand) task.getData();
-                        if (null == commandAvoidanceXY) {
-                            commandAvoidanceXY = new RgvCommand();
-                        }
-                        commandAvoidanceXY.setRgvNo(slave.getId()); // RGV缂栧彿
-                        commandAvoidanceXY.setTaskNo1((short) 9999); // 宸ヤ綔鍙�
-                        commandAvoidanceXY.setAckFinish1((short) 1);  // 浠诲姟瀹屾垚纭浣�
-                        commandAvoidanceXY.setTaskMode1(RgvTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡
-                        commandAvoidanceXY.setSourceStaNo1((short)0);     // 婧愮珯
-                        commandAvoidanceXY.setDestinationStaNo1((short)0);     // 鐩爣绔�
-//                        commandAvoidanceXY.setTaskNo2((short) 0); // 宸ヤ綔鍙�
-//                        commandAvoidanceXY.setAckFinish2((short) 1);  // 浠诲姟瀹屾垚纭浣�
-//                        commandAvoidanceXY.setTaskMode2(RgvTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡
-//                        commandAvoidanceXY.setSourceStaNo2((short)0);     // 婧愮珯
-//                        commandAvoidanceXY.setDestinationStaNo2((short)0);     // 鐩爣绔�
-                        commandAvoidanceXY.setCommand((short)0);
-                        write(commandAvoidanceXY);
+//                        RgvCommand commandAvoidanceXY = (RgvCommand) task.getData();
+//                        if (null == commandAvoidanceXY) {
+//                            commandAvoidanceXY = new RgvCommand();
+//                        }
+//                        commandAvoidanceXY.setRgvNo(slave.getId()); // RGV缂栧彿
+//                        commandAvoidanceXY.setTaskNo1((short) 9999); // 宸ヤ綔鍙�
+//                        commandAvoidanceXY.setAckFinish1((short) 1);  // 浠诲姟瀹屾垚纭浣�
+//                        commandAvoidanceXY.setTaskMode1(RgvTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡
+//                        commandAvoidanceXY.setSourceStaNo1((short)0);     // 婧愮珯
+//                        commandAvoidanceXY.setDestinationStaNo1((short)0);     // 鐩爣绔�
+////                        commandAvoidanceXY.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+////                        commandAvoidanceXY.setAckFinish2((short) 1);  // 浠诲姟瀹屾垚纭浣�
+////                        commandAvoidanceXY.setTaskMode2(RgvTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡
+////                        commandAvoidanceXY.setSourceStaNo2((short)0);     // 婧愮珯
+////                        commandAvoidanceXY.setDestinationStaNo2((short)0);     // 鐩爣绔�
+//                        commandAvoidanceXY.setCommand((short)0);
+//                        write(commandAvoidanceXY);
                         break;
                     default:
                         break;
@@ -152,21 +157,30 @@
         if (null == rgvProtocol) {
             rgvProtocol = new RgvProtocol();
         }
-        rgvProtocol.setMode((short) -1);
+        //灏忚溅鐘舵��
         rgvProtocol.setStatus((short)-1);
-        rgvProtocol.setTaskNo1((short)0);
+        rgvProtocol.setRgvPosDestination(0);
+        rgvProtocol.setMode((short) -1);
+        rgvProtocol.setRgvPos(0);
+        rgvProtocol.setErr1(false);
+        rgvProtocol.setErr2(false);
+        rgvProtocol.setErr3(false);
+        rgvProtocol.setErr4(false);
+        rgvProtocol.setErr5(false);
+        rgvProtocol.setErr6(false);
+        rgvProtocol.setErr7(false);
+        //宸ヤ綅1鐘舵��
+        rgvProtocol.setTaskNo1(0);
         rgvProtocol.setStatus1((short)-1);
-        rgvProtocol.setLoaded1((short)0);
-        rgvProtocol.setWalkPos((short)0);
-        rgvProtocol.setRgvPos((short)0);
+        rgvProtocol.setLoaded1(false);
         //宸ヤ綅2鐘舵��
-        rgvProtocol.setTaskNo2((short)0);
+        rgvProtocol.setTaskNo2(0);
         rgvProtocol.setStatus2((short)-1);
-        rgvProtocol.setLoaded2((short)0);
-        rgvProtocol.setAlarm((short)0);
-        rgvProtocol.setxSpeed((short) 0);
-        rgvProtocol.setxDistance((short) 0);
-        rgvProtocol.setxDuration((short) 0);
+        rgvProtocol.setLoaded2(false);
+//        rgvProtocol.setAlarm((short)0);
+//        rgvProtocol.setxSpeed((short) 0);
+//        rgvProtocol.setxDistance((short) 0);
+//        rgvProtocol.setxDuration((short) 0);
     }
 
     @Override
@@ -189,6 +203,14 @@
         return result;
     }
 
+    private void setBool(byte[] buffer, int byteIndex, int bitIndex, boolean value) {
+        if (value) {
+            buffer[byteIndex] |= (1 << bitIndex); // 缃綅
+        } else {
+            buffer[byteIndex] &= ~(1 << bitIndex); // 娓呴浂
+        }
+    }
+
     /**
      * 璇诲彇鐘舵��
      */
@@ -196,26 +218,49 @@
         try {
             OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 30);
             if (result.IsSuccess) {
-                if (null == rgvProtocol || rgvProtocol.getRgvNo() == null) {
+                if (null == rgvProtocol) {
                     rgvProtocol = new RgvProtocol();
-                    rgvProtocol.setRgvNo(slave.getId());
+                    rgvProtocol.setRgvNo(siemensNet.getByteTransform().TransInt16(result.Content, 0));
+
                 }
-                rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));
-                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 2));
-                rgvProtocol.setTaskNo1(siemensNet.getByteTransform().TransInt16(result.Content, 4));
-                rgvProtocol.setStatus1(siemensNet.getByteTransform().TransInt16(result.Content, 6));
-                rgvProtocol.setLoaded1(siemensNet.getByteTransform().TransInt16(result.Content, 8));
-                rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransInt16(result.Content, 10));
-                rgvProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 12));
-                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 14));
+                rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 2));
+                rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransInt32(result.Content, 4));
+                rgvProtocol.setRgvPosDestination( siemensNet.getByteTransform().TransInt32(result.Content, 8));
+                rgvProtocol.setStatus1(siemensNet.getByteTransform().TransInt16(result.Content, 12));
+                rgvProtocol.setStatus2(siemensNet.getByteTransform().TransInt16(result.Content, 14));
+                rgvProtocol.setTaskNo1(siemensNet.getByteTransform().TransInt32(result.Content, 16));
+                rgvProtocol.setTaskNo2(siemensNet.getByteTransform().TransInt32(result.Content, 20));
+
+                boolean[] status1 = siemensNet.getByteTransform().TransBool(result.Content, 24, 2);
+                rgvProtocol.setLoaded1(status1[0]);
+                rgvProtocol.setLoaded2(status1[1]);
+                boolean[] status2 = siemensNet.getByteTransform().TransBool(result.Content, 26, 1);
+                rgvProtocol.setErr1(status2[0]);
+                rgvProtocol.setErr2(status2[1]);
+                rgvProtocol.setErr3(status2[2]);
+                rgvProtocol.setErr4(status2[3]);
+                rgvProtocol.setErr5(status2[4]);
+                rgvProtocol.setErr6(status2[5]);
+                rgvProtocol.setErr7(status2[6]);
+                boolean[] status3 = siemensNet.getByteTransform().TransBool(result.Content, 27, 1);
+                rgvProtocol.setErr1(status3[0]);
+                rgvProtocol.setErr2(status3[1]);
+                rgvProtocol.setErr3(status3[2]);
+                rgvProtocol.setErr4(status3[3]);
+                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));
 //                rgvProtocol.setTaskNo2(siemensNet.getByteTransform().TransInt16(result.Content, 4));
 //                rgvProtocol.setLoaded2(siemensNet.getByteTransform().TransInt16(result.Content, 8));
 //                rgvProtocol.setStatus2(siemensNet.getByteTransform().TransInt16(result.Content, 16));
-                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 18));
+//                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 18));
 //                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20));
-                rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 22));
+//                rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 22));
 //                rgvProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 24));
-                rgvProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 26));
+//                rgvProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 26));
 //                rgvProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 28));
 //                rgvProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 30));
 //                rgvProtocol.setTemp5(siemensNet.getByteTransform().TransInt16(result.Content, 32));
@@ -230,8 +275,8 @@
                         || rgvProtocol.getStatusType1().equals(RgvStatusType.FETCHWAITING)) {
                     if (resetFlag1) {
                         RgvCommand rgvCommand = new RgvCommand();
-                        rgvCommand.setAckFinish1((short)1);
-                        if (write(rgvCommand)) {
+                        rgvCommand.setAckFinish1(true);
+                        if (write1(rgvCommand)) {
                             resetFlag1 = false;
                         }
                     }
@@ -242,8 +287,8 @@
                         || rgvProtocol.getStatusType2().equals(RgvStatusType.FETCHWAITING)) {
                     if (resetFlag2) {
                         RgvCommand rgvCommand = new RgvCommand();
-                        rgvCommand.setAckFinish2((short)1);
-                        if (write(rgvCommand)) {
+                        rgvCommand.setAckFinish2(true);
+                        if (write2(rgvCommand)) {
                             resetFlag2 = false;
                         }
                     }
@@ -275,73 +320,73 @@
         }
     }
 
-    /**
-     * 宸ヤ綅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();
+//    /**
+//     * 宸ヤ綅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[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);
+////        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;
 //        }
-
-        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鍐欏叆鏁版嵁
@@ -352,38 +397,49 @@
             return false;
         }
 
-        OperateResultExOne<byte[]> result3 = siemensNet.Read("DB100.0", (short) 12);
-        OperateResultExOne<byte[]> result4 = siemensNet.Read("DB100.10", (short) 2);
-        if (result3.IsSuccess){
+        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.setAckFinish1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 0));
-            one.setTaskNo1(siemensNet.getByteTransform().TransInt16(result3.Content, 2));
-            one.setTaskMode1(siemensNet.getByteTransform().TransInt16(result3.Content, 4));
-            one.setSourceStaNo1(siemensNet.getByteTransform().TransInt16(result3.Content, 6));
-            one.setDestinationStaNo1(siemensNet.getByteTransform().TransInt16(result3.Content, 8));
-            one.setCommand(siemensNet.getByteTransform().TransInt16(result4.Content, 0));
+//            one.setTaskNo1(siemensNet.getByteTransform().TransInt16(result3.Content, 2));
+//            one.setTaskMode1(siemensNet.getByteTransform().TransInt16(result3.Content, 4));
+//            one.setSourceStaNo1(siemensNet.getByteTransform().TransInt16(result3.Content, 6));
+//            one.setDestinationStaNo1(siemensNet.getByteTransform().TransInt16(result3.Content, 8));
+//            one.setCommand(siemensNet.getByteTransform().TransInt16(result4.Content, 0));
 
             News.error("RGV鍛戒护涓嬪彂鍓嶈鍙栫姸鎬乕id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
         }
 
 
-        OperateResult result8 = siemensNet.Write("DB100.10", (short) 0);
-        if (result8.IsSuccess){
+        OperateResult result2 = siemensNet.Write("DB100.34", false);
+        if (result2.IsSuccess){
             News.error("涓嬪彂鍓嶆妸杞﹀瓙纭浣嶇疆涓�0");
         }
-
-//        siemensNet.Write("DB100.20", command.getCommand());
-
+        byte[] writeBytes = new byte[34];
         command.setRgvNo(slave.getId());
-        short[] array = new short[5];
-        array[0] = command.getAckFinish1();
-        array[1] = command.getTaskNo1();
-        array[2] = command.getTaskMode1();
-        array[3] = command.getSourceStaNo1();
-        array[4] = command.getDestinationStaNo1();
+        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());
+
+//        command.setRgvNo(slave.getId());
+//        short[] array = new short[5];
+//        array[0] = command.getAckFinish1();
+//        array[1] = command.getTaskNo1();
+//        array[2] = command.getTaskMode1();
+//        array[3] = command.getSourceStaNo1();
+//        array[4] = command.getDestinationStaNo1();
 //        siemensNet.Write("DB100.10", command.getCommand());
 
-        OperateResult result = siemensNet.Write("DB100.0", array);
+        OperateResult result = siemensNet.Write("DB100.0", writeBytes);
 
         if (!result.IsSuccess){
             News.error("鍐欏叆RGVplc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===> [id:{}],{}",slave.getId(),JSON.toJSON(command));
@@ -396,20 +452,21 @@
         //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
         Thread.sleep(400);
         try {
-            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 12);
+            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 34);
             if (resultRead.IsSuccess){
                 RgvCommand one = new RgvCommand();
-//                one.setAckFinish1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 0));
-                one.setTaskNo1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2));
-                one.setTaskMode1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4));
-                one.setSourceStaNo1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6));
-                one.setDestinationStaNo1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
+                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));
                 if (
-                    !command.getTaskNo1().equals(one.getTaskNo1()) ||
-                        !command.getTaskMode1().equals(one.getTaskMode1()) ||
-                        !command.getSourceStaNo1().equals(one.getSourceStaNo1()) ||
-                        !command.getDestinationStaNo1().equals(one.getDestinationStaNo1())
-                ){
+                        !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())
+                ) {
                     try{
                         News.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲け璐id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
                     }catch (Exception e){
@@ -432,7 +489,7 @@
             News.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲嚭閿�");
         }
 
-        if (command.getAckFinish1() == 0) {
+        if (command.getAckFinish1()) {
             if (result.IsSuccess) {
                 Thread.sleep(300);
                 //浠诲姟涓嬪彂娆℃暟
@@ -440,15 +497,15 @@
 
                 do {
                     writeCount2++;
-                    short commandFinish = (short) 1;
-                    result = siemensNet.Write("DB100.10", commandFinish);
+                    boolean commandFinish = false;
+                    result = siemensNet.Write("DB100.32.0", commandFinish);
                     if(result.IsSuccess){
                         //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
                         Thread.sleep(200);
-                        OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.10", (short) 2);
+                        OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.32", (short) 2);
                         if (resultRead.IsSuccess) {
-                            commandFinish=siemensNet.getByteTransform().TransInt16(resultRead.Content, 0);
-                            if (commandFinish != 1){
+                            commandFinish=siemensNet.getByteTransform().TransBool(resultRead.Content, 0);
+                            if (!commandFinish){
                                 News.error("RGV浠诲姟纭浣�"+commandFinish+"鍐欏叆鏁版嵁涓庡洖璇绘暟鎹笉涓�鑷达紒"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
                             }else{
                                 //浠诲姟鍛戒护鍐欏叆鎴愬姛
@@ -475,15 +532,12 @@
             // 鏃ュ織璁板綍
             BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
             BasRgvOpt basRgvOpt = new BasRgvOpt(
-                    command.getTaskNo1().intValue(),
-                    command.getTaskNo2().intValue(),
+                    command.getTaskNo1(),
                     command.getRgvNo(),
                     new Date(),
-                    command.getTaskModeType1().toString(),
-                    command.getSourceStaNo1().intValue(),
-                    command.getDestinationStaNo1().intValue(),
-                    command.getSourceStaNo2().intValue(),
-                    command.getDestinationStaNo2().intValue(),
+                    command.getTaskStatus1().toString(),
+                    command.getTargetPosition1(),
+                    command.getEndStaNo1(),
                     null,
                     new Date(),
                     null
@@ -515,36 +569,124 @@
             return false;
         }
 
+        OperateResultExOne<byte[]> result1 = siemensNet.Read("DB100.0", (short) 34);
+        if (result1.IsSuccess){
+            RgvCommand one = new RgvCommand();
+            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("涓嬪彂鍓嶆妸杞﹀瓙纭浣嶇疆涓�0");
+        }
+        byte[] writeBytes = new byte[34];
         command.setRgvNo(slave.getId());
-        short[] array = new short[6];
-        array[0] = command.getAckFinish2();
-        array[1] = command.getTaskNo2();
-        array[2] = command.getTaskMode2();
-        array[3] = command.getSourceStaNo2();
-        array[4] = command.getDestinationStaNo2();
-        array[5] = command.getCommand();
+        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());
 
-        OperateResult result = siemensNet.Write("DB100.10", array);
+        OperateResult result = siemensNet.Write("DB100.0", writeBytes);
 
-        if (command.getAckFinish2() == 0) {
-            short commandFinish = 2;  //宸ヤ綅2浠诲姟鍐欏叆
-            Thread.sleep(100L);
-            result = siemensNet.Write("DB100.20", commandFinish);
+        if (!result.IsSuccess){
+            News.error("鍐欏叆RGVplc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===> [id:{}],{}",slave.getId(),JSON.toJSON(command));
+            MessageQueue.offer(SlaveType.Rgv,slave.getId(),new Task(5,command));
+            Thread.sleep(100);
+            readStatus();
+            return false;
+        }
+
+        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
+        Thread.sleep(400);
+        try {
+            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));
+                if (
+                        !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(5, 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()) {
+            if (result.IsSuccess) {
+                Thread.sleep(300);
+                //浠诲姟涓嬪彂娆℃暟
+                int writeCount2 = 0;
+
+                do {
+                    writeCount2++;
+                    boolean commandFinish = false;
+                    result = siemensNet.Write("DB100.32.1", commandFinish);
+                    if(result.IsSuccess){
+                        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
+                        Thread.sleep(200);
+                        OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.32", (short) 2);
+                        if (resultRead.IsSuccess) {
+                            commandFinish=siemensNet.getByteTransform().TransBool(resultRead.Content, 1);
+                            if (!commandFinish){
+                                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().intValue(),
-                    command.getTaskNo2().intValue(),
+                    command.getTaskNo2(),
                     command.getRgvNo(),
                     new Date(),
-                    command.getTaskModeType1().toString(),
-                    command.getSourceStaNo1().intValue(),
-                    command.getDestinationStaNo1().intValue(),
-                    command.getSourceStaNo2().intValue(),
-                    command.getDestinationStaNo2().intValue(),
+                    command.getTaskStatus2().toString(),
+                    command.getTargetPosition2(),
+                    command.getEndStaNo2(),
                     null,
                     new Date(),
                     null
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 1148d41..d08b7be 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -269,23 +269,23 @@
             }
         }
 
-        //RGV灏忚溅3
-//        Thread.sleep(100);
-        OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB50.224",(short)10);
-        if (result5.IsSuccess) {
-            BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo((int) siemensS7Net.getByteTransform().TransInt16(result5.Content, 0));
-            if (!Cools.isEmpty(basRgvMap)){
-                Integer siteId = 3;
-                StaProtocol staProtocol = station.get(siteId);
-                if (null == staProtocol) {
-                    staProtocol = new StaProtocol();
-                    staProtocol.setSiteId(siteId);
-                    station.put(siteId, staProtocol);
-                }
-                staProtocol.setAutoing(true);
-                staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result5.Content, 8)));
-            }
-        }
+//        //RGV灏忚溅3
+////        Thread.sleep(100);
+//        OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB50.224",(short)10);
+//        if (result5.IsSuccess) {
+//            BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo((int) siemensS7Net.getByteTransform().TransInt16(result5.Content, 0));
+//            if (!Cools.isEmpty(basRgvMap)){
+//                Integer siteId = 3;
+//                StaProtocol staProtocol = station.get(siteId);
+//                if (null == staProtocol) {
+//                    staProtocol = new StaProtocol();
+//                    staProtocol.setSiteId(siteId);
+//                    station.put(siteId, staProtocol);
+//                }
+//                staProtocol.setAutoing(true);
+//                staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result5.Content, 8)));
+//            }
+//        }
 
         //鏉$爜鎵弿鍣�
         ArrayList<Integer> barcodeList = BarcodeList;
diff --git a/src/main/webapp/static/js/console.map.js b/src/main/webapp/static/js/console.map.js
index 4c56441..5bb44ae 100644
--- a/src/main/webapp/static/js/console.map.js
+++ b/src/main/webapp/static/js/console.map.js
@@ -309,7 +309,9 @@
             "stns": [
                 {"type": "track", "id": "lb_trCart11", "text": "", "top": 65, "left": 1000, "width": 6, "height": 560},
                 {"type": "track", "id": "lb_trCart12", "text": "", "top": 65, "left": 1020, "width": 6, "height": 560},
-                { "type": "stn", "id": "site-1", "text": "1", "top": 84, "left": 1000, "width": 35, "height": 20 },
+                { "type": "stn", "id": "site-1", "text": "1", "top": 84, "left": 984, "width": 30, "height": 20 },
+                { "type": "stn", "id": "site-2", "text": "2", "top": 84, "left": 1016, "width": 30, "height": 20 },
+
                 { "type": "stn", "id": "site-1001", "text": "1001", "top": 84, "left": 870, "width": 35, "height": 20 },
                 { "type": "stn", "id": "site-1002", "text": "1002", "top": 84, "left": 907, "width": 35, "height": 20 },
                 { "type": "stn", "id": "site-1004", "text": "1004", "top": 84, "left": 944, "width": 35, "height": 20 },
@@ -444,8 +446,8 @@
             "width": 2900,
             "height": 600,
             "stns": [
-                { "type": "stn", "id": "site-2", "text": "2", "top": 84, "left": 1000, "width": 35, "height": 20 },
-
+                { "type": "stn", "id": "site-3", "text": "1", "top": 84, "left": 984, "width": 30, "height": 20 },
+                { "type": "stn", "id": "site-4", "text": "2", "top": 84, "left": 1016, "width": 30, "height": 20 },
                 {"type": "track", "id": "lb_trCart21", "text": "", "top": 65, "left": 1000, "width": 6, "height": 560},
                 {"type": "track", "id": "lb_trCart22", "text": "", "top": 65, "left": 1020, "width": 6, "height": 560},
                 { "type": "stn", "id": "site-2003", "text": "2003", "top": 84, "left": 926, "width": 54, "height": 20 },

--
Gitblit v1.9.1