From 388353ed9bad250663e8ad8129463d1ea80d46e6 Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期四, 24 四月 2025 16:21:25 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/core/thread/RgvThread.java             |  227 +++++------
 src/main/java/com/zy/core/cache/TaskProtocolCache.java      |   30 
 src/main/java/com/zy/asrs/entity/TaskWrk.java               |   11 
 src/main/java/com/zy/asrs/utils/RouteUtils.java             |  444 +---------------------
 src/main/java/com/zy/core/model/RgvSlave.java               |    6 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  348 +++++++++++++++-
 src/main/resources/application-prod.yml                     |   36 +
 src/main/java/com/zy/core/MainProcess.java                  |    3 
 src/main/java/com/zy/core/model/protocol/TaskProtocol.java  |   21 
 src/main/java/com/zy/asrs/utils/TrackRangeUtils.java        |   49 ++
 10 files changed, 564 insertions(+), 611 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/TaskWrk.java b/src/main/java/com/zy/asrs/entity/TaskWrk.java
index ce9f34c..220c720 100644
--- a/src/main/java/com/zy/asrs/entity/TaskWrk.java
+++ b/src/main/java/com/zy/asrs/entity/TaskWrk.java
@@ -352,4 +352,15 @@
         return Math.abs(day) + "澶�" + Math.abs(hour) + "灏忔椂" + Math.abs(min) + "鍒�" + Math.abs(s) + "绉�";
     }
 
+
+
+    public Integer getTargetPointConvert(){
+        switch (targetPoint){
+            case "11":
+                return 11;
+            default:
+                return null;
+        }
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index c1c4edb..fa0501d 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -13,25 +13,24 @@
 import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.CommandUtils;
+import com.zy.asrs.utils.RouteUtils;
+import com.zy.asrs.utils.TrackRangeUtils;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.service.CommonService;
 import com.zy.common.utils.HttpHandler;
 import com.zy.core.CrnThread;
 import com.zy.core.DevpThread;
-import com.zy.core.cache.MessageQueue;
-import com.zy.core.cache.RgvStatusCache;
-import com.zy.core.cache.SlaveConnection;
+import com.zy.core.cache.*;
 import com.zy.core.enums.*;
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.DevpSlave;
 import com.zy.core.model.RgvSlave;
 import com.zy.core.model.Task;
 import com.zy.core.model.command.CrnCommand;
-import com.zy.core.model.protocol.CrnProtocol;
-import com.zy.core.model.protocol.RgvProtocol;
-import com.zy.core.model.protocol.StaProtocol;
+import com.zy.core.model.protocol.*;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.BarcodeThread;
+import com.zy.core.thread.RgvThread;
 import com.zy.core.thread.SiemensDevpThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +41,7 @@
 
 import java.io.IOException;
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -80,6 +80,8 @@
     private CommonService commonService;
     @Autowired
     private CrnController crnController;
+    @Autowired
+    private BasDevpPositionService basDevpPositionService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -99,6 +101,9 @@
 
     @Value("${constant-parameters.trackProportion}")
     private Long trackProportion;
+
+    @Value("${constant-parameters.avoidDistance}")
+    private Long avoidDistance;
 
     public void generateStoreWrkFile() {
         try {
@@ -1106,25 +1111,63 @@
         return taskWrk;
     }
 
-    public boolean deviceDetection(RgvSlave slave){
+    public String rgvOtherTaskWrk(RgvSlave slave){
+
+        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId());
+        TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
+        ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
+        if (!allTaskProtocol.isEmpty()){
+            for (TaskProtocol taskProtocol : allTaskProtocol.values()){
+                if (taskProtocol.getTaskNo() != 0 ){
+                    return taskProtocol.getTaskNo().toString();
+                }
+            }
+        }
+        return "鏃�";
+
+    }
+    public boolean rgvDetection(RgvSlave slave){
         RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
-        if (rgvProtocol == null) {
+        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+
+        if (rgvProtocol == null || rgvTaskProtocol ==null) {
             return false;
         }
-        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L)
+        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 || rgvProtocol.getRgvPosDestination() == 0L
                 || (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
             return false;
         }
         RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
+
         if (rgvProtocolOther == null) {
             return false;
         }
         if (rgvProtocolOther.statusEnable){
-            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
+            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1  || rgvProtocolOther.getRgvPosDestination() == 0L) {
                 return false;
             }
         }
         return true;
+    }
+
+    public TaskWrk deviceDetection(RgvSlave.RgvStn inSta){
+
+        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
+        StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+        if (staProtocol == null){
+            return null;
+        }
+        // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+        if (staProtocol.isAutoing()
+//                && staProtocol.isLoading()
+                && staProtocol.getWorkNo()!=0) {
+            TaskWrk taskWrk = taskWrkService.selectByTaskNo(staProtocol.getWorkNo().toString());
+            if (taskWrk!=null){
+                return taskWrk;
+            }
+        }
+        return null;
     }
 
     public boolean rgvOtherStatusEnable(RgvSlave slave){
@@ -1134,42 +1177,269 @@
         }
         if (rgvProtocolOther.statusEnable){
 //            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
-                return true;
+            return true;
 //            }
         }
         return false;
     }
 
-
-    private void sc(){
-
-
-        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
-            if (!deviceDetection(rgvSlave)){
-                continue;
-            }
-            RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
-
-            RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(rgvSlave.getOtherId());
-
-            //姹傚嚭褰撳墠杞﹀彲杩愯鑼冨洿
-            Long[] farthestPoint = new Long[]{0L,0L};
-            if (!rgvProtocolOther.statusEnable){
-                farthestPoint = new Long[]{0L,0L};
-            } else {
-                if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)){
-
-                }
-            }
-
-
-            // 閬嶅巻鍏ュ簱鍙�
-            for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSStn()) {
-
-            }
+    public boolean deviceRgvDetection(Integer startSta,RgvSlave rgvSlave,Integer endSta){
+        BasDevpPosition basDevpPositionStartSta = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", startSta));
+        if (basDevpPositionStartSta == null){
+            return false;
         }
 
+        BasDevpPosition basDevpPositionEndSta = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", endSta));
+        if (basDevpPositionEndSta == null){
+            return false;
+        }
+
+        DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, basDevpPositionEndSta.getPlcId());
+        StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(endSta);
+        if (staProtocolEnd == null){
+            return false;
+        }
+        // 鍒ゆ柇鏄惁婊¤冻鏀捐揣鏉′欢
+        if (!staProtocolEnd.isAutoing() || staProtocolEnd.isLoading()) {
+            return false;
+        }
+
+        if (!rgvDetection(rgvSlave)){
+            return false;
+        }
+
+        //  a褰撳墠  b  other
+        //  b鍙敤
+            //  b鏃犱换鍔�
+                    //  鍗婅竟鍖哄煙鍐呭叏浠诲姟
+                    //  鍗婅竟鍖哄煙鍐呭彇璐т换鍔�
+                    //  鍗婅竟鍖哄煙鍐呮斁璐т换鍔�
+                //鍒囨崲B
+                    //  鍗婅竟鍖哄煙鍐呭叏浠诲姟
+                    //  鍗婅竟鍖哄煙鍐呭彇璐т换鍔�
+                    //  鍗婅竟鍖哄煙鍐呮斁璐т换鍔�
+            //b 鏈変换鍔�
+                //  鍙敤鍖哄煙浠诲姟
+                //  鍙敤鍖哄煙浠诲姟鍐呭彇璐т换鍔�
+                    //
+         // b绂佺敤
+            // 鍏ㄥ尯鍩熶换鍔�  灏辫繎鍙栬揣
+
+
+        return false;
     }
 
