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 | 1770 ++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 1,212 insertions(+), 558 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 67269ed..f87315d 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -5,31 +5,35 @@
 import HslCommunication.Profinet.Siemens.SiemensPLCS;
 import HslCommunication.Profinet.Siemens.SiemensS7Net;
 import com.alibaba.fastjson.JSON;
+import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.common.SpringUtils;
 import com.zy.asrs.entity.BasRgv;
 import com.zy.asrs.entity.BasRgvOpt;
 import com.zy.asrs.service.BasRgvOptService;
 import com.zy.asrs.service.BasRgvService;
-import com.zy.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.*;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
 
 import java.text.MessageFormat;
 import java.util.Date;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * RGV绾跨▼
@@ -37,11 +41,20 @@
  */
 @Data
 @Slf4j
-public class RgvThread implements Runnable, RgvThread2 {
+public class RgvThread implements Runnable, ThreadHandler {
 
     private SiemensS7Net siemensNet;
     private RgvSlave slave;
-    private RgvProtocol rgvProtocol;
+    //    private RgvProtocol rgvProtocol;
+    private TaskProtocolCache taskProtocolCache = new TaskProtocolCache();
+    // # 杞ㄩ亾鎬婚暱
+    private Long trackEntireLength = 240000L;
+    //# 杞ㄩ亾鍩哄噯鐐�
+    private Long trackBenchmark = 1L;
+    //  # 閬胯璺濈
+    private Long avoidDistance = 11200L;
+    private String errorRgv = "-";
+
     /**
      * 宸ヤ綅1澶嶄綅淇″彿
      */
@@ -51,12 +64,11 @@
      */
     private boolean resetFlag2 = false;
 
-    //閿佸畾鏍囪
-    private boolean PakMk = true;
-    //鍏ュ簱鏍囪
-    private boolean PakIn = true;
-    //鍑哄簱鏍囪
-    private boolean PakOut = true;
+    private boolean connectRgv = false;
+    public Long currentTimeMilliConnectRgv= 0L;
+
+    private boolean delRgvTask = false;
+    private short wrkSign = 0;
 
     public RgvThread(RgvSlave slave) {
         this.slave = slave;
@@ -65,122 +77,932 @@
     @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;
-//                    // 宸ヤ綅1銆�2鍐欏叆鏁版嵁
-//                    case 2:
-//                        write((RgvCommand) task.getData());
-//                        break;
-                    //宸ヤ綅1鍐欏叆鏁版嵁
-                    case 4:
-                        write1((RgvCommand) task.getData());
-                        break;
-//                    //宸ヤ綅2鍐欏叆鏁版嵁
-                    case 5:
-                        write2((RgvCommand) task.getData());
-                        break;
-                    // 澶嶄綅
-                    case 3:
-                        RgvCommand command = (RgvCommand) task.getData();
-                        if (null == command) {
-                            command = new RgvCommand();
-                        }
-                        command.setRgvNo(slave.getId()); // RGV缂栧彿
-                        command.setTaskNo1(0); // 宸ヤ綔鍙�
-                        command.setAckFinish1(true);  // 浠诲姟瀹屾垚纭浣�
-                        command.setTaskStatus1(RgvTaskStatusType.NONE); // 浠诲姟妯″紡
-                        command.setTargetPosition1( 0);     // 婧愮珯
-                        command.setEndStaNo1(0);     // 鐩爣绔�
-                        command.setCommand(false);
-                        write1(command);
-                        break;
-                    case 6:
-                        RgvCommand command2 = (RgvCommand) task.getData();
-                        if (null == command2) {
-                            command2 = new RgvCommand();
-                        }
-                        command2.setRgvNo(slave.getId()); // RGV缂栧彿
-                        command2.setTaskNo2(0); // 宸ヤ綔鍙�
-                        command2.setAckFinish2(true);  // 浠诲姟瀹屾垚纭浣�
-                        command2.setTaskStatus2(RgvTaskStatusType.NONE); // 浠诲姟妯″紡
-                        command2.setTargetPosition2( 0);     // 婧愮珯
-                        command2.setEndStaNo2(0);     // 鐩爣绔�
-                        command2.setCommand(false);
-                        write2(command2);
-                        break;
-                    // 鍥炲師鐐�  閬胯
-                    case 9:
-//                        RgvCommand commandAvoidanceXY = (RgvCommand) task.getData();
-//                        if (null == commandAvoidanceXY) {
-//                            commandAvoidanceXY = new RgvCommand();
-//                        }
-//                        commandAvoidanceXY.setRgvNo(slave.getId()); // RGV缂栧彿
-//                        commandAvoidanceXY.setTaskNo1((short) 9999); // 宸ヤ綔鍙�
-//                        commandAvoidanceXY.setAckFinish1((short) 1);  // 浠诲姟瀹屾垚纭浣�
-//                        commandAvoidanceXY.setTaskMode1(RgvTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡
-//                        commandAvoidanceXY.setSourceStaNo1((short)0);     // 婧愮珯
-//                        commandAvoidanceXY.setDestinationStaNo1((short)0);     // 鐩爣绔�
-////                        commandAvoidanceXY.setTaskNo2((short) 0); // 宸ヤ綔鍙�
-////                        commandAvoidanceXY.setAckFinish2((short) 1);  // 浠诲姟瀹屾垚纭浣�
-////                        commandAvoidanceXY.setTaskMode2(RgvTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡
-////                        commandAvoidanceXY.setSourceStaNo2((short)0);     // 婧愮珯
-////                        commandAvoidanceXY.setDestinationStaNo2((short)0);     // 鐩爣绔�
-//                        commandAvoidanceXY.setCommand((short)0);
-//                        write(commandAvoidanceXY);
-                        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 void taskComplete() {
+        while (true) {
+            try {
+                if(!connectRgv){
+                    try {
+                        Thread.sleep(1000L);
+                    } catch (Exception e){
+
+                    }
+                    continue;
+                }
+                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);
-        //宸ヤ綅1鐘舵��
-        rgvProtocol.setTaskNo1(0);
-        rgvProtocol.setStatus1((short)-1);
-        rgvProtocol.setLoaded1(false);
-        //宸ヤ綅2鐘舵��
-        rgvProtocol.setTaskNo2(0);
-        rgvProtocol.setStatus2((short)-1);
-        rgvProtocol.setLoaded2(false);
-//        rgvProtocol.setAlarm((short)0);
-//        rgvProtocol.setxSpeed((short) 0);
-//        rgvProtocol.setxDistance((short) 0);
-//        rgvProtocol.setxDuration((short) 0);
+        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
@@ -190,543 +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 readStatus(){
+    private void readStatus() {
         try {
-            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 30);
+            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.setStatus2(siemensNet.getByteTransform().TransInt16(result.Content, 14));
-                rgvProtocol.setTaskNo1(siemensNet.getByteTransform().TransInt32(result.Content, 16));
-                rgvProtocol.setTaskNo2(siemensNet.getByteTransform().TransInt32(result.Content, 20));
+                rgvProtocol.setRgvNo(slave.getId());
+                rgvProtocol.setCarBodyJiaoMing(slave.getCarBodyJiaoMing());
+                rgvProtocol.setCarBodyKunPeng(slave.getCarBodyKunPeng());
 
-                boolean[] status1 = siemensNet.getByteTransform().TransBool(result.Content, 24, 2);
-                rgvProtocol.setLoaded1(status1[0]);
-                rgvProtocol.setLoaded2(status1[1]);
-                boolean[] status2 = siemensNet.getByteTransform().TransBool(result.Content, 26, 1);
-                rgvProtocol.setErr1(status2[0]);
-                rgvProtocol.setErr2(status2[1]);
-                rgvProtocol.setErr3(status2[2]);
-                rgvProtocol.setErr4(status2[3]);
-                rgvProtocol.setErr5(status2[4]);
-                rgvProtocol.setErr6(status2[5]);
-                rgvProtocol.setErr7(status2[6]);
-                boolean[] status3 = siemensNet.getByteTransform().TransBool(result.Content, 27, 1);
-                rgvProtocol.setErr1(status3[0]);
-                rgvProtocol.setErr2(status3[1]);
-                rgvProtocol.setErr3(status3[2]);
-                rgvProtocol.setErr4(status3[3]);
-                rgvProtocol.setErr5(status3[4]);
-                rgvProtocol.setErr6(status3[5]);
-                rgvProtocol.setErr7(status3[6]);
+                rgvProtocol.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());
+                }
 
-//                rgvProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 12));
-//                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 14));
-//                rgvProtocol.setTaskNo2(siemensNet.getByteTransform().TransInt16(result.Content, 4));
-//                rgvProtocol.setLoaded2(siemensNet.getByteTransform().TransInt16(result.Content, 8));
-//                rgvProtocol.setStatus2(siemensNet.getByteTransform().TransInt16(result.Content, 16));
-//                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 18));
+                //浣滀笟鍚姩涓�  瑙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.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 22));
-//                rgvProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 24));
-//                rgvProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 26));
-//                rgvProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 28));
-//                rgvProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 30));
-//                rgvProtocol.setTemp5(siemensNet.getByteTransform().TransInt16(result.Content, 32));
 //                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28));
 //                rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40));
-//                rgvProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48));
+                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.getStatusType1().equals(RgvStatusType.WAITING)
-                        || rgvProtocol.getStatusType1().equals(RgvStatusType.FETCHWAITING)) {
-                    if (resetFlag1) {
-                        RgvCommand rgvCommand = new RgvCommand();
-                        rgvCommand.setAckFinish1(true);
-                        if (write1(rgvCommand)) {
-                            resetFlag1 = false;
-                        }
-                    }
-                }
-
-//                 宸ヤ綅2澶嶄綅淇″彿
-                if (rgvProtocol.getStatusType2().equals(RgvStatusType.WAITING)
-                        || rgvProtocol.getStatusType2().equals(RgvStatusType.FETCHWAITING)) {
-                    if (resetFlag2) {
-                        RgvCommand rgvCommand = new RgvCommand();
-                        rgvCommand.setAckFinish2(true);
-                        if (write2(rgvCommand)) {
-                            resetFlag2 = false;
-                        }
-                    }
-                }
+//                // 宸ヤ綅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();
         }
     }
 
-//    /**
-//     * 宸ヤ綅1銆�2鍚屾椂鍐欏叆鏁版嵁
-//     */
-//    private boolean write(RgvCommand command) throws InterruptedException {
-//        if (null == command) {
-//            log.error("RGV鍐欏叆鍛戒护涓虹┖");
-//            return false;
-//        }
-////        convertRow(command);
-//        command.setRgvNo(slave.getId());
-//        short[] array = new short[11];
-//        array[0] = command.getAckFinish1();
-//        array[1] = command.getTaskNo1();
-//        array[2] = command.getTaskMode1();
-//        array[3] = command.getSourceStaNo1();
-//        array[4] = command.getDestinationStaNo1();
-////        array[0] = command.getAckFinish1();
-////        array[1] = command.getTaskNo1();
-////        array[2] = command.getTaskMode1();
-////        array[3] = command.getSourceStaNo1();
-////        array[4] = command.getDestinationStaNo1();
-////        array[5] = command.getAckFinish2();
-////        array[6] = command.getTaskNo2();
-////        array[7] = command.getTaskMode2();
-////        array[8] = command.getSourceStaNo2();
-////        array[9] = command.getDestinationStaNo2();
-////        array[10] = command.getCommand();
-//        OperateResult result = siemensNet.Write("DB100.0", array);
-//
-////        if (command.getAckFinish1() == 0 && command.getAckFinish2() == 0) {
-////            short commandFinish = 3;  //宸ヤ綅1銆�2浠诲姟鍚屾椂鍐欏叆
-////            Thread.sleep(100L);
-////            result = siemensNet.Write("DB100.20", commandFinish);
-////        }
-//
-//        try {
-//            // 鏃ュ織璁板綍
-//            BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
-//            BasRgvOpt basRgvOpt = new BasRgvOpt(
-//                    command.getTaskNo1().intValue(),
-//                    command.getTaskNo2().intValue(),
-//                    command.getRgvNo(),
-//                    new Date(),
-//                    command.getTaskModeType1().toString(),
-//                    command.getSourceStaNo1().intValue(),
-//                    command.getDestinationStaNo1().intValue(),
-//                    command.getSourceStaNo2().intValue(),
-//                    command.getDestinationStaNo2().intValue(),
-//                    null,
-//                    new Date(),
-//                    null
-//            );
-//            bean.insert(basRgvOpt);
-//        } catch (Exception ignore) {}
-//
-//        if (result != null && result.IsSuccess) {
-//            Thread.sleep(200);
-//            this.readStatus();
-//            log.info("RGV 鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
-//            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
-//            return true;
-//        } else {
-//            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戝啓鍏GV plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-//            log.error("鍐欏叆RGV plc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
-//            return false;
-//        }
-//    }
-
     /**
-     * 宸ヤ綅1鍐欏叆鏁版嵁
+     * 鍐欏叆鏁版嵁
      */
-    private boolean write1(RgvCommand command) throws InterruptedException {
-        if (null == command) {
-            log.error("RGV鍐欏叆鍛戒护涓虹┖");
+    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());
+
+            try{
+                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV鍐欏叆鍛戒护涓虹┖");
+            } catch (Exception e2){
+//                log.error("e2:"+e2.getMessage());
+            }
             return false;
         }
 
-        OperateResultExOne<byte[]> result1 = siemensNet.Read("DB100.0", (short) 34);
-//        OperateResultExOne<byte[]> result4 = siemensNet.Read("DB100.10", (short) 2);
-        if (result1.IsSuccess){
-            RgvCommand one = new RgvCommand();
-            one.setTargetPosition1(siemensNet.getByteTransform().TransInt32(result1.Content, 0));
-            one.setEndStaNo1(siemensNet.getByteTransform().TransInt32(result1.Content, 4));
-            one.setTaskStatus1(siemensNet.getByteTransform().TransInt16(result1.Content, 8));
-            one.setTaskNo1(siemensNet.getByteTransform().TransInt32(result1.Content, 10));
-            one.setDirection1(siemensNet.getByteTransform().TransInt16(result1.Content, 14));
-//                one.setAckFinish1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 0));
-//            one.setTaskNo1(siemensNet.getByteTransform().TransInt16(result3.Content, 2));
-//            one.setTaskMode1(siemensNet.getByteTransform().TransInt16(result3.Content, 4));
-//            one.setSourceStaNo1(siemensNet.getByteTransform().TransInt16(result3.Content, 6));
-//            one.setDestinationStaNo1(siemensNet.getByteTransform().TransInt16(result3.Content, 8));
-//            one.setCommand(siemensNet.getByteTransform().TransInt16(result4.Content, 0));
 
-            News.error("RGV鍛戒护涓嬪彂鍓嶈鍙栫姸鎬乕id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
-        }
+        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);
 
-
-        OperateResult result2 = siemensNet.Write("DB100.34", false);
-        if (result2.IsSuccess){
-            News.error("涓嬪彂鍓嶆妸杞﹀瓙纭浣嶇疆涓�0");
-        }
-        byte[] writeBytes = new byte[34];
-        command.setRgvNo(slave.getId());
-        siemensNet.getByteTransform().TransInt32(writeBytes, 0, command.getTargetPosition1());
-        siemensNet.getByteTransform().TransInt32(writeBytes, 4, command.getEndStaNo1());
-        siemensNet.getByteTransform().TransInt16(writeBytes, 8, command.getTaskStatus1());
-        siemensNet.getByteTransform().TransInt32(writeBytes, 10, command.getTaskNo1());
-        siemensNet.getByteTransform().TransInt16(writeBytes, 14, command.getDirection1());
-        setBool(writeBytes, 32, 0, command.getAckFinish1());
-
-//        command.setRgvNo(slave.getId());
-//        short[] array = new short[5];
-//        array[0] = command.getAckFinish1();
-//        array[1] = command.getTaskNo1();
-//        array[2] = command.getTaskMode1();
-//        array[3] = command.getSourceStaNo1();
-//        array[4] = command.getDestinationStaNo1();
-//        siemensNet.Write("DB100.10", command.getCommand());
-
-        OperateResult result = siemensNet.Write("DB100.0", writeBytes);
-
-        if (!result.IsSuccess){
-            News.error("鍐欏叆RGVplc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===> [id:{}],{}",slave.getId(),JSON.toJSON(command));
-            MessageQueue.offer(SlaveType.Rgv,slave.getId(),new Task(4,command));
-            Thread.sleep(100);
-            readStatus();
-            return false;
-        }
-
-        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
-        Thread.sleep(400);
-        try {
-            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 34);
-            if (resultRead.IsSuccess){
-                RgvCommand one = new RgvCommand();
-                one.setDirection1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14));
-                one.setTaskNo1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 10));
-                one.setTaskStatus1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
-                one.setEndStaNo1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 4));
-                one.setTargetPosition1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 0));
-                if (
-                        !command.getDirection1().equals(one.getDirection1()) ||
-                                !command.getTaskNo1().equals(one.getTaskNo1()) ||
-                                !command.getTaskStatus1().equals(one.getTaskStatus1()) ||
-                                !command.getEndStaNo1().equals(one.getEndStaNo1()) ||
-                                !command.getTargetPosition1().equals(one.getTargetPosition1())
-                ) {
-                    try{
-                        News.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲け璐id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
-                    }catch (Exception e){
-                        try{
-                            News.error("鏃ュ織鎵撳嵃澶辫触锛�===>>鍙傛暟one鎶ラ敊 [id:{}],{}", slave.getId(), JSON.toJSON(command),JSON.toJSON(resultRead));
-                        }catch (Exception e1){
-                            News.error("鏃ュ織鎵撳嵃澶辫触锛�===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
-                        }
-                    }
-                    News.error("Rgv鍛戒护鍥炶澶辫触鍚庯紝閲嶆柊娣诲姞浠诲姟鍒伴槦鍒� ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
-                    MessageQueue.offer(SlaveType.Rgv, slave.getId(), new Task(4, command));
-                    Thread.sleep(100);
-                    readStatus();
-                    return false;
-                }else {
-                    News.info("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
-                }
-            }
-        }catch (Exception e){
-            News.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲嚭閿�");
-        }
-
-        if (command.getAckFinish1()) {
-            if (result.IsSuccess) {
-                Thread.sleep(300);
-                //浠诲姟涓嬪彂娆℃暟
-                int writeCount2 = 0;
-
-                do {
-                    writeCount2++;
-                    boolean commandFinish = false;
-                    result = siemensNet.Write("DB100.32.0", commandFinish);
-                    if(result.IsSuccess){
-                        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
-                        Thread.sleep(200);
-                        OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.32", (short) 2);
-                        if (resultRead.IsSuccess) {
-                            commandFinish=siemensNet.getByteTransform().TransBool(resultRead.Content, 0);
-                            if (!commandFinish){
-                                News.error("RGV浠诲姟纭浣�"+commandFinish+"鍐欏叆鏁版嵁涓庡洖璇绘暟鎹笉涓�鑷达紒"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
-                            }else{
-                                //浠诲姟鍛戒护鍐欏叆鎴愬姛
-                                News.info("RGV浠诲姟纭浣�"+commandFinish+"鍥炶鎴愬姛锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
-                                break;
-                            }
-                        }else {
-                            News.error("RGV浠诲姟纭浣�"+commandFinish+"鍥炶澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
-                        }
-                    } else {
-                        News.error("RGV浠诲姟纭浣�"+commandFinish+"鍐欏叆澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
-                    }
-                }while (writeCount2<5);
+            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);
 
-//        if (command.getAckFinish1() == 0) {
-//            short commandFinish = 1;  //宸ヤ綅1浠诲姟鍐欏叆
-//            Thread.sleep(200);
-//            result = siemensNet.Write("DB100.10", commandFinish);
+            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.getTaskNo1(),
-                    command.getRgvNo(),
+                    taskProtocol.getTaskNo().intValue(),
+                    taskProtocol.getTaskNo().intValue(),
+                    slave.getId(),
                     new Date(),
-                    command.getTaskStatus1().toString(),
-                    command.getTargetPosition1(),
-                    command.getEndStaNo1(),
+                    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 宸ヤ綅1鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
-            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 宸ヤ綅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宸ヤ綅1鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-            log.error("鍐欏叆RGV plc宸ヤ綅1鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            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;
         }
     }
 
-    /**
-     * 宸ヤ綅2鍐欏叆鏁版嵁
-     */
-    private boolean write2(RgvCommand command) throws InterruptedException {
-        if (null == command) {
-            log.error("RGV鍐欏叆鍛戒护涓虹┖");
-            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);
 
-        OperateResultExOne<byte[]> result1 = siemensNet.Read("DB100.0", (short) 34);
-        if (result1.IsSuccess){
-            RgvCommand one = new RgvCommand();
-            one.setTargetPosition2(siemensNet.getByteTransform().TransInt32(result1.Content, 16));
-            one.setEndStaNo2(siemensNet.getByteTransform().TransInt32(result1.Content, 20));
-            one.setTaskStatus2(siemensNet.getByteTransform().TransInt16(result1.Content, 24));
-            one.setTaskNo2(siemensNet.getByteTransform().TransInt32(result1.Content, 26));
-            one.setDirection2(siemensNet.getByteTransform().TransInt16(result1.Content, 30));
-            News.error("RGV鍛戒护涓嬪彂鍓嶈鍙栫姸鎬乕id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
-        }
-
-
-        OperateResult result2 = siemensNet.Write("DB100.34", false);
-        if (result2.IsSuccess){
-            News.error("涓嬪彂鍓嶆妸杞﹀瓙纭浣嶇疆涓�0");
-        }
-        byte[] writeBytes = new byte[34];
-        command.setRgvNo(slave.getId());
-        siemensNet.getByteTransform().TransInt32(writeBytes, 16, command.getTargetPosition2());
-        siemensNet.getByteTransform().TransInt32(writeBytes, 20, command.getEndStaNo2());
-        siemensNet.getByteTransform().TransInt16(writeBytes, 24, command.getTaskStatus2());
-        siemensNet.getByteTransform().TransInt32(writeBytes, 26, command.getTaskNo2());
-        siemensNet.getByteTransform().TransInt16(writeBytes, 30, command.getDirection2());
-        setBool(writeBytes, 32, 1, command.getAckFinish2());
-
-        OperateResult result = siemensNet.Write("DB100.0", writeBytes);
-
-        if (!result.IsSuccess){
-            News.error("鍐欏叆RGVplc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===> [id:{}],{}",slave.getId(),JSON.toJSON(command));
-            MessageQueue.offer(SlaveType.Rgv,slave.getId(),new Task(5,command));
-            Thread.sleep(100);
-            readStatus();
-            return false;
-        }
-
-        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
-        Thread.sleep(400);
-        try {
-            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 34);
-            if (resultRead.IsSuccess){
-                RgvCommand one = new RgvCommand();
-                one.setDirection1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 30));
-                one.setTaskNo1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 26));
-                one.setTaskStatus1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 24));
-                one.setEndStaNo1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 20));
-                one.setTargetPosition1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 16));
-                if (
-                        !command.getDirection2().equals(one.getDirection2()) ||
-                                !command.getTaskNo2().equals(one.getTaskNo2()) ||
-                                !command.getTaskStatus2().equals(one.getTaskStatus2()) ||
-                                !command.getEndStaNo2().equals(one.getEndStaNo2()) ||
-                                !command.getTargetPosition2().equals(one.getTargetPosition2())
-                ) {
-                    try{
-                        News.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲け璐id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
-                    }catch (Exception e){
-                        try{
-                            News.error("鏃ュ織鎵撳嵃澶辫触锛�===>>鍙傛暟one鎶ラ敊 [id:{}],{}", slave.getId(), JSON.toJSON(command),JSON.toJSON(resultRead));
-                        }catch (Exception e1){
-                            News.error("鏃ュ織鎵撳嵃澶辫触锛�===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
-                        }
-                    }
-                    News.error("Rgv鍛戒护鍥炶澶辫触鍚庯紝閲嶆柊娣诲姞浠诲姟鍒伴槦鍒� ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
-                    MessageQueue.offer(SlaveType.Rgv, slave.getId(), new Task(5, command));
-                    Thread.sleep(100);
-                    readStatus();
-                    return false;
-                }else {
-                    News.info("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
-                }
-            }
-        }catch (Exception e){
-            News.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲嚭閿�");
-        }
-
-        if (command.getAckFinish1()) {
-            if (result.IsSuccess) {
-                Thread.sleep(300);
-                //浠诲姟涓嬪彂娆℃暟
-                int writeCount2 = 0;
-
-                do {
-                    writeCount2++;
-                    boolean commandFinish = false;
-                    result = siemensNet.Write("DB100.32.1", commandFinish);
-                    if(result.IsSuccess){
-                        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
-                        Thread.sleep(200);
-                        OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.32", (short) 2);
-                        if (resultRead.IsSuccess) {
-                            commandFinish=siemensNet.getByteTransform().TransBool(resultRead.Content, 1);
-                            if (!commandFinish){
-                                News.error("RGV浠诲姟纭浣�"+commandFinish+"鍐欏叆鏁版嵁涓庡洖璇绘暟鎹笉涓�鑷达紒"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
-                            }else{
-                                //浠诲姟鍛戒护鍐欏叆鎴愬姛
-                                News.info("RGV浠诲姟纭浣�"+commandFinish+"鍥炶鎴愬姛锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
-                                break;
-                            }
-                        }else {
-                            News.error("RGV浠诲姟纭浣�"+commandFinish+"鍥炶澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
-                        }
-                    } else {
-                        News.error("RGV浠诲姟纭浣�"+commandFinish+"鍐欏叆澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
-                    }
-                }while (writeCount2<5);
+            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;
             }
         }
+        log.info("浠诲姟瀹屾垚涓嬪彂绾跨▼,灏忚溅鍙�"+ slave.getId()+"鏃堕棿鎴筹細"+System.currentTimeMillis());
 
         try {
             // 鏃ュ織璁板綍
             BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
             BasRgvOpt basRgvOpt = new BasRgvOpt(
-                    command.getTaskNo2(),
-                    command.getRgvNo(),
+                    0,
+                    0,
+                    slave.getId(),
                     new Date(),
-                    command.getTaskStatus2().toString(),
-                    command.getTargetPosition2(),
-                    command.getEndStaNo2(),
+                    String.valueOf(0),
+                    null,
+                    null,
+                    null,
+                    sign ? 1 : 0,
                     null,
                     new Date(),
                     null
             );
             bean.insert(basRgvOpt);
-        } catch (Exception ignore) {}
+        } catch (Exception ignore) {
+        }
 
-        if (result != null && result.IsSuccess) {
-            Thread.sleep(200);
-            this.readStatus();
-            log.info("RGV 宸ヤ綅2鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
-            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 宸ヤ綅2鍛戒护涓嬪彂锛� {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宸ヤ綅2鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-            log.error("鍐欏叆RGV plc宸ヤ綅2鏁版嵁澶辫触 ===>> [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;
         }
+    }
+
+
+    /**
+     * 娓呴櫎浣滀笟鍚姩涓�
+     */
+    @Override
+    public void setWrkSign() {
+        this.wrkSign = 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