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