From a775cccf69b395cff784ea50164b89a6ef00341a Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期一, 24 十一月 2025 12:56:27 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/core/thread/BarcodeThread.java                |    7 
 src/main/java/com/zy/core/model/protocol/RgvErrProtocol.java       |   16 
 src/main/java/com/zy/core/cache/RgvRunCache.java                   |   59 
 src/main/java/com/zy/core/thread/LedThread.java                    |    7 
 src/main/java/com/zy/core/thread/MelsecCrnThread.java              |    7 
 src/main/java/com/zy/core/cache/RgvErrCache.java                   |  100 +
 src/main/java/com/zy/core/model/protocol/TaskProtocol.java         |   61 
 src/main/java/com/zy/core/thread/ScaleThread.java                  |    8 
 src/main/java/com/zy/asrs/service/impl/DeviceErrorServiceImpl.java |   55 
 src/main/java/com/zy/core/cache/TaskProtocolCache.java             |  184 ++
 src/main/java/com/zy/core/model/RgvSlave.java                      |   49 
 src/main/java/com/zy/core/ThreadHandler.java                       |    2 
 src/main/java/com/zy/core/cache/RgvTaskCache.java                  |   44 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java            |    7 
 src/main/java/com/zy/asrs/mapper/DeviceErrorMapper.java            |   33 
 src/main/java/com/zy/core/enums/RgvStatusType.java                 |   34 
 src/main/java/com/zy/core/thread/RoboticArmThread.java             |    7 
 src/main/java/com/zy/asrs/service/DeviceErrorService.java          |   19 
 src/main/java/com/zy/asrs/controller/RgvController.java            |  574 ++++----
 src/main/java/com/zy/core/cache/RgvStatusCache.java                |   62 
 src/main/java/com/zy/asrs/utils/TrackRangeUtils.java               |   81 +
 src/main/java/com/zy/core/thread/RgvThread.java                    | 1671 ++++++++++++++++--------
 src/main/java/com/zy/core/thread/SiemensCrnThread.java             |    7 
 src/main/resources/mapper/DeviceErrorMapper.xml                    |   59 
 src/main/java/com/zy/asrs/entity/DeviceError.java                  |   96 +
 src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java      |   25 
 src/main/java/com/zy/core/model/protocol/RgvProtocol.java          |  488 +-----
 src/main/java/com/zy/core/model/protocol/RgvRunProtocol.java       |   18 
 src/main/resources/application.yml                                 |  348 +++-
 29 files changed, 2,735 insertions(+), 1,393 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/RgvController.java b/src/main/java/com/zy/asrs/controller/RgvController.java
index 98f3848..80b35a5 100644
--- a/src/main/java/com/zy/asrs/controller/RgvController.java
+++ b/src/main/java/com/zy/asrs/controller/RgvController.java
@@ -66,113 +66,113 @@
     private LocMastService locMastService;
     @Autowired
     private BasRgvMapMapper basRgvMapMapper;
-    @ManagerAuth(memo = "瑙i攣灏忚溅")
-    @PostMapping("/lock")
-    public R lock(CrnOperatorParam param){
-        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, param.getRgvNo());
-        rgvThread.setPakMk(true);
-        return R.ok();
-    }
-
-    @PostMapping("/table/rgv/state")
-    @ManagerAuth(memo = "RGV淇℃伅琛�")
-    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;
-
-            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-            if (rgvProtocol == null) continue;
-            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
-
-            vo.setStatusType(rgvProtocol.modeType.desc);   // 妯″紡鐘舵��
-            vo.setStatus(String.valueOf(rgvProtocol.getMode())); // 鐘舵��
-            vo.setWorkNo1(rgvProtocol.getTaskNo1());      // 宸ヤ綅1浠诲姟鍙�
-            vo.setStatus1(rgvProtocol.getStatusType1().desc); // 宸ヤ綅1鐘舵��
-            vo.setLoading1(rgvProtocol.getLoaded1() ? "鏈夌墿" : "鏃犵墿"); // 宸ヤ綅1鏈夌墿
-            vo.setRgvPos(basRgvMap != null?basRgvMap.getNowRoute():0);
-            vo.setRgvPos1(rgvProtocol.getRgvPosI2());
-            vo.setWalkPos(Objects.equals(rgvProtocol.getWalkPos(), 1) ? "鍦ㄥ畾浣�" : "涓嶅湪瀹氫綅");
-            vo.setPakMk(rgvThread.isPakMk() ? "鏃犻攣" : "閿佸畾");
-//            vo.setPakIn(rgvThread.isPakIn() ? "鍙叆" : "涓嶅彲鍏�");
-//            vo.setPakOut(rgvThread.isPakOut() ? "鍙嚭" : "涓嶅彲鍑�");
-//            vo.setPakRgv(rgvThread.isPakRgv() ? "鏃犻攣" : "閿佸畾");
-            vo.setPaking(rgvThread.isPaking()? "鏃犻攣" : "閿佸畾");
-//            vo.setPakAll(rgvThread.isPakAll() ? "鏃犻攣" : "閿佸畾");
-//            vo.setPakToCrn(rgvThread.isPakToCrn() ? "鏃犻攣" : "閿佸畾");
+//    @ManagerAuth(memo = "瑙i攣灏忚溅")
+//    @PostMapping("/lock")
+//    public R lock(CrnOperatorParam param){
+//        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, param.getRgvNo());
+//        rgvThread.setPakMk(true);
+//        return R.ok();
+//    }
+//
+//    @PostMapping("/table/rgv/state")
+//    @ManagerAuth(memo = "RGV淇℃伅琛�")
+//    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;
+//
+//            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+//            if (rgvProtocol == null) continue;
+//            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+//
+//            vo.setStatusType(rgvProtocol.modeType.desc);   // 妯″紡鐘舵��
+//            vo.setStatus(String.valueOf(rgvProtocol.getMode())); // 鐘舵��
+//            vo.setWorkNo1(rgvProtocol.getTaskNo1());      // 宸ヤ綅1浠诲姟鍙�
+//            vo.setStatus1(rgvProtocol.getStatusType1().desc); // 宸ヤ綅1鐘舵��
+//            vo.setLoading1(rgvProtocol.getLoaded1() ? "鏈夌墿" : "鏃犵墿"); // 宸ヤ綅1鏈夌墿
+//            vo.setRgvPos(basRgvMap != null?basRgvMap.getNowRoute():0);
+//            vo.setRgvPos1(rgvProtocol.getRgvPosI2());
+//            vo.setWalkPos(Objects.equals(rgvProtocol.getWalkPos(), 1) ? "鍦ㄥ畾浣�" : "涓嶅湪瀹氫綅");
+//            vo.setPakMk(rgvThread.isPakMk() ? "鏃犻攣" : "閿佸畾");
+////            vo.setPakIn(rgvThread.isPakIn() ? "鍙叆" : "涓嶅彲鍏�");
+////            vo.setPakOut(rgvThread.isPakOut() ? "鍙嚭" : "涓嶅彲鍑�");
+////            vo.setPakRgv(rgvThread.isPakRgv() ? "鏃犻攣" : "閿佸畾");
+//            vo.setPaking(rgvThread.isPaking()? "鏃犻攣" : "閿佸畾");
+////            vo.setPakAll(rgvThread.isPakAll() ? "鏃犻攣" : "閿佸畾");
+////            vo.setPakToCrn(rgvThread.isPakToCrn() ? "鏃犻攣" : "閿佸畾");
+//
+//
+//            vo.setWorkNo2(rgvProtocol.getTaskNo2());      // 宸ヤ綅2浠诲姟鍙�
+////            vo.setStatus2(rgvProtocol.getStatusType2().desc); // 宸ヤ綅2鐘舵��
+//            vo.setLoading2(rgvProtocol.getLoaded2() ? "鏈夌墿" : "鏃犵墿"); // 宸ヤ綅2鏈夌墿
+//
+//            // --- 閬嶅巻 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);
+//    }
 
 
-            vo.setWorkNo2(rgvProtocol.getTaskNo2());      // 宸ヤ綅2浠诲姟鍙�
-//            vo.setStatus2(rgvProtocol.getStatusType2().desc); // 宸ヤ綅2鐘舵��
-            vo.setLoading2(rgvProtocol.getLoaded2() ? "鏈夌墿" : "鏃犵墿"); // 宸ヤ綅2鏈夌墿
-
-            // --- 閬嶅巻 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鏁版嵁琛�")
-    public R rgvMsgTable(){
-        List<RgvMsgTableVo> list = new ArrayList<>();
-        List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
-        for (BasRgv basRgv : rgvs) {
-            // 琛ㄦ牸琛�
-            RgvMsgTableVo vo = new RgvMsgTableVo();
-            vo.setRgvNo(basRgv.getRgvNo());   //  RGV鍙�
-            list.add(vo);
-            // 鑾峰彇RGV淇℃伅
-            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo());
-            if (rgvThread == null) {
-                continue;
-            }
-            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-            if (rgvProtocol == null) {
-                continue;
-            }
-
-            vo.setWorkNo1(rgvProtocol.getTaskNo1());  //  宸ヤ綅1宸ヤ綔鍙�
-            vo.setWorkNo2(rgvProtocol.getTaskNo2()); //宸ヤ綅2 宸ヤ綔鍙�
-            vo.setStaNo(String.valueOf(rgvProtocol.getRgvPosDestination())); //灏忚溅鐩爣绔�
-            vo.setStatus(rgvProtocol.modeType.equals(RgvModeType.AUTO)? rgvProtocol.modeType.desc: RgvModeType.HAND.desc);   //  妯″紡鐘舵��
-
-        }
-        return R.ok().add(list);
-    }
+//    @PostMapping("/table/rgv/msg")
+//    @ManagerAuth(memo = "RGV鏁版嵁琛�")
+//    public R rgvMsgTable(){
+//        List<RgvMsgTableVo> list = new ArrayList<>();
+//        List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
+//        for (BasRgv basRgv : rgvs) {
+//            // 琛ㄦ牸琛�
+//            RgvMsgTableVo vo = new RgvMsgTableVo();
+//            vo.setRgvNo(basRgv.getRgvNo());   //  RGV鍙�
+//            list.add(vo);
+//            // 鑾峰彇RGV淇℃伅
+//            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo());
+//            if (rgvThread == null) {
+//                continue;
+//            }
+//            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+//            if (rgvProtocol == null) {
+//                continue;
+//            }
+//
+//            vo.setWorkNo1(rgvProtocol.getTaskNo1());  //  宸ヤ綅1宸ヤ綔鍙�
+//            vo.setWorkNo2(rgvProtocol.getTaskNo2()); //宸ヤ綅2 宸ヤ綔鍙�
+//            vo.setStaNo(String.valueOf(rgvProtocol.getRgvPosDestination())); //灏忚溅鐩爣绔�
+//            vo.setStatus(rgvProtocol.modeType.equals(RgvModeType.AUTO)? rgvProtocol.modeType.desc: RgvModeType.HAND.desc);   //  妯″紡鐘舵��
+//
+//        }
+//        return R.ok().add(list);
+//    }
 
     @PostMapping("/output/site")
     @ManagerAuth(memo = "RGV鎶ユ枃鏃ュ織杈撳嚭")
@@ -187,196 +187,196 @@
         return R.ok().add(str.toString());
     }
 
-    /****************************************************************/
-    /************************** 鎵嬪姩鎿嶄綔 ******************************/
-    /****************************************************************/
-
-    @ManagerAuth(memo = "鍙栨斁璐�")
-    @PostMapping("/operator/put")
-    public R rgvFetchPut(RgvOperatorParam param){
-        RgvCommand command = new RgvCommand();
-        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
-        command.setAckFinish1(false);  // 浠诲姟瀹屾垚纭浣�
-        command.setTaskNo(0); // 宸ヤ綔鍙�
-        command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
-        command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
-//        command.setDestinationStaNo1(param.getStaNo1());  // 鐩爣绔�
-        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();
-    }
-
-    @ManagerAuth(memo = "鍙栬揣")
-    @PostMapping("/operator/take")
-    public R rgvFetch(RgvOperatorParam param){
-        RgvCommand command = new RgvCommand();
-        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
-        command.setWrkTaskPri(param.getWorkSta());  //鎵ц宸ヤ綅
-        command.setTaskNo(Math.toIntExact(param.getWorkNo())); // 宸ヤ綔鍙�
-        command.setTaskStatus(RgvTaskStatusType.FETCH); // 浠诲姟妯″紡: 鍙栬揣
-        command.setTargetPosition(Integer.valueOf(param.getStaNo()));  // 鐩爣绔�
-//        command.setTaskMode2(RgvTaskModeType.FETCH); // 浠诲姟妯″紡: 鍙栨斁璐�
+//    /****************************************************************/
+//    /************************** 鎵嬪姩鎿嶄綔 ******************************/
+//    /****************************************************************/
+//
+//    @ManagerAuth(memo = "鍙栨斁璐�")
+//    @PostMapping("/operator/put")
+//    public R rgvFetchPut(RgvOperatorParam param){
+//        RgvCommand command = new RgvCommand();
+//        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
 //        command.setAckFinish1(false);  // 浠诲姟瀹屾垚纭浣�
+//        command.setTaskNo(0); // 宸ヤ綔鍙�
+//        command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
 //        command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
+////        command.setDestinationStaNo1(param.getStaNo1());  // 鐩爣绔�
 //        command.setAckFinish2(false);  // 浠诲姟瀹屾垚纭浣�
-//        command.setTaskNo2( 0); // 宸ヤ綔鍙�
+//        command.setTaskNo2(0); // 宸ヤ綔鍙�
+//        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 浠诲姟妯″紡: 鍙栨斁璐�
 //        command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
-//        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
-        command.setCommand(true);
+////        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
+//        command.setCommand(true);
+//
+//        return rgvControl(command)? R.ok(): R.error();
+//    }
 
-        return rgvControl(command)? R.ok(): R.error();
-    }
+//    @ManagerAuth(memo = "鍙栬揣")
+//    @PostMapping("/operator/take")
+//    public R rgvFetch(RgvOperatorParam param){
+//        RgvCommand command = new RgvCommand();
+//        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+//        command.setWrkTaskPri(param.getWorkSta());  //鎵ц宸ヤ綅
+//        command.setTaskNo(Math.toIntExact(param.getWorkNo())); // 宸ヤ綔鍙�
+//        command.setTaskStatus(RgvTaskStatusType.FETCH); // 浠诲姟妯″紡: 鍙栬揣
+//        command.setTargetPosition(Integer.valueOf(param.getStaNo()));  // 鐩爣绔�
+////        command.setTaskMode2(RgvTaskModeType.FETCH); // 浠诲姟妯″紡: 鍙栨斁璐�
+////        command.setAckFinish1(false);  // 浠诲姟瀹屾垚纭浣�
+////        command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
+////        command.setAckFinish2(false);  // 浠诲姟瀹屾垚纭浣�
+////        command.setTaskNo2( 0); // 宸ヤ綔鍙�
+////        command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
+////        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
+//        command.setCommand(true);
+//
+//        return rgvControl(command)? R.ok(): R.error();
+//    }
 
-    @ManagerAuth(memo = "鏀捐揣")
-    @PostMapping("/operator/stockMove")
-    public R rgvPut(RgvOperatorParam param){
-        RgvCommand command = new RgvCommand();
-        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
-        command.setWrkTaskPri(param.getWorkSta());  //鎵ц宸ヤ綅
-        command.setTaskNo(Math.toIntExact(param.getWorkNo())); // 宸ヤ綔鍙�
-        command.setTaskStatus(RgvTaskStatusType.PUT); // 浠诲姟妯″紡: 鍙栬揣
-        command.setTargetPosition(Integer.valueOf(param.getStaNo()));  // 鐩爣绔�
-//        command.setAckFinish1(false);  // 浠诲姟瀹屾垚纭浣�
-//        command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
-//        command.setAckFinish2(false);  // 浠诲姟瀹屾垚纭浣�
+//    @ManagerAuth(memo = "鏀捐揣")
+//    @PostMapping("/operator/stockMove")
+//    public R rgvPut(RgvOperatorParam param){
+//        RgvCommand command = new RgvCommand();
+//        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+//        command.setWrkTaskPri(param.getWorkSta());  //鎵ц宸ヤ綅
+//        command.setTaskNo(Math.toIntExact(param.getWorkNo())); // 宸ヤ綔鍙�
+//        command.setTaskStatus(RgvTaskStatusType.PUT); // 浠诲姟妯″紡: 鍙栬揣
+//        command.setTargetPosition(Integer.valueOf(param.getStaNo()));  // 鐩爣绔�
+////        command.setAckFinish1(false);  // 浠诲姟瀹屾垚纭浣�
+////        command.setSourceStaNo1(param.getSourceStaNo1()); // 婧愮珯
+////        command.setAckFinish2(false);  // 浠诲姟瀹屾垚纭浣�
+////        command.setTaskNo2( 0); // 宸ヤ綔鍙�
+////        command.setTaskMode2(RgvTaskModeType.FETCH); // 浠诲姟妯″紡: 鍙栨斁璐�
+////        command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
+////        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
+//        command.setCommand(true);
+//
+//        return rgvControl(command)? R.ok(): R.error();
+//    }
+
+
+
+//    @ManagerAuth(memo = "浠诲姟瀹屾垚")
+//    @PostMapping("/operator/taskComplete")
+//    public R rgvTaskComplete(RgvOperatorParam param){
+//        RgvCommand command = new RgvCommand();
+//        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+//        command.setAckFinish1(true);  // 浠诲姟瀹屾垚纭浣�
+////        command.setTaskNo1(0); // 宸ヤ綔鍙�
+//        command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+//        command.setSourceStaNo1((short) 0); // 婧愮珯
+//        command.setDestinationStaNo1((short) 0);  // 鐩爣绔�
+//        command.setAckFinish2(true);  // 浠诲姟瀹屾垚纭浣�
 //        command.setTaskNo2( 0); // 宸ヤ綔鍙�
-//        command.setTaskMode2(RgvTaskModeType.FETCH); // 浠诲姟妯″紡: 鍙栨斁璐�
-//        command.setSourceStaNo2(param.getSourceStaNo2()); // 婧愮珯
-//        command.setDestinationStaNo2(param.getStaNo2());  // 鐩爣绔�
-        command.setCommand(true);
+//        command.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+//        command.setSourceStaNo2((short) 0); // 婧愮珯
+//        command.setDestinationStaNo2((short) 0);  // 鐩爣绔�
+//        command.setCommand(true);
+//
+//        return rgvControl(command)? R.ok(): R.error();
+//    }
 
-        return rgvControl(command)? R.ok(): R.error();
-    }
+//    @ManagerAuth(memo = "娓呴櫎鍛戒护")
+//    @PostMapping("/operator/clearCommand")
+//    public R rgvClearCommand(RgvOperatorParam param){
+//        if (param.getRgvNo() == null) {
+//            throw new CoolException("璇烽�夋嫨RGV鍙�");
+//        }
+//        RgvCommand command = new RgvCommand();
+//        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
+//        command.setWrkTaskPri(0);  //鎵ц宸ヤ綅
+//        command.setTaskNo(Math.toIntExact(0)); // 宸ヤ綔鍙�
+//        command.setTaskStatus((short)0); // 浠诲姟妯″紡: 鍙栬揣
+//        command.setTargetPosition(0);  // 鐩爣绔�
+//
+//        return rgvClear(command)? R.ok(): R.error();
+//    }
 