+    public synchronized void taskStart() {
+        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+            try{
+                if (rgvDetection(rgvSlave)){
+                    for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()){
+                        TaskWrk taskWrk = deviceDetection(inSta);
+                        if (taskWrk!=null){
+                            if (deviceRgvDetection(inSta.getStaNo(),rgvSlave,taskWrk.getTargetPointConvert())){
+                                RgvProtocol rgvStatus = RgvStatusCache.getRgvStatus(rgvSlave.getId());
+
+
+                            }
+                        }
+                    }
+                }
+            } catch (Exception e){
+                log.error("浠诲姟鐢熸垚澶辫触===銆嬪紓甯镐俊鎭細{}",e.getMessage());
+            }
+        }
+    }
+
+    public synchronized void DevpTaskNoRun() {
+        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+            try{
+                if (rgvDetection(rgvSlave)){
+                    String taskNoNow = rgvOtherTaskWrk(rgvSlave);
+                    List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("PLC_POSITION", true));
+                    boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave);
+                    if (basDevpPositions.isEmpty()) {
+                        log.error("鑾峰彇鎵�鏈夌珯鐐逛俊鎭紓甯�");
+                        continue;
+                    }
+                    List<TaskWrk> taskWrkList = new ArrayList<>();
+                    List<Integer> staList = new ArrayList<>();
+                    for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()){
+                        TaskWrk taskWrk = deviceDetection(inSta);
+                        if (taskWrk!=null){
+                            if (taskWrk.getTaskNo().equals(taskNoNow)) continue;
+                            taskWrkList.add(taskWrk);
+                            staList.add(inSta.getStaNo());
+                        }
+                    }
+
+                    if (rgvOtherStatusEnable(rgvSlave)){
+                        //鍒嗘垚涓婁笅涓ら儴鍒嗕换鍔�
+                        List<Integer>[] avoidRange = RouteUtils.avoidRange(staList, basDevpPositions);
+                        List<Integer> rangeListSou = avoidRange[itSmall ? 0 : 1];
+                        List<Integer> rangeListSouOther = avoidRange[itSmall ? 1 : 0];
+                        //灏辫繎鎺掑簭
+                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
+                        List<Integer> rangeList = RouteUtils.SortNearby(rangeListSou, rgvProtocol.RgvPos, basDevpPositions);
+                        List<Integer> rangeListOther = RouteUtils.SortNearby(rangeListSouOther, rgvProtocol.RgvPos, basDevpPositions);
+                        if (taskNoNow.equals("鏃�")){ //b 鏃犱换鍔�
+                                //鎵�灞為儴鍒嗗氨杩涘彇璐�
+                                //  鍗婅竟鍖哄煙鍐呭叏浠诲姟
+                            boolean sign = false;
+
+                            for (Integer staNoNow : rangeList){
+                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+                                    if (rgvStn.getStaNo().equals(staNoNow)){
+                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+                                        if (taskWrk!=null){
+                                            if ()
+                                        }
+                                    }
+                                }
+                            }
+                            if (!sign){
+                                //  鍗婅竟鍖哄煙鍐呭彇璐т换鍔�
+                                for (Integer staNoNow : rangeList){
+                                    for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+                                        if (rgvStn.getStaNo().equals(staNoNow)){
+                                            sign = taskGenerate(rgvSlave,rgvStn,0);
+                                            break;
+                                        }
+                                    }
+                                    if (sign){
+                                        break;
+                                    }
+                                }
+                            }
+                            if (!sign){
+                                //  鍗婅竟鍖哄煙鍐呮斁璐т换鍔�
+                                for (Integer staNoNow : rangeListOther){
+                                    for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+                                        if (rgvStn.getStaNo().equals(staNoNow)){
+
+                                            break;
+                                        }
+                                    }
+                                    if (sign){
+                                        break;
+                                    }
+                                }
+                            }
+                            //鍒囨崲B
+                            continue;
+                        } else {//b 鏈変换鍔�
+
+                                //  鍙敤鍖哄煙浠诲姟
+                                //  鍙敤鍖哄煙浠诲姟鍐呭彇璐т换鍔�
+                                //鍒囨崲B
+
+                            continue;
+                        }
+                        break;
+                    } else {
+                        //鍙敤鍖哄煙灏辫繎鍙栬揣
+                    }
+                }
+            } catch (Exception e){
+                log.error("浠诲姟鐢熸垚澶辫触===銆嬪紓甯镐俊鎭細{}",e.getMessage());
+            }
+        }
+    }
+    //鑾峰彇璧风偣涓庣粓鐐瑰璞�
+    public RgvSlave.RgvStn getRgvStnNow(RgvSlave rgvSlave,Integer staNo) {
+        for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+            if (rgvStn.getStaNo().equals(staNo)){
+                return rgvStn;
+            }
+        }
+        for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvOutSta()){
+            if (rgvStn.getStaNo().equals(staNo)){
+                return rgvStn;
+            }
+        }
+        return null;
+    }
+
+    //鑾峰彇璧风偣涓庣粓鐐瑰璞�
+    public RgvSlave.RgvStn[] getRgvStnAll(RgvSlave rgvSlave,Integer souSta,Integer endSta) {
+        RgvSlave.RgvStn[] rgvStns = new RgvSlave.RgvStn[2];
+        for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+            if (rgvStn.getStaNo().equals(souSta)){
+                rgvStns[0] = rgvStn;
+            }
+        }
+        for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvOutSta()){
+            if (rgvStn.getStaNo().equals(endSta)){
+                rgvStns[1] = rgvStn;
+            }
+        }
+        return rgvStns;
+    }
+
+    public boolean taskGenerate(RgvSlave rgvSlave,RgvSlave.RgvStn rgvStn,Integer sign) {
+        try{
+            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+            TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
+
+            TaskProtocol issuedTake = new TaskProtocol();
+            TaskProtocol issuedPut = new TaskProtocol();
+            try{
+                ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
+                if (allTaskProtocol.size() > 0){
+                    return false;
+                }
+                TaskWrk taskWrk = deviceDetection(rgvStn);
+                if (taskWrk == null){
+                    return false;
+                }
+                Integer targetPointConvert = taskWrk.getTargetPointConvert();
+                if (targetPointConvert == null){
+                    return false;
+                }
+                RgvSlave.RgvStn rgvStnEnd = getRgvStnNow(rgvSlave, targetPointConvert);
+                if (rgvStnEnd == null){
+                    return false;
+                }
+
+                BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo()));
+                BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert));
+                //鎵ц
+                issuedTake.setTaskNo(Long.valueOf(taskWrk.getTaskNo()));
+                issuedTake.setTaskStatus(1);
+                issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(),issuedTake.getTaskStatus()));
+                issuedTake.setTargetPosition(basDevpPositionSou.getPlcPosition());
+                issuedTake.setIsRunning(1);
+                issuedTake.setDirection(rgvStn.isDirection());
+
+
+                issuedPut.setTaskNo(Long.valueOf(taskWrk.getTaskNo()));
+                issuedPut.setTaskStatus(2);
+                issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(),issuedPut.getTaskStatus()));
+                issuedPut.setTargetPosition(basDevpPositionEnd.getPlcPosition());
+                issuedPut.setIsRunning(1);
+                issuedPut.setDirection(rgvStnEnd.isDirection());
+            }catch (Exception e){
+                log.error("浠诲姟鐢熸垚澶辫触issued1===銆嬪紓甯镐俊鎭細{}",e.getMessage());
+                return false;
+            }
+
+            switch (sign){
+                case 1:
+                    taskProtocolCache.updateTaskProtocol(issuedTake);
+                    break;
+                case 2:
+                    taskProtocolCache.updateTaskProtocol(issuedPut);
+                    break;
+                default:
+                    taskProtocolCache.updateTaskProtocol(issuedTake);
+                    taskProtocolCache.updateTaskProtocol(issuedPut);
+                    break;
+            }
+        } catch (Exception e){
+            log.error("浠诲姟鐢熸垚澶辫触issued2===銆嬪紓甯镐俊鎭細{}",e.getMessage());
+        }
+        return true;
+    }
+
+
+
 }
