| | |
| | | import com.core.common.DateUtils; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.ArmOrderAssignmentParam; |
| | | import com.zy.asrs.entity.param.ArmTaskAssignmentParam; |
| | | import com.zy.asrs.entity.param.CombParam; |
| | | import com.zy.asrs.entity.result.OrderDetlValueResultUtil; |
| | | import com.zy.asrs.mapper.*; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.utils.PostMesDataUtils; |
| | |
| | | |
| | | // 只有当RGV空闲 并且 无任务时才继续执行 |
| | | if ((rgvProtocol.getStatusType1() == RgvStatusType.IDLE || rgvProtocol.getStatusType2() == RgvStatusType.IDLE) |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | // && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvThread.isPakMk()) { |
| | | News.warnNoLog(""+mark+" - 0"+" - 开始执行RGV入出库作业下发"); |
| | | // 如果最近一次是入库模式 |
| | | // rgvRunWrkMastInTest(); |
| | | |
| | | if (rgvProtocol.getLastIo().equals("I")) { |
| | | if (basRgv.getInEnable().equals("Y") && rgvThread.isPakIn()) { |
| | | if (basRgv.getInEnable().equals("1") && rgvThread.isPakIn()) { |
| | | //mark - 1 - .... |
| | | this.rgvRunWrkMastIn(rgv, rgvProtocol,mark); // 入库 |
| | | rgvProtocol.setLastIo("O"); |
| | | } else if (basRgv.getOutEnable().equals("Y") && rgvThread.isPakOut()) { |
| | | } else if (basRgv.getOutEnable().equals("1") && rgvThread.isPakOut()) { |
| | | //mark - 2 - .... |
| | | this.rgvRunWrkMastOut(rgv, rgvProtocol,mark); // 出库 |
| | | rgvProtocol.setLastIo("I"); |
| | |
| | | } |
| | | // 如果最近一次是出库模式 |
| | | else if (rgvProtocol.getLastIo().equals("O")) { |
| | | if (basRgv.getOutEnable().equals("Y") && rgvThread.isPakOut()) { |
| | | if (basRgv.getOutEnable().equals("1") && rgvThread.isPakOut()) { |
| | | this.rgvRunWrkMastOut(rgv, rgvProtocol,mark); // 出库 |
| | | rgvProtocol.setLastIo("I"); |
| | | } else if (basRgv.getInEnable().equals("Y") && rgvThread.isPakIn()) { |
| | | } else if (basRgv.getInEnable().equals("1") && rgvThread.isPakIn()) { |
| | | this.rgvRunWrkMastIn(rgv, rgvProtocol,mark); // 入库 |
| | | rgvProtocol.setLastIo("O"); |
| | | } |
| | |
| | | rgvOutExecute(); |
| | | |
| | | } |
| | | } |
| | | } |
| | | public synchronized void rgvRunWrkMastInTest(){ |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(1); |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | basRgvMap.setNowRoute(1031); //更新小车当前位置站点号 |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(342);//根据站点工作号和小车工作范围检索任务档 |
| | | |
| | | // WrkMastSta wrkMastSta2 = wrkMastStaMapper.selectByWorkSta(2, 1); |
| | | boolean result = false; |
| | | // if(wrkMastSta2 != null && rgvProtocol.getRgvNo() == 1){ //距离计算 2楼单入库口不需要计算 |
| | | // result = rgvCalcDistance((int) rgvProtocol.getRgvNo(),wrkMastSta2.getStaEnd(),wrkMastSta.getStaStart());//工位2放货站点,工位1取货站点 |
| | | // } |
| | | // if(result){//若小车距离放货点距离近于取货点则跳过取货 true跳过取货/false优先取货 |
| | | // rgvThread.setPakRgv(false); |
| | | // continue; |
| | | // } |
| | | wrkMastSta.setWorkSta(1); |
| | | wrkMastSta.setRgvNo(1); |
| | | wrkMastSta.setStaStart(1031); |
| | | Short direction = 2;//双工位最终抵达位置 |
| | | boolean sign = false; |
| | | sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,direction); //命令下发 |
| | | if (sign){ |
| | | wrkMastSta.setWrkSts(1); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功"); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | // rgvThread.setPakOut(false);//出库不允许 |
| | | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); |
| | | if (!signMap){ |
| | | log.error("货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | } |
| | | /** |
| | |
| | | rgvCommand.setTaskStatus2(RgvTaskStatusType.X_MOVE); // 工位2任务模式: 取放货 |
| | | rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd()); //工位2 放货后要去的位置 |
| | | rgvCommand.setTargetPosition1(wrkMastSta.getStaStart()); //工位2目标站点 |
| | | rgvCommand.setDirection2(direction); |
| | | // rgvCommand.setDirection1((short) 2); |
| | | // rgvCommand.setWrkTaskMove2(direction); |
| | | rgvCommand.setCommand(true); //工位1任务确认 |
| | | pakIn1 = false; |
| | | }else{ //入库RGV取货行走 |
| | |
| | | rgvCommand.setTaskStatus1(RgvTaskStatusType.X_MOVE); // 工位1任务模式: 取放货 |
| | | rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd()); //工位1 放货后要去的位置 |
| | | rgvCommand.setTargetPosition1(wrkMastSta.getStaStart()); //工位1目标站点 |
| | | rgvCommand.setDirection1(direction); |
| | | // rgvCommand.setDirection1((short) 1); |
| | | // rgvCommand.setDirection1(direction); |
| | | rgvCommand.setCommand(true); //工位1任务确认 |
| | | } |
| | | if(!pakIn1){ |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | |
| | | return true; |
| | | } |
| | | }else{ |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | |
| | | rgvCommand.setTaskStatus2(RgvTaskStatusType.FETCH); // 工位2任务模式: 取放货 |
| | | rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd()); //工位2 放货后要去的位置 |
| | | rgvCommand.setTargetPosition1(wrkMastSta.getStaStart()); //工位2目标站点 |
| | | rgvCommand.setDirection2(direction); |
| | | rgvCommand.setDirection1((short)2); |
| | | rgvCommand.setWrkTaskMove2(direction); |
| | | rgvCommand.setCommand(true); //工位1任务确认 |
| | | pakIn1 = false; |
| | | }else{ //入库RGV取货 |
| | |
| | | rgvCommand.setTaskStatus1(RgvTaskStatusType.FETCH); // 工位1任务模式: 取放货 |
| | | rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd()); //工位1 放货后要去的位置 |
| | | rgvCommand.setTargetPosition1(wrkMastSta.getStaStart()); //工位1目标站点 |
| | | rgvCommand.setDirection1(direction); |
| | | rgvCommand.setDirection1((short)1); |
| | | rgvCommand.setWrkTaskMove1(direction); |
| | | rgvCommand.setCommand(true); //工位1任务确认 |
| | | } |
| | | if(!pakIn1){ |
| | |
| | | rgvCommand.setTaskStatus2(RgvTaskStatusType.PUT); // 工位2任务模式: 放货 |
| | | rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd()); //工位2 放货后要去的位置 |
| | | rgvCommand.setTargetPosition1(wrkMastSta.getStaEnd()); //工位2目标站点 |
| | | rgvCommand.setDirection1((short)2); |
| | | rgvCommand.setCommand(true); //工位1任务确认 |
| | | pakIn2 = false; |
| | | }else{ //工位1任务放货 |
| | |
| | | rgvCommand.setTaskStatus1(RgvTaskStatusType.PUT); // 工位1任务模式: 放货 |
| | | rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd()); //工位1 放货后要去的位置 |
| | | rgvCommand.setTargetPosition1(wrkMastSta.getStaEnd()); //工位1目标站点 |
| | | rgvCommand.setDirection1((short)1); |
| | | rgvCommand.setCommand(true); //工位1任务确认 |
| | | } |
| | | if(!pakIn2){ |
| | |
| | | log.error("arm编号:"+basArm.getArmNo()+"====》拆码垛任务异常禁止下发!!!任务待执行数量大于1!!!"); |
| | | continue; |
| | | } |
| | | for (BasArmMast basArmMast:basArmMastList) { |
| | | ArmTaskAssignmentParam armTaskAssignmentParam = new ArmTaskAssignmentParam(basArmMast.getSortingLine()); |
| | | //设置工作空间就绪 |
| | | ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取任务下发:通知工作空间已就绪",ArmConstant.ARM_URL, ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam); |
| | | if (result.getCode()==200){ |
| | | basArmMast.setStatus(1); |
| | | basArmMastService.updateById(basArmMast); |
| | | } else { |
| | | log.error("机械臂抓取任务:"+JSON.toJSON(basArmMast)+"===》任务信息下发失败"); |
| | | BasArmMast basArmMast = basArmMastList.get(0); |
| | | List<BasArmMast> basArmMastListOrder = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLine()) |
| | | .eq("sku", basArmMast.getSku()) |
| | | .eq("order_no", basArmMast.getOrderNo()) |
| | | ); |
| | | if (basArmMastListOrder.size()==1){ |
| | | OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getSku()); |
| | | |
| | | if (Cools.isEmpty(orderDetlValueResultUtil)){ |
| | | continue; |
| | | } |
| | | //订单下发 |
| | | try{ |
| | | ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArmMast,orderDetlValueResultUtil); |
| | | // 订单下发(SKU+订单) |
| | | ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取订单(SKU)下发:",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_ADAPTOR, armOrderAssignmentParam); |
| | | if (result.getCode()==200){ |
| | | basArmMast.setStatus(1); |
| | | basArmMastService.updateById(basArmMast); |
| | | } else { |
| | | log.error("机械臂抓取订单(SKU)下发:"+JSON.toJSON(basArmMast)+"===》订单信息下发失败"); |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("机械臂抓取订单(SKU)下发:"+JSON.toJSON(basArmMast)+"===》订单下发订单信息下发失败"); |
| | | continue; |
| | | } |
| | | } |
| | | ArmTaskAssignmentParam armTaskAssignmentParam = new ArmTaskAssignmentParam(basArmMast.getSortingLine()); |
| | | //设置工作空间就绪 |
| | | ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取任务下发:通知工作空间已就绪",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam); |
| | | if (result.getCode()==200){ |
| | | basArmMast.setStatus(1); |
| | | basArmMastService.updateById(basArmMast); |
| | | } else { |
| | | log.error("机械臂抓取任务:"+JSON.toJSON(basArmMast)+"===》任务信息下发失败"); |
| | | } |
| | | } |
| | | } catch (Exception e){ |