-
-
-    @ManagerAuth(memo = "浠诲姟瀹屾垚")
-    @PostMapping("/operator/taskComplete")
-    public R rgvTaskComplete(RgvOperatorParam param){
-        RgvCommand command = new RgvCommand();
-        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
-        command.setAckFinish1(true);  // 浠诲姟瀹屾垚纭浣�
-//        command.setTaskNo1(0); // 宸ヤ綔鍙�
-        command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
-        command.setSourceStaNo1((short) 0); // 婧愮珯
-        command.setDestinationStaNo1((short) 0);  // 鐩爣绔�
-        command.setAckFinish2(true);  // 浠诲姟瀹屾垚纭浣�
-        command.setTaskNo2( 0); // 宸ヤ綔鍙�
-        command.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡
-        command.setSourceStaNo2((short) 0); // 婧愮珯
-        command.setDestinationStaNo2((short) 0);  // 鐩爣绔�
-        command.setCommand(true);
-
-        return rgvControl(command)? R.ok(): R.error();
-    }
-
-    @ManagerAuth(memo = "娓呴櫎鍛戒护")
-    @PostMapping("/operator/clearCommand")
-    public R rgvClearCommand(RgvOperatorParam param){
-        if (param.getRgvNo() == null) {
-            throw new CoolException("璇烽�夋嫨RGV鍙�");
-        }
-        RgvCommand command = new RgvCommand();
-        command.setRgvNo(param.getRgvNo()); // RGV缂栧彿
-        command.setWrkTaskPri(0);  //鎵ц宸ヤ綅
-        command.setTaskNo(Math.toIntExact(0)); // 宸ヤ綔鍙�
-        command.setTaskStatus((short)0); // 浠诲姟妯″紡: 鍙栬揣
-        command.setTargetPosition(0);  // 鐩爣绔�
-
-        return rgvClear(command)? R.ok(): R.error();
-    }
-
-    @ManagerAuth(memo = "鎵嬪姩澶嶄綅")
-    @PostMapping("/operator/handleReset")
-    public R handleReset(RgvOperatorParam param) throws Exception {
-        if (param.getRgvNo() == null) {
-            throw new CoolException("璇烽�夋嫨RGV");
-        }
-        // 鑾峰彇RGV缂撳瓨
-        for (RgvSlave rgv : slaveProperties.getRgv()) {
-            // 鑾峰彇RGV淇℃伅
-            if (param.getRgvNo().equals(rgv.getId())) {
-                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
-                if (rgvThread == null) {
-                    throw new CoolException("RGV涓嶅湪绾�");
-                }
-                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-                if (rgvProtocol == null) {
-                    throw new CoolException("RGV涓嶅湪绾�");
-                }
-                RgvCommand Command = new RgvCommand();
-                Command.setRgvNo(rgv.getId()); // RGV缂栧彿
-                Command.setTaskMode1(RgvTaskModeType.NONE);
-                Command.setAckFinish1(true);  // 浠诲姟瀹屾垚纭浣�
-                Command.setAckFinish2(true);  // 浠诲姟瀹屾垚纭浣�
-                Command.setCommand(true);  // 浠诲姟瀹屾垚纭浣�
-                // 寤舵椂鍙戦��
-                Thread.sleep(1000L);
-                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(4, Command))) {
-                    return R.ok();
-                } else {
-                    throw new CoolException("鍛戒护涓嬪彂澶辫触");
-                }
-
-            }
-        }
-        return R.error();
-    }
-
-    private boolean rgvControl(RgvCommand command){
-        if (command.getRgvNo() == null) {
-            throw new CoolException("璇烽�夋嫨RGV");
-        }
-        for (RgvSlave rgv : slaveProperties.getRgv()) {
-            // 鑾峰彇RGV淇℃伅
-            if (command.getRgvNo().equals(rgv.getId())) {
-                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
-                if (rgvThread == null) {
-                    throw new CoolException("RGV涓嶅湪绾�");
-                }
-                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-                if (rgvProtocol == null) {
-                    throw new CoolException("RGV涓嶅湪绾�");
-                }
-                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(2, command))) {
-                    return true;
-                } else {
-                    throw new CoolException("鍛戒护涓嬪彂澶辫触");
-                }
-            }
-        }
-        return false;
-    }
-
-    private boolean rgvClear(RgvCommand command){
-        if (command.getRgvNo() == null) {
-            throw new CoolException("璇烽�夋嫨RGV");
-        }
-        for (RgvSlave rgv : slaveProperties.getRgv()) {
-            // 鑾峰彇RGV淇℃伅
-            if (command.getRgvNo().equals(rgv.getId())) {
-                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
-                if (rgvThread == null) {
-                    throw new CoolException("RGV涓嶅湪绾�");
-                }
-                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-                if (rgvProtocol == null) {
-                    throw new CoolException("RGV涓嶅湪绾�");
-                }
-                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(3, command))) {
-                    return true;
-                } else {
-                    throw new CoolException("鍛戒护涓嬪彂澶辫触");
-                }
-            }
-        }
-        return false;
-
-    }
+//    @ManagerAuth(memo = "鎵嬪姩澶嶄綅")
+//    @PostMapping("/operator/handleReset")
+//    public R handleReset(RgvOperatorParam param) throws Exception {
+//        if (param.getRgvNo() == null) {
+//            throw new CoolException("璇烽�夋嫨RGV");
+//        }
+//        // 鑾峰彇RGV缂撳瓨
+//        for (RgvSlave rgv : slaveProperties.getRgv()) {
+//            // 鑾峰彇RGV淇℃伅
+//            if (param.getRgvNo().equals(rgv.getId())) {
+//                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+//                if (rgvThread == null) {
+//                    throw new CoolException("RGV涓嶅湪绾�");
+//                }
+//                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+//                if (rgvProtocol == null) {
+//                    throw new CoolException("RGV涓嶅湪绾�");
+//                }
+//                RgvCommand Command = new RgvCommand();
+//                Command.setRgvNo(rgv.getId()); // RGV缂栧彿
+//                Command.setTaskMode1(RgvTaskModeType.NONE);
+//                Command.setAckFinish1(true);  // 浠诲姟瀹屾垚纭浣�
+//                Command.setAckFinish2(true);  // 浠诲姟瀹屾垚纭浣�
+//                Command.setCommand(true);  // 浠诲姟瀹屾垚纭浣�
+//                // 寤舵椂鍙戦��
+//                Thread.sleep(1000L);
+//                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(4, Command))) {
+//                    return R.ok();
+//                } else {
+//                    throw new CoolException("鍛戒护涓嬪彂澶辫触");
+//                }
+//
+//            }
+//        }
+//        return R.error();
+//    }
+//
+//    private boolean rgvControl(RgvCommand command){
+//        if (command.getRgvNo() == null) {
+//            throw new CoolException("璇烽�夋嫨RGV");
+//        }
+//        for (RgvSlave rgv : slaveProperties.getRgv()) {
+//            // 鑾峰彇RGV淇℃伅
+//            if (command.getRgvNo().equals(rgv.getId())) {
+//                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+//                if (rgvThread == null) {
+//                    throw new CoolException("RGV涓嶅湪绾�");
+//                }
+//                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+//                if (rgvProtocol == null) {
+//                    throw new CoolException("RGV涓嶅湪绾�");
+//                }
+//                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(2, command))) {
+//                    return true;
+//                } else {
+//                    throw new CoolException("鍛戒护涓嬪彂澶辫触");
+//                }
+//            }
+//        }
+//        return false;
+//    }
+//
+//    private boolean rgvClear(RgvCommand command){
+//        if (command.getRgvNo() == null) {
+//            throw new CoolException("璇烽�夋嫨RGV");
+//        }
+//        for (RgvSlave rgv : slaveProperties.getRgv()) {
+//            // 鑾峰彇RGV淇℃伅
+//            if (command.getRgvNo().equals(rgv.getId())) {
+//                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+//                if (rgvThread == null) {
+//                    throw new CoolException("RGV涓嶅湪绾�");
+//                }
+//                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+//                if (rgvProtocol == null) {
+//                    throw new CoolException("RGV涓嶅湪绾�");
+//                }
+//                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(3, command))) {
+//                    return true;
+//                } else {
+//                    throw new CoolException("鍛戒护涓嬪彂澶辫触");
+//                }
+//            }
+//        }
+//        return false;
+//
+//    }
 
 }