diff --git a/src/main/java/com/zy/asrs/utils/RouteUtils.java b/src/main/java/com/zy/asrs/utils/RouteUtils.java
index e9d52e4..36ac1a3 100644
--- a/src/main/java/com/zy/asrs/utils/RouteUtils.java
+++ b/src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -1,6 +1,10 @@
 package com.zy.asrs.utils;
 
+import com.zy.asrs.entity.BasDevpPosition;
+import com.zy.asrs.entity.TaskWrk;
+import com.zy.asrs.entity.WrkMast;
 import com.zy.core.enums.RouteCollectCountType;
+import com.zy.core.model.RgvSlave;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -11,441 +15,33 @@
  * Created by Monkey D. Luffy on 2023/7/18
  */
 public class RouteUtils {
+    //鎺掑簭  鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  0:宸� 灏�   1:鍙� 澶�
+    public static List<Integer>[] avoidRange(List<Integer> staNoList,List<BasDevpPosition> basDevpPositions) {
+        List<Integer>[] avoidRangeArray = new ArrayList[2];
 
-    public static final List<Integer> MERGE_STA_NO_One = new ArrayList<Integer>() {{
-        add(171);add(116);add(117);
-    }};
 
-    public static final List<Integer> MERGE_STA_NO_TWO = new ArrayList<Integer>() {{
-        add(113);add(123);add(114);add(1142);
-    }};
 
-    public static final List<Integer> MERGE_STA_NO_THREE = new ArrayList<Integer>() {{
-        add(107);add(118);add(108);add(119);
-    }};
 
-    public static final List<Integer> MERGE_STA_NO_FOUR = new ArrayList<Integer>() {{
-        add(110);add(120);add(111);add(121);
-    }};
 
-    public static final List<Integer> MERGE_STA_NO_FIVE = new ArrayList<Integer>() {{
-        add(104);add(122);add(105);
-    }};
 
-    public static final List<Integer> MERGE_STA_NO_SIX = new ArrayList<Integer>() {{
-        add(108);add(119);add(110);add(120);
-    }};
+        return avoidRangeArray;
+    }
 
-    public static final List<Integer> MERGE_STA_NO_SEVEN = new ArrayList<Integer>() {{
-
-    }};
-
-    public static final List<Integer> MERGE_STA_NO_EIGHT = new ArrayList<Integer>() {{
-
-    }};
-
-    public static final List<Integer> MERGE_STA_NO_NINE = new ArrayList<Integer>() {{
-
-    }};
-
-    //    姝e簭
-    public static final List<Integer> TRACK_POSITION_POSITIVE_SEQUENCE1 = new ArrayList<Integer>() {{
-        add(101);add(102);add(104);add(122);add(105);add(107);add(118);add(108);
-    }};
-    //    鍙嶅簭
-    public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE2 = new ArrayList<Integer>() {{
-        add(117);add(116);add(171);add(1142);add(114);add(123);add(113);add(121);add(111);add(120);add(110);
-    }};
-
-    public static Integer getEndRoute(Integer endRoute,Integer rgvNo){
-        if (rgvNo == 1){
-            if (TRACK_POSITION_POSITIVE_SEQUENCE1.contains(endRoute)){
-                return endRoute;
-            } else {
-                return 108;
-            }
-        } else if (rgvNo == 2){
-            if (TRACK_POSITION_REVERSE_SEQUENCE2.contains(endRoute)){
-                return endRoute;
-            } else {
-                return 110;
+    //鎻愬彇绔欑偣闆嗗悎
+    public static List<Integer> BasDevpPositionExtractSites(List<BasDevpPosition> basDevpPositions){
+        List<Integer> siteList = new ArrayList<>();
+        for (BasDevpPosition basDevpPosition : basDevpPositions){
+            if (!siteList.contains(basDevpPosition.getDevNo())){
+                siteList.add(basDevpPosition.getDevNo());
             }
         }
-        return endRoute;
+        return siteList;
     }
 
-//    姝e簭
-    public static final List<Integer> TRACK_POSITION_POSITIVE_SEQUENCE = new ArrayList<Integer>() {{
-        add(101);add(102);add(104);add(122);add(105);add(107);add(118);add(108);add(119);add(110);add(120);add(111);add(121);add(113);add(123);add(114);add(1142);add(171);add(116);add(117);
-    }};
-//    鍙嶅簭
-    public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE = new ArrayList<Integer>() {{
-        add(117);add(116);add(171);add(1142);add(114);add(123);add(113);add(121);add(111);add(120);add(110);add(119);add(108);add(118);add(107);add(105);add(122);add(104);add(102);add(101);
-    }};
+    //鎻愬彇绔欑偣闆嗗悎
+    public static List<Integer> SortNearby(List<Integer> staNoList,Long rgvNowPos,List<BasDevpPosition> basDevpPositions){
+        List<Integer> siteList = new ArrayList<>();
 
-    public static String zerofill(String msg, Integer count){
-        if (msg.length() == count){
-            return msg;
-        } else if (msg.length() > count){
-            return msg.substring(0, 16);
-        } else {
-            StringBuilder msgBuilder = new StringBuilder(msg);
-            for (int i = 0; i<count-msg.length(); i++){
-                msgBuilder.insert(0,"0");
-            }
-            return msgBuilder.toString();
-        }
-    }
-//    /*
-//     * 鑾峰彇骞叉秹鏈�杩滅珯鐐�
-//     * */
-//    public static Integer RouteIndexFarMas(int rgvNo,Integer staNo){
-//        List<Integer> staFall = new ArrayList<>();
-//        if (MERGE_STA_NO_SIX.contains(staNo)){
-//            staFall = MERGE_STA_NO_SIX;
-//        }else if (MERGE_STA_NO_One.contains(staNo)){
-//            staFall = MERGE_STA_NO_One;
-//        }else if (MERGE_STA_NO_TWO.contains(staNo)){
-//            staFall = MERGE_STA_NO_TWO;
-//        }else if (MERGE_STA_NO_THREE.contains(staNo)){
-//            staFall = MERGE_STA_NO_THREE;
-//        }else if (MERGE_STA_NO_FOUR.contains(staNo)){
-//            staFall = MERGE_STA_NO_FOUR;
-//        }else if (MERGE_STA_NO_FIVE.contains(staNo)){
-//            staFall = MERGE_STA_NO_FIVE;
-//        }else {
-//            return staNo;
-//        }
-//
-//        int indexNo = 0;
-//        if (rgvNo==1){
-//            indexNo=staFall.size()-1;
-//        }
-//        return staFall.get(indexNo);
-//    }
-
-    /*
-     * 鑾峰彇骞叉秹鏈�杩滅珯鐐�
-     * */
-    public static Integer RouteIndexFarMas(int rgvNo,Integer staNo){
-        if (rgvNo==1){
-            switch (staNo){
-                case 101:
-                case 102: return  102;
-                case 104:
-                case 122: return  118;
-                case 105: return  119;
-                case 107:
-                case 118: return  108;
-                case 108:
-                case 119: return  111;
-                case 110:
-                case 120: return  113;
-                case 111:
-                case 121: return  113;
-                case 113: return  114;
-                case 123:
-                case 114: return  1142;
-                default:
-                    return 116;
-            }
-        }else {
-            switch (staNo){
-                case 117:
-                case 116:
-                case 171:
-                    return  1142;
-                case 1142:
-                case 114: return  113;
-                case 123:
-                case 113: return  111;
-                case 121: return  110;
-                case 111: return  110;
-                case 120:
-                case 110: return 108;
-                case 119:
-                case 108: return  107;
-                case 118:
-                case 107: return  105;
-                case 105:
-                case 122:
-                case 104: return  104;
-                default:
-                    return 102;
-            }
-        }
-    }
-    /*
-     * 鑾峰彇骞叉秹鏈�杩滅珯鐐�
-     * */
-    public static Integer RouteIndexFarMasL(int rgvNo,Integer staNo){
-        if (rgvNo==1){
-            switch (staNo){
-                case 101:
-                case 102:
-                case 104:
-                case 122:
-                case 105:
-                case 107:
-                    return 118;
-                case 118:
-                    return staNo;
-                default:
-                    return 108;
-            }
-        }else {
-            switch (staNo){
-                case 117:
-                case 116:
-                case 171:
-                case 1142:
-                case 114:
-                case 123:
-                case 113:
-                case 121:
-                    return 121;
-                case 111:
-                    return staNo;
-                default:
-                    return 110;
-            }
-        }
-    }
-
-    // 鑾峰彇褰撳墠灏忚溅鏈璧扮殑璺嚎闆嗗悎
-    public static List<Integer> getRoute(Integer groupStart,Integer groupEnd){
-        boolean sign = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupStart) < TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupEnd);
-        List<Integer> result = new ArrayList<>();
-        List<Integer> groupRoute = new ArrayList<>();
-        if (sign){
-            groupRoute = TRACK_POSITION_POSITIVE_SEQUENCE;
-        }else {
-            groupRoute = TRACK_POSITION_REVERSE_SEQUENCE;
-        }
-        if (groupRoute.contains(groupStart) && groupRoute.contains(groupEnd)) {
-            sign = false;
-            for (Integer route : groupRoute) {
-                if (route.equals(groupStart)){
-                    sign=true;
-                }
-                if (route.equals(groupEnd)){
-                    result.add(route);
-                    break;
-                }
-                if (sign){
-                    result.add(route);
-                }
-            }
-        }else {
-            return null;
-        }
-        return result;
-    }
-
-    /*
-    * 鑾峰彇鏈�杩滅珯鐐�
-    * */
-    public static Integer RouteIndexFarMas(Integer a,Integer b,Integer c,Integer d){
-        int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(a);
-        int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(b);
-        int ic = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(c);
-        int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d);
-        if (id==0){
-            if (ia>ib){
-                if (ia>ic){
-                    return a;
-                }else {
-                    return c;
-                }
-            }else {
-                if (ib>ic){
-                    return b;
-                }else {
-                    return c;
-                }
-            }
-        }else {
-            if (ia<ib){
-                if (ia<ic){
-                    return a;
-                }else {
-                    return c;
-                }
-            }else {
-                if (ib<ic){
-                    return b;
-                }else {
-                    return c;
-                }
-            }
-        }
-    }
-
-    /*
-     * 鑾峰彇鏈�杩滅珯鐐�
-     * a:褰撳墠浣嶇疆
-     * b:寮�濮嬩綅缃�
-     * c:缁撴潫浣嶇疆
-     * d:閿佸紑濮嬩綅缃�
-     * */
-    public static Integer RouteIndexFarMasNew(Integer a,Integer b,Integer c,Integer d){
-        int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(a);
-        int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(b);
-        int ic = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(c);
-        int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d);
-        if (id==0){
-            if (ia>ib){
-                if (ia>ic){
-                    return a;
-                }else {
-                    return c;
-                }
-            }else {
-                if (ib>ic){
-                    return b;
-                }else {
-                    return c;
-                }
-            }
-        }else {
-            if (ia<ib){
-                if (ia<ic){
-                    return a;
-                }else {
-                    return c;
-                }
-            }else {
-                if (ib<ic){
-                    return b;
-                }else {
-                    return c;
-                }
-            }
-        }
-    }
-
-    public static Integer[] RouteIndexFarArr(Integer a,Integer b,Integer c,Integer d){
-        int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(a);
-        int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(b);
-        int ic = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(c);
-        int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d);
-        return new Integer[]{ia,ib,ic,id};
-    }
-
-    /*
-     * a  灏忚溅褰撳墠浣嶇疆
-     * b  灏忚溅浠诲姟寮�濮嬩綅缃�
-     * c  灏忚溅浠诲姟缁撴潫浣嶇疆
-     * d  灏忚溅鍒濆浣嶇疆
-     * 鑾峰彇鏈�澶ц矾寰勫樊鍊�
-     * */
-    public static List<Integer>  RouteMapCurrentFar(Integer a,Integer b,Integer c,Integer d){
-        Integer farStn = RouteIndexFarMas(a, b, c, d);
-        return getRouteIntersection(TRACK_POSITION_POSITIVE_SEQUENCE,getRoute(farStn, d), RouteCollectCountType.DIFFERENCESET);
-    }
-
-    public static List<Integer>  RouteMapCurrentFar(Integer farStn,Integer d){
-        return getRouteIntersection(TRACK_POSITION_POSITIVE_SEQUENCE,getRoute(farStn, d), RouteCollectCountType.DIFFERENCESET);
-    }
-
-    /*
-    * 鍙︿竴鍙板皬杞︽渶杩滀綅缃�
-    * */
-    public static Integer RouteMapOtherFarStnNo(List<Integer> routeDIFF,Integer d){
-        int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d);
-        if (id==0){
-            return routeDIFF.get(0);
-        }else {
-            int size = routeDIFF.size();
-            return routeDIFF.get(size-1);
-        }
-    }
-
-    //鏄惁鏈変氦闆�
-    public static boolean getRouteBoolean(List<Integer> groupCurrent,List<Integer> groupOther){
-        for (Integer positionCurrent : groupCurrent){
-            for (Integer positionOther : groupOther){
-                if (positionCurrent.equals(positionOther)){
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    //闆嗗悎杩愮畻
-    public static List<Integer> getRouteIntersection(List<Integer> groupCurrent, List<Integer> groupOther, RouteCollectCountType routeCollectCountType){
-        switch (routeCollectCountType){
-            case INTERSECTION:
-                //浜ら泦
-                return groupCurrent.stream().filter(item -> groupOther.contains(item)).collect(toList());
-            case DIFFERENCESET:
-                //宸泦
-                return groupCurrent.stream().filter(item -> !groupOther.contains(item)).collect(toList());
-            case UNION:
-                //骞堕泦
-                groupCurrent.addAll(groupOther);
-                return groupCurrent;
-            case DEDUPLICATIONUNION:
-                //鍘婚噸骞堕泦
-                groupCurrent.addAll(groupOther);
-                return groupCurrent.stream().distinct().collect(toList());
-            default:
-                return null;
-        }
-    }
-
-    /*
-    * a  灏忚溅褰撳墠浣嶇疆
-    * b  灏忚溅浠诲姟寮�濮嬩綅缃�
-    * c  灏忚溅浠诲姟缁撴潫浣嶇疆
-    * sign  鍙︿竴涓皬杞︾┖闂叉爣璁�
-    * */
-    public static boolean RouteAutoBoolean(Integer a,Integer b,Integer c,Integer aa,Integer bb,Integer cc,boolean idleOther){
-        List<Integer> routeCurrent = getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION);//骞堕泦
-        List<Integer> routeOther = getRouteIntersection(getRoute(aa, cc), getRoute(bb, cc), RouteCollectCountType.DEDUPLICATIONUNION);//
-        return !getRouteBoolean(routeCurrent, routeOther);  //鏄惁鏈変氦闆�
-    }
-
-    public static List<Integer> RouteAutoBoolean(Integer a,Integer b,Integer c){
-        return getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION);
-    }
-
-
-
-    public static void main(String[] arge){
-        List<Integer> routeCurrent = getRoute(104, 119);  //鑾峰彇褰撳墠灏忚溅璺緞
-        List<Integer> routeOther = getRoute(117, 118);  //鑾峰彇鍏跺畠灏忚溅璺緞
-        System.out.println("褰撳墠灏忚溅璺緞:\t"+routeCurrent);
-        System.out.println("鍏跺畠灏忚溅璺緞:\t"+routeOther);
-
-        boolean routeBoolean = getRouteBoolean(routeCurrent, routeOther);  //鏄惁鏈変氦闆�
-        System.out.println("鏄惁鏈変氦闆�:\t"+routeBoolean);
-
-        List<Integer> routeIntersection = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.INTERSECTION);//浜ら泦
-        System.out.println("璺緞浜ら泦锛歕t"+routeIntersection);
-
-        List<Integer> routeIntersection1 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DIFFERENCESET);//宸泦
-        System.out.println("璺緞宸泦锛歕t"+routeIntersection1);
-
-        List<Integer> routeIntersection2 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.UNION);//骞堕泦
-        System.out.println("璺緞骞堕泦锛歕t"+routeIntersection2);
-
-        List<Integer> routeIntersection3 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DEDUPLICATIONUNION);//鍘婚噸骞堕泦
-        System.out.println("璺緞鍘婚噸骞堕泦锛歕t"+routeIntersection3);
-
-        System.out.println(RouteAutoBoolean(101,104,119,114,116,120,true));
-
-        List<Integer> routeDIFF = RouteMapCurrentFar(114, 104, 119, 117);
-        System.out.println("褰撳墠璺緞鏈�澶ч泦鍚堬細\t"+ routeDIFF);
-
-        Integer routeFarOther= RouteMapOtherFarStnNo(routeDIFF,117);
-        System.out.println("鍙︿竴鍙板皬杞︽渶杩滅珯鐐癸細\t"+routeFarOther);
-
-
-        Integer[] integers = RouteIndexFarArr(114, 104, 119, 101);
-        for (Integer integer:integers){
-            System.out.println(integer);
-        }
+        return siteList;
     }
 }
