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

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

diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 3d88efe..f87315d 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -5,40 +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.BasDevp;
 import com.zy.asrs.entity.BasRgv;
-import com.zy.asrs.entity.BasRgvMap;
 import com.zy.asrs.entity.BasRgvOpt;
-import com.zy.asrs.service.BasDevpService;
-import com.zy.asrs.service.BasRgvMapService;
 import com.zy.asrs.service.BasRgvOptService;
 import com.zy.asrs.service.BasRgvService;
-import com.zy.common.utils.News;
-import com.zy.core.RgvThread2;
+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;
 
 /**
@@ -47,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 = 240000L;
+    //# 杞ㄩ亾鍩哄噯鐐�
+    private Long trackBenchmark = 1L;
+    //  # 閬胯璺濈
+    private Long avoidDistance = 11200L;
+    private String errorRgv = "-";
 
     /**
      * 宸ヤ綅1澶嶄綅淇″彿
@@ -63,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;
@@ -85,133 +77,934 @@
     @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(100L);
+//                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);
 
+                // 鏋勫缓璁惧鐘舵�佸璞�
+                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+                if (rgvProtocol == null) {
+                    rgvProtocol = new RgvProtocol();
+                }
+                if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING) || rgvProtocol.getStatusType().equals(RgvStatusType.FETCHWAITING)){
+                    boolean sign = true;
+                    int i = 1;
+                    while (sign && i<5){
+                        i++;
+                        sign = false;
+                        OperateResult result2 = siemensNet.Write("DB100.2",(int) 0);
+                        OperateResult result14 = siemensNet.Write("DB100.14", (int) 0);
+                        OperateResult result6 = siemensNet.Write("DB100.6", (short) 0);
+                        OperateResult result8 = siemensNet.Write("DB100.8", (short) 0);
+                        OperateResult result10 = siemensNet.Write("DB100.10", (short) 0);
+                        OperateResult result12 = siemensNet.Write("DB100.12", (short) 0);
+                        Thread.sleep(10L);
+
+                        OperateResultExOne<byte[]> resultRead0 = siemensNet.Read("DB100.0", (short) 20);
+                        Integer i2 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 2);
+                        short i6 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 6);
+                        short i8 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 8);
+                        short i10 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 10);
+                        Integer i14 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 14);
+                        if (i2!=0 || i6 != (short) 0
+                                || i8!=(short)0 || i10 != (short) 0
+                                || i14!=0){
+                            sign = true;
+                        }
+                    }
+
+                    OperateResult result0 = siemensNet.Write("DB100.0", (short) 1);
+
+                    Thread.sleep(20L);
+
+                    OperateResult result00 = siemensNet.Write("DB100.0", (short) 0);
+                }
+            } catch (Exception e) {
+                log.error("RGV鏁版嵁浠诲姟涓嬪彂澶嶄綅绾跨▼寮傚父锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                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(200L);
+
+                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;
+                }
+
+                Thread.sleep(50L);
+
+                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.IDLE)) {
+                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.IDLE)) {
+                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;
@@ -219,457 +1012,375 @@
         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) 38);
+            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 36);
+            OperateResultExOne<byte[]> result100 = siemensNet.Read("DB100.0", (short) 18);
             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]);
-//                BasRgvMapService basRgvMapService = SpringUtils.getBean(BasRgvMapService.class);
+                rgvProtocol.setRgvNo(slave.getId());
+                rgvProtocol.setCarBodyJiaoMing(slave.getCarBodyJiaoMing());
+                rgvProtocol.setCarBodyKunPeng(slave.getCarBodyKunPeng());
+
+                rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));
+//                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 2));
+                rgvProtocol.setTaskNo((long)siemensNet.getByteTransform().TransInt32(result.Content, 4));
+                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 8));
+                rgvProtocol.setLoaded(siemensNet.getByteTransform().TransInt16(result.Content, 10));
+                rgvProtocol.setRgvPos((long)siemensNet.getByteTransform().TransInt32(result.Content, 32));
+                rgvProtocol.setRgvPosDestination((long)siemensNet.getByteTransform().TransInt32(result100.Content, 14));
+                if (rgvProtocol.getRgvPosDestination()==0L){
+                    rgvProtocol.setRgvPosDestination(rgvProtocol.getRgvPos());
+                }
+
+                //浣滀笟鍚姩涓�  瑙e喅浠诲姟涓嬪彂鍚庡皬杞︾姸鎬佹湭鏇存柊锛屽皬杞︾姸鎬佷笉鍙婃椂
+                if (this.wrkSign == 1 && rgvProtocol.getStatus()!=(short)1){
+                    this.wrkSign = 0;
+                }
+                if (this.wrkSign == 1){
+                    rgvProtocol.setStatus((short)110);
+                }
+
+//                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.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 16));
+
+//                OperateResultExOne<byte[]> result11 = siemensNet.Read("DB100.12", (short) 1);
+//                boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 18, 2);
+//                rgvProtocol.setLoaded(status[0]? (short)1:(short)0);
+//                rgvProtocol.setErr1(status[8]);
+//                rgvProtocol.setErr2(status[9]);
+//                rgvProtocol.setErr3(status[10]);
+//                rgvProtocol.setErr4(status[11]);
+//                rgvProtocol.setErr5(status[12]);
+//                rgvProtocol.setErr6(status[13]);
+//                rgvProtocol.setErr7(status[14]);
+//                rgvProtocol.setErr8(status[15]);
+//                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.setRgvNo(slave.getId());
-                    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());
+                    BasRgv basRgv = basRgvService.selectById(slave.getId());
+                    if (!Cools.isEmpty(basRgv)) {
+                        rgvProtocol.setStatusEnable(basRgv.getStatus() == 1);
+                    } else {
+                        rgvProtocol.setStatusEnable(false);
                     }
-                } catch (Exception ignore){
-                    System.out.println(ignore);
+//                    BasRgv basRgv = new BasRgv();
+                    basRgv.setRgvNo(slave.getId());
+                    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());
+                        }
+                    }
+                } 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 {
+        Thread.sleep(50L);
+        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;
         }
 
-        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);
+
+        this.wrkSign = 1;
+//        convertRow(command);
+//        taskProtocol.setRgvNo(slave.getId());
+//        Long[] array = new Long[11];
+        OperateResult result0 = siemensNet.Write("DB100.0", (short) 0);
+//        array[0] = taskProtocol.getAckFinish1();
+//        array[1] = taskProtocol.getTaskNo();
+//        array[2] = taskProtocol.getTaskMode();
+//        array[4] = command.getDestinationStaNo();
+//        array[10] = taskProtocol.getCommand();
+        int taskStatus = taskProtocol.getTaskStatus$();
+        int targetPositionStaNo = taskProtocol.getTargetPositionStaNo();
+        int targetPositionStaNoEnd = taskProtocol.getTargetPositionStaNoEnd();
+        boolean sign = true;
+        int i = 1;
+        while (sign && i<5){
+            i++;
+            sign = false;
+            OperateResult result2 = siemensNet.Write("DB100.2", taskProtocol.getTaskNo().intValue());
+            OperateResult result6 = siemensNet.Write("DB100.6", (short) taskStatus);
+            OperateResult result8 = siemensNet.Write("DB100.8", (short) targetPositionStaNo);
+            OperateResult result10 = siemensNet.Write("DB100.10", (short) targetPositionStaNo);
+            OperateResult result14 = siemensNet.Write("DB100.14", taskProtocol.getTargetPosition().intValue());
+            OperateResult result18 = siemensNet.Write("DB100.18", (short) targetPositionStaNoEnd);
+//        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級    true:宸�   false:鍙�
+            Thread.sleep(10L);
+
+            OperateResultExOne<byte[]> resultRead0 = siemensNet.Read("DB100.0", (short) 20);
+            short i0 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 0);
+            Integer i2 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 2);
+            short i6 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 6);
+            short i8 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 8);
+            short i10 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 10);
+            Integer i14 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 14);
+            short i18 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 18);
+            if (i0 !=(short) 0 || i2!=taskProtocol.getTaskNo().intValue() || i6 != (short) taskStatus
+                    || i8!=(short)targetPositionStaNo || i10 != (short) targetPositionStaNo
+                    || i14!=taskProtocol.getTargetPosition().intValue() || i18 != (short) targetPositionStaNoEnd){
+                sign = true;
+            }
         }
+        sign = true;
+        OperateResult result12 = siemensNet.Write("DB100.12", (short) 1);
+//
+        i = 1;
+        sign = true;
+        while (sign && i<5){
+            i++;
+            sign = false;
+//        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級    true:宸�   false:鍙�
+            Thread.sleep(10L);
+
+            OperateResultExOne<byte[]> resultRead0 = siemensNet.Read("DB100.0", (short) 20);
+            short i12 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 12);
+            if (i12 != (short) 1 ){
+                sign = true;
+            }
+            result12 = siemensNet.Write("DB100.12", (short) 1);
+        }
+
+//        log.info("浠诲姟涓嬪彂绾跨▼,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis());
+
+//        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,
+                    result12.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)));
+        readStatus();
+        if (result12 != null && result0.IsSuccess) {
+//            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 {
+//
+        int i = 1;
+        boolean sign = true;
+        while (sign && i<5){
+            i++;
+            sign = false;
+            OperateResult result0 = siemensNet.Write("DB100.0", (short) 0);
+            OperateResult result2 = siemensNet.Write("DB100.2", 0);
+            OperateResult result6 = siemensNet.Write("DB100.6", (short) 0);
+            OperateResult result8 = siemensNet.Write("DB100.8", (short) 0);
+            OperateResult result10 = siemensNet.Write("DB100.10", (short) 0);
+            OperateResult result12 = siemensNet.Write("DB100.12",(short)0);
+            OperateResult result14 = siemensNet.Write("DB100.14",0);
+            OperateResult result18 = siemensNet.Write("DB100.18", (short) 0);
+//        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級    true:宸�   false:鍙�
+            Thread.sleep(10L);
 
-        //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));
-                }
+            OperateResultExOne<byte[]> resultRead0 = siemensNet.Read("DB100.0", (short) 20);
+            short i0 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 0);
+            Integer i2 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 2);
+            short i6 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 6);
+            short i8 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 8);
+            short i10 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 10);
+            short i12 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 12);
+            Integer i14 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 14);
+            short i18 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 18);
+            if (i0 !=(short) 0 || i2!=0 || i6 != (short) 0
+                    || i8!=(short)0 || i10 != (short) 0 || i12 != (short) 0
+                    || i14!=0 || i18 != (short) 0){
+                sign = true;
             }
-        }catch (Exception e){
-            News.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲嚭閿�");
         }
+        log.info("浠诲姟瀹屾垚涓嬪彂绾跨▼,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis());
 
-        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,
+                    sign ? 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)));
+        if (sign) {
+//            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);
-
     }
 
 }

--
Gitblit v1.9.1