\ No newline at end of file
diff --git a/src/main/java/com/zy/asrs/entity/DeviceError.java b/src/main/java/com/zy/asrs/entity/DeviceError.java
new file mode 100644
index 0000000..4a979d1
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/DeviceError.java
@@ -0,0 +1,96 @@
+package com.zy.asrs.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.core.common.Cools;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Data
+@TableName("wcs_device_error")
+public class DeviceError implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value= "")
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Long id;
+
+    /**
+     * 璁惧
+     */
+    @ApiModelProperty(value= "璁惧")
+    @TableField("device")
+    private String device;
+
+    /**
+     * 寮傚父淇℃伅
+     */
+    @ApiModelProperty(value= "寮傚父淇℃伅")
+    @TableField("msg")
+    private String msg;
+
+    /**
+     * 璁惧ID
+     */
+    @ApiModelProperty(value= "璁惧ID")
+    @TableField("device_id")
+    private Integer deviceId;
+
+    /**
+     * 璁惧ID
+     */
+    @ApiModelProperty(value= "璁惧plcID")
+    @TableField("device_plc_id")
+    private Integer devicePlcId;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value= "鍒涘缓鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value= "鍒涘缓鏃堕棿")
+    @TableField("appe_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date appeTime;
+
+    public DeviceError() {}
+
+    public DeviceError(Long id, String device, String msg, Integer deviceId, Date createTime) {
+        this.id = id;
+        this.device = device;
+        this.msg = msg;
+        this.deviceId = deviceId;
+        this.createTime = createTime;
+    }
+
+    //    DeviceError deviceError = new DeviceError(
+//            null,    // 璁惧
+//            null,    // 璁惧ID
+//            null,    // 鍒涘缓鏃堕棿
+//            null    // 寮傚父淇℃伅
+//    );
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/DeviceErrorMapper.java b/src/main/java/com/zy/asrs/mapper/DeviceErrorMapper.java
new file mode 100644
index 0000000..5d883f4
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/DeviceErrorMapper.java
@@ -0,0 +1,33 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.DeviceError;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface DeviceErrorMapper extends BaseMapper<DeviceError> {
+
+    DeviceError selectByDeviceAndDeviceId(String device, Integer deviceId);
+
+    Integer deleteByDeviceAndDeviceId(String device, Integer deviceId);
+
+    List<DeviceError> selectDeviceErrorList(
+            @Param("id")Long id,
+            @Param("device")String device,
+            @Param("deviceId")Integer deviceId,
+            @Param("pageNumber")Integer curr,
+            @Param("pageSize")Integer limit
+    ) ;
+
+    Long selectDeviceErrorListTotal(
+            @Param("id")Long id,
+            @Param("device")String device,
+            @Param("deviceId")Integer deviceId
+    ) ;
+
+}
diff --git a/src/main/java/com/zy/asrs/service/DeviceErrorService.java b/src/main/java/com/zy/asrs/service/DeviceErrorService.java
new file mode 100644
index 0000000..cf898a3
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/DeviceErrorService.java
@@ -0,0 +1,19 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.DeviceError;
+
+import java.util.List;
+
+public interface DeviceErrorService extends IService<DeviceError> {
+
+    DeviceError selectByDeviceAndDeviceId(String device, Integer deviceId);
+
+    Boolean addDeviceError(String device, Integer deviceId, String msg);
+
+    Integer deleteDeviceError(String device, Integer deviceId);
+
+    List<DeviceError> selectDeviceErrorList(Long id, String device, Integer deviceId, Integer curr, Integer limit) ;
+
+    Long selectDeviceErrorListTotal(Long id,String device, Integer deviceId) ;
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/DeviceErrorServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/DeviceErrorServiceImpl.java
new file mode 100644
index 0000000..c241fd6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/DeviceErrorServiceImpl.java
@@ -0,0 +1,55 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.DeviceError;
+import com.zy.asrs.mapper.DeviceErrorMapper;
+import com.zy.asrs.service.DeviceErrorService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service("deviceErrorService")
+public class DeviceErrorServiceImpl extends ServiceImpl<DeviceErrorMapper, DeviceError> implements DeviceErrorService {
+
+    @Override
+    public DeviceError selectByDeviceAndDeviceId(String device, Integer deviceId) {
+        return this.baseMapper.selectByDeviceAndDeviceId(device, deviceId);
+    }
+
+    @Override
+    public Boolean addDeviceError(String device, Integer deviceId, String msg) {
+//        DeviceError error = this.selectByDeviceAndDeviceId(device, deviceId);
+//        if (error == null) {
+            DeviceError deviceError = new DeviceError();
+            deviceError.setDevice(device);
+            deviceError.setDeviceId(deviceId);
+            deviceError.setMsg(msg);
+            deviceError.setCreateTime(new Date());
+            Integer insert = 0;
+            try{
+                insert = this.baseMapper.insert(deviceError);
+            } catch (Exception e){
+
+            }
+            return  insert> 0;
+//        }
+
+//        return true;
+    }
+
+    @Override
+    public Integer deleteDeviceError(String device, Integer deviceId) {
+        return this.baseMapper.deleteByDeviceAndDeviceId(device, deviceId);
+    }
+
+    @Override
+    public List<DeviceError> selectDeviceErrorList(Long id, String device, Integer deviceId, Integer curr, Integer limit) {
+        return this.baseMapper.selectDeviceErrorList(id,device, deviceId,curr,limit);
+    }
+
+    @Override
+    public Long selectDeviceErrorListTotal(Long id,String device, Integer deviceId) {
+        return this.baseMapper.selectDeviceErrorListTotal(id,device, deviceId);
+    }
+}
diff --git a/src/main/java/com/zy/asrs/utils/TrackRangeUtils.java b/src/main/java/com/zy/asrs/utils/TrackRangeUtils.java
new file mode 100644
index 0000000..35648dc
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/TrackRangeUtils.java
@@ -0,0 +1,81 @@
+package com.zy.asrs.utils;
+
+import com.zy.core.cache.RgvStatusCache;
+import com.zy.core.model.RgvSlave;
+import com.zy.core.model.protocol.RgvProtocol;
+
+/**
+ * Created by Monkey D. Luffy on 2023/7/18
+ */
+public class TrackRangeUtils {
+
+    public boolean IsItSmall(RgvSlave slave) {
+        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+        if (rgvProtocol.getRgvPos() < rgvProtocolOther.getRgvPos()) {
+            return true;
+        }
+        return false;
+    }
+
+    public Long[][] avoidRange(RgvSlave slave, Long trackEntireLength, Long trackBenchmark, Long avoidDistance) {
+        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+
+        RgvProtocol rgvProtocolE, rgvProtocolB;
+        if (IsItSmall(slave)) {
+            rgvProtocolE = rgvProtocolOther;
+            rgvProtocolB = rgvProtocol;
+        } else {
+            rgvProtocolE = rgvProtocol;
+            rgvProtocolB = rgvProtocolOther;
+        }
+
+        long entireLengthE = trackEntireLength - rgvProtocolE.getCarBodyKunPeng();
+        long benchmarkE = trackBenchmark + rgvProtocolB.getCarBodyJiaoMing() + rgvProtocolB.getCarBodyKunPeng() + avoidDistance + rgvProtocolE.getCarBodyJiaoMing();
+
+        long entireLengthB = trackEntireLength - rgvProtocolE.getCarBodyKunPeng() - rgvProtocolE.getCarBodyJiaoMing() - avoidDistance - rgvProtocolB.getCarBodyKunPeng();
+        long benchmarkB = trackBenchmark + rgvProtocolB.getCarBodyJiaoMing();
+
+
+        return new Long[][]{new Long[]{entireLengthE, benchmarkE}, new Long[]{entireLengthB, benchmarkB}};
+
+    }
+
+    public Long[][] avoidRangeArr(RgvSlave slave, Long trackEntireLength, Long trackBenchmark, Long avoidDistance) {
+        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+
+        RgvProtocol rgvProtocolE, rgvProtocolB;
+        if (IsItSmall(slave)) {
+            rgvProtocolE = rgvProtocolOther;
+            rgvProtocolB = rgvProtocol;
+
+            long entireLength = rgvProtocolE.getRgvPosDestination() - rgvProtocolE.getCarBodyJiaoMing() - avoidDistance - rgvProtocolB.getCarBodyKunPeng();
+            long benchmark = trackBenchmark + rgvProtocolB.getCarBodyJiaoMing();
+
+            long entireLengthOther = trackEntireLength - rgvProtocolE.getCarBodyKunPeng();
+            long benchmarkOther = rgvProtocolB.getRgvPosDestination() + rgvProtocolB.getCarBodyKunPeng() + avoidDistance + rgvProtocolE.getCarBodyJiaoMing();
+
+            return new Long[][]{new Long[]{entireLength, benchmark}, new Long[]{entireLengthOther, benchmarkOther}};
+
+        } else {
+            rgvProtocolE = rgvProtocol;
+            rgvProtocolB = rgvProtocolOther;
+
+            long entireLength = trackEntireLength - rgvProtocolE.getCarBodyKunPeng();
+            long benchmark = rgvProtocolB.getRgvPosDestination() + rgvProtocolB.getCarBodyKunPeng() + avoidDistance + rgvProtocolE.getCarBodyJiaoMing();
+
+            long entireLengthOther = rgvProtocolE.getRgvPosDestination() - rgvProtocolE.getCarBodyJiaoMing() - avoidDistance - rgvProtocolB.getCarBodyKunPeng();
+            long benchmarkOther = trackBenchmark + rgvProtocolB.getCarBodyJiaoMing();
+
+            return new Long[][]{new Long[]{entireLength, benchmark}, new Long[]{entireLengthOther, benchmarkOther}};
+        }
+
+    }
+
+    public boolean avoidRange(Long avoid, Long[] range) {
+        return avoid < range[0] && avoid > range[1];
+    }
+
+}
diff --git a/src/main/java/com/zy/core/ThreadHandler.java b/src/main/java/com/zy/core/ThreadHandler.java
index 9b08feb..1713bcc 100644
--- a/src/main/java/com/zy/core/ThreadHandler.java
+++ b/src/main/java/com/zy/core/ThreadHandler.java
@@ -6,4 +6,6 @@
 
     void close();
 
+    void setWrkSign();
+
 }
diff --git a/src/main/java/com/zy/core/cache/RgvErrCache.java b/src/main/java/com/zy/core/cache/RgvErrCache.java
new file mode 100644
index 0000000..4d38622
--- /dev/null
+++ b/src/main/java/com/zy/core/cache/RgvErrCache.java
@@ -0,0 +1,100 @@
+package com.zy.core.cache;
+
+import com.zy.core.model.protocol.RgvErrProtocol;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+public class RgvErrCache {
+    // 鏈湴缂撳瓨锛岄敭涓� currentPosition锛屽�间负 DeviceStatus
+    private static final ConcurrentHashMap<Integer, RgvErrProtocol> cache = new ConcurrentHashMap<>();
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateRgvStatus(RgvErrProtocol status) {
+        try {
+            cache.put(status.getRgvNo(), status);
+        } finally {
+        }
+    }
+
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateRgvErr(Integer rgvNo,String error) {
+        try {
+            RgvErrProtocol rgvErrProtocol = cache.get(rgvNo);
+            if (rgvErrProtocol == null){
+                rgvErrProtocol = new RgvErrProtocol();
+                rgvErrProtocol.setRgvNo(rgvNo);
+            }
+            if (!rgvErrProtocol.getError().equals(error)){
+                rgvErrProtocol.setError(error);
+                cache.put(rgvErrProtocol.getRgvNo(), rgvErrProtocol);
+            }
+        } finally {
+        }
+    }
+
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateRgvErr(Integer rgvNo) {
+        try {
+            RgvErrProtocol rgvErrProtocol = cache.get(rgvNo);
+            if (rgvErrProtocol == null){
+                rgvErrProtocol = new RgvErrProtocol();
+                rgvErrProtocol.setRgvNo(rgvNo);
+            }
+            if (!rgvErrProtocol.getError().equals("-")){
+                rgvErrProtocol.setError("-");
+                cache.put(rgvErrProtocol.getRgvNo(), rgvErrProtocol);
+            }
+        } finally {
+        }
+    }
+
+
+
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static String getErrorDev(Integer rgvNo) {
+        try {
+            RgvErrProtocol rgvErrProtocol = cache.get(rgvNo);
+            if (rgvErrProtocol == null){
+                rgvErrProtocol = new RgvErrProtocol();
+                rgvErrProtocol.setRgvNo(rgvNo);
+            }
+            return rgvErrProtocol.getError();
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇璁惧鐘舵��
+     */
+    public static RgvErrProtocol getRgvStatus(Integer rgvNo) {
+        try {
+            return cache.get(rgvNo);
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夎澶囩姸鎬�
+     */
+    public static ConcurrentHashMap<Integer, RgvErrProtocol> getAllRgvStatus() {
+        try {
+            return new ConcurrentHashMap<>(cache); // 杩斿洖鍓湰
+        } finally {
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/core/cache/RgvRunCache.java b/src/main/java/com/zy/core/cache/RgvRunCache.java
new file mode 100644
index 0000000..882cad3
--- /dev/null
+++ b/src/main/java/com/zy/core/cache/RgvRunCache.java
@@ -0,0 +1,59 @@
+package com.zy.core.cache;
+
+import com.core.common.Cools;
+import com.zy.core.model.protocol.RgvRunProtocol;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+public class RgvRunCache {
+    // 鏈湴缂撳瓨锛岄敭涓� currentPosition锛屽�间负 DeviceStatus
+    private static final ConcurrentHashMap<String, RgvRunProtocol> cache = new ConcurrentHashMap<>();
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateRgvStatus(RgvRunProtocol status) {
+        try {
+            cache.put(status.getDev(), status);
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇璁惧鐘舵��
+     */
+    public static RgvRunProtocol getRgvRun() {
+        try {
+            RgvRunProtocol rgv = cache.get("RGV");
+            if (Cools.isEmpty(rgv)){
+                rgv = new RgvRunProtocol();
+            }
+            return rgv;
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇璁惧鐘舵��
+     */
+    public static RgvRunProtocol getRgvStatus(String dev) {
+        try {
+            return cache.get(dev);
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夎澶囩姸鎬�
+     */
+    public static ConcurrentHashMap<String, RgvRunProtocol> getAllRgvStatus() {
+        try {
+            return new ConcurrentHashMap<>(cache); // 杩斿洖鍓湰
+        } finally {
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/core/cache/RgvStatusCache.java b/src/main/java/com/zy/core/cache/RgvStatusCache.java
new file mode 100644
index 0000000..d6ddc9a
--- /dev/null
+++ b/src/main/java/com/zy/core/cache/RgvStatusCache.java
@@ -0,0 +1,62 @@
+package com.zy.core.cache;
+
+import com.zy.core.model.protocol.RgvProtocol;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+public class RgvStatusCache {
+    // 鏈湴缂撳瓨锛岄敭涓� currentPosition锛屽�间负 DeviceStatus
+    private static final ConcurrentHashMap<Integer, RgvProtocol> cache = new ConcurrentHashMap<>();
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateRgvStatus(RgvProtocol status) {
+        try {
+            if (status.getRgvNo()!=1 && status.getRgvNo() != 2){
+                return;
+            }
+            cache.put(status.getRgvNo(), status);
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇璁惧鐘舵��
+     */
+    public static RgvProtocol getRgvStatus(Integer RgvNo) {
+        try {
+            return cache.get(RgvNo);
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夎澶囩姸鎬�
+     */
+    public static ConcurrentHashMap<Integer, RgvProtocol> getAllRgvStatus() {
+        try {
+            return new ConcurrentHashMap<>(cache); // 杩斿洖鍓湰
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夎澶囩姸鎬�
+     */
+    public static void removeAll() {
+        try {
+            ConcurrentHashMap<Integer, RgvProtocol> integerRgvProtocolConcurrentHashMap = new ConcurrentHashMap<>(cache);
+            if (integerRgvProtocolConcurrentHashMap.values().size()>2){
+                for (RgvProtocol rgvProtocol : integerRgvProtocolConcurrentHashMap.values()){
+                    cache.remove(rgvProtocol.getRgvNo());
+                }
+            }
+        } finally {
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/core/cache/RgvTaskCache.java b/src/main/java/com/zy/core/cache/RgvTaskCache.java
new file mode 100644
index 0000000..1c9d7a3
--- /dev/null
+++ b/src/main/java/com/zy/core/cache/RgvTaskCache.java
@@ -0,0 +1,44 @@
+package com.zy.core.cache;
+
+import com.zy.core.model.protocol.RgvTaskProtocol;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+public class RgvTaskCache {
+    // 鏈湴缂撳瓨锛岄敭涓� currentPosition锛屽�间负 DeviceStatus
+    private static final ConcurrentHashMap<Integer, RgvTaskProtocol> cache = new ConcurrentHashMap<>();
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateRgvStatus(RgvTaskProtocol status) {
+        try {
+            cache.put(status.getRgvNo(), status);
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇璁惧鐘舵��
+     */
+    public static RgvTaskProtocol getRgvStatus(Integer RgvNo) {
+        try {
+            return cache.get(RgvNo);
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夎澶囩姸鎬�
+     */
+    public static ConcurrentHashMap<Integer, RgvTaskProtocol> getAllRgvStatus() {
+        try {
+            return new ConcurrentHashMap<>(cache); // 杩斿洖鍓湰
+        } finally {
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/core/cache/TaskProtocolCache.java b/src/main/java/com/zy/core/cache/TaskProtocolCache.java
new file mode 100644
index 0000000..dcba42f
--- /dev/null
+++ b/src/main/java/com/zy/core/cache/TaskProtocolCache.java
@@ -0,0 +1,184 @@
+package com.zy.core.cache;
+
+import com.zy.core.model.protocol.TaskProtocol;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+@Slf4j
+public class TaskProtocolCache {
+    // 鏈湴缂撳瓨锛岄敭涓� taskNo锛屽�间负 TaskProtocol
+    private final ConcurrentHashMap<String, TaskProtocol> cache = new ConcurrentHashMap<>();
+
+    // 璇诲啓閿侊紝纭繚绾跨▼瀹夊叏
+//    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public void updateTaskProtocol(TaskProtocol status) {
+        cache.put(status.getTaskNoDirection(), status);
+    }
+
+    /**
+     * 鍒犻櫎浠诲姟缂撳瓨
+     */
+    public TaskProtocol removeTaskProtocol(String taskNoDirection) {
+//        lock.readLock().lock(); // 鍔犺閿�
+        try {
+            return cache.remove(taskNoDirection);
+        } finally {
+//            lock.readLock().unlock(); // 閲婃斁璇婚攣
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈変换鍔�
+     */
+    public ConcurrentHashMap<String, TaskProtocol> getAllTaskProtocol() {
+//        lock.readLock().lock(); // 鍔犺閿�
+        try {
+            return new ConcurrentHashMap<>(cache); // 杩斿洖鍓湰
+        } finally {
+//            lock.readLock().unlock(); // 閲婃斁璇婚攣
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夊彇浠诲姟
+     */
+    public List<TaskProtocol> getTakeOrPutTaskProtocol(short loaded) {
+        if (loaded == 0){
+            return getAllTakeTaskProtocol();
+        } else if (loaded == 1){
+            return getAllPutTaskProtocol();
+        }
+        return new ArrayList<>();
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夊彇浠诲姟
+     */
+    public List<TaskProtocol> getAllTakeTaskProtocol() {
+//        lock.readLock().lock(); // 鍔犺閿�
+        try {
+            List<TaskProtocol> allTakeTaskProtocol = new ArrayList<>();
+            for (TaskProtocol task : cache.values()) {
+                if (task.getTaskStatus()==2) {
+                    allTakeTaskProtocol.add(task);
+                }
+            }
+            return allTakeTaskProtocol; // 杩斿洖鍓湰
+        } finally {
+//            lock.readLock().unlock(); // 閲婃斁璇婚攣
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夋斁浠诲姟
+     */
+    public List<TaskProtocol> getAllPutTaskProtocol() {
+//        lock.readLock().lock(); // 鍔犺閿�
+        try {
+            List<TaskProtocol> allPutTaskProtocol = new ArrayList<>();
+            for (TaskProtocol task : cache.values()) {
+                if (task.getTaskStatus()==3) {
+                    allPutTaskProtocol.add(task);
+                }
+            }
+            return allPutTaskProtocol; // 杩斿洖鍓湰
+        } finally {
+//            lock.readLock().unlock(); // 閲婃斁璇婚攣
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夎璧颁换鍔�
+     */
+    public List<TaskProtocol> getAllWalkTaskProtocol() {
+//        lock.readLock().lock(); // 鍔犺閿�
+        try {
+            List<TaskProtocol> allWalkTaskProtocol = new ArrayList<>();
+            for (TaskProtocol task : cache.values()) {
+                if (task.getTaskStatus()==1) {
+                    allWalkTaskProtocol.add(task);
+                }
+            }
+            return allWalkTaskProtocol; // 杩斿洖鍓湰
+        } finally {
+//            lock.readLock().unlock(); // 閲婃斁璇婚攣
+        }
+    }
+
+
+
+    /**
+     * 鏌ヨ鏄惁鏈夊彲鎵ц浠诲姟
+     */
+    public boolean isNowPosRun(Long targetPosition) {
+//        lock.readLock().lock(); // 鍔犺閿�
+        try {
+            List<TaskProtocol> allWalkTaskProtocol = new ArrayList<>();
+            for (TaskProtocol task : cache.values()) {
+                long runPos = Math.abs(task.getTargetPosition() - targetPosition);
+                if (runPos<50) {
+                    return true;
+                }
+            }
+            return false; // 杩斿洖鍓湰
+        } finally {
+//            lock.readLock().unlock(); // 閲婃斁璇婚攣
+        }
+    }
+    /**
+     * 鏌ヨ鏄惁鏈夊彲鎵ц浠诲姟
+     */
+    public TaskProtocol getNowPosRunTask(Long targetPosition) {
+//        lock.readLock().lock(); // 鍔犺閿�
+        try {
+            for (TaskProtocol task : cache.values()) {
+                long runPos = Math.abs(task.getTargetPosition() - targetPosition);
+                if (runPos<50) {
+                    return task;
+                }
+            }
+            return null; // 杩斿洖鍓湰
+        } finally {
+//            lock.readLock().unlock(); // 閲婃斁璇婚攣
+        }
+    }
+
+
+    /**
+     * 鏌ヨ鏄惁鏈夊彲鎵ц浠诲姟
+     */
+    public TaskProtocol getNowPosRunTask2() {
+//        lock.readLock().lock(); // 鍔犺閿�
+        try {
+            for (TaskProtocol task : cache.values()) {
+                if (task.getTaskStatus()==1) {
+                    return task;
+                }
+            }
+            for (TaskProtocol task : cache.values()) {
+                if (task.getTaskStatus()==2) {
+                    return task;
+                }
+            }
+            for (TaskProtocol task : cache.values()) {
+                if (task.getTaskStatus()==3) {
+                    return task;
+                }
+            }
+            return null; // 杩斿洖鍓湰
+        } finally {
+//            lock.readLock().unlock(); // 閲婃斁璇婚攣
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/core/enums/RgvStatusType.java b/src/main/java/com/zy/core/enums/RgvStatusType.java
index 2b1abff..a3eb919 100644
--- a/src/main/java/com/zy/core/enums/RgvStatusType.java
+++ b/src/main/java/com/zy/core/enums/RgvStatusType.java
@@ -2,45 +2,51 @@
 
 public enum RgvStatusType {
 
-    NONE(-1, "绂荤嚎"),
-    IDLE(0, "绌洪棽"),
-    WORKING(1, "浣滀笟涓�"),
-    SOS(2, "鎶ヨ"),
-    WORKING1(3, "浣滀笟涓�"),
-    FETCHING(11, "鍙栬揣涓�"),
-    PUTTING(12, "鏀捐揣涓�"),
-    WAITING(90, "浠诲姟瀹屾垚绛夊緟WCS纭"),
-    FETCHWAITING(91, "鍙栬揣浠诲姟瀹屾垚绛夊緟WCS纭"),
+    NONE(-1, "绂荤嚎","ffffff"),
+    NONE0(0, "绂荤嚎","ffffff"),
+    IDLE(1, "绌洪棽","ffffff"),
+    WORKING(2, "浣滀笟涓�","ffffff"),// 1锛氳璧�  2锛氬彇  3锛氭斁
+    SOS(3, "鎶ヨ","ffffff"),
+    FETCHING(11, "鍙栬揣涓�","ffffff"),
+    PUTTING(12, "鏀捐揣涓�","ffffff"),
+    WAITING(90, "浠诲姟瀹屾垚绛夊緟WCS纭","ffffff"),
+    FETCHWAITING(91, "鍙栬揣浠诲姟瀹屾垚绛夊緟WCS纭","ffffff"),
+    SOS99(99, "鎶ヨ99","ffffff"),
+    OTHER(100, "鍏跺畠100","ffffff"),
+    MAN(110, "浣滀笟鍚姩涓�","ffffff"),
+    ROAM(100000, "婕父","ffffff")
     ;
 
     public Integer id;
     public String desc;
-    RgvStatusType(Integer id, String desc) {
+    public String color;
+    RgvStatusType(Integer id, String desc, String color) {
         this.id = id;
         this.desc = desc;
+        this.color = color;
     }
 
     public static RgvStatusType get(Short id) {
         if (null == id) {
-            return null;
+            return OTHER;
         }
         for (RgvStatusType type : RgvStatusType.values()) {
             if (type.id.equals(id.intValue())) {
                 return type;
             }
         }
-        return NONE;
+        return OTHER;
     }
 
     public static RgvStatusType get(RgvStatusType type) {
         if (null == type) {
-            return null;
+            return OTHER;
         }
         for (RgvStatusType rgvStatusType : RgvStatusType.values()) {
             if (rgvStatusType == type) {
                 return rgvStatusType;
             }
         }
-        return null;
+        return OTHER;
     }
 }
diff --git a/src/main/java/com/zy/core/model/RgvSlave.java b/src/main/java/com/zy/core/model/RgvSlave.java
index 321a4ec..546ea39 100644
--- a/src/main/java/com/zy/core/model/RgvSlave.java
+++ b/src/main/java/com/zy/core/model/RgvSlave.java
@@ -22,29 +22,16 @@
 
     private Boolean demo;
 
+    private Integer otherId;
+
+    private Long carBodyJiaoMing;
+
+    private Long carBodyKunPeng;
+
     // RGV鍏ュ簱婧愮珯鐐�
-    private List<RgvStn> rgvInSStn = new ArrayList<>();
-
-    // RGV鍑哄簱婧愮珯鐐�
-    private List<RgvStn> rgvOutSStn = new ArrayList<>();
-
-    // RGV鍙犵洏
-    private List<RgvStn> rgvEmptyInSStn = new ArrayList<>();
-
-    // RGV绌烘澘鍏ュ簱
-    private List<RgvStn> rgvEmptyOutSStn = new ArrayList<>();
-
-    // RGV鍑哄簱鐩爣绔欑偣
-    private List<RgvStn> rgvDestStn = new ArrayList<>();
-
-    // RGV鍏ュ簱鍙栬揣绔欑偣
-    private List<RgvStn> rgvInTStn = new ArrayList<>();
-    // RGV鍏ュ簱鏀捐揣绔欑偣
-    private List<RgvStn> rgvInPStn = new ArrayList<>();
-    // RGV鍑哄簱鍙栬揣绔欑偣
-    private List<RgvStn> rgvOutTStn = new ArrayList<>();
-    //RGV鍑哄簱鏀捐揣绔欑偣
-    private List<RgvStn> rgvOutPStn = new ArrayList<>();
+    private List<RgvStn> rgvInSta = new ArrayList<>();
+    private List<RgvStn> rgvOutSta = new ArrayList<>();
+    private List<RgvStn> rgvSuperSta = new ArrayList<>();
 
     @Data
     public static class RgvStn {
@@ -54,17 +41,15 @@
 
         // RGV绔欑偣缂栧彿
         private Integer staNo;
-        // RGV浜岀珯鐐圭紪鍙�
-        private Integer staNo2;
 
-//        // 鎺�
-//        private Integer row;
-//
-//        // 鍒�
-//        private Integer bay;
-//
-//        // 灞�
-//        private Integer lev;
+        // RGV绔欑偣缂栧彿
+        private boolean direction;
+
+        // RGV绔欑偣缂栧彿
+        private Integer staNoOther;
+
+        // RGV绔欑偣缂栧彿
+        private boolean directionOther;
 
     }
 
diff --git a/src/main/java/com/zy/core/model/protocol/RgvErrProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvErrProtocol.java
new file mode 100644
index 0000000..b72d9c0
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/RgvErrProtocol.java
@@ -0,0 +1,16 @@
+package com.zy.core.model.protocol;
+
+import lombok.Data;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+@Data
+public class RgvErrProtocol {
+
+    private Integer rgvNo;
+
+    public String error = "-";
+
+    public RgvErrProtocol(){}
+}
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 ac5bec5..8e984e1 100644
--- a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -1,99 +1,59 @@
 package com.zy.core.model.protocol;
 
 import com.zy.asrs.entity.BasRgv;
-import com.zy.asrs.entity.BasRgvErrorLog;
 import com.zy.core.enums.RgvModeType;
 import com.zy.core.enums.RgvStatusType;
 import lombok.Data;
-
-import javax.swing.*;
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * Created by vincent on 2020/8/7
  */
 @Data
-public class RgvProtocol implements Cloneable{
+public class RgvProtocol {
 
-    private short RgvNo;
+    private Integer RgvNo;
 
     /**
      * 1 = 鎵嬪姩妯″紡
      * 2 = 鑷姩妯″紡
      * 3 = 鐢佃剳妯″紡
      */
-    public Short mode;
+    public Short mode = -1;
 
-    public RgvModeType modeType;
-
-    private transient Long loadingStartTime;
+    public RgvModeType modeType = RgvModeType.NONE;
 
     /**
-     * 鎵ц浼樺厛绾�
-     * 0:涓嶅垽鏂�
-     * 1锛氬伐浣�1鍏堟墽琛�
-     * 2锛氬伐浣�2鍏堟墽琛�
-     */
-    public Short wrkTaskPri;
-
-    public Short wrkTaskMove1;
-
-    public Short wrkTaskMove2;
-
-
-    /**
-     * RGV褰撳墠鐘舵�佸伐浣�1
+     * RGV褰撳墠鐘舵��
      * 0锛氱┖闂诧紝鏃犱换鍔�
      * 1锛氫綔涓氫腑
      * 2锛氭姤璀�
      */
-    public Short status;
-
+    public Short status = -1;
 
     /**
      * 鐘舵�佹灇涓�
      */
-    public RgvStatusType statusType;
+    public RgvStatusType statusType = RgvStatusType.NONE;
 
     /**
-     * 宸ヤ綅1浠诲姟鍙�
+     * 浠诲姟鍙�
      */
-    public Integer taskNo1 = 0;
-    /**
-     * 宸ヤ綅1鐩爣绔�
-     */
-    public Integer staNo1 = 0;
+    public Long taskNo = 0L;
 
     /**
-     * RGV宸ヤ綅1褰撳墠鐘舵��
-     * 0锛氱┖闂诧紝鏃犱换鍔�
-     * 11锛氬彇璐т腑
-     * 12锛氭斁璐т腑
-     * 10锛氫换鍔″畬鎴愮瓑寰匴CS纭
+     * 鏈夌墿
      */
-    public Short status1;
-
-    /**
-     * 鐘舵�佹灇涓�
-     */
-    public RgvStatusType statusType1;
-
-    /**
-     * 宸ヤ綅1鏈夌墿
-     */
-    public Boolean loaded1;
+    public Short loaded = -1;//0 鏃犵墿锛�1 鏈夌墿
 
     /**
      * RGV褰撳墠浣嶇疆
      */
-    public Integer RgvPos;
+    public Long RgvPos = 0L;
 
     /**
-     * RGV褰撳墠鐩殑浣嶇疆
+     * RGV鐩殑浣嶇疆
      */
-    public Integer RgvPosDestination;
-
+    public Long RgvPosDestination = 0L;
 
     /**
      * 璧拌鍦ㄥ畾浣�
@@ -103,176 +63,9 @@
     public Short walkPos;
 
     /**
-     * 鎬ュ仠瑙﹀彂
-     */
-    public Boolean err1;
-
-    /**
-     *
-     */
-    public Boolean err2;
-
-    /**
-     * 鏈夎祫鏂欐棤鐗�
-     */
-    public Boolean err3;
-
-    /**
-     * 鍛戒护閿欒璧拌鑱旇皟鍐茬獊
-     */
-    public Boolean err4;
-
-    /**
-     * 鐩爣涓鸿秴杩囪璧版瀬闄�
-     */
-    public Boolean err5;
-
-    /**
-     *  鍙橀鍣ㄥ紓甯�
-     */
-    public Boolean err6;
-
-    /**
-     * 鍏夌數寮傚父
-     */
-    public Boolean err7;
-
-    public Boolean err8;
-    public Boolean err9;
-    public Boolean err10;
-    public Boolean err11;
-    public Boolean err12;
-
-    //////////////////////     宸ヤ綅2瀹氫箟   //////////////////////////////////////////////////
-    /**
-     * 宸ヤ綅2浠诲姟鍙�
-     */
-    public Integer taskNo2 = 0;
-    /**
-     * 宸ヤ綅1鐩爣绔�
-     */
-    public Integer staNo2 = 0;
-
-    /**
-     * RGV宸ヤ綅2褰撳墠鐘舵��
-     * 0锛氱┖闂诧紝鏃犱换鍔�
-     * 11锛氬彇璐т腑
-     * 12锛氭斁璐т腑
-     * 10锛氫换鍔″畬鎴愮瓑寰匴CS纭
-     */
-    public Short status2;
-
-    /**
-     * 鐘舵�佹灇涓�
-     */
-    public RgvStatusType statusType2;
-
-    /**
-     * 宸ヤ綅2鏈夌墿
-     */
-    public Boolean loaded2;
-
-//    /**
-//     * 鎬ュ仠
-//     */
-//    public Boolean err21;
-//
-//    /**
-//     * 鏈夌墿鏃犺祫鏂�
-//     */
-//    public Boolean err22;
-//
-//    /**
-//     * 鏈夎祫鏂欐棤鐗�
-//     */
-//    public Boolean err23;
-//
-//    /**
-//     * 鍛戒护閿欒璧拌鑱旇皟鍐茬獊
-//     */
-//    public Boolean err24;
-//
-//    /**
-//     * 鐩爣涓鸿秴杩囪璧版瀬闄�
-//     */
-//    public Boolean err25;
-//
-//    /**
-//     *  鍙橀鍣ㄥ紓甯�
-//     */
-//    public Boolean err26;
-//
-//    /**
-//     * 鍏夌數寮傚父
-//     */
-//    public Boolean err27;
-
-
-    ///////////////////////////////////////////////////////////////////////////////////////
-    //閰嶇疆淇″彿-----------------------------------------------------------------------------
-    // 鏁呴殰璇诲彇閿佸畾鏍囪
-    private boolean errorMk = false;
-    //鍐欏叆鏍囪
-    private boolean writeMk = true;
-    private Boolean chainForward1 = false;       // 閾炬潯鍓嶈繘 1
-    private Boolean chainReverse1 = false;       // 閾炬潯鍚庨�� 1
-    private Boolean inverterAlarm = false;       // 鍙橀鍣ㄦ姤璀�
-    private Boolean leftOverlimit2 = false;      // 宸﹁秴闄� 2
-    private Boolean rightOverlimit2 = false;     // 鍙宠秴闄� 2
-    private Boolean leftAtPosition2 = false;     // 宸﹀埌浣� 2
-    private Boolean rightAtPosition2 = false;    // 鍙冲埌浣� 2
-    private Boolean cargoSpeedReduction = false; // 璐х墿鍑忛��
-    private Boolean conveyorInverterAlarm2 = false; // 杈撻�佸彉棰戝櫒鎶ヨ 2
-
-    private Boolean emergencyStop = false;       // 鎬ュ仠瑙﹀彂
-    private Boolean slot1EmptyNoData = false;    // 1鍙蜂綅鏈夌墿鏃犺祫鏂�
-    private Boolean slot2EmptyNoData = false;    // 2鍙蜂綅鏈夌墿鏃犺祫鏂�
-    private Boolean commandErrorChainConflict = false; // 鍛戒护閿欒璧伴摼鏉″啿绐�
-    private Boolean targetPositionIssue = false; // 鐩爣浣嶄笅鍙戦敊璇�
-    private Boolean travelInverterError = false; // 璧拌鍙橀鍣ㄥ紓甯�
-    private Boolean photoelectric1Error = false; // 1鍙峰厜鐢靛紓甯�
-    private Boolean photoelectric2Error = false; // 2鍙峰厜鐢靛紓甯�
-    private Boolean timeoutConnectionWithLine = false; // 涓庤緭绾挎椂鎺ヨ秴鏃�
-    private Boolean leftRollerTimeout = false;    // 宸︿晶婊氱瓛杩愯瓒呮椂
-    private Boolean rightRollerTimeout = false;   // 鍙充晶婊氱瓛杩愯瓒呮椂
-    private Boolean rgvRunTimeout = false;        // rgv杩愯瓒呮椂
-    private Boolean position1ChainInverterError = false; // 1鍙峰伐浣嶉摼鏉″彉棰戝櫒寮傚父
-    private Boolean position2ChainInverterError = false; // 2鍙峰伐浣嶉摼鏉″彉棰戝櫒寮傚父
-    private Boolean frontRearLimit = false;      // 鍓嶅悗鏋侀檺浣�
-    private Boolean emergencyButton = false;     // 鎬ュ仠鎸夐挳
-    private Boolean forwardButton = false;       // 鍓嶈繘鎸夐挳
-    private Boolean reverseButton = false;       // 鍚庨��鎸夐挳
-    private Boolean localRemote = false;         // 鏈湴/杩滅▼
-    private Boolean reset = false;               // 澶嶄綅
-    private Boolean travelBrakeSwitch = false;   // 璧拌鎶遍椄寮�鍏抽挳
-    private Boolean travelSpeedLimitPhotoelectric = false; // 璧拌寮哄埗鍑忛�熷厜鐢�
-    private Boolean leftOverlimit1 = false;      // 宸﹁秴闄� 1
-    private Boolean rightOverlimit1 = false;     // 鍙宠秴闄� 1
-    private Boolean leftAtPosition1 = false;     // 宸﹀埌浣� 1
-    private Boolean rightAtPosition1 = false;    // 鍙冲埌浣� 1
-
-    private Boolean rightConveyor2 = false;      // 鍙宠緭閫� 2
-    private Boolean leftConveyor2 = false;       // 宸﹁緭閫� 2
-    //---------------------------------------------------------------------
-    /**
      * 寮傚父鐮�
      */
     public Short alarm;
-
-    /**
-     * 蹇冭烦鎸囦护 1-2姣忕鍒囨崲涓�娆�
-     */
-    public Short heart;
-
-    private Short temp1;
-
-    private Short temp2;
-
-    private Short temp3;
-
-    private Short temp4;
-
-    private Short temp5;
 
     /**
      * X琛岃蛋琛岄�熷害m/min
@@ -280,59 +73,54 @@
     private Float xSpeed;
 
     /**
-     * 鍫嗗灈鏈虹疮璁¤蛋琛岃窛绂籯m
+     * 绱璧拌璺濈km
      */
     public Float xDistance;
 
     /**
-     * 鍫嗗灈鏈虹疮璁¤蛋琛屾椂闀縣
+     * 绱璧拌鏃堕暱h
      */
     public Float xDuration;
 
+    /**
+     * 杞﹁韩
+     */
+    public Long carBodyJiaoMing = 2000L;
 
-    public BasRgvErrorLog toSqlModelError(){
-        BasRgvErrorLog basRgvErrorLog = new BasRgvErrorLog();
-        basRgvErrorLog.setRgvNo((int) RgvNo);// 璁惧鍙凤紙鍋囪鏈夊畾涔� siteId锛�
-        basRgvErrorLog.setChainForward1(chainForward1 ? "Y" : "N");       // 閾炬潯鍓嶈繘 1
-        basRgvErrorLog.setChainReverse1(chainReverse1 ? "Y" : "N");       // 閾炬潯鍚庨�� 1
-        basRgvErrorLog.setInverterAlarm(inverterAlarm ? "Y" : "N");       // 鍙橀鍣ㄦ姤璀�
-        basRgvErrorLog.setLeftOverlimit2(leftOverlimit2 ? "Y" : "N");      // 宸﹁秴闄� 2
-        basRgvErrorLog.setRightOverlimit2(rightOverlimit2 ? "Y" : "N");     // 鍙宠秴闄� 2
-        basRgvErrorLog.setLeftAtPosition2(leftAtPosition2 ? "Y" : "N");     // 宸﹀埌浣� 2
-        basRgvErrorLog.setRightAtPosition2(rightAtPosition2 ? "Y" : "N");    // 鍙冲埌浣� 2
-        basRgvErrorLog.setCargoSpeedReduction(cargoSpeedReduction ? "Y" : "N"); // 璐х墿鍑忛��
-        basRgvErrorLog.setConveyorInverterAlarm2(conveyorInverterAlarm2 ? "Y" : "N"); // 杈撻�佸彉棰戝櫒鎶ヨ 2
-        basRgvErrorLog.setEmergencyStop(emergencyStop ? "Y" : "N");       // 鎬ュ仠瑙﹀彂
-        basRgvErrorLog.setSlot1EmptyNoData(slot1EmptyNoData ? "Y" : "N");    // 1鍙蜂綅鏈夌墿鏃犺祫鏂�
-        basRgvErrorLog.setSlot2EmptyNoData(slot2EmptyNoData ? "Y" : "N");    // 2鍙蜂綅鏈夌墿鏃犺祫鏂�
-        basRgvErrorLog.setCommandErrorChainConflict(commandErrorChainConflict ? "Y" : "N"); // 鍛戒护閿欒璧伴摼鏉″啿绐�
-        basRgvErrorLog.setTargetPositionIssue(targetPositionIssue ? "Y" : "N"); // 鐩爣浣嶄笅鍙戦敊璇�
-        basRgvErrorLog.setTravelInverterError(travelInverterError ? "Y" : "N"); // 璧拌鍙橀鍣ㄥ紓甯�
-        basRgvErrorLog.setPhotoelectric1Error(photoelectric1Error ? "Y" : "N"); // 1鍙峰厜鐢靛紓甯�
-        basRgvErrorLog.setPhotoelectric2Error(photoelectric2Error ? "Y" : "N"); // 2鍙峰厜鐢靛紓甯�
-        basRgvErrorLog.setTimeoutConnectionWithLine(timeoutConnectionWithLine ? "Y" : "N"); // 涓庤緭绾挎椂鎺ヨ秴鏃�
-        basRgvErrorLog.setLeftRollerTimeout(leftRollerTimeout ? "Y" : "N");    // 宸︿晶婊氱瓛杩愯瓒呮椂
-        basRgvErrorLog.setRightRollerTimeout(rightRollerTimeout ? "Y" : "N");   // 鍙充晶婊氱瓛杩愯瓒呮椂
-        basRgvErrorLog.setRgvRunTimeout(rgvRunTimeout ? "Y" : "N");        // rgv杩愯瓒呮椂
-        basRgvErrorLog.setPosition1ChainInverterError(position1ChainInverterError ? "Y" : "N"); // 1鍙峰伐浣嶉摼鏉″彉棰戝櫒寮傚父
-        basRgvErrorLog.setPosition2ChainInverterError(position2ChainInverterError ? "Y" : "N"); // 2鍙峰伐浣嶉摼鏉″彉棰戝櫒寮傚父
-        basRgvErrorLog.setFrontRearLimit(frontRearLimit ? "Y" : "N");      // 鍓嶅悗鏋侀檺浣�
-        basRgvErrorLog.setEmergencyButton(emergencyButton ? "Y" : "N");     // 鎬ュ仠鎸夐挳
-        basRgvErrorLog.setForwardButton(forwardButton ? "Y" : "N");       // 鍓嶈繘鎸夐挳
-        basRgvErrorLog.setReverseButton(reverseButton ? "Y" : "N");       // 鍚庨��鎸夐挳
-        basRgvErrorLog.setLocalRemote(localRemote ? "Y" : "N");         // 鏈湴/杩滅▼
-        basRgvErrorLog.setReset(reset ? "Y" : "N");               // 澶嶄綅
-        basRgvErrorLog.setTravelBrakeSwitch(travelBrakeSwitch ? "Y" : "N");   // 璧拌鎶遍椄寮�鍏抽挳
-        basRgvErrorLog.setTravelSpeedLimitPhotoelectric(travelSpeedLimitPhotoelectric ? "Y" : "N"); // 璧拌寮哄埗鍑忛�熷厜鐢�
-        basRgvErrorLog.setLeftOverlimit1(leftOverlimit1 ? "Y" : "N");      // 宸﹁秴闄� 1
-        basRgvErrorLog.setRightOverlimit1(rightOverlimit1 ? "Y" : "N");     // 鍙宠秴闄� 1
-        basRgvErrorLog.setLeftAtPosition1(leftAtPosition1 ? "Y" : "N");     // 宸﹀埌浣� 1
-        basRgvErrorLog.setRightAtPosition1(rightAtPosition1 ? "Y" : "N");    // 鍙冲埌浣� 1
-        basRgvErrorLog.setRightConveyor2(rightConveyor2 ? "Y" : "N");      // 鍙宠緭閫� 2
-        basRgvErrorLog.setLeftConveyor2(leftConveyor2 ? "Y" : "N");       // 宸﹁緭閫� 2
+    /**
+     * 杞﹁韩
+     */
+    public Long carBodyKunPeng = 15000L;
 
-        return basRgvErrorLog;
-    }
+    /**
+     * 鏄惁鍚敤
+     */
+    public boolean statusEnable;//0\1\2
+
+
+
+    // 鎬ュ仠
+    private boolean err1;
+
+    // 鏈夌墿鏃犺祫鏂�
+    private boolean err2;
+
+    // 鍛戒护閿欒璧拌閾炬潯鍐茬獊
+    private boolean err3;
+
+    // 鐩爣涓鸿秴杩囪蛋琛屾瀬闄�
+    private boolean err4;
+
+    // 鍙橀鍣ㄥ紓甯�
+    private boolean err5;
+
+    // 鍏夌數寮傚父
+    private boolean err6;
+    //灏忚溅妯″紡鍒囨崲閿欒
+    private boolean err7;
+    //鍏朵粬鏈煡寮傚父
+    private boolean err8;
+    private String errorRgv;
 
     public void setMode(Short mode) {
         this.mode = mode;
@@ -354,50 +142,20 @@
         this.status = RgvStatusType.get(type).id.shortValue();
     }
 
-    public void setStatus1(Short status1){
-        this.status1 = status1;
-        this.statusType1 = RgvStatusType.get(status1);
-    }
-
-    public void setStatus1(RgvStatusType type1){
-        this.statusType1 = type1;
-        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 boolean isLoaded1ing() {
-        return Boolean.TRUE.equals(this.loaded1);
-    }
-
-    public boolean isLoaded2ing() {
-        return Boolean.TRUE.equals(this.loaded2);
-    }
-
-
-    /**
-     * 鏈�杩戜竴娆″叆鍑哄簱绫诲瀷
-     *       I:鍏ュ簱
-     *       O:鍑哄簱
-     */
-    private String lastIo = "I";
-
-
     public BasRgv toSqlModel(BasRgv basRgv){
         if (alarm!=null) {
             basRgv.setRgvErr(alarm.longValue());
         }
-        basRgv.setWrkNo1(taskNo1.intValue());
-        basRgv.setWrkNo2(taskNo2.intValue());
+        basRgv.setWrkNo1(taskNo.intValue());
         return basRgv;
+    }
+
+    public long getRgvPosDestinationOrPos(boolean sign){
+        if (!sign){
+            return RgvPosDestination>RgvPos? RgvPosDestination:RgvPos;
+        } else {
+            return RgvPosDestination<RgvPos? RgvPosDestination:RgvPos;
+        }
     }
 
     public void setxSpeed(Short xSpeed) {
@@ -412,87 +170,53 @@
         this.xDuration = Float.valueOf(xDuration);
     }
 
-    public Integer getRgvPosI(){
-        //闇�瑕佹牴鎹幇鍦烘敼閫�  鏍规嵁璇诲埌鐨勫�艰幏鍙栧搴旂珯鐐逛綅缃�
-        Map<Short,Integer> map = new HashMap<>();
-        map.put((short) 1,1004);map.put((short) 2,1007);
-        map.put((short) 3,1010);map.put((short) 4,1014);
-        map.put((short) 5,1018);map.put((short) 6,1021);
-       map.put((short) 7,1024); map.put((short) 8,1028);
-        map.put((short) 9,1031);map.put((short) 10,1035);
-        map.put((short) 11,2003);map.put((short) 12,2006);
-        map.put((short) 13,2009);map.put((short) 14,2012);
-        map.put((short) 15,2015);map.put((short) 16,2018);
-        map.put((short) 17,2021);map.put((short) 18,2024);
-        map.put((short) 19,2027);map.put((short) 20,2030);
-        if (RgvPos==null) return 0;
-
-        return map.get(RgvPos);
-    }
-
-    public Integer getRgvPosI1() {
-        // key: 绔欑偣鍙�  value: 鍩哄噯鐗╃悊浣嶇疆
-        Map<Integer, Integer> posMap = new HashMap<>();
-        posMap.put(1004, 6534);
-        posMap.put(1007, 33634);
-        posMap.put(1010, 75174);
-        posMap.put(1014, 102124);
-        posMap.put(1018, 138224);
-        posMap.put(1021, 178034);
-        posMap.put(1024, 219684);
-        posMap.put(1028, 246724);
-        posMap.put(1031, 288194);
-        posMap.put(1035, 314954);
-
-
-
-        int tolerance = 200; // 鍏佽璇樊鑼冨洿
-
-        for (Map.Entry<Integer, Integer> entry : posMap.entrySet()) {
-            int site = entry.getKey();
-            int basePos = entry.getValue();
-            if (Math.abs(RgvPos - basePos) <= tolerance) {
-                return site;
-            }
+    public int getAlarm$(){
+        if (err1){
+            return 1;
         }
-
-        return 0; // 娌″尮閰嶅埌绔欑偣
-    }
-    public Integer getRgvPosI2() {
-        // key: 绔欑偣鍙�  value: 鍩哄噯鐗╃悊浣嶇疆
-        Map<Integer, Integer> posMap = new HashMap<>();
-        posMap.put(2030, 314954);
-        posMap.put(2027, 288094);
-        posMap.put(2024, 246574);
-        posMap.put(2021, 219584);
-        posMap.put(2018, 177934);
-        posMap.put(2015, 138126);
-        posMap.put(2012, 102124);
-        posMap.put(2009, 75174);
-        posMap.put(2006, 33748);
-        posMap.put(2003, 6449);
-        int tolerance = 500; // 鍏佽璇樊鑼冨洿
-
-        for (Map.Entry<Integer, Integer> entry : posMap.entrySet()) {
-            int site = entry.getKey();
-            int basePos = entry.getValue();
-            if (Math.abs(RgvPos - basePos) <= tolerance) {
-                return site;
-            }
+        if (err2){
+            return 2;
         }
-
-        return 0; // 娌″尮閰嶅埌绔欑偣
-    }
-
-
-    @Override
-    public RgvProtocol clone() {
-        try {
-            return (RgvProtocol) super.clone();
-        } catch (CloneNotSupportedException e) {
-            e.printStackTrace();
+        if (err3){
+            return 3;
         }
-        return null;
+        if (err4){
+            return 4;
+        }
+        if (err5){
+            return 5;
+        }
+        if (err6){
+            return 6;
+        }
+        if (err7){
+            return 7;
+        }
+        if (err8){
+            return 8;
+        }
+        return 0;
+    }
+    public String getAlarmM(){
+        switch (getAlarm$()){
+            case 1:
+                return "鎬ュ仠";
+            case 2:
+                return "鏈夌墿鏃犺祫鏂�";
+            case 3:
+                return "鍛戒护閿欒璧拌閾炬潯鍐茬獊";
+            case 4:
+                return "鐩爣涓鸿秴杩囪蛋琛屾瀬闄�";
+            case 5:
+                return "鍙橀鍣ㄥ紓甯�";
+            case 6:
+                return "鍏夌數寮傚父";
+            case 7:
+                return "灏忚溅妯″紡鍒囨崲閿欒";
+            case 8:
+                return "鍏跺畠鏈煡寮傚父";
+        }
+        return "姝e父";
     }
 
 }
diff --git a/src/main/java/com/zy/core/model/protocol/RgvRunProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvRunProtocol.java
new file mode 100644
index 0000000..82a4503
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/RgvRunProtocol.java
@@ -0,0 +1,18 @@
+package com.zy.core.model.protocol;
+
+import lombok.Data;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+@Data
+public class RgvRunProtocol {
+
+
+    private String dev = "RGV";
+    private Integer RgvNo = 1;
+
+    public Long currentTimeMilliOld = 0L;
+
+    public RgvRunProtocol(){}
+}
diff --git a/src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java
new file mode 100644
index 0000000..2bb5cf2
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java
@@ -0,0 +1,25 @@
+package com.zy.core.model.protocol;
+
+import lombok.Data;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+@Data
+public class RgvTaskProtocol {
+
+
+    private Integer RgvNo;
+
+    /**
+     * 鏄惁閬胯
+     */
+    public Integer Avoid;//0\1\2
+
+    /**
+     * 閬胯鐩殑鍦�
+     */
+    public Long AvoidingTheDestination;
+
+    public RgvTaskProtocol(){}
+}
diff --git a/src/main/java/com/zy/core/model/protocol/TaskProtocol.java b/src/main/java/com/zy/core/model/protocol/TaskProtocol.java
new file mode 100644
index 0000000..a7dee2d
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/TaskProtocol.java
@@ -0,0 +1,61 @@
+package com.zy.core.model.protocol;
+
+import lombok.Data;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+@Data
+public class TaskProtocol {
+    private volatile String taskNoDirection; // 浠诲姟鍙凤紙涓诲睘鎬э級
+    private volatile Long taskNo; // 浠诲姟鍙凤紙涓诲睘鎬э級
+    private volatile Long targetPosition = 0L; // 鐩爣浣嶇疆
+    private volatile Integer targetPositionStaNo = 0; // 鐩爣浣嶇疆
+    private volatile Integer targetPositionStaNoPlcId = 1; // 鐩爣浣嶇疆
+
+    private volatile int isRunning = 0; // 杩愯鐘舵��  0锛氬垵濮�  1锛氱瓑寰呮墽琛�  2锛氭墽琛屼腑 3锛氭墽琛屼腑鏂� 4锛氬畬缁�
+
+    private volatile int taskStatus = 0; //浣滀笟妯″紡  1锛氳璧�  2锛氬彇  3锛氭斁  0:鏃�
+
+    private volatile boolean direction; // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�  鎵ц鏂瑰悜锛堥潰鏈濊建閬�  1:鑷繁  2 杞ㄩ亾   true:鑷繁   false:杞ㄩ亾
+
+    public TaskProtocol(){}
+
+    public TaskProtocol(Long taskNo, Long targetPosition, int isRunning, int taskStatus, boolean direction) {
+        this.taskNo = taskNo;
+        this.targetPosition = targetPosition;
+        this.isRunning = isRunning;
+        this.taskStatus = taskStatus;
+        this.direction = direction;
+    }
+
+    public TaskProtocol(TaskProtocol taskProtocol) {
+        this.taskNo = taskProtocol.getTaskNo();
+        this.targetPosition = taskProtocol.getTargetPosition();
+        this.taskStatus = taskProtocol.getTaskStatus();
+        this.direction = taskProtocol.direction;
+    }
+
+
+
+    public TaskProtocol(TaskProtocol taskProtocol, boolean direction) {
+        this.taskNo = taskProtocol.getTaskNo();
+        this.targetPosition = taskProtocol.getTargetPosition();
+        this.taskStatus = 1;
+        this.direction = taskProtocol.direction;
+    }
+
+
+    public String gettaskNoDirection$(Long taskNo,int taskStatus){
+        String taskStatusStr = "Walk";
+        switch (taskStatus){
+            case 2:
+                taskStatusStr = "Tack";
+                break;
+            case 3:
+                taskStatusStr = "Put";
+                break;
+        }
+        return taskNo+"_"+taskStatusStr;
+    }
+}
diff --git a/src/main/java/com/zy/core/thread/BarcodeThread.java b/src/main/java/com/zy/core/thread/BarcodeThread.java
index 6a0d544..53564dc 100644
--- a/src/main/java/com/zy/core/thread/BarcodeThread.java
+++ b/src/main/java/com/zy/core/thread/BarcodeThread.java
@@ -61,4 +61,11 @@
 
     }
 
+    /**
+     * 娓呴櫎浣滀笟鍚姩涓�
+     */
+    @Override
+    public void setWrkSign() {
+    }
+
 }
diff --git a/src/main/java/com/zy/core/thread/LedThread.java b/src/main/java/com/zy/core/thread/LedThread.java
index d7a24fb..ece3e06 100644
--- a/src/main/java/com/zy/core/thread/LedThread.java
+++ b/src/main/java/com/zy/core/thread/LedThread.java
@@ -128,4 +128,11 @@
     public void close() {
     }
 
+    /**
+     * 娓呴櫎浣滀笟鍚姩涓�
+     */
+    @Override
+    public void setWrkSign() {
+    }
+
 }
diff --git a/src/main/java/com/zy/core/thread/MelsecCrnThread.java b/src/main/java/com/zy/core/thread/MelsecCrnThread.java
index fb24a86..d636ed0 100644
--- a/src/main/java/com/zy/core/thread/MelsecCrnThread.java
+++ b/src/main/java/com/zy/core/thread/MelsecCrnThread.java
@@ -473,4 +473,11 @@
 
     }
 
+    /**
+     * 娓呴櫎浣滀笟鍚姩涓�
+     */
+    @Override
+    public void setWrkSign() {
+    }
+
 }
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 58dbf95..caea4ec 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -5,34 +5,34 @@
 import HslCommunication.Profinet.Siemens.SiemensPLCS;
 import HslCommunication.Profinet.Siemens.SiemensS7Net;
 import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.common.SpringUtils;
-import com.core.exception.CoolException;
-import com.zy.asrs.entity.*;
-import com.zy.asrs.service.*;
-import com.zy.common.utils.News;
-import com.zy.core.RgvThread2;
+import com.zy.asrs.entity.BasRgv;
+import com.zy.asrs.entity.BasRgvOpt;
+import com.zy.asrs.service.BasRgvOptService;
+import com.zy.asrs.service.BasRgvService;
+import com.zy.asrs.service.DeviceErrorService;
+import com.zy.asrs.utils.RouteUtils;
+import com.zy.asrs.utils.TrackRangeUtils;
+import com.zy.core.DevpThread;
 import com.zy.core.ThreadHandler;
-import com.zy.core.cache.MessageQueue;
-import com.zy.core.cache.OutputQueue;
+import com.zy.core.cache.*;
+import com.zy.core.enums.RgvModeType;
 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;
-import com.zy.core.model.command.CrnCommand;
 import com.zy.core.model.command.RgvCommand;
-import com.zy.core.model.protocol.RgvProtocol;
-import com.zy.core.model.protocol.StaProtocol;
+import com.zy.core.model.protocol.*;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
 
-import java.sql.Wrapper;
 import java.text.MessageFormat;
-import java.util.*;
+import java.util.Date;
+import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
@@ -41,12 +41,19 @@
  */
 @Data
 @Slf4j
-public class RgvThread implements Runnable, RgvThread2 {
+public class RgvThread implements Runnable, ThreadHandler {
 
     private SiemensS7Net siemensNet;
     private RgvSlave slave;
-    private RgvProtocol rgvProtocol;
-    private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
+    //    private RgvProtocol rgvProtocol;
+    private TaskProtocolCache taskProtocolCache = new TaskProtocolCache();
+    // # 杞ㄩ亾鎬婚暱
+    private Long trackEntireLength = 224000L;
+    //# 杞ㄩ亾鍩哄噯鐐�
+    private Long trackBenchmark = 1L;
+    //  # 閬胯璺濈
+    private Long avoidDistance = 5000L;
+    private String errorRgv = "-";
 
     /**
      * 宸ヤ綅1澶嶄綅淇″彿
@@ -57,20 +64,11 @@
      */
     private boolean resetFlag2 = false;
 
-    //閿佸畾鏍囪
-    private boolean PakMk = true;
-    //鍏ュ簱鏍囪
-//    private boolean PakIn = true;
-//    //鍑哄簱鏍囪
-//    private boolean PakOut = true;
-//    //鏍规嵁璺濈璺宠繃鍙栬揣
-//    private boolean PakRgv  = true;
-//    //鎺ラ┏鏍囪
-//    private boolean PakToCrn = true;
-    // 浠诲姟閿佸畾
-    private boolean Paking  = true;
-//    //杩炵画浠诲姟涓嬪彂
-//    private boolean PakAll = true;
+    private boolean connectRgv = false;
+    public Long currentTimeMilliConnectRgv= 0L;
+
+    private boolean delRgvTask = false;
+    private short wrkSign = 0;
 
     public RgvThread(RgvSlave slave) {
         this.slave = slave;
@@ -79,133 +77,900 @@
     @Override
     @SuppressWarnings("InfiniteLoopStatement")
     public void run() {
-        this.connect();
+        initRgv();
+
+        // 鍚姩绾跨▼鑷姩閲嶈繛
+        new Thread(this::rgvConnect).start();
+
+        // 鍚姩璇绘暟鎹嚎绋�
+        new Thread(this::readStatusRgv).start();
+
+        // 鍚姩浠诲姟涓嬪彂绾跨▼
+        new Thread(this::taskIssued).start();
+
+        // 鍚姩婕父绾跨▼
+        new Thread(this::taskWalkIssued).start();
+//        new Thread(this::taskWalkIssued2).start();
+
+        // 鍚姩浠诲姟瀹屾垚绾跨▼
+        new Thread(this::taskComplete).start();
+    }
+
+    private void rgvConnect() {
         while (true) {
             try {
-                int step = 1;
-                Task task = MessageQueue.poll(SlaveType.Rgv, slave.getId());
-                if (task != null) {
-                    step = task.getStep();
+                Thread.sleep(1000);
+                if(!connectRgv){
+                    try {
+                        connectRgv = this.connect();
+                        Thread.sleep(100);
+                    } catch (Exception e){
+
+                    }
                 }
-                switch (step) {
-                    // 璇绘暟鎹�
-                    case 1:
-                        readStatus();
-                        break;
-                    // 灏忚溅宸ヤ綅鍐欏叆鏁版嵁
-                    case 2:
-                        write((RgvCommand) task.getData());
-                        break;
-                    // 澶嶄綅
-                    case 3:
-                        RgvCommand command = (RgvCommand) task.getData();
-                        if (null == command) {
-                            command = new RgvCommand();
-                        }
-                        command.setRgvNo(slave.getId()); // RGV缂栧彿
-                        command.setTaskNo(0); // 宸ヤ綔鍙�
-                        command.setTaskStatus(RgvTaskStatusType.NONE); // 浠诲姟妯″紡
-                        command.setTargetPosition(0);     // 婧愮珯
-                        command.setWrkTaskPri(0);     // 鐩爣绔�
-                        command.setCommand(false);
-                        write2(command);
-                        break;
-                    default:
-                        break;
-                }
-                Thread.sleep(500);
             } catch (Exception e) {
+                log.error("rgv杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                try{
+                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "rgv杩炴帴澶辫触"+e.getMessage());
+                } catch (Exception e2){
+//                    log.error("e2:"+e2.getMessage());
+                }
+                initRgv();
+//                e.printStackTrace();
+            }
+        }
+    }
+
+    private void readStatusRgv() {
+        while (true) {
+            try {
+                if(!connectRgv){
+                    try {
+                        Thread.sleep(1000L);
+                    } catch (Exception e){
+
+                    }
+                    initRgv();
+                    continue;
+                }
+                Thread.sleep(20);
+//                System.out.println("璇荤嚎绋�,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis());
+
+                readStatus();
+
+            } catch (Exception e) {
+                log.error("RGV鏁版嵁璇诲彇绾跨▼寮傚父锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                try{
+                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV鏁版嵁璇诲彇绾跨▼寮傚父"+e.getMessage());
+                } catch (Exception e2){
+//                    log.error("e2:"+e2.getMessage());
+                }
+                initRgv();
 //                e.printStackTrace();
             }
 
         }
+
     }
-    private static final Set<Integer> specialSites = new HashSet<>(
-            Arrays.asList(1004,1014,1018,1028,1035,2006,2012,2018,2024,2030));
-    public static final Map<Integer, Integer> StaPosition = new HashMap<Integer, Integer>() {{
-        put(1004, 1001);put(1014, 1011);put(1018, 1015);put(1028, 1025);put(1035, 1032);
-        put(2006, 2004);put(2012, 2010);put(2018, 2016);put(2024, 2022);put(2030, 2028);
 
-    }};
-    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
-        add(1);add(2);
-
-    }};
-
-    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
-        add(3);add(4);
-
-    }};
     /**
-     * 鍒濆鍖栫珯鐐圭姸鎬�
+     * 瀹屾垚
      */
-    private void initSite() {
-        ArrayList<Integer> staNos = getStaNo();
+    private void taskComplete() {
+        while (true) {
+            try {
+                if(!connectRgv){
+                    try {
+                        Thread.sleep(1000L);
+                    } catch (Exception e){
 
-            // 绔欑偣缂栧彿
-            for (Integer siteId : staNos) {
-                StaProtocol staProtocol = station.get(siteId);
-                if (null == staProtocol) {
-                    staProtocol = new StaProtocol();
-                    staProtocol.setSiteId(siteId);
-                    station.put(siteId, staProtocol);
+                    }
+                    continue;
                 }
-                staProtocol.setWorkNo(0);    // ID
-                staProtocol.setAutoing(false);      // 鑷姩
-                staProtocol.setLoading(false);      // 鏈夌墿
-                staProtocol.setInEnable(false);     // 鍙叆
-                staProtocol.setOutEnable(false);    // 鍙嚭
-                staProtocol.setEmptyMk(false);      // 绌烘澘淇″彿
-                staProtocol.setStaNo((short) 0);     // 鐩爣绔�
+                if (delRgvTask){
+                    writeDelRgvTask();
+                    delRgvTask = false;
+                    continue;
+                }
+                Thread.sleep(50L);
 
+                OperateResultExOne<byte[]> result = siemensNet.Read("DB100.12", (short) 1);
+                boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 0, 1);
+                if (status[0]){
+                    Thread.sleep(500L);
+                    OperateResult result4 = siemensNet.Write("DB100.12.0", false);
+                }
+            } catch (Exception e) {
+                log.error("RGV鏁版嵁浠诲姟涓嬪彂澶嶄綅绾跨▼寮傚父锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                try{
+                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV鏁版嵁浠诲姟涓嬪彂澶嶄綅绾跨▼寮傚父"+e.getMessage());
+                } catch (Exception e2){
+//                    log.error("e2:"+e2.getMessage());
+                }
+                initRgv();
+//                e.printStackTrace();
             }
+
+        }
+
+    }
+
+    /**
+     * 婕父
+     */
+    private void taskWalkIssued() {
+        while (true) {
+            try {
+                if(!connectRgv){
+                    try {
+                        Thread.sleep(1000L);
+                    } catch (Exception e){
+
+                    }
+                    continue;
+                }
+                // 浼戠湢 1 绉�
+                Thread.sleep(100);
+
+                if (!deviceDetection()) {
+                    continue;
+                }
+                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+                if (rgvTaskProtocol == null) {
+                    initRgv();
+                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+                }
+                if (rgvTaskProtocol.getAvoid() != 1) {
+                    continue;
+                }
+                TaskProtocol issued = new TaskProtocol();
+                issued.setTaskNo(32222L);
+                issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination());
+                issued.setTaskStatus(1);
+                issued.setDirection(true);
+                write(issued);
+                rgvTaskProtocol.setAvoid(0);
+
+//                Thread.sleep(200);
+                RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+
+            } catch (Exception e) {
+                log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�" + e.getMessage());
+//                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 浠诲姟涓嬪彂
+     */
+    private void taskIssued() {
+        while (true) {
+            if(!connectRgv){
+                try {
+                    Thread.sleep(1000L);
+                } catch (Exception e){
+
+                }
+                continue;
+            }
+            RgvRunProtocol rgvRun = RgvRunCache.getRgvRun();
+            if (!rgvRun.getRgvNo().equals(slave.getId())){
+                continue;
+            }
+            try {
+                Thread.sleep(100);
+                rgvRun = RgvRunCache.getRgvRun();
+//                System.out.println(JSON.toJSON(rgvRun));
+
+                // 浼戠湢 1 绉�
+                if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 500L) {
+                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                } else {
+                    continue;
+                }
+                if (!deviceDetection()) {
+                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                    rgvRun.setRgvNo(slave.getOtherId());
+                    RgvRunCache.updateRgvStatus(rgvRun);
+                    if (!errorRgv.equals("鏃�")){
+                        RgvErrCache.updateRgvErr(slave.getId(),errorRgv);
+                    }
+                    continue;
+                }
+
+                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+                if (rgvProtocol == null || rgvTaskProtocol == null) {
+                    initRgv();
+                    rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+                }
+                if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)){
+                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                    rgvRun.setRgvNo(slave.getOtherId());
+                    RgvRunCache.updateRgvStatus(rgvRun);
+                    continue;
+                }
+                if (rgvProtocol.getLoaded() == -1){
+                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                    rgvRun.setRgvNo(slave.getOtherId());
+                    RgvRunCache.updateRgvStatus(rgvRun);
+                    RgvErrCache.updateRgvErr(slave.getId(),"灏忚溅鎺㈢墿鐗╃姸鎬佸紓甯�");
+                    continue;
+                }
+                if (rgvTaskProtocol.getAvoid() != 0) {
+                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                    rgvRun.setRgvNo(slave.getOtherId());
+                    RgvRunCache.updateRgvStatus(rgvRun);
+                    continue;
+                }
+
+                List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getTakeOrPutTaskProtocol(rgvProtocol.getLoaded());
+                if (allTakeTaskProtocol.isEmpty()){
+                    allTakeTaskProtocol = taskProtocolCache.getAllWalkTaskProtocol();
+                    for (TaskProtocol taskProtocol : allTakeTaskProtocol) {
+                        if (taskProtocol.getIsRunning() == 1) {//鍑嗗涓嬪彂
+                            // 鍙岃溅
+                            if (rgvOtherStatusEnable()) {
+                                //鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛�
+                                if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
+                                    RgvErrCache.updateRgvErr(slave.getId(),errorRgv);
+                                    break;
+                                }
+                            }
+                            if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50
+                                    && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){
+                                taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
+                                RgvErrCache.updateRgvErr(slave.getId());
+                                break;
+                            } else {
+                                TaskProtocol issued = new TaskProtocol(taskProtocol,true);
+                                write(issued);
+                                RgvErrCache.updateRgvErr(slave.getId());
+                                taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
+                                break;
+                            }
+                        }
+                    }
+                    RgvErrCache.updateRgvErr(slave.getId());
+                } else {
+                    for (TaskProtocol taskProtocol : allTakeTaskProtocol) {
+                        if (taskProtocol.getIsRunning() == 1) {//鍑嗗涓嬪彂
+                            //鍙岃溅
+                            if (rgvOtherStatusEnable()) {
+                                //鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛�
+                                if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
+                                    RgvErrCache.updateRgvErr(slave.getId(),errorRgv);
+                                    break;
+                                }
+                            }
+                            if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50
+                                    && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){
+                                if (taskProtocol.getTaskStatus()==3){
+                                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, taskProtocol.getTargetPositionStaNoPlcId());
+                                    StaProtocol staProtocol = devpThread.getStation().get(taskProtocol.getTargetPositionStaNo());
+                                    if (staProtocol == null ) {
+                                        RgvErrCache.updateRgvErr(slave.getId(),"鏈煡鍒板皬杞︿綔涓氱珯"+staProtocol.getStaNo()+"绔欑偣");
+                                        break;
+                                    }
+                                    // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                                    if (!staProtocol.isAutoing() || staProtocol.isLoading()
+                                    ){
+                                        RgvErrCache.updateRgvErr(slave.getId(),"灏忚溅绛夊緟"+staProtocol.getStaNo()+"绔欑偣灏辩华");
+                                        break;
+                                    }
+                                } else if (taskProtocol.getTaskStatus()==2){
+                                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, taskProtocol.getTargetPositionStaNoPlcId());
+                                    StaProtocol staProtocol = devpThread.getStation().get(taskProtocol.getTargetPositionStaNo());
+                                    if (staProtocol == null ) {
+                                        RgvErrCache.updateRgvErr(slave.getId(),"鏈煡鍒板皬杞︿綔涓氱珯"+staProtocol.getStaNo()+"绔欑偣");
+                                        break;
+                                    }
+                                    // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                                    if (!staProtocol.isAutoing() || !staProtocol.isLoading() || staProtocol.getWorkNo()==0
+                                    ){
+                                        RgvErrCache.updateRgvErr(slave.getId(),"灏忚溅绛夊緟"+staProtocol.getStaNo()+"绔欑偣灏辩华");
+                                        break;
+                                    }
+                                }
+                                TaskProtocol issued = new TaskProtocol(taskProtocol);
+                                write(issued);
+                                RgvErrCache.updateRgvErr(slave.getId());
+                                taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
+                                break;
+                            } else {
+                                TaskProtocol issued = new TaskProtocol(taskProtocol,true);
+                                write(issued);
+                                RgvErrCache.updateRgvErr(slave.getId());
+                                break;
+                            }
+                        }
+                    }
+                }
+                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                rgvRun.setRgvNo(slave.getOtherId());
+                RgvRunCache.updateRgvStatus(rgvRun);
+            } catch (Exception e) {
+                log.error("RGV浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                try{
+                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV浠诲姟涓嬪彂绾跨▼寮傚父"+e.getMessage());
+                } catch (Exception e2){
+//                    log.error("e2:"+e2.getMessage());
+                }
+                rgvRun = RgvRunCache.getRgvRun();
+                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
+                rgvRun.setRgvNo(slave.getOtherId());
+                RgvRunCache.updateRgvStatus(rgvRun);
+                continue;
+//                e.printStackTrace();
+            }
+        }
+    }
+    public boolean isSignRgvTaskProtocol() {
+        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+        if (rgvTaskProtocol == null) {
+            return false;
+        }
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
+
+        if (rgvProtocolOther == null) {
+            return false;
+        }
+        if (rgvProtocolOther.statusEnable) {
+            if (rgvTaskProtocolOther == null) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+
+    public boolean deviceDetection() {
+        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+
+        if (rgvProtocol == null || rgvTaskProtocol == null) {
+            errorRgv = slave.getId()+"鍙峰皬杞﹁繛鎺ュけ璐�";
+            return false;
+        }
+        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO)) {
+            errorRgv = slave.getId()+"鍙峰皬杞﹂潪鑷姩";
+            return false;
+        }
+        if (rgvProtocol.getRgvPos().equals(0L)
+                || rgvTaskProtocol.getAvoid() == -1
+                || rgvProtocol.getRgvPosDestination() == 0L) {
+            errorRgv = slave.getId()+"鍙峰皬杞︾姸鎬佸紓甯�";
+            return false;
+        }
+        if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM)) {
+            errorRgv = "鏃�";
+            return false;
+        }
+        if ( (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM)) {
+            errorRgv = slave.getId()+"鍙峰皬杞﹀瓨鍦ㄨ繍琛岀洰鏍囧�硷紝闇�瑕佸浣嶏紒锛侊紒";
+            return false;
+        }
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
+//        System.out.println("rgvTaskProtocol:"+slave.getId()+"sign:"+rgvTaskProtocol.isSignRun()+"/n"+
+//                "rgvTaskProtocolOther:"+slave.getOtherId()+"sign:"+rgvTaskProtocolOther.isSignRun()+"/n");
+
+        if (rgvProtocolOther == null) {
+            errorRgv = slave.getOtherId()+"鍙峰皬杞﹁繛鎺ュけ璐�";
+            return false;
+        }
+        if (rgvProtocolOther.statusEnable) {
+            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) {
+                errorRgv = slave.getOtherId()+"鍙峰皬杞︾姸鎬佸紓甯�";
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public boolean rgvOtherStatusEnable() {
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+        if (rgvProtocolOther == null) {
+            return true;
+        }
+        if (rgvProtocolOther.statusEnable) {
+//            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
+            return true;
+//            }
+        }
+        return false;
+    }
+
+    public boolean otherRgvAvoid(Long targetPosition) {
+        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+        long onePos = Math.abs(targetPosition - rgvProtocol.getRgvPos());
+        if (onePos<50){
+            return true;
+        }
+        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
+        Long[][] avoidRange = new TrackRangeUtils().avoidRange(slave, trackEntireLength, trackBenchmark, avoidDistance);
+
+        if (new TrackRangeUtils().IsItSmall(slave)) {
+            if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE) && (Math.abs(rgvProtocolOther.getRgvPos() - rgvProtocolOther.getRgvPosDestination())<50)) {
+                if ((rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing())
+                        - (targetPosition + rgvProtocol.getCarBodyKunPeng())
+                        > avoidDistance - 50) {//鏃犻渶閬胯
+                    return true;
+                } else {
+
+                    RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId());
+                    TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache();
+                    TaskProtocol nowPosRunTask = taskProtocolCacheOther.getNowPosRunTask(rgvProtocolOther.getRgvPos());
+                    if (!Cools.isEmpty(nowPosRunTask)){
+                        boolean signNowPosRun = true;
+                        if (nowPosRunTask.getTaskStatus()==3){
+                            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask.getTargetPositionStaNoPlcId());
+                            StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask.getTargetPositionStaNo());
+                            if (staProtocol == null ) {
+                                signNowPosRun =false;
+                            }
+                            if (signNowPosRun){
+                                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                                if (!staProtocol.isAutoing() || staProtocol.isLoading()
+                                ){
+                                    if (targetPosition.equals(nowPosRunTask.getTargetPosition())){
+                                        if (rgvProtocolOther.getRgvPosDestination() >= rgvProtocolOther.getRgvPos()-50) {
+                                            long avoid = rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing() - avoidDistance - rgvProtocol.getCarBodyKunPeng();
+                                            if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
+                                                log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                                                errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+                                                try{
+                                                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                                                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
+                                                } catch (Exception e2){
+//                                                    log.error("e2:"+e2.getMessage());
+                                                }
+                                                return false;
+                                            }
+                                            long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos());
+                                            if (avoidAbs<51){
+                                                return false;
+                                            }
+                                            rgvTaskProtocol.setAvoid(1);
+                                            rgvTaskProtocol.setAvoidingTheDestination(avoid);
+                                            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                                        }
+                                        return false;
+                                    }
+                                    signNowPosRun =false;
+                                }
+                            }
+                        }
+                        if (signNowPosRun){
+                            errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                            return false;
+                        }
+                    }
+                    TaskProtocol nowPosRunTask2 = taskProtocolCacheOther.getNowPosRunTask2();
+                    if (!Cools.isEmpty(nowPosRunTask2)){
+                        boolean signNowPosRun = true;
+                        boolean signNowPosA = true;
+                        if (targetPosition - rgvProtocol.getRgvPos()>0){
+                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()>0){
+                                if (rgvProtocol.getRgvPos()>rgvProtocolOther.getRgvPos()){
+                                    signNowPosA = false;
+                                    signNowPosRun = false;
+                                }
+                            }
+                        } else if (targetPosition - rgvProtocol.getRgvPos()<0){
+                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()<0){
+                                if (rgvProtocol.getRgvPos()<rgvProtocolOther.getRgvPos()){
+                                    signNowPosA = false;
+                                    signNowPosRun = false;
+                                }
+                            }
+                        }
+
+                        if (signNowPosA){
+                            if (nowPosRunTask2.getTaskStatus()==3){
+                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
+                                if (Math.abs(onePos - twoPos)>100){
+                                    if (onePos-50>twoPos+50){
+                                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask2.getTargetPositionStaNoPlcId());
+                                        StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask2.getTargetPositionStaNo());
+                                        if (staProtocol == null ) {
+                                            signNowPosRun =false;
+                                        }
+                                        if (signNowPosRun){
+                                            // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                                            if (staProtocol.isAutoing() && !staProtocol.isLoading()
+                                            ){
+                                                errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                                                return false;
+                                            }
+                                        }
+                                        signNowPosRun =false;
+                                    }
+                                }
+                            } else {
+                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
+                                if (twoPos<100){
+                                    errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                                    return false;
+                                }
+                                if (Math.abs(onePos - twoPos)>100){
+                                    if (onePos-50>twoPos+50){
+                                        signNowPosRun =false;
+                                    }
+                                }
+                            }
+                        }
+
+                        if (signNowPosRun){
+                            errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                            return false;
+                        }
+                    }
+                    long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing();
+                    if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
+                        log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                        errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
+                        try{
+                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                            deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
+                        } catch (Exception e2){
+//                            log.error("e2:"+e2.getMessage());
+                        }
+                        return false;
+                    }
+                    long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos());
+                    if (avoidAbs<51){
+                        return true;
+                    }
+                    rgvTaskProtocolOther.setAvoid(1);
+                    rgvTaskProtocolOther.setAvoidingTheDestination(avoid);
+                    RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
+                    return false;
+                }
+            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)) {
+                if ((rgvProtocolOther.getRgvPosDestination() - rgvProtocolOther.getCarBodyJiaoMing())
+                        - (targetPosition + rgvProtocol.getCarBodyKunPeng())
+                        > avoidDistance - 50) {//鏃犻渶閬胯
+                    return true;
+                } else {
+                    long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing();
+                    if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
+                        log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                        errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
+                        try{
+                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                            deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
+                        } catch (Exception e2){
+//                            log.error("e2:"+e2.getMessage());
+                        }
+                        return false;
+                    }
+                    long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos());
+                    if (avoidAbs<51){
+                        return true;
+                    }
+                    rgvTaskProtocolOther.setAvoid(1);
+                    rgvTaskProtocolOther.setAvoidingTheDestination(avoid);
+                    RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
+                    return false;
+                }
+            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)) {
+                if ((rgvProtocolOther.getRgvPosDestination() - rgvProtocolOther.getCarBodyJiaoMing())
+                        - (targetPosition + rgvProtocol.getCarBodyKunPeng())
+                        > avoidDistance - 50) {//鏃犻渶閬胯
+                    return true;
+                } else {
+                    if (rgvProtocolOther.getRgvPosDestination() >= rgvProtocolOther.getRgvPos()-50) {
+                        long avoid = rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing() - avoidDistance - rgvProtocol.getCarBodyKunPeng();
+                        if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
+                            log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                            errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
+                            try{
+                                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                                deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
+                            } catch (Exception e2){
+//                                log.error("e2:"+e2.getMessage());
+                            }
+                            return false;
+                        }
+                        long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos());
+                        if (avoidAbs<51){
+                            return false;
+                        }
+                        rgvTaskProtocol.setAvoid(1);
+                        rgvTaskProtocol.setAvoidingTheDestination(avoid);
+                        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                        return false;
+                    }
+                    errorRgv = slave.getOtherId()+"鍙稲GV褰卞搷锛岀瓑寰呬腑...";
+
+                    return false;
+                }
+            } else {
+                if ((rgvProtocolOther.getRgvPosDestinationOrPos(true) - rgvProtocolOther.getCarBodyJiaoMing())
+                        - (targetPosition + rgvProtocol.getCarBodyKunPeng())
+                        > avoidDistance - 50) {//鏃犻渶閬胯
+                    return true;
+                }
+            }
+        } else {
+            if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)  && (Math.abs(rgvProtocolOther.getRgvPos() - rgvProtocolOther.getRgvPosDestination())<50)) {
+                if ((targetPosition - rgvProtocol.getCarBodyJiaoMing())
+                        - (rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng())
+                        > avoidDistance - 50) {//鏃犻渶閬胯
+                    return true;
+                } else {
+                    RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId());
+                    TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache();
+                    TaskProtocol nowPosRunTask = taskProtocolCacheOther.getNowPosRunTask(rgvProtocolOther.getRgvPos());
+                    if (!Cools.isEmpty(nowPosRunTask)){
+                        boolean signNowPosRun = true;
+                        if (nowPosRunTask.getTaskStatus()==3){
+                            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask.getTargetPositionStaNoPlcId());
+                            StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask.getTargetPositionStaNo());
+                            if (staProtocol == null ) {
+                                signNowPosRun =false;
+                            }
+                            if (signNowPosRun){
+                                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                                if (!staProtocol.isAutoing() || staProtocol.isLoading()
+                                ){
+                                    if (targetPosition.equals(nowPosRunTask.getTargetPosition())){
+                                        if (rgvProtocolOther.getRgvPosDestination() <= rgvProtocolOther.getRgvPos() + 50) {
+                                            long avoid = rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng() + avoidDistance + rgvProtocol.getCarBodyJiaoMing();
+                                            if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
+                                                log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                                                errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
+                                                try{
+                                                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                                                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
+                                                } catch (Exception e2){
+//                                                    log.error("e2:"+e2.getMessage());
+                                                }
+                                                return false;
+                                            }
+                                            long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos());
+                                            if (avoidAbs<51){
+                                                return false;
+                                            }
+                                            rgvTaskProtocol.setAvoid(1);
+                                            rgvTaskProtocol.setAvoidingTheDestination(avoid);
+                                            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                                        }
+                                        return false;
+                                    }
+                                    signNowPosRun =false;
+                                }
+                            }
+                        }
+                        if (signNowPosRun){
+                            errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                            return false;
+                        }
+                    }
+
+                    TaskProtocol nowPosRunTask2 = taskProtocolCacheOther.getNowPosRunTask2();
+                    if (!Cools.isEmpty(nowPosRunTask2)){
+                        boolean signNowPosRun = true;
+                        boolean signNowPosA = true;
+                        if (targetPosition - rgvProtocol.getRgvPos()>0){
+                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()>0){
+                                if (rgvProtocol.getRgvPos()>rgvProtocolOther.getRgvPos()){
+                                    signNowPosA = false;
+                                    signNowPosRun = false;
+                                }
+                            }
+                        } else if (targetPosition - rgvProtocol.getRgvPos()<0){
+                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()<0){
+                                if (rgvProtocol.getRgvPos()<rgvProtocolOther.getRgvPos()){
+                                    signNowPosA = false;
+                                    signNowPosRun = false;
+                                }
+                            }
+                        }
+
+                        if (signNowPosA){
+                            if (nowPosRunTask2.getTaskStatus()==3){
+                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
+                                if (Math.abs(onePos - twoPos)>100){
+                                    if (onePos-50>twoPos+50){
+                                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask2.getTargetPositionStaNoPlcId());
+                                        StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask2.getTargetPositionStaNo());
+                                        if (staProtocol == null ) {
+                                            signNowPosRun =false;
+                                        }
+                                        if (signNowPosRun){
+                                            // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                                            if (staProtocol.isAutoing() && !staProtocol.isLoading()
+                                            ){
+                                                errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                                                return false;
+                                            }
+                                        }
+                                        signNowPosRun =false;
+                                    }
+                                }
+                            } else {
+                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
+                                if (twoPos<100){
+                                    errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                                    return false;
+                                }
+                                if (Math.abs(onePos - twoPos)>100){
+                                    if (onePos-50>twoPos+50){
+                                        signNowPosRun =false;
+                                    }
+                                }
+                            }
+                        }
+
+                        if (signNowPosRun){
+                            errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
+                            return false;
+                        }
+                    }
+                    long avoid = targetPosition - rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
+                    if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
+                        log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                        errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
+                        try{
+                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                            deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
+                        } catch (Exception e2){
+//                            log.error("e2:"+e2.getMessage());
+                        }
+                        return false;
+                    }
+                    long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos());
+                    if (avoidAbs<51){
+                        return true;
+                    }
+                    rgvTaskProtocolOther.setAvoid(1);
+                    rgvTaskProtocolOther.setAvoidingTheDestination(avoid);
+                    RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
+                    return false;
+                }
+            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)) {
+                if ((targetPosition - rgvProtocol.getCarBodyJiaoMing())
+                        - (rgvProtocolOther.getRgvPosDestination() + rgvProtocolOther.getCarBodyKunPeng())
+                        > avoidDistance - 50) {//鏃犻渶閬胯
+                    return true;
+                } else {
+                    long avoid = targetPosition - rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
+                    if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
+                        log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                        errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
+                        try{
+                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                            deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
+                        } catch (Exception e2){
+//                            log.error("e2:"+e2.getMessage());
+                        }
+                        return false;
+                    }
+                    long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos());
+                    if (avoidAbs<51){
+                        return true;
+                    }
+                    rgvTaskProtocolOther.setAvoid(1);
+                    rgvTaskProtocolOther.setAvoidingTheDestination(avoid);
+                    RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
+                    return false;
+                }
+
+            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)) {
+                if ((targetPosition - rgvProtocol.getCarBodyJiaoMing())
+                        - (rgvProtocolOther.getRgvPosDestination() + rgvProtocolOther.getCarBodyKunPeng())
+                        > avoidDistance-50) {//鏃犻渶閬胯
+                    return true;
+                } else {
+                    if (rgvProtocolOther.getRgvPosDestination() <= rgvProtocolOther.getRgvPos() + 50) {
+                        long avoid = rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng() + avoidDistance + rgvProtocol.getCarBodyJiaoMing();
+                        if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
+                            log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                            errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
+                            try{
+                                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                                deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
+                            } catch (Exception e2){
+//                                log.error("e2:"+e2.getMessage());
+                            }
+                            return false;
+                        }
+                        long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos());
+                        if (avoidAbs<51){
+                            return false;
+                        }
+                        rgvTaskProtocol.setAvoid(1);
+                        rgvTaskProtocol.setAvoidingTheDestination(avoid);
+                        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                        return false;
+                    }
+                    errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟涓�...";
+                    return false;
+                }
+            } else {
+                if ((rgvProtocolOther.getRgvPosDestinationOrPos(false) - rgvProtocolOther.getCarBodyJiaoMing())
+                        - (targetPosition + rgvProtocol.getCarBodyKunPeng())
+                        > avoidDistance - 50) {//鏃犻渶閬胯
+                    return true;
+                }
+            }
+        }
+
+        errorRgv = slave.getOtherId()+"鍙稲GV褰卞搷锛岀瓑寰呬腑...";
+        return false;
     }
 
     /**
      * 鍒濆鍖朢GV鐘舵��
      */
     private void initRgv() {
-        if (null == rgvProtocol) {
+        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+        if (rgvProtocol == null) {
             rgvProtocol = new RgvProtocol();
+            rgvProtocol.setRgvNo(slave.getId());
         }
-        //灏忚溅鐘舵��
-        rgvProtocol.setStatus((short)-1);
-        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);
-        rgvProtocol.setWrkTaskPri((short)0);
-        //宸ヤ綅1鐘舵��
-        rgvProtocol.setTaskNo1(0);
-        rgvProtocol.setStatus1((short)-1);
-        rgvProtocol.setLoaded1(false);
-        rgvProtocol.setWrkTaskMove1((short)0);
-        //宸ヤ綅2鐘舵��
-        rgvProtocol.setTaskNo2(0);
-        rgvProtocol.setStatus2((short)-1);
-        rgvProtocol.setLoaded2(false);
-        rgvProtocol.setWrkTaskMove2((short)0);
-//        rgvProtocol.setAlarm((short)0);
-//        rgvProtocol.setxSpeed((short) 0);
-//        rgvProtocol.setxDistance((short) 0);
-//        rgvProtocol.setxDuration((short) 0);
-    }
-    private ArrayList<Integer> getStaNo() {
-        switch (slave.getId()) {
-            case 1:
-                return staNos1;
-            case 2:
-                return staNos2;
-            default:
-                throw new CoolException("鏈嶅姟鍣ㄥ紓甯�");
+        rgvProtocol.setStatus((short) -1);
+        rgvProtocol.setWalkPos((short) 0);
+        rgvProtocol.setRgvPos(0L);
+        rgvProtocol.setAlarm((short) 0);
+        rgvProtocol.setxSpeed((short) 0);
+        rgvProtocol.setxDistance((short) 0);
+        rgvProtocol.setxDuration((short) 0);
+        rgvProtocol.setCarBodyJiaoMing(0L);
+        rgvProtocol.setCarBodyKunPeng(0L);
+        try {
+            BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
+            BasRgv rgv = basRgvService.selectById(slave.getId());
+            if (!Cools.isEmpty(rgv)) {
+                rgvProtocol.setStatusEnable(rgv.getStatus() == 1);
+            } else {
+                rgvProtocol.setStatusEnable(false);
+            }
+        } catch (Exception e) {
+            log.error("RGV寮傚父锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            try{
+                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV寮傚父"+e.getMessage());
+            } catch (Exception e2){
+//                log.error("e2:"+e2.getMessage());
+            }
+            rgvProtocol.setStatusEnable(true);
         }
+
+        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+        if (rgvTaskProtocol == null) {
+            rgvTaskProtocol = new RgvTaskProtocol();
+            rgvTaskProtocol.setRgvNo(slave.getId());
+        }
+        rgvTaskProtocol.setAvoid(0);
+        rgvTaskProtocol.setAvoidingTheDestination(0L);
+
+        RgvStatusCache.updateRgvStatus(rgvProtocol);
+
+        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+
     }
+
     @Override
     public boolean connect() {
         boolean result = false;
@@ -213,515 +978,307 @@
         siemensNet.setRack(slave.getRack().byteValue());
         siemensNet.setSlot(slave.getSlot().byteValue());
         OperateResult connect = siemensNet.ConnectServer();
-        if(connect.IsSuccess){
+        if (connect.IsSuccess) {
             result = true;
-            OutputQueue.RGV.offer(MessageFormat.format( "銆恵0}銆慠GV plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+//            OutputQueue.RGV.offer(MessageFormat.format( "銆恵0}銆慠GV plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
             log.info("RGV plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
         } else {
-            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慠GV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+//            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慠GV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
             log.error("RGV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
-            initRgv();
+
+            if (System.currentTimeMillis()-currentTimeMilliConnectRgv>1000*60*10){
+                try{
+                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGVplc杩炴帴澶辫触");
+                } catch (Exception e2){
+//                log.error("e2:"+e2.getMessage());
+                }
+                if (currentTimeMilliConnectRgv == 0){
+                    currentTimeMilliConnectRgv = System.currentTimeMillis()-1000*60*10-1;
+                } else {
+                    currentTimeMilliConnectRgv = System.currentTimeMillis();
+                }
+            }
         }
+        initRgv();
 //        siemensNet.ConnectClose();
         return result;
-    }
-
-    private void setBool(byte[] buffer, int byteIndex, int bitIndex, boolean value) {
-        if (value) {
-            buffer[byteIndex] |= (1 << bitIndex); // 缃綅
-        } else {
-            buffer[byteIndex] &= ~(1 << bitIndex); // 娓呴浂
-        }
-    }
-    private void updateFlagInDb(String field, boolean value) {
-        try {
-            BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
-
-            EntityWrapper<BasRgv> wrapper = new EntityWrapper<>();
-            wrapper.eq("rgv_no", slave.getId());
-
-            BasRgv entity = new BasRgv();
-            switch (field) {
-                case "pak_mk":    entity.setPakMk(value ? "1" : "0"); break;
-                case "pak_in":    entity.setPakIn(value ? "1" : "0"); break;
-                case "pak_out":   entity.setPakOut(value ? "1" : "0"); break;
-                case "pak_rgv":   entity.setPakRgv(value ? "1" : "0"); break;
-                case "pak_to_crn":entity.setPakToCrn(value ? "1" : "0"); break;
-                case "paking":entity.setPaking(value ? "1" : "0"); break;
-                case "pak_all":entity.setPakAll(value ? "1" : "0"); break;
-                default:
-                    log.warn("鏈煡鏍囧織浣嶅瓧娈�: {}", field);
-                    return;
-            }
-
-            basRgvService.update(entity, wrapper);
-//            log.info("RGV鏍囧織浣嶆洿鏂版垚鍔� [rgv_no:{}] {}={}", slave.getId(), field, value ? "1" : "0");
-
-        } catch (Exception e) {
-            log.error("鏇存柊RGV鏍囧織浣嶅紓甯� [rgv_no:{}] {}={} 閿欒锛歿}", slave.getId(), field, value, e.getMessage());
-        }
-    }
-
-
-    public void setPakMk(boolean pakMk) {
-        this.PakMk = pakMk;
-        updateFlagInDb("pak_mk", pakMk);
     }
 
     /**
      * 璇诲彇鐘舵��
      */
-    private void readStatus(){
+    private void readStatus() {
         try {
-
-            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 41);
+            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 20);
             if (result.IsSuccess) {
-                if (null == rgvProtocol) {
+                // 鏋勫缓璁惧鐘舵�佸璞�
+                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+                if (rgvProtocol == null) {
                     rgvProtocol = new RgvProtocol();
-                    rgvProtocol.setRgvNo(siemensNet.getByteTransform().TransInt16(result.Content, 0));
                 }
-                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.setTaskNo1(siemensNet.getByteTransform().TransInt32(result.Content, 16));
-                rgvProtocol.setTaskNo2(siemensNet.getByteTransform().TransInt32(result.Content, 20));
-                rgvProtocol.setStaNo1(siemensNet.getByteTransform().TransInt32(result.Content, 28));
-                rgvProtocol.setStaNo2(siemensNet.getByteTransform().TransInt32(result.Content, 32));
-                boolean[] status1 = siemensNet.getByteTransform().TransBool(result.Content, 24, 1);
-                rgvProtocol.setLoaded1(status1[0]);
-                rgvProtocol.setLoaded2(status1[1]);
-                boolean[] status2 = siemensNet.getByteTransform().TransBool(result.Content, 36,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]);
-                rgvProtocol.setErr8(status2[7]);
-                boolean[] status3 = siemensNet.getByteTransform().TransBool(result.Content, 37, 1);
-                rgvProtocol.setErr9(status3[0]);
-                rgvProtocol.setErr10(status3[1]);
-                rgvProtocol.setErr11(status3[2]);
-                rgvProtocol.setErr12(status3[3]);
-                boolean[] statusErr = siemensNet.getByteTransform().TransBool(result.Content, 36, 5);
-                rgvProtocol.setEmergencyStop(statusErr[0]);       // 鎬ュ仠瑙﹀彂
-                rgvProtocol.setSlot1EmptyNoData(statusErr[1]);   // 1鍙蜂綅鏈夌墿鏃犺祫鏂�
-                rgvProtocol.setSlot2EmptyNoData(statusErr[2]);   // 2鍙蜂綅鏈夌墿鏃犺祫鏂�
-                rgvProtocol.setCommandErrorChainConflict(statusErr[3]); // 鍛戒护閿欒璧伴摼鏉″啿绐�
-                rgvProtocol.setTargetPositionIssue(statusErr[4]); // 鐩爣浣嶄笅鍙戦敊璇�
-                rgvProtocol.setTravelInverterError(statusErr[5]); // 璧拌鍙橀鍣ㄥ紓甯�
-                rgvProtocol.setPhotoelectric1Error(statusErr[6]); // 1鍙峰厜鐢靛紓甯�
-                rgvProtocol.setPhotoelectric2Error(statusErr[7]); // 2鍙峰厜鐢靛紓甯�
-                rgvProtocol.setTimeoutConnectionWithLine(statusErr[8]); // 涓庤緭绾挎椂鎺ヨ秴鏃�
-                rgvProtocol.setLeftRollerTimeout(statusErr[9]);    // 宸︿晶婊氱瓛杩愯瓒呮椂
-                rgvProtocol.setRightRollerTimeout(statusErr[10]);   // 鍙充晶婊氱瓛杩愯瓒呮椂
-                rgvProtocol.setRgvRunTimeout(statusErr[11]);        // rgv杩愯瓒呮椂
-                rgvProtocol.setPosition1ChainInverterError(statusErr[12]); // 1鍙峰伐浣嶉摼鏉″彉棰戝櫒寮傚父
-                rgvProtocol.setPosition2ChainInverterError(statusErr[13]); // 2鍙峰伐浣嶉摼鏉″彉棰戝櫒寮傚父
-                rgvProtocol.setFrontRearLimit(statusErr[14]);      // 鍓嶅悗鏋侀檺浣�
-                rgvProtocol.setEmergencyButton(statusErr[15]);     // 鎬ュ仠鎸夐挳
-                rgvProtocol.setForwardButton(statusErr[16]);       // 鍓嶈繘鎸夐挳
-                rgvProtocol.setReverseButton(statusErr[17]);       // 鍚庨��鎸夐挳
-                rgvProtocol.setLocalRemote(statusErr[18]);         // 鏈湴/杩滅▼
-                rgvProtocol.setReset(statusErr[19]);               // 澶嶄綅
-                rgvProtocol.setTravelBrakeSwitch(statusErr[20]);   // 璧拌鎶遍椄寮�鍏抽挳
-                rgvProtocol.setTravelSpeedLimitPhotoelectric(statusErr[21]); // 璧拌寮哄埗鍑忛�熷厜鐢�
-                rgvProtocol.setLeftOverlimit1(statusErr[22]);      // 宸﹁秴闄� 1
-                rgvProtocol.setRightOverlimit1(statusErr[23]);     // 鍙宠秴闄� 1
-                rgvProtocol.setLeftAtPosition1(statusErr[24]);     // 宸﹀埌浣� 1
-                rgvProtocol.setRightAtPosition1(statusErr[25]);    // 鍙冲埌浣� 1
-                rgvProtocol.setChainForward1(statusErr[26]);       // 閾炬潯鍓嶈繘 1
-                rgvProtocol.setChainReverse1(statusErr[27]);       // 閾炬潯鍚庨�� 1
-                rgvProtocol.setInverterAlarm(statusErr[28]);       // 鍙橀鍣ㄦ姤璀�
-                rgvProtocol.setLeftOverlimit2(statusErr[29]);      // 宸﹁秴闄� 2
-                rgvProtocol.setRightOverlimit2(statusErr[30]);     // 鍙宠秴闄� 2
-                rgvProtocol.setLeftAtPosition2(statusErr[31]);     // 宸﹀埌浣� 2
-                rgvProtocol.setRightAtPosition2(statusErr[32]);    // 鍙冲埌浣� 2
-                rgvProtocol.setCargoSpeedReduction(statusErr[33]); // 璐х墿鍑忛��
-                rgvProtocol.setConveyorInverterAlarm2(statusErr[34]); // 杈撻�佸彉棰戝櫒鎶ヨ 2
-                rgvProtocol.setRightConveyor2(statusErr[35]);      // 鍙宠緭閫� 2
-                rgvProtocol.setLeftConveyor2(statusErr[36]);       // 宸﹁緭閫� 2
-                if(rgvProtocol.getStatus1() == 99){
-                    rgvProtocol.setErrorMk(true);//鑻ュ瓨鍦ㄥ紓甯歌Е鍙戝啓鍏�
-                }else{
-                    rgvProtocol.setWriteMk(true);//鏃犲紓甯稿悗鎵嶈兘缁х画鍐欏叆
-                    rgvProtocol.setErrorMk(false);
+                rgvProtocol.setRgvNo(slave.getId());
+                rgvProtocol.setCarBodyJiaoMing(slave.getCarBodyJiaoMing());
+                rgvProtocol.setCarBodyKunPeng(slave.getCarBodyKunPeng());
+
+                rgvProtocol.setRgvPos((long)siemensNet.getByteTransform().TransInt32(result.Content, 0));
+                rgvProtocol.setRgvPosDestination((long)siemensNet.getByteTransform().TransInt32(result.Content, 4));
+                if (rgvProtocol.getRgvPosDestination()==0L){
+                    rgvProtocol.setRgvPosDestination(rgvProtocol.getRgvPos());
                 }
 
+                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 8));
+//                rgvProtocol.setStatus((short)1);
 
+                //浣滀笟鍚姩涓�  瑙e喅浠诲姟涓嬪彂鍚庡皬杞︾姸鎬佹湭鏇存柊锛屽皬杞︾姸鎬佷笉鍙婃椂
+                if (this.wrkSign == 1 && rgvProtocol.getStatus()!=(short)1){
+                    this.wrkSign = 0;
+                }
+                if (this.wrkSign == 1){
+                    rgvProtocol.setStatus((short)110);
+                }
 
-//                BasRgvMapService basRgvMapService = SpringUtils.getBean(BasRgvMapService.class);
+                rgvProtocol.setTaskNo((long)siemensNet.getByteTransform().TransInt32(result.Content, 10));
+
+                rgvProtocol.setRgvNo((int)siemensNet.getByteTransform().TransInt16(result.Content, 14));
+                rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 16));
+//                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20));
+//                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28));
+//                rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40));
+//                rgvProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48));
+
+//                OperateResultExOne<byte[]> result11 = siemensNet.Read("DB100.12", (short) 1);
+                boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 18, 2);
+                rgvProtocol.setLoaded(status[0]? (short)1:(short)0);
+                rgvProtocol.setErr1(status[8]);
+                rgvProtocol.setErr2(status[9]);
+                rgvProtocol.setErr3(status[10]);
+                rgvProtocol.setErr4(status[11]);
+                rgvProtocol.setErr5(status[12]);
+                rgvProtocol.setErr6(status[13]);
+                rgvProtocol.setErr7(status[14]);
+                rgvProtocol.setErr8(status[15]);
+//                System.out.println("璇荤嚎绋�"+ slave.getId()+"---"+JSON.toJSONString(rgvProtocol));
+//                System.out.println("璇荤嚎绋�,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis()+"灏忚溅鏁版嵁锛�"+JSON.toJSONString(rgvProtocol));
                 OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId()));
+//                // 宸ヤ綅1澶嶄綅淇″彿
+//                if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING)
+//                        || rgvProtocol.getStatusType().equals(RgvStatusType.FETCHWAITING)) {
+//                    if (resetFlag1) {
+//                        RgvCommand rgvCommand = new RgvCommand();
+//                        rgvCommand.setAckFinish1((short)1);
+//                        if (write(rgvCommand)) {
+//                            resetFlag1 = false;
+//                        }
+//                    }
+//                }
+                if (rgvProtocol.getAlarm$()!=0){
+                    RgvErrCache.updateRgvErr(slave.getId(),rgvProtocol.getAlarmM());
+                }
+
                 try {
                     // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
                     BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
-                    BasRgv basRgv = new BasRgv();
+                    BasRgv basRgv = basRgvService.selectById(slave.getId());
+                    if (!Cools.isEmpty(basRgv)) {
+                        rgvProtocol.setStatusEnable(basRgv.getStatus() == 1);
+                    } else {
+                        rgvProtocol.setStatusEnable(false);
+                    }
+//                    BasRgv basRgv = new BasRgv();
                     basRgv.setRgvNo(slave.getId());
-                    basRgv.setRgvSts((int)rgvProtocol.getMode());
-                    if(rgvProtocol.isWriteMk() && rgvProtocol.isErrorMk()){
-                        try {
-                            // 鏃ュ織璁板綍寮傚父鎯呭喌
-                            BasRgvErrorLog basRgvErrorLogs;
-                            basRgvErrorLogs = rgvProtocol.toSqlModelError();
-                            BasRgvErrorLogService basRgvErrorLogService = SpringUtils.getBean(BasRgvErrorLogService.class);
-                            basRgvErrorLogService.insert(basRgvErrorLogs);
-                            rgvProtocol.setWriteMk(false);
-                        } catch (Exception ignore) {
-                            log.error(ignore.getMessage());
+                    basRgv.setRgvSts((int) rgvProtocol.getMode());
+                    if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))) {
+                        log.error("RGV plc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+
+                        try{
+                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                            deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV plc鏁版嵁搴撴洿鏂板け璐�");
+                        } catch (Exception e2){
+//                            log.error("e2:"+e2.getMessage());
                         }
                     }
-                    if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))){
-                        log.error("RGV plc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
-                    }
-                } catch (Exception ignore){
-                    System.out.println(ignore);
+                } catch (Exception ignore) {
+
                 }