diff --git a/src/main/java/com/zy/asrs/utils/TrackRangeUtils.java b/src/main/java/com/zy/asrs/utils/TrackRangeUtils.java
new file mode 100644
index 0000000..2be2744
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/TrackRangeUtils.java
@@ -0,0 +1,49 @@
+package com.zy.asrs.utils;
+
+import com.zy.core.cache.RgvStatusCache;
+import com.zy.core.model.RgvSlave;
+import com.zy.core.model.protocol.RgvProtocol;
+
+/**
+ * Created by Monkey D. Luffy on 2023/7/18
+ */
+public class TrackRangeUtils {
+
+    public boolean IsItSmall(RgvSlave slave) {
+        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+        if (rgvProtocol.getRgvPos() < rgvProtocolOther.getRgvPos()) {
+            return true;
+        }
+        return false;
+    }
+
+    public Long[][] avoidRange(RgvSlave slave, Long trackEntireLength, Long trackBenchmark, Long avoidDistance) {
+        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+
+        RgvProtocol rgvProtocolE, rgvProtocolB;
+        if (rgvProtocol.getRgvPos() < rgvProtocolOther.getRgvPos()) {
+            rgvProtocolE = rgvProtocolOther;
+            rgvProtocolB = rgvProtocol;
+        } else {
+            rgvProtocolE = rgvProtocol;
+            rgvProtocolB = rgvProtocolOther;
+        }
+
+        long entireLengthE = trackEntireLength - rgvProtocolE.getCarBodyKunPeng();
+        long benchmarkE = trackBenchmark + rgvProtocolB.getCarBodyJiaoMing() + rgvProtocolB.getCarBodyKunPeng() + avoidDistance + rgvProtocolE.getCarBodyJiaoMing();
+
+        long entireLengthB = trackEntireLength - rgvProtocolE.getCarBodyKunPeng() - rgvProtocolE.getCarBodyJiaoMing() - avoidDistance - rgvProtocolB.getCarBodyKunPeng();
+        long benchmarkB = trackBenchmark + rgvProtocolB.getCarBodyJiaoMing();
+
+
+        return new Long[][]{new Long[]{entireLengthE, benchmarkE}, new Long[]{entireLengthB, benchmarkB}};
+
+    }
+
+    public boolean avoidRange(Long avoid, Long[] range) {
+        return avoid < range[0] && avoid > range[1];
+    }
+
+}
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index f3a40ba..1408c99 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -51,6 +51,9 @@
                     // 鍫嗗灈鏈哄紓甯镐俊鎭褰�
                     mainService.recCrnErr();
 
