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/core/thread/ShuttleThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1086,26 +1086,6 @@ //未找到路径,等待下一次 continue; } //所使用的路径进行临时解锁,用于后续计算 NavigateMapData navigateMapData = new NavigateMapData(currentLev); navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//所使用的路径进行临时解锁 //任务执行完后,小车进入移开提升机口站点位置,以免坠落 //搜索一条没有小车的空巷道,并调度小车 int distLev = Utils.getLev(liftSiteLocNo);//避让楼层 String startLocNo = "180020" + Utils.getLev(liftSiteLocNo); ShuttleAssignCommand moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo); if (moveAssignCommand == null) {//调度小车命令为空 continue; } //所使用的路径进行临时解锁,用于后续计算 navigateMapData.writeNavigateNodeToRedisMap(moveAssignCommand.getNodes(), false);//所使用的路径进行临时解锁 commands.addAll(moveAssignCommand.getCommands());//将避让小车的命令添加 List<NavigateNode> nodes = assignCommand.getNodes();//将避让路径添加进节点路径中 nodes.addAll(moveAssignCommand.getNodes());//将避让路径添加进节点路径中 assignCommand.setNodes(nodes); navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//所使用的路径进行锁定 //分配目标库位 shuttleProtocol.setLocNo(wrkMast.getSourceLocNo()); @@ -1177,26 +1157,6 @@ if (commands == null) { continue;//未找到路径 } //所使用的路径进行临时解锁,用于后续计算 NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(liftSiteLocNo)); navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//所使用的路径进行临时解锁 //任务执行完后,小车进入移开提升机口站点位置,以免坠落 //搜索一条没有小车的空巷道,并调度小车 int distLev = Utils.getLev(liftSiteLocNo);//避让楼层 String startLocNo = "180020" + Utils.getLev(liftSiteLocNo); ShuttleAssignCommand moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo); if (moveAssignCommand == null) {//调度小车命令为空 continue; } //所使用的路径进行临时解锁,用于后续计算 navigateMapData.writeNavigateNodeToRedisMap(moveAssignCommand.getNodes(), false);//所使用的路径进行临时解锁 commands.addAll(moveAssignCommand.getCommands());//将避让小车的命令添加 List<NavigateNode> nodes = assignCommand.getNodes();//将避让路径添加进节点路径中 nodes.addAll(moveAssignCommand.getNodes());//将避让路径添加进节点路径中 assignCommand.setNodes(nodes); navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//所使用的路径进行锁定 //此时车在提升机内部,需要多下达一步指令让车移动到提升机口 short startCode = liftProtocol.getBarcode();//提升机内部二维码 @@ -1373,6 +1333,7 @@ //将任务档标记为完成 WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue()); ShuttleAssignCommand moveAssignCommand = null;//避让命令 if (wrkMast != null) { switch (wrkMast.getWrkSts().intValue()) { case 9://9.小车入库搬运中 ==> 14.入库完成 @@ -1385,6 +1346,15 @@ wrkMast.setWrkSts(23L); break; case 26://26.小车出库搬运中 ==> 27.小车出库搬运完成 //任务执行完后,小车进入移开提升机口站点位置,以免坠落 //搜索一条没有小车的空巷道,并调度小车 int distLev = Utils.getLev(wrkMast.getSourceLocNo());//避让楼层 String startLocNo = "180020" + distLev; moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo); if (moveAssignCommand == null) {//调度小车命令为空 continue; } wrkMast.setWrkSts(27L); break; default: @@ -1402,6 +1372,15 @@ //任务指令清零 shuttleProtocol.setAssignCommand(null); News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); if (wrkMast.getWrkSts() == 27) { if (moveAssignCommand != null) { //下发任务 shuttleProtocol.setPakMk(true); MessageQueue.offer(SlaveType.Shuttle, shuttleThread.getSlave().getId(), new Task(3, moveAssignCommand)); } } } else { News.error("四向穿梭车已确认且任务完成状态,复位失败,但未找到工作档。四向穿梭车号={},工作号={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); } src/main/java/com/zy/asrs/utils/Utils.java
@@ -9,6 +9,7 @@ import com.zy.asrs.service.impl.MainServiceImpl; import com.zy.common.model.NavigateNode; import com.zy.common.model.enums.NavigationMapType; import com.zy.common.service.CommonService; import com.zy.common.utils.NavigateMapData; import com.zy.common.utils.NavigatePositionConvert; import com.zy.common.utils.NavigateUtils; @@ -525,6 +526,7 @@ public static ShuttleAssignCommand searchEmptyGroupToMoveShuttle(int z, Integer currentShuttleId, ShuttleThread shuttleThread, String startLocNo) { LocMastService locMastService = SpringUtils.getBean(LocMastService.class); MainServiceImpl mainServiceImpl = SpringUtils.getBean(MainServiceImpl.class); CommonService commonService = SpringUtils.getBean(CommonService.class); if (shuttleThread == null) { return null; @@ -579,7 +581,7 @@ //创建分配命令 ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//四向穿梭车号 assignCommand.setTaskNo((short) 9998);//任务号 assignCommand.setTaskNo((short) commonService.getWorkNo(7));//任务号 assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id.shortValue());//移动到目标库位 assignCommand.setSourceLocNo(startLocNo);//源库位 src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -729,6 +729,9 @@ // } // } LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); LiftProtocol liftProtocol = liftThread.getLiftProtocol(); List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); //当前步序 int commandStep = redisCommand.getCommandStep(); @@ -744,6 +747,14 @@ if (command.getDistCodeNum().intValue() == shuttleProtocol.getCurrentCode().intValue()) { //上一条指令的目标位置和当前小车位置相同,则认定上一条任务完成 command.setComplete(true); //上一条指令起点是提升机二维码,则清零提升机任务号 if (command.getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()) { //判断提升机是否处于空闲 if (liftProtocol.isIdleNoTask()) { liftProtocol.setTaskNo((short) 0);//清空任务号 } } } } else if (command.getCommandWord().intValue() == 2) { //托盘顶升命令 @@ -805,9 +816,6 @@ } } LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); LiftProtocol liftProtocol = liftThread.getLiftProtocol(); //判断小车当前二维码是否为提升机二维码 if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) { @@ -844,6 +852,9 @@ if (!staProtocol.isLiftArrival()) { return false;//站点提升机到位信号false,禁止下发命令 } //条件满足,占用提升机 liftProtocol.setTaskNo(wrkNo); } } @@ -1046,6 +1057,7 @@ return true; }else { if (liftProtocol.getPositionArrivalFeedback$() == shuttleLocNoLev) { liftProtocol.setTaskNo(wrkNo);//给提升机写工作号,防止被占用 return true;//提升机到位 } executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//调度提升机