+
+
+                // 鏇存柊缂撳瓨
+                RgvStatusCache.updateRgvStatus(rgvProtocol);
 
             } else {
                 initRgv();
-                OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戣鍙朢GV plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
-//                log.error("璇诲彇RGV plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+                connectRgv = false;
+//                OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戣鍙朢GV plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+                log.error("璇诲彇RGV plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+
+                try{
+                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "璇诲彇RGV plc鐘舵�佷俊鎭け璐�");
+                } catch (Exception e2){
+//                    log.error("e2:"+e2.getMessage());
+                }
             }
         } catch (Exception e) {
-            e.printStackTrace();
-            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());
+//            e.printStackTrace();
+//            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());
+
+            try{
+                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                deviceErrorService.addDeviceError("rgvErr", slave.getId(), "璇诲彇RGV plc鐘舵�佷俊鎭け璐�");
+            } catch (Exception e2){
+//                log.error("e2:"+e2.getMessage());
+            }
             initRgv();
         }
     }
+
     /**
-     * 灏忚溅宸ヤ綅鍐欏叆鍐欏叆鏁版嵁
+     * 鍐欏叆鏁版嵁
      */
-    private boolean write(RgvCommand command) throws InterruptedException {
-        if (null == command) {
-            log.error("RGV鍐欏叆鍛戒护涓虹┖");
-            return false;
-        }
-        OperateResultExOne<byte[]> result1 = siemensNet.Read("DB100.0", (short) 39);
-        if (result1.IsSuccess){
-            RgvCommand one = new RgvCommand();
-            one.setWrkTaskPri(siemensNet.getByteTransform().TransInt32(result1.Content, 0));//鎵ц宸ヤ綅
-            one.setTargetPosition(siemensNet.getByteTransform().TransInt32(result1.Content, 4));//琛岃蛋鐩爣绔�
-            one.setTaskStatus(siemensNet.getByteTransform().TransInt16(result1.Content, 8));//灏忚溅鐘舵��
-            one.setTaskNo(siemensNet.getByteTransform().TransInt32(result1.Content, 10));//涓嬪彂宸ヤ綔鍙�
-            News.info("RGV鍛戒护涓嬪彂鍓嶈鍙栫姸鎬乕id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
-        }
-        byte[] writeBytes = new byte[14];
-        command.setRgvNo(slave.getId());
-        if(specialSites.contains(command.getTargetPosition())){
-            command.setTargetPosition(StaPosition.get(command.getTargetPosition()));
-        }
-        writeInt32(writeBytes, 0, command.getWrkTaskPri());
-        writeInt32(writeBytes, 4, command.getTargetPosition());
-        writeInt16(writeBytes, 8, (short)command.getTaskStatus());
-        writeInt32(writeBytes, 10, command.getTaskNo());
-        OperateResult result = siemensNet.Write("DB100.0", writeBytes);
+    private boolean write(TaskProtocol taskProtocol) throws InterruptedException {
+        if (null == taskProtocol) {
+            log.error("RGV鍐欏叆鍛戒护涓虹┖ ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
 
-        if (!result.IsSuccess){
-            News.error("鍐欏叆RGVplc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===> [id:{}],{}",slave.getId(),JSON.toJSON(command));
-            MessageQueue.offer(SlaveType.Rgv,slave.getId(),new Task(2,command));
-            Thread.sleep(100);
-            readStatus();
-            return false;
-        }
-
-        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
-        Thread.sleep(400);
-        try {
-            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 14);
-            if (resultRead.IsSuccess){
-                RgvCommand one = new RgvCommand();
-                one.setWrkTaskPri(siemensNet.getByteTransform().TransInt32(resultRead.Content, 0));//鎵ц宸ヤ綅
-                one.setTargetPosition(siemensNet.getByteTransform().TransInt32(resultRead.Content, 4));//琛岃蛋鐩爣绔�
-                one.setTaskStatus(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));//灏忚溅鐘舵��
-                one.setTaskNo(siemensNet.getByteTransform().TransInt32(resultRead.Content, 10));//涓嬪彂宸ヤ綔鍙�
-                if (
-                        !command.getTaskNo().equals(one.getTaskNo()) ||
-                        !command.getTaskStatus().equals(one.getTaskStatus()) ||
-                        !command.getWrkTaskPri().equals(one.getWrkTaskPri()) ||
-                        !command.getTargetPosition().equals(one.getTargetPosition())
-                ) {
-                    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(2, command));
-                    Thread.sleep(100);
-                    readStatus();
-                    return false;
-                }else {
-                    News.info("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
-                }
+            try{
+                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV鍐欏叆鍛戒护涓虹┖");
+            } catch (Exception e2){
+//                log.error("e2:"+e2.getMessage());
             }
-        }catch (Exception e){
-            News.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲嚭閿�");
+            return false;
         }
+//        convertRow(command);
+//        taskProtocol.setRgvNo(slave.getId());
+//        Long[] array = new Long[11];
+        OperateResult result41 = siemensNet.Write("DB100.12.0", false);
+//        array[0] = taskProtocol.getAckFinish1();
+//        array[1] = taskProtocol.getTaskNo();
+//        array[2] = taskProtocol.getTaskMode();
+//        array[4] = command.getDestinationStaNo();
+//        array[10] = taskProtocol.getCommand();
+        int taskStatus = taskProtocol.getTaskStatus();
 
-        if (result.IsSuccess) {  //浠诲姟涓嬪彂纭
-            Thread.sleep(300);
-            //浠诲姟涓嬪彂娆℃暟
-            int writeCount2 = 0;
-            do {
-                writeCount2++;
-                Short commandFinish = 1;
-                result = siemensNet.Write("DB100.34.0", commandFinish);
-                if(result.IsSuccess){
-                    //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
-                    Thread.sleep(200);
-                    OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.34", (short) 2);
-                    if (resultRead.IsSuccess) {
-                        commandFinish=siemensNet.getByteTransform().TransInt16(resultRead.Content, 0);
-                        if (commandFinish !=1){
-                            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);
-        }
+        OperateResult result = siemensNet.Write("DB100.0", taskProtocol.getTargetPosition().intValue());
+        OperateResult result1 = siemensNet.Write("DB100.4", (short) taskStatus);
+        OperateResult result2 = siemensNet.Write("DB100.6", taskProtocol.getTaskNo().intValue());
+        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級    true:宸�   false:鍙�
+        Thread.sleep(20L);
+
+        OperateResult result4 = siemensNet.Write("DB100.12.0", true);
+        this.wrkSign = 1;
+
+//        log.info("浠诲姟涓嬪彂绾跨▼,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis());
+
+//        if (taskProtocol.getAckFinish1() == 0) {
+//            short commandFinish = 3;  //宸ヤ綅1銆�2浠诲姟鍚屾椂鍐欏叆
+//            Thread.sleep(100L);
+//            result = siemensNet.Write("DB100.20", commandFinish);
+//        }
+
         try {
             // 鏃ュ織璁板綍
             BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
             BasRgvOpt basRgvOpt = new BasRgvOpt(
-                    command.getTaskNo(),
-                    command.getRgvNo(),
+                    taskProtocol.getTaskNo().intValue(),
+                    taskProtocol.getTaskNo().intValue(),
+                    slave.getId(),
                     new Date(),
-                    command.getTaskStatus().toString(),
-                    command.getTargetPosition(),
-                    command.getWrkTaskPri(),
-                    new Date()
+                    String.valueOf(taskProtocol.getTaskStatus()),
+                    null,
+                    null,
+                    null,
+                    result.IsSuccess ? 1 : 0,
+                    null,
+                    new Date(),
+                    null
             );
             bean.insert(basRgvOpt);
         } catch (Exception ignore) {
-            log.error(ignore.getMessage());
         }
 
+        readStatus();
         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)));
+//            Thread.sleep(50);
+//            this.readStatus();
+            log.info("RGV 鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(taskProtocol));
+            log.error("RGV 鍛戒护涓嬪彂 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+
+            try{
+                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                deviceErrorService.addDeviceError("rgvWrite", slave.getId(), "RGV 鍛戒护涓嬪彂"+JSON.toJSON(taskProtocol));
+            } catch (Exception e2){
+//                log.error("e2:"+e2.getMessage());
+            }
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(taskProtocol)));
             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());
+            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;
         }
     }
-    private boolean write2(RgvCommand command) throws InterruptedException {
-        if (null == command) {
-            log.error("RGV鍐欏叆鍛戒护涓虹┖");
-            return false;
-        }
-        OperateResultExOne<byte[]> result1 = siemensNet.Read("DB100.0", (short) 39);
-        if (result1.IsSuccess){
-            RgvCommand one = new RgvCommand();
-            one.setWrkTaskPri(siemensNet.getByteTransform().TransInt32(result1.Content, 0));//鎵ц宸ヤ綅
-            one.setTargetPosition(siemensNet.getByteTransform().TransInt32(result1.Content, 4));//琛岃蛋鐩爣绔�
-            one.setTaskStatus(siemensNet.getByteTransform().TransInt16(result1.Content, 8));//灏忚溅鐘舵��
-            one.setTaskNo(siemensNet.getByteTransform().TransInt32(result1.Content, 10));//涓嬪彂宸ヤ綔鍙�
-            News.info("RGV鍛戒护涓嬪彂鍓嶈鍙栫姸鎬乕id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
-        }
-        byte[] writeBytes = new byte[36];
-        command.setRgvNo(slave.getId());
-        if(specialSites.contains(command.getTargetPosition())){
-            command.setTargetPosition(StaPosition.get(command.getTargetPosition()));
-        }
-        writeInt32(writeBytes, 0, command.getWrkTaskPri());
-        writeInt32(writeBytes, 4, command.getTargetPosition());
-        writeInt16(writeBytes, 8, (short)command.getTaskStatus());
-        writeInt32(writeBytes, 10, command.getTaskNo());
-        writeBool(writeBytes, 34, 0, command.getCommand());
-        OperateResult result = siemensNet.Write("DB100.0", writeBytes);
 
-        if (!result.IsSuccess){
-            News.error("鍐欏叆RGVplc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===> [id:{}],{}",slave.getId(),JSON.toJSON(command));
-            MessageQueue.offer(SlaveType.Rgv,slave.getId(),new Task(2,command));
-            Thread.sleep(100);
-            readStatus();
-            return false;
-        }
+    private boolean writeDelRgvTask() throws InterruptedException {
+//
+        OperateResult result = siemensNet.Write("DB100.12.0", false);
+        OperateResult result0 = siemensNet.Write("DB100.0", (int) 0);
+        OperateResult result1 = siemensNet.Write("DB100.4", (short) 0);
+        OperateResult result2 = siemensNet.Write("DB100.6", (int) 0);
+        OperateResult result3 = siemensNet.Write("DB100.10", (short) 0); // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級    true:宸�   false:鍙�
+        log.info("浠诲姟瀹屾垚涓嬪彂绾跨▼,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis());
 
-        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
-        Thread.sleep(400);
-        try {
-            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 14);
-            if (resultRead.IsSuccess){
-                RgvCommand one = new RgvCommand();
-                one.setWrkTaskPri(siemensNet.getByteTransform().TransInt32(resultRead.Content, 0));//鎵ц宸ヤ綅
-                one.setTargetPosition(siemensNet.getByteTransform().TransInt32(resultRead.Content, 4));//琛岃蛋鐩爣绔�
-                one.setTaskStatus(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));//灏忚溅鐘舵��
-                one.setTaskNo(siemensNet.getByteTransform().TransInt32(resultRead.Content, 10));//涓嬪彂宸ヤ綔鍙�
-                if (
-                        !command.getTaskNo().equals(one.getTaskNo()) ||
-                                !command.getTaskStatus().equals(one.getTaskStatus()) ||
-                                !command.getWrkTaskPri().equals(one.getWrkTaskPri()) ||
-                                !command.getTargetPosition().equals(one.getTargetPosition())
-                ) {
-                    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(2, 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 (result.IsSuccess) {  //浠诲姟涓嬪彂纭
-            Thread.sleep(300);
-            //浠诲姟涓嬪彂娆℃暟
-            int writeCount2 = 0;
-            do {
-                writeCount2++;
-                Short commandFinish = 1;
-                result = siemensNet.Write("DB100.34.0", commandFinish);
-                if(result.IsSuccess){
-                    //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
-                    Thread.sleep(200);
-                    OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.34", (short) 2);
-                    if (resultRead.IsSuccess) {
-                        commandFinish=siemensNet.getByteTransform().TransInt16(resultRead.Content, 0);
-                        if (commandFinish !=1){
-                            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.getTaskNo(),
-                    command.getRgvNo(),
+                    0,
+                    0,
+                    slave.getId(),
                     new Date(),
-                    command.getTaskStatus().toString(),
-                    command.getTargetPosition(),
-                    command.getWrkTaskPri(),
-                    new Date()
+                    String.valueOf(0),
+                    null,
+                    null,
+                    null,
+                    result.IsSuccess ? 1 : 0,
+                    null,
+                    new Date(),
+                    null
             );
             bean.insert(basRgvOpt);
         } catch (Exception ignore) {
-            log.error(ignore.getMessage());
         }
 
         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)));
+//            Thread.sleep(200);
+//            this.readStatus();
+            log.info("RGV 鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON("null"));
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON("null")));
             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());
+            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;
         }
     }
-    public static void writeInt32(byte[] buffer, int index, int value) {
-        buffer[index]     = (byte)((value >> 24) & 0xFF);
-        buffer[index + 1] = (byte)((value >> 16) & 0xFF);
-        buffer[index + 2] = (byte)((value >> 8) & 0xFF);
-        buffer[index + 3] = (byte)(value & 0xFF);
+
+
+    /**
+     * 娓呴櫎浣滀笟鍚姩涓�
+     */
+    @Override
+    public void setWrkSign() {
+        this.wrkSign = 0;
     }
 
-
-    public static void writeInt16(byte[] buffer, int index, short value) {
-        buffer[index]     = (byte)((value >> 8) & 0xFF); // 楂樺瓧鑺�
-        buffer[index + 1] = (byte)(value & 0xFF);        // 浣庡瓧鑺�
-    }
-
-    public static void writeBool(byte[] buffer, int byteIndex, int bitIndex, boolean value) {
-        if (value) {
-            buffer[byteIndex] |= (1 << bitIndex);
-        } else {
-            buffer[byteIndex] &= ~(1 << bitIndex);
-        }
-    }
-
-    public Integer getRgvPosI(Integer pos) {
-        if (pos == null) return 0;
-
-        // key: 绔欑偣鍙�  value: 鍩哄噯鐗╃悊浣嶇疆
-        Map<Integer, Integer> posMap = new HashMap<>();
-        posMap.put(1004, 6534);
-        posMap.put(1007, 33634);
-        posMap.put(1010, 75174);
-        posMap.put(1014, 102124);
-        posMap.put(1018, 138224);
-        posMap.put(1021, 178034);
-        posMap.put(1024, 219684);
-        posMap.put(1028, 246724);
-        posMap.put(1031, 288194);
-        posMap.put(1035, 315204);
-        int tolerance = 50; // 鍏佽璇樊鑼冨洿
-
-        for (Map.Entry<Integer, Integer> entry : posMap.entrySet()) {
-            int site = entry.getKey();
-            int basePos = entry.getValue();
-            if (Math.abs(pos - basePos) <= tolerance) {
-                return site;
-            }
-        }
-
-        return 0; // 娌″尮閰嶅埌绔欑偣
+    public void setDelRgvTask() {
+        delRgvTask = true;
     }
 
     @Override
     public void close() {
         siemensNet.ConnectClose();
-    }
-
-    /******************************************************************************************/
-    /**************************************** 娴嬭瘯涓撶敤 *****************************************/
-    /*****************************************************************************************/
-    public static void main(String[] args) throws InterruptedException {
-        RgvSlave slave = new RgvSlave();
-        slave.setId(1);
-        slave.setIp("192.168.6.9");
-        slave.setRack(0);
-        slave.setSlot(0);
-        RgvThread rgvThread = new RgvThread(slave);
-        rgvThread.connect();
-        rgvThread.readStatus();
-        System.out.println(JSON.toJSONString(rgvThread.rgvProtocol));
-        Thread.sleep(3000L);
-
     }
 
 }
diff --git a/src/main/java/com/zy/core/thread/RoboticArmThread.java b/src/main/java/com/zy/core/thread/RoboticArmThread.java
index 654ba98..9961324 100644
--- a/src/main/java/com/zy/core/thread/RoboticArmThread.java
+++ b/src/main/java/com/zy/core/thread/RoboticArmThread.java
@@ -154,4 +154,11 @@
 
     }
 
+    /**
+     * 娓呴櫎浣滀笟鍚姩涓�
+     */
+    @Override
+    public void setWrkSign() {
+    }
+
 }
diff --git a/src/main/java/com/zy/core/thread/ScaleThread.java b/src/main/java/com/zy/core/thread/ScaleThread.java
index ad595c8..ec2320a 100644
--- a/src/main/java/com/zy/core/thread/ScaleThread.java
+++ b/src/main/java/com/zy/core/thread/ScaleThread.java
@@ -134,4 +134,12 @@
         return true;
     }
 
+
+    /**
+     * 娓呴櫎浣滀笟鍚姩涓�
+     */
+    @Override
+    public void setWrkSign() {
+    }
+
 }
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index 0f8b410..d3b7c5e 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -831,4 +831,11 @@
 
     }
 