+                    // 浠诲姟涓嬪彂
+                    mainService.taskStart();
+
 
 
                 } catch (Exception e) {
diff --git a/src/main/java/com/zy/core/cache/TaskProtocolCache.java b/src/main/java/com/zy/core/cache/TaskProtocolCache.java
index 50fa398..f4d7519 100644
--- a/src/main/java/com/zy/core/cache/TaskProtocolCache.java
+++ b/src/main/java/com/zy/core/cache/TaskProtocolCache.java
@@ -15,7 +15,7 @@
 @Slf4j
 public class TaskProtocolCache {
     // 鏈湴缂撳瓨锛岄敭涓� taskNo锛屽�间负 TaskProtocol
-    private final ConcurrentHashMap<Long, TaskProtocol> cache = new ConcurrentHashMap<>();
+    private final ConcurrentHashMap<String, TaskProtocol> cache = new ConcurrentHashMap<>();
 
     // 璇诲啓閿侊紝纭繚绾跨▼瀹夊叏
 //    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
@@ -24,28 +24,16 @@
      * 鏇存柊璁惧鐘舵��
      */
     public void updateTaskProtocol(TaskProtocol status) {
-        cache.put(status.getTaskNo(), status);
+        cache.put(status.getTaskNoDirection(), status);
     }
 
     /**
      * 鍒犻櫎浠诲姟缂撳瓨
      */
-    public TaskProtocol removeTaskProtocol(String taskNo) {
+    public TaskProtocol removeTaskProtocol(String taskNoDirection) {
 //        lock.readLock().lock(); // 鍔犺閿�
         try {
-            return cache.remove(taskNo);
-        } finally {
-//            lock.readLock().unlock(); // 閲婃斁璇婚攣
-        }
-    }
-
-    /**
-     * 鑾峰彇浠诲姟缂撳瓨
-     */
-    public TaskProtocol getTaskProtocol(String taskNo) {
-//        lock.readLock().lock(); // 鍔犺閿�
-        try {
-            return cache.get(taskNo);
+            return cache.remove(taskNoDirection);
         } finally {
 //            lock.readLock().unlock(); // 閲婃斁璇婚攣
         }
@@ -54,7 +42,7 @@
     /**
      * 鑾峰彇鎵�鏈変换鍔�
      */
-    public ConcurrentHashMap<Long, TaskProtocol> getAllTaskProtocol() {
+    public ConcurrentHashMap<String, TaskProtocol> getAllTaskProtocol() {
 //        lock.readLock().lock(); // 鍔犺閿�
         try {
             return new ConcurrentHashMap<>(cache); // 杩斿洖鍓湰
@@ -74,6 +62,10 @@
         }
         return new ArrayList<>();
     }
+
+    /**
+     * 鑾峰彇鎵�鏈夊彇浠诲姟
+     */
     public List<TaskProtocol> getAllTakeTaskProtocol() {
 //        lock.readLock().lock(); // 鍔犺閿�
         try {
@@ -90,7 +82,7 @@
     }
 
     /**
-     * 鑾峰彇鎵�鏈夊彇浠诲姟
+     * 鑾峰彇鎵�鏈夋斁浠诲姟
      */
     public List<TaskProtocol> getAllPutTaskProtocol() {
 //        lock.readLock().lock(); // 鍔犺閿�
@@ -108,7 +100,7 @@
     }
 
     /**
-     * 鑾峰彇鎵�鏈夊彇浠诲姟
+     * 鑾峰彇鎵�鏈夎璧颁换鍔�
      */
     public List<TaskProtocol> getAllWalkTaskProtocol() {
 //        lock.readLock().lock(); // 鍔犺閿�
diff --git a/src/main/java/com/zy/core/model/RgvSlave.java b/src/main/java/com/zy/core/model/RgvSlave.java
index 59b78ca..6ce92ff 100644
--- a/src/main/java/com/zy/core/model/RgvSlave.java
+++ b/src/main/java/com/zy/core/model/RgvSlave.java
@@ -29,7 +29,8 @@
     private Long carBodyKunPeng;
 
     // RGV鍏ュ簱婧愮珯鐐�
-    private List<RgvStn> rgvInSStn = new ArrayList<>();
+    private List<RgvStn> rgvInSta = new ArrayList<>();
+    private List<RgvStn> rgvOutSta = new ArrayList<>();
 
     @Data
     public static class RgvStn {
@@ -40,6 +41,9 @@
         // RGV绔欑偣缂栧彿
         private Integer staNo;
 
+        // RGV绔欑偣缂栧彿
+        private boolean direction;
+
 //        // 鎺�
 //        private Integer row;
 //
diff --git a/src/main/java/com/zy/core/model/protocol/TaskProtocol.java b/src/main/java/com/zy/core/model/protocol/TaskProtocol.java
index 1e36720..927d04d 100644
--- a/src/main/java/com/zy/core/model/protocol/TaskProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/TaskProtocol.java
@@ -7,27 +7,42 @@
  */
 @Data
 public class TaskProtocol {
+    private volatile String taskNoDirection; // 浠诲姟鍙凤紙涓诲睘鎬э級
     private volatile Long taskNo; // 浠诲姟鍙凤紙涓诲睘鎬э級
     private volatile Long targetPosition = 0L; // 鐩爣浣嶇疆
-    private volatile Long currentPosition = 0L; // 褰撳墠浣嶇疆
 
     private volatile int isRunning = 0; // 杩愯鐘舵��  0锛氬垵濮�  1锛氱瓑寰呮墽琛�  2锛氭墽琛屼腑 3锛氭墽琛屼腑鏂� 4锛氬畬缁�
 
     private volatile int taskStatus = 0; //浣滀笟妯″紡  0锛氳璧�  1锛氬彇  2锛氭斁
 
+    private volatile boolean direction; // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+
     public TaskProtocol(){}
 
-    public TaskProtocol(Long taskNo, Long targetPosition, Long currentPosition, int isRunning, int taskStatus) {
+    public TaskProtocol(Long taskNo, Long targetPosition, int isRunning, int taskStatus, boolean direction) {
         this.taskNo = taskNo;
         this.targetPosition = targetPosition;
-        this.currentPosition = currentPosition;
         this.isRunning = isRunning;
         this.taskStatus = taskStatus;
+        this.direction = direction;
     }
 
     public TaskProtocol(TaskProtocol taskProtocol) {
         this.taskNo = taskProtocol.getTaskNo();
         this.targetPosition = taskProtocol.getTargetPosition();
         this.taskStatus = taskProtocol.getTaskStatus();
+        this.direction = taskProtocol.direction;
+    }
+
+
+    public String gettaskNoDirection$(Long taskNo,int taskStatus){
+        String taskStatusStr = "Walk";
+        switch (taskStatus){
+            case 1:
+                taskStatusStr = "Tack";
+            case 2:
+                taskStatusStr = "Put";
+        }
+        return taskNo+"_"+taskStatusStr;
     }
 }
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 15214fe..6c86c58 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -13,6 +13,7 @@
 import com.zy.asrs.service.BasRgvOptService;
 import com.zy.asrs.service.BasRgvService;
 import com.zy.asrs.utils.RouteUtils;
+import com.zy.asrs.utils.TrackRangeUtils;
 import com.zy.core.ThreadHandler;
 import com.zy.core.cache.*;
 import com.zy.core.enums.RgvModeType;
@@ -44,7 +45,7 @@
 
     private SiemensS7Net siemensNet;
     private RgvSlave slave;
-//    private RgvProtocol rgvProtocol;
+    //    private RgvProtocol rgvProtocol;
     private TaskProtocolCache taskProtocolCache = new TaskProtocolCache();
     // # 杞ㄩ亾鎬婚暱
     private Long trackEntireLength = 100L;
@@ -70,7 +71,7 @@
     @SuppressWarnings("InfiniteLoopStatement")
     public void run() {
         boolean connect = this.connect();
-        if (connect){
+        if (connect) {
 
             // 鍚姩璇绘暟鎹嚎绋�
             new Thread(this::readStatusRgv).start();
@@ -83,7 +84,7 @@
         }
     }
 
-    private void readStatusRgv(){
+    private void readStatusRgv() {
         while (true) {
             try {
                 Thread.sleep(100);
@@ -91,7 +92,7 @@
                 readStatus();
 
             } catch (Exception e) {
-                log.error("RGV鏁版嵁璇诲彇绾跨▼寮傚父锛侊紒锛�"+e.getMessage());
+                log.error("RGV鏁版嵁璇诲彇绾跨▼寮傚父锛侊紒锛�" + e.getMessage());
                 initRgv();
 //                e.printStackTrace();
             }
@@ -109,7 +110,7 @@
                 // 浼戠湢 1 绉�
                 Thread.sleep(100);
 
-                if (!deviceDetection()){
+                if (!deviceDetection()) {
                     continue;
                 }
                 RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
@@ -130,7 +131,7 @@
                 RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
 
             } catch (Exception e) {
-                log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�"+e.getMessage());
+                log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�" + e.getMessage());
 //                e.printStackTrace();
             }
         }
@@ -144,7 +145,7 @@
             try {
                 // 浼戠湢 1 绉�
                 Thread.sleep(100);
-                if (!deviceDetection()){
+                if (!deviceDetection()) {
                     continue;
                 }
                 RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
@@ -159,36 +160,36 @@
                 }
 
                 List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getTakeOrPutTaskProtocol(rgvProtocol.getLoaded());
-                for(TaskProtocol taskProtocol: allTakeTaskProtocol){
-                    if (taskProtocol.getIsRunning() == 1){//鍑嗗涓嬪彂
+                for (TaskProtocol taskProtocol : allTakeTaskProtocol) {
+                    if (taskProtocol.getIsRunning() == 1) {//鍑嗗涓嬪彂
                         RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
                         //鍙岃溅
-                        if (rgvOtherStatusEnable()){
+                        if (rgvOtherStatusEnable()) {
                             //鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛�
-                            if (!otherRgvAvoid(taskProtocol.getTargetPosition())){
+                            if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
                                 continue;
                             }
                         }
-                        Thread.sleep(200);
+                        Thread.sleep(100);
                         TaskProtocol issued = new TaskProtocol(taskProtocol);
                         write(issued);
-                        taskProtocol.setIsRunning(taskProtocol.getIsRunning() +1);
+                        taskProtocol.setIsRunning(taskProtocol.getIsRunning() + 1);
                         taskProtocolCache.updateTaskProtocol(taskProtocol);
                         break;
                     }
                 }
             } catch (Exception e) {
-                log.error("RGV鍙栬揣浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�"+e.getMessage());
+                log.error("RGV鍙栬揣浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�" + e.getMessage());
 //                e.printStackTrace();
             }
         }
     }
 
-    public boolean deviceDetection(){
+    public boolean deviceDetection() {
         RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
         RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
 
-        if (rgvProtocol == null || rgvTaskProtocol ==null) {
+        if (rgvProtocol == null || rgvTaskProtocol == null) {
             return false;
         }
         if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 || rgvProtocol.getRgvPosDestination() == 0L
@@ -201,20 +202,20 @@
         if (rgvProtocolOther == null) {
             return false;
         }
-        if (rgvProtocolOther.statusEnable){
-            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1  || rgvProtocolOther.getRgvPosDestination() == 0L) {
+        if (rgvProtocolOther.statusEnable) {
+            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) {
                 return false;
             }
         }
         return true;
     }
 
-    public boolean rgvOtherStatusEnable(){
+    public boolean rgvOtherStatusEnable() {
         RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
         if (rgvProtocolOther == null) {
             return true;
         }
-        if (rgvProtocolOther.statusEnable){
+        if (rgvProtocolOther.statusEnable) {
 //            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
             return true;
 //            }
@@ -222,134 +223,118 @@
         return false;
     }
 
-    public boolean otherRgvAvoid(Long targetPosition){
+    public boolean otherRgvAvoid(Long targetPosition) {
         RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
         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 (rgvProtocol.getRgvPos()<rgvProtocolOther.getRgvPos()){
-            if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)){
-                if ((rgvProtocolOther.getRgvPos()-rgvProtocolOther.getCarBodyJiaoMing())
-                        - (targetPosition+rgvProtocol.getCarBodyKunPeng())
-                        > avoidDistance){//鏃犻渶閬胯
+        if (new TrackRangeUtils().IsItSmall(slave)) {
+
+            if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)) {
+                if ((rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing())
+                        - (targetPosition + rgvProtocol.getCarBodyKunPeng())
+                        > avoidDistance) {//鏃犻渶閬胯
                     return true;
                 } else {
                     long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing();
-                    if (avoid > trackEntireLength-rgvProtocolOther.getCarBodyKunPeng()){
-                        log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
+                    if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
+                        log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
                         return false;
                     }
-                    rgvTaskProtocol.setAvoid(1);
-                    rgvTaskProtocol.setAvoidingTheDestination(avoid);
-                    RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                    rgvTaskProtocolOther.setAvoid(1);
+                    rgvTaskProtocolOther.setAvoidingTheDestination(avoid);
+                    RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
                     return true;
                 }
-            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)){
-                if ((rgvProtocolOther.getRgvPosDestination()-rgvProtocolOther.getCarBodyJiaoMing())
-                        - (targetPosition+rgvProtocol.getCarBodyKunPeng())
-                        > avoidDistance){//鏃犻渶閬胯
+            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)) {
+                if ((rgvProtocolOther.getRgvPosDestination() - rgvProtocolOther.getCarBodyJiaoMing())
+                        - (targetPosition + rgvProtocol.getCarBodyKunPeng())
+                        > avoidDistance) {//鏃犻渶閬胯
                     return true;
                 } else {
                     long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing();
-                    if (avoid > trackEntireLength-rgvProtocolOther.getCarBodyKunPeng()){
-                        log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
+                    if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
+                        log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
                         return false;
                     }
-                    rgvTaskProtocol.setAvoid(1);
-                    rgvTaskProtocol.setAvoidingTheDestination(avoid);
-                    RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                    rgvTaskProtocolOther.setAvoid(1);
+                    rgvTaskProtocolOther.setAvoidingTheDestination(avoid);
+                    RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
                     return true;
                 }
-            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)){
-                if ((rgvProtocolOther.getRgvPosDestination()-rgvProtocolOther.getCarBodyJiaoMing())
-                        - (targetPosition+rgvProtocol.getCarBodyKunPeng())
-                        > avoidDistance){//鏃犻渶閬胯
+            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)) {
+                if ((rgvProtocolOther.getRgvPosDestination() - rgvProtocolOther.getCarBodyJiaoMing())
+                        - (targetPosition + rgvProtocol.getCarBodyKunPeng())
+                        > avoidDistance) {//鏃犻渶閬胯
                     return true;
                 } else {
-                    RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvProtocolOther.getRgvNo());
-                    TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache();
-                    List<TaskProtocol> allPutTaskProtocol = taskProtocolCacheOther.getAllPutTaskProtocol();
-                    if (allPutTaskProtocol.size() > 1){
-                        return false;
-                    }
-                    for (TaskProtocol taskProtocol : allPutTaskProtocol){
-                        if (taskProtocol.getTargetPosition()>=rgvProtocolOther.getRgvPos()){
-                            long avoid = rgvProtocolOther.getRgvPos()-rgvProtocolOther.getCarBodyJiaoMing()-avoidDistance-rgvProtocol.getCarBodyKunPeng();
-                            if (avoid > trackEntireLength-rgvProtocolOther.getCarBodyKunPeng()){
-                                log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
-                                return false;
-                            }
-                            rgvTaskProtocol.setAvoid(1);
-                            rgvTaskProtocol.setAvoidingTheDestination(avoid);
-                            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
-                            return false;
-                        } else {
+                    if (rgvProtocolOther.getRgvPosDestination() >= rgvProtocolOther.getRgvPos()) {
+                        long avoid = rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing() - avoidDistance - rgvProtocol.getCarBodyKunPeng();
+                        if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
+                            log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
                             return false;
                         }
+                        rgvTaskProtocol.setAvoid(1);
+                        rgvTaskProtocol.setAvoidingTheDestination(avoid);
+                        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                        return false;
                     }
                     return false;
                 }
             }
         } else {
-            if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)){
-                if ((targetPosition-rgvProtocol.getCarBodyJiaoMing())
-                        - (rgvProtocolOther.getRgvPos()+rgvProtocolOther.getCarBodyKunPeng())
-                        > avoidDistance){//鏃犻渶閬胯
+            if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)) {
+                if ((targetPosition - rgvProtocol.getCarBodyJiaoMing())
+                        - (rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng())
+                        > avoidDistance) {//鏃犻渶閬胯
                     return true;
                 } else {
-                    long avoid = targetPosition -rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
-                    if (avoid < trackBenchmark + rgvProtocolOther.getCarBodyJiaoMing()){
-                        log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
+                    long avoid = targetPosition - rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
+                    if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
+                        log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
                         return false;
                     }
-                    rgvTaskProtocol.setAvoid(1);
-                    rgvTaskProtocol.setAvoidingTheDestination(avoid);
-                    RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                    rgvTaskProtocolOther.setAvoid(1);
+                    rgvTaskProtocolOther.setAvoidingTheDestination(avoid);
+                    RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
                     return true;
                 }
-            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)){
-                if ((targetPosition-rgvProtocol.getCarBodyJiaoMing())
-                        - (rgvProtocolOther.getRgvPosDestination()+rgvProtocolOther.getCarBodyKunPeng())
-                        > avoidDistance){//鏃犻渶閬胯
+            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)) {
+                if ((targetPosition - rgvProtocol.getCarBodyJiaoMing())
+                        - (rgvProtocolOther.getRgvPosDestination() + rgvProtocolOther.getCarBodyKunPeng())
+                        > avoidDistance) {//鏃犻渶閬胯
                     return true;
                 } else {
-                    long avoid = targetPosition -rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
-                    if (avoid < trackBenchmark + rgvProtocolOther.getCarBodyJiaoMing()){
-                        log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
+                    long avoid = targetPosition - rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
+                    if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
+                        log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
                         return false;
                     }
-                    rgvTaskProtocol.setAvoid(1);
-                    rgvTaskProtocol.setAvoidingTheDestination(avoid);
-                    RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                    rgvTaskProtocolOther.setAvoid(1);
+                    rgvTaskProtocolOther.setAvoidingTheDestination(avoid);
+                    RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
                     return true;
                 }
-            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)){
-                if ((targetPosition-rgvProtocol.getCarBodyJiaoMing())
-                        - (rgvProtocolOther.getRgvPosDestination()+rgvProtocolOther.getCarBodyKunPeng())
-                        > avoidDistance){//鏃犻渶閬胯
+
+            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)) {
+                if ((targetPosition - rgvProtocol.getCarBodyJiaoMing())
+                        - (rgvProtocolOther.getRgvPosDestination() + rgvProtocolOther.getCarBodyKunPeng())
+                        > avoidDistance) {//鏃犻渶閬胯
                     return true;
                 } else {
-                    RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvProtocolOther.getRgvNo());
-                    TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache();
-                    List<TaskProtocol> allPutTaskProtocol = taskProtocolCacheOther.getAllPutTaskProtocol();
-                    if (allPutTaskProtocol.size() > 1){
-                        return false;
-                    }
-                    for (TaskProtocol taskProtocol : allPutTaskProtocol){
-                        if (taskProtocol.getTargetPosition()<=rgvProtocolOther.getRgvPos()){
-                            long avoid = rgvProtocolOther.getRgvPos()+rgvProtocolOther.getCarBodyKunPeng()+avoidDistance+rgvProtocol.getCarBodyJiaoMing();
-                            if (avoid < trackBenchmark + rgvProtocolOther.getCarBodyJiaoMing()){
-                                log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
-                                return false;
-                            }
-                            rgvTaskProtocol.setAvoid(1);
-                            rgvTaskProtocol.setAvoidingTheDestination(avoid);
-                            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
-                            return false;
-                        } else {
+                    if (rgvProtocolOther.getRgvPosDestination() <= rgvProtocolOther.getRgvPos()) {
+                        long avoid = rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng() + avoidDistance + rgvProtocol.getCarBodyJiaoMing();
+                        if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
+                            log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
                             return false;
                         }
+                        rgvTaskProtocol.setAvoid(1);
+                        rgvTaskProtocol.setAvoidingTheDestination(avoid);
+                        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                        return false;
                     }
                     return false;
                 }
@@ -368,25 +353,25 @@
             rgvProtocol.setRgvNo(slave.getId());
         }
         rgvProtocol.setMode((short) -1);
-        rgvProtocol.setStatus((short)-1);
-        rgvProtocol.setWalkPos((short)0);
+        rgvProtocol.setStatus((short) -1);
+        rgvProtocol.setWalkPos((short) 0);
         rgvProtocol.setRgvPos(0L);
-        rgvProtocol.setAlarm((short)0);
+        rgvProtocol.setAlarm((short) 0);
         rgvProtocol.setxSpeed((short) 0);
         rgvProtocol.setxDistance((short) 0);
         rgvProtocol.setxDuration((short) 0);
         rgvProtocol.setCarBodyJiaoMing(0L);
         rgvProtocol.setCarBodyKunPeng(0L);
-        try{
+        try {
             BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
             BasRgv rgv = basRgvService.selectById(slave.getId());
-            if (!Cools.isEmpty(rgv)){
+            if (!Cools.isEmpty(rgv)) {
                 rgvProtocol.setStatusEnable(rgv.getStatus() == 1);
             } else {
                 rgvProtocol.setStatusEnable(false);
             }
-        } catch (Exception e){
-            log.error("RGV寮傚父锛侊紒锛�"+e.getMessage());
+        } catch (Exception e) {
+            log.error("RGV寮傚父锛侊紒锛�" + e.getMessage());
             rgvProtocol.setStatusEnable(true);
         }
 
@@ -411,7 +396,7 @@
         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()));
             log.info("RGV plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
@@ -428,7 +413,7 @@
     /**
      * 璇诲彇鐘舵��
      */
-    private void readStatus(){
+    private void readStatus() {
         try {
             OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 34);
             if (result.IsSuccess) {
@@ -446,7 +431,7 @@
 //                rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40));
 //                rgvProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48));
 
-                OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
+                OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId()));
 //                // 宸ヤ綅1澶嶄綅淇″彿
 //                if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING)
 //                        || rgvProtocol.getStatusType().equals(RgvStatusType.FETCHWAITING)) {
@@ -463,18 +448,18 @@
                     // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
                     BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
                     BasRgv basRgv = basRgvService.selectById(slave.getId());
-                    if (!Cools.isEmpty(basRgv)){
+                    if (!Cools.isEmpty(basRgv)) {
                         rgvProtocol.setStatusEnable(basRgv.getStatus() == 1);
                     } else {
                         rgvProtocol.setStatusEnable(false);
                     }
 //                    BasRgv basRgv = new BasRgv();
                     basRgv.setRgvNo(slave.getId());
-                    basRgv.setRgvSts((int)rgvProtocol.getMode());
-                    if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))){
+                    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());
                     }
-                } catch (Exception ignore){
+                } catch (Exception ignore) {
 
                 }
 
@@ -512,6 +497,7 @@
 //        array[4] = command.getDestinationStaNo();
 //        array[10] = taskProtocol.getCommand();
         OperateResult result = siemensNet.Write("DB100.0", taskProtocol.getTaskNo());
+        OperateResult result1 = siemensNet.Write("DB100.1", taskProtocol.isDirection()); // 鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級    true:宸�   false:鍙�
 
 //        if (taskProtocol.getAckFinish1() == 0) {
 //            short commandFinish = 3;  //宸ヤ綅1銆�2浠诲姟鍚屾椂鍐欏叆
@@ -531,13 +517,14 @@
                     null,
                     null,
                     null,
-                    result.IsSuccess? 1 : 0,
+                    result.IsSuccess ? 1 : 0,
                     null,
                     new Date(),
                     null
             );
             bean.insert(basRgvOpt);
-        } catch (Exception ignore) {}
+        } catch (Exception ignore) {
+        }
 
         if (result != null && result.IsSuccess) {
             Thread.sleep(200);
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 3c1c0eb..29de2ec 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -43,12 +43,25 @@
     carBodyJiaoMing: 100
     carBodyKunPeng: 100
     #RGV婧愮珯鐐�
-    rgvInSStn[0]:
+    rgvInSta[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
       staNo: 100
-    rgvInSStn[1]:
+      direction: true
+    rgvInSta[1]:
       devpPlcId: ${wcs-slave.devp[0].id}
       staNo: 101
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
+    #RGV鐩爣绔欑偣
+    rgvOutSta[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 100
+      direction: true
+    rgvOutSta[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 101
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
   # RGV绌挎杞�2
   rgv[1]:
     id: 2
@@ -60,9 +73,22 @@
     carBodyJiaoMing: 100
     carBodyKunPeng: 100
     #RGV婧愮珯鐐�
-    rgvInSStn[0]:
+    rgvInSta[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
       staNo: 100
-    rgvInSStn[1]:
+      direction: true
+    rgvInSta[1]:
       devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 101
\ No newline at end of file
+      staNo: 101
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
+    #RGV鐩爣绔欑偣
+    rgvOutSta[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 100
+      direction: true
+    rgvOutSta[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 101
+      #鎵ц鏂瑰悜锛堥潰鏈濊建閬� 瀹氫綅鍊煎乏灏忓彸澶э級  true:宸�   false:鍙�
+      direction: false
\ No newline at end of file

--
Gitblit v1.9.1