| | |
| | | News.error("MainServiceImpl 1028行"+"存在捡料、盘点未入库货物,2号堆垛机暂时禁止出库!!!"); |
| | | return false; |
| | | } |
| | | |
| | | //如果存在目标站300且正在执行的拣料/盘点任务,则2号堆垛机不允许做拣料/盘点出库 |
| | | WrkMast one = wrkMastService.selectOne(new EntityWrapper<WrkMast>() |
| | | .eq("sta_no",300) |
| | | .last(" and wrk_sts>11 and io_type in (103,107) ")); |
| | | if(!Cools.isEmpty(one)){ |
| | | News.error("MainServiceImpl 1099行"+"存在捡料、盘点未入库货物,2号堆垛机暂时禁止出库!!!"); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | if (wrkMast.getWrkSts() == 11 && wrkMast.getIoType() == 101){ |
| | | Integer sour = wrkMast.getSourceStaNo(); |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectWrkStsAndIoType1(sour); |
| | | if (wrkMasts.size() > 0){ |
| | | News.error("MainServiceImpl 1028行"+"204存在全板出库中货物,2号堆垛机暂时禁止全板出库!!!"); |
| | | return false; |
| | | for (WrkMast one : wrkMasts){ |
| | | if(one.getWrkNo().equals(wrkMast.getWrkNo())){ |
| | | News.error("MainServiceImpl 1028行"+"204存在全板出库中货物,2号堆垛机暂时禁止全板出库!!!"); |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | .last(" and wrk_sts < 10")); |
| | | if(one1 != null){ |
| | | News.error("{}出库任务无法作业,因入库任务已绑定小车!", wrkMast.getWrkNo()); |
| | | continue; |
| | | return false; |
| | | } |
| | | |
| | | //加强判断,确保因出库导致的移库整套任务全部结束后,才能执行下一笔出库任务。只有库位完成移库回去全部任务后,才认为当组出库任务完成 |
| | |
| | | if(one.getWrkSts() > 10 && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getSourceLocNo()) |
| | | || Utils.getBay(wrkMast.getSourceLocNo()) != Utils.getBay(one.getSourceLocNo()) |
| | | || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getSourceLocNo()))){ |
| | | continue; |
| | | return false; |
| | | } |
| | | //存在移库任务,且在移回中,且移库目标库位与待出库库位不在同一库位组,时跳出,确保移库/出库全套任务完成后,再执行下一笔 |
| | | if(one.getWrkSts() < 11 && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getLocNo()) |
| | | || Utils.getBay(wrkMast.getSourceLocNo()) != Utils.getBay(one.getLocNo()) |
| | | || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getLocNo()))){ |
| | | continue; |
| | | return false; |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | break; |
| | | // } else { |
| | | // LocMast curLoc = locMastService.selectById(locNo); |
| | | // if(curLoc != null && curLoc.getLocSts().equals("O")){ |
| | | // |
| | | // } |
| | | } |
| | | } |
| | | } |
| | |
| | | return false; |
| | | } |
| | | |
| | | //下发前克隆一份 |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(command.getCrnNo()); |
| | | crnCommand.setAckFinish(command.getAckFinish()); |
| | | crnCommand.setTaskNo(command.getTaskNo()); |
| | | crnCommand.setTaskMode(command.getTaskMode()); |
| | | crnCommand.setSourcePosX(command.getSourcePosX()); |
| | | crnCommand.setSourcePosY(command.getSourcePosY()); |
| | | crnCommand.setSourcePosZ(command.getSourcePosZ()); |
| | | crnCommand.setDestinationPosX(command.getDestinationPosX()); |
| | | crnCommand.setDestinationPosY(command.getDestinationPosY()); |
| | | crnCommand.setDestinationPosZ(command.getDestinationPosZ()); |
| | | crnCommand.setSourceStaNo(command.getSourceStaNo()); |
| | | crnCommand.setDestinationStaNo(command.getDestinationStaNo()); |
| | | crnCommand.setCommand(command.getCommand()); |
| | | |
| | | // convertRow(command); |
| | | command.setCrnNo(slave.getId()); |
| | | short[] array = new short[10]; |
| | |
| | | array[8] = command.getDestinationPosZ(); |
| | | array[9] = command.getCommand(); |
| | | OperateResult result = siemensNet.Write("DB100.0", array); |
| | | |
| | | if(!result.IsSuccess){ |
| | | log.error("写入堆垛机plc数据失败,重新添加任务到队列 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(crnCommand)); |
| | | MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand)); |
| | | Thread.sleep(100); |
| | | readStatus(); |
| | | return false; |
| | | } |
| | | |
| | | //堆垛机任务写入后,回读一次,看是否成功 |
| | | Thread.sleep(200); |
| | |
| | | || command.getDestinationPosY()!=one.getDestinationPosY() || command.getDestinationPosZ()!=one.getDestinationPosZ() |
| | | ){ |
| | | News.error("堆垛机命令地址写入后回读失败[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one)); |
| | | News.error("堆垛机命令回读失败后,重新添加任务到队列 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(crnCommand)); |
| | | MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand)); |
| | | Thread.sleep(100); |
| | | readStatus(); |
| | | return false; |
| | | }else{ |
| | | News.info("堆垛机命令地址写入后回读成功[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one)); |
| | | } |
| | | } |
| | | |
| | |
| | | short commandFinish = 1; |
| | | Thread.sleep(300); |
| | | News.info("堆垛机命令地址写入成功,开始写确认位[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); |
| | | result = siemensNet.Write("DB100.18", commandFinish); |
| | | Integer counts = 0; |
| | | while(true) { |
| | | result = siemensNet.Write("DB100.18", commandFinish); |
| | | if(result.IsSuccess){ |
| | | break; |
| | | } else { |
| | | counts++; |
| | | if(counts>5){ |
| | | break; |
| | | } |
| | | } |
| | | Thread.sleep(300); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | int index = staNos.indexOf(staProtocol.getSiteId()); |
| | | OperateResult write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo()); // 工作号 |
| | | Thread.sleep(500); |
| | | if(!write.IsSuccess){ |
| | | News.error("写入输送线ID失败,重新添加任务到队列。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol)); |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); |
| | | MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol)); |
| | | return; |
| | | } |
| | | Thread.sleep(200); |
| | | OperateResult write1 = siemensS7Net.Write("DB101." + index*2, staProtocol.getStaNo()); // 目标站 |
| | | |
| | | if (!write.IsSuccess || !write1.IsSuccess) { |
| | | MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol)); |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); |
| | | News.error("写入输送线站点数据失败,重新添加任务到队列。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol)); |
| | | staProtocol = station.get(staProtocol.getSiteId()); |
| | | if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { |
| | | staProtocol.setPakMk(true); |
| | | } |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); |
| | | News.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol)); |
| | | } else { |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); |
| | | News.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}", slave.getId(), JSON.toJSON(staProtocol)); |
| | |
| | | // 写入数据 |
| | | case 2: |
| | | write((SteCommand) task.getData()); |
| | | Thread.sleep(200); |
| | | readStatus(); |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | // 开始任务 |
| | | if (!command.getComplete()) { |
| | | //组织任务前,先清空写任务确认位,以及任务完成确认位 |
| | | siemensS7Net.Write("V2000.0", false); |
| | | siemensS7Net.Write("V2000.1", false); |
| | | OperateResult result01 = siemensS7Net.Write("V2000.0", false); |
| | | OperateResult result02 = siemensS7Net.Write("V2000.1", false); |
| | | // 1.任务号 |
| | | OperateResult result0 = siemensS7Net.Write("V998", command.getTaskNo().shortValue()); |
| | | try { |