+    /**
+     * 娓呴櫎浣滀笟鍚姩涓�
+     */
+    @Override
+    public void setWrkSign() {
+    }
+
 }
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 30b1455..f9ca221 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -1021,4 +1021,11 @@
 //
 //    }
 
+    /**
+     * 娓呴櫎浣滀笟鍚姩涓�
+     */
+    @Override
+    public void setWrkSign() {
+    }
+
 }
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 11dd9a6..7cdd224 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -253,133 +253,239 @@
       row: 18
       bay: 52
       lev: 2
-
   # RGV绌挎杞�1
-  rgv[0]:
-    id: 1
-    ip: 10.10.10.190
-    port: 502
-    rack: 0
-    slot: 0
-    #RGV鍏ュ簱鍙栬揣绔欑偣
-    rgvInTStn[0]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1042
-      staNo2: 1043
-    rgvInTStn[1]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1105
-      staNo2: 1104
-    rgvInTStn[2]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1038
-    rgvInTStn[3]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1036
-    #RGV鍏ュ簱鏀捐揣绔欑偣
-    rgvInPStn[0]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1004
-    rgvInPStn[1]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1014
-    rgvInPStn[2]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1018
-    rgvInPStn[3]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1028
-    rgvInPStn[4]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1035
-    #RGV鍑哄簱鍙栬揣绔欑偣
-    rgvOutTStn[0]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1007
-      staNo2: 1005
-    rgvOutTStn[1]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1010
-      staNo2: 1008
-    rgvOutTStn[2]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1021
-      staNo2: 1019
-    rgvOutTStn[3]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1024
-      staNo2: 1022
-    rgvOutTStn[4]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1031
-      staNo2: 1029
-    #RGV鍑哄簱鏀捐揣绔欑偣
-    rgvOutPStn[0]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1106
-    rgvOutPStn[1]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1041
-    rgvOutPStn[2]:
-      devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 1036
-
-  # RGV绌挎杞�2
   rgv[1]:
     id: 2
