src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/Utils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1196,6 +1196,17 @@ //23.小车搬运完成 ==> 24.提升机搬运中 if (wrkMast.getWrkSts() == 23) { NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { return false; } //调度小车避让 boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getLocNo()), wrkMast.getShuttleNo(), shuttleThread); if (!result) { return false; } //获取出库站点(目标站) BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo()); if (basDevp == null) { @@ -1968,7 +1979,7 @@ continue; } if (wrkMast.getMk().equals("Y")) {//标记为Y表示需要用到机械臂拣料 if (wrkMast.getMk() != null && wrkMast.getMk().equals("Y")) {//标记为Y表示需要用到机械臂拣料 Short targetSta = null;//目标站 //判断机械臂拣料站是否空闲 StaProtocol staProtocol303 = devpThread.getStation().get(303); @@ -2006,28 +2017,30 @@ StaProtocol staProtocol317 = devpThread.getStation().get(317); if (staProtocol303.isAutoing() && staProtocol303.isLoading() && staProtocol303.getWorkNo() != 0) { //调度机械臂 //查询是否有工作档 WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol303.getWorkNo().intValue()); if (wrkMast == null) { continue; } WrkDetl wrkDetl = wrkDetlService.selectById(wrkMast.getWrkNo()); if (wrkDetl == null) { continue; } RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), wrkDetl.getAnfme().intValue(), "303"); // //查询是否有工作档 // WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol303.getWorkNo().intValue()); // if (wrkMast == null) { // continue; // } // WrkDetl wrkDetl = wrkDetlService.selectById(wrkMast.getWrkNo()); // if (wrkDetl == null) { // continue; // } // RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), wrkDetl.getAnfme().intValue(), "303"); RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), -1, "303"); }else if (staProtocol317.isAutoing() && staProtocol317.isLoading() && staProtocol317.getWorkNo() != 0) { //调度机械臂 //查询是否有工作档 WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol317.getWorkNo().intValue()); if (wrkMast == null) { continue; } WrkDetl wrkDetl = wrkDetlService.selectById(wrkMast.getWrkNo()); if (wrkDetl == null) { continue; } RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), wrkDetl.getAnfme().intValue(), "317"); // //查询是否有工作档 // WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol317.getWorkNo().intValue()); // if (wrkMast == null) { // continue; // } // WrkDetl wrkDetl = wrkDetlService.selectById(wrkMast.getWrkNo()); // if (wrkDetl == null) { // continue; // } // RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), wrkDetl.getAnfme().intValue(), "317"); RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), -1, "317"); } } } src/main/java/com/zy/asrs/utils/Utils.java
@@ -354,29 +354,6 @@ return locNo; } //楼层转换对应出入库站点库位号 public static String levToOutInStaLocNo(Integer lev) { String locNo = null; if (lev >= 2) { lev++; } switch (lev) { case 1: locNo = "1800201"; break; case 3: locNo = "1800202"; break; case 4: locNo = "1800203"; break; case 5: locNo = "1800204"; break; } return locNo; } public static void main(String[] args) { System.out.println(JSON.toJSONString(getGroupOutsideLoc("0200101"))); } src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
@@ -123,29 +123,31 @@ } }else { //同一楼层,没有空闲穿梭车,只能从其他楼层调度 //寻找离任务最近的穿梭车 for (NyShuttleThread shuttleThread : diffLev) { //寻找离任务楼层最近的穿梭车(不考虑跨楼层小车移动距离) //当前穿梭车库位号 String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo(); int currentLev = Utils.getLev(currentLocNo); List<WrkMast> wrkMasts1 = wrkMastService.selectNoShuttleWrkByLev(currentLev);//判断当前穿梭车楼层是否有待分配车辆的任务,如果有则不分配这辆车 if (wrkMasts1.size() > 0) { //存在其他任务,跳过这辆车 continue; } //获取任务 WrkMast wrkMast1 = wrkMastMapper.selectByWorkNo(wrkNo); //当前穿梭车线程到当前车子所在楼层的提升机口距离 List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, Utils.levToOutInStaLocNo(currentLev), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), currentLev));//搜索空闲穿梭车,使用正常通道地图 if (currentShuttlePath == null) { continue; } if (wrkMast1 != null) { int lev = Utils.getLev(wrkMast1.getLocNo());//目标楼层 int recentValue = 99999;//最小差值 for (NyShuttleThread shuttleThread : diffLev) { //当前穿梭车库位号 String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo(); int currentLev = Utils.getLev(currentLocNo); List<WrkMast> wrkMasts1 = wrkMastService.selectNoShuttleWrkByLev(currentLev);//判断当前穿梭车楼层是否有待分配车辆的任务,如果有则不分配这辆车 if (wrkMasts1.size() > 0) { //存在其他任务,跳过这辆车 continue; } Integer currentAllDistance = NavigateUtils.getOriginPathAllDistance(currentShuttlePath);//计算当前路径行走总距离 if (currentAllDistance < recentAllDistance) { //如果当前楼层的车路径更小,则更新最近穿梭车 recentShuttle = shuttleThread; recentAllDistance = currentAllDistance; //ABS(目标楼层 - 当前楼层) 得到差距,取最小差值 int currentValue = Math.abs(lev - currentLev); if (currentValue < recentValue) { //如果当前楼层的车路径更小,则更新最近穿梭车 recentShuttle = shuttleThread; recentValue = currentValue; } } } }