-    ip: 10.10.10.193
+    ip: 27.172.2.70
     port: 502
     rack: 0
     slot: 0
-    #RGV鍏ュ簱鍙栬揣绔欑偣
-    rgvInTStn[0]:
-      devpPlcId: ${wcs-slave.devp[1].id}
-      staNo: 2037
-    #RGV鍏ュ簱鏀捐揣绔欑偣
-    rgvInPStn[0]:
-      devpPlcId: ${wcs-slave.devp[1].id}
-      staNo: 2006
-    rgvInPStn[1]:
-      devpPlcId: ${wcs-slave.devp[1].id}
-      staNo: 2012
-    rgvInPStn[2]:
-      devpPlcId: ${wcs-slave.devp[1].id}
-      staNo: 2018
-    rgvInPStn[3]:
-      devpPlcId: ${wcs-slave.devp[1].id}
-      staNo: 2024
-    rgvInPStn[4]:
-      devpPlcId: ${wcs-slave.devp[1].id}
-      staNo: 2030
-    #RGV鍑哄簱鍙栬揣绔欑偣
-    rgvOutTStn[0]:
-      devpPlcId: ${wcs-slave.devp[1].id}
-      staNo: 2003
-      staNo2: 2001
-    rgvOutTStn[1]:
-      devpPlcId: ${wcs-slave.devp[1].id}
-      staNo: 2009
-      staNo2: 2007
-
-    rgvOutTStn[2]:
-      devpPlcId: ${wcs-slave.devp[1].id}
-      staNo: 2015
-      staNo2: 2013
-
-    rgvOutTStn[3]:
-      devpPlcId: ${wcs-slave.devp[1].id}
-      staNo: 2021
-      staNo2: 2019
-
-    rgvOutTStn[4]:
-      devpPlcId: ${wcs-slave.devp[1].id}
-      staNo: 2027
-      staNo2: 2025
-
-    #RGV鍑哄簱鏀捐揣绔欑偣
-    rgvOutPStn[0]:
-      devpPlcId: ${wcs-slave.devp[1].id}
-      staNo: 2031
+    otherId: 1
+    carBodyJiaoMing: 2800
+    carBodyKunPeng: 13500
+    #RGV婧愮珯鐐�
+    rgvInSta[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1004
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: true
+      staNoOther: 1005
+      directionOther: false
+    rgvInSta[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1014
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: true
+      staNoOther: 1016
+      directionOther: true
+    rgvInSta[2]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1020
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: true
+      staNoOther: 1021
+      directionOther: false
+    rgvInSta[3]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1003
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
+      staNoOther: 1003
+      directionOther: false
+    rgvInSta[4]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1007
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
+      staNoOther: 1007
+      directionOther: false
+    rgvInSta[5]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1013
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
+      staNoOther: 1013
+      directionOther: false
+    rgvInSta[6]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1018
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
+      staNoOther: 1018
+      directionOther: false
+    rgvInSta[7]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1019
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
+      staNoOther: 1019
+      directionOther: false
+    #RGV鐩爣绔欑偣
+    rgvOutSta[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1002
+      direction: true
+      staNoOther: 1002
+      directionOther: false
+    rgvOutSta[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1009
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: true
+      staNoOther: 1009
+      directionOther: false
+    rgvOutSta[2]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1001
+      direction: false
+      staNoOther: 1001
+      directionOther: false
+    rgvOutSta[3]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1006
+      direction: false
+      staNoOther: 1006
+      directionOther: false
+    rgvOutSta[4]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1008
+      direction: false
+      staNoOther: 1008
+      directionOther: false
+    rgvOutSta[5]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1017
+      direction: false
+      staNoOther: 1017
+      directionOther: false
+    rgvSuperSta[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1001
+      direction: false
+      staNoOther: 1001
+      directionOther: false
+    rgvSuperSta[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1002
+      direction: false
+      staNoOther: 1002
+      directionOther: false
+  # RGV绌挎杞�2
+  rgv[0]:
+    id: 1
+    ip: 27.172.2.71
+    port: 502
+    rack: 0
+    slot: 0
+    otherId: 2
+    carBodyJiaoMing: 2800
+    carBodyKunPeng: 13500
+    #RGV婧愮珯鐐�
+    rgvInSta[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1004
+      direction: true
+      staNoOther: 1005
+      directionOther: false
+    rgvInSta[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1014
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: true
+      staNoOther: 1016
+      directionOther: true
+    rgvInSta[2]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1020
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: true
+      staNoOther: 1021
+      directionOther: false
+    rgvInSta[3]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1003
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
+      staNoOther: 1003
+      directionOther: false
+    rgvInSta[4]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1007
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
+      staNoOther: 1007
+      directionOther: false
+    rgvInSta[5]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1013
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
+      staNoOther: 1013
+      directionOther: false
+    rgvInSta[6]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1018
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
+      staNoOther: 1018
+      directionOther: false
+    rgvInSta[7]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1019
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
+      staNoOther: 1019
+      directionOther: false
+    #RGV鐩爣绔欑偣
+    rgvOutSta[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1023
+      direction: true
+      staNoOther: 1023
+      directionOther: false
+    rgvOutSta[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1009
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: true
+      staNoOther: 1009
+      directionOther: false
+    rgvOutSta[2]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1022
+      direction: false
+      staNoOther: 1022
+      directionOther: false
+    rgvOutSta[3]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1006
+      direction: false
+      staNoOther: 1006
+      directionOther: false
+    rgvOutSta[4]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1008
+      direction: false
+      staNoOther: 1008
+      directionOther: false
+    rgvOutSta[5]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1017
+      direction: false
+      staNoOther: 1017
+      directionOther: false
+    rgvSuperSta[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1023
+      direction: false
+      staNoOther: 1023
+      directionOther: false
+    rgvSuperSta[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1022
+      direction: false
+      staNoOther: 1022
+      directionOther: false
   # 杈撻�佺嚎1
   devp[0]:
     id: 1
diff --git a/src/main/resources/mapper/DeviceErrorMapper.xml b/src/main/resources/mapper/DeviceErrorMapper.xml
new file mode 100644
index 0000000..db14934
--- /dev/null
+++ b/src/main/resources/mapper/DeviceErrorMapper.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.DeviceErrorMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.DeviceError">
+        <id column="id" property="id" />
+        <result column="device" property="device" />
+        <result column="msg" property="msg" />
+        <result column="device_id" property="deviceId" />
+        <result column="create_time" property="createTime" />
+        <result column="appe_time" property="appeTime" />
+        <result column="device_plc_id" property="devicePlcId" />
+    </resultMap>
+
+    <sql id="batchSeq">
+        <if test="id != null and id != 0">
+            and id = #{id}
+        </if>
+        <if test="device != null and device != ''">
+            and device = #{device}
+        </if>
+        <if test="deviceId != null and deviceId != 0">
+            and device_id = #{deviceId}
+        </if>
+        <if test="devicePlcId != null and devicePlcId != 0">
+            and device_plc_id = #{devicePlcId}
+        </if>
+    </sql>
+
+    <select id="selectByDeviceAndDeviceId" resultMap="BaseResultMap">
+        select top 1 * from wcs_device_error
+        where "device" = #{device}
+        and "device_id" = #{deviceId}
+    </select>
+
+    <delete id="deleteByDeviceAndDeviceId">
+        delete from wcs_device_error
+        where "device" = #{device}
+        and "device_id" = #{deviceId}
+    </delete>
+
+    <select id="selectDeviceErrorList" resultMap="BaseResultMap">
+        SELECT * FROM (
+            SELECT ROW_NUMBER() over(order by create_time DESC) as row,*
+            FROM ( SELECT * FROM wcs_device_error ) t
+            WHERE 1=1
+            <include refid="batchSeq"></include>
+        ) a
+        WHERE a.row BETWEEN ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize})
+    </select>
+
+    <select id="selectDeviceErrorListTotal" resultType="Long">
+        SELECT count(1) FROM wcs_device_error
+        WHERE 1=1
+        <include refid="batchSeq"></include>
+    </select>
+
+</mapper>

--
Gitblit v1.9.1