| | |
| | | back = true; |
| | | } |
| | | if (staProtocol.isFrontErr()) { |
| | | errMsg = "前超限"; |
| | | if (!back){ |
| | | errMsg = "前超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"前超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isBackErr()) { |
| | | errMsg = "后超限"; |
| | | if (staProtocol.isBackErr()) { |
| | | if (!back){ |
| | | errMsg = "后超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"后超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isHighErr()) { |
| | | errMsg = "高超限"; |
| | | if (staProtocol.isHighErr()) { |
| | | if (!back){ |
| | | errMsg = "高超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"高超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isLeftErr()) { |
| | | errMsg = "左超限"; |
| | | if (staProtocol.isLeftErr()) { |
| | | if (!back){ |
| | | errMsg = "左超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"左超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isRightErr()) { |
| | | errMsg = "右超限"; |
| | | if (staProtocol.isRightErr()) { |
| | | if (!back){ |
| | | errMsg = "右超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"右超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | // if (!back && staProtocol.isWeightErr()) { |
| | | // errMsg = "超重"; |
| | | // back = true; |
| | | // } |
| | | if (!back && staProtocol.isBarcodeErr()) { |
| | | errMsg = "扫码失败"; |
| | | if (staProtocol.isBarcodeErr()) { |
| | | if (!back){ |
| | | errMsg = "扫码失败"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"扫码失败"; |
| | | } |
| | | back = true; |
| | | } |
| | | // 退回 |
| | |
| | | staProtocol.setWorkNo(9999); |
| | | staProtocol.setStaNo(inSta.getBackSta()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | devpThread.setPakMkRun(staProtocol.getSiteId(), false); |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), errMsg); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); |
| | |
| | | } |
| | | |
| | | CrnSlave crnSlave = new CrnSlave(crn); |
| | | if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){ |
| | | continue; |
| | | } |
| | | |
| | | if (!crn.getId().equals(crnProtocol.getLaneNo())) { |
| | | for (CrnSlave crnOther : slaveProperties.getCrn()) { |
| | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号 |
| | | crnCommand.setCrnNo(crnProtocol.getLaneNo()); // 堆垛机巷道编号 |
| | | crnCommand.setLaneNo(crnProtocol.getLaneNo()); // 堆垛机巷道编号 |
| | | crnCommand.setTaskNo((short)999); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式: 库位移转 |
| | |
| | | } |
| | | |
| | | CrnSlave crn = new CrnSlave(crnSlave); |
| | | if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){ |
| | | continue; |
| | | } |
| | | |
| | | if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) { |
| | | for (CrnSlave crnOther : slaveProperties.getCrn()) { |
| | |
| | | |
| | | // 已经存在吊车执行任务时,则过滤 |
| | | if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) { |
| | | TaskWrk taskWrkNow3 = taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()); |
| | | if (taskWrkNow3.getWrkSts() == 3){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setLaneNo(crnProtocol.getLaneNo()); // 堆垛机巷道编号 |
| | | crnCommand.setTaskNo(taskWrkNow3.getWrkNo().shortValue()); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 |
| | | crnCommand.setSourcePosX(crnStn.getRow().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(crnStn.getBay().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZ(crnStn.getLev().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosX(Utils.getRowShort(taskWrkNow3.getTargetPoint())); // 目标库位列 |
| | | int bay1 = Utils.getBayShort(taskWrkNow3.getTargetPoint()) + 1; |
| | | crnCommand.setDestinationPosY((short)bay1); // 目标库位层 |
| | | crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrkNow3.getTargetPoint())); // 目标库位排 |
| | | // crnCommand.setCommand((short) 1); |
| | | try{ |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.addDeviceError("CrnErr", slave.getId(), "巷道号"+crnCommand.getLaneNo()+";堆垛机命令地址补丁重新写入:"+JSON.toJSONString(crnCommand.getNowTask())); |
| | | } catch (Exception e2){ |
| | | } |
| | | if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) { |
| | | log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"巷道堆垛机命令生成失败"); |
| | | CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "运行命令下发失败"); |
| | | |
| | | throw new CoolException("堆垛机命令生成失败"); |
| | | } |
| | | } catch (Exception eNow3){ |
| | | |
| | | } |
| | | } |
| | | |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"巷道堆垛机存在吊车任务"); |
| | | CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "堆垛机存在执行中吊车任务"); |
| | | continue; |
| | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setCrnNo(crnProtocol.getLaneNo()); // 堆垛机巷道编号 |
| | | crnCommand.setLaneNo(crnProtocol.getLaneNo()); // 堆垛机巷道编号 |
| | | crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 |
| | |
| | | } |
| | | |
| | | // 判断堆垛机出库站状态 |
| | | if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) { |
| | | // if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) { |
| | | |
| | | // // 判断堆垛机出库站状态 |
| | | // if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") |
| | | // && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { |
| | | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") |
| | | && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | |
| | | // 堆垛机控制过滤 |
| | |
| | | |
| | | // 已经存在吊车执行任务时,则过滤 |
| | | if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) { |
| | | |
| | | TaskWrk taskWrkNow3 = taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()); |
| | | if (taskWrkNow3.getWrkSts() == 12){ |
| | | try{ |
| | | CrnCommand command = new CrnCommand(); |
| | | command.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | command.setLaneNo(crnProtocol.getLaneNo()); // 堆垛机编号 |
| | | command.setTaskNo(taskWrkNow3.getWrkNo().shortValue()); // 工作号 |
| | | command.setAckFinish((short) 0); // 任务完成确认位 |
| | | command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式 |
| | | command.setSourcePosX(Utils.getRowShort(taskWrkNow3.getStartPoint())); // 源库位排 |
| | | int bayS = Utils.getBayShort(taskWrkNow3.getStartPoint()) + 1; |
| | | command.setSourcePosY((short)bayS); // 源库位列 |
| | | command.setSourcePosZ(Utils.getLevShort(taskWrkNow3.getStartPoint())); // 源库位层 |
| | | command.setDestinationPosX(crnStn.getRow().shortValue()); // 目标库位排 |
| | | command.setDestinationPosY(crnStn.getBay().shortValue()); // 目标库位列 |
| | | command.setDestinationPosZ(crnStn.getLev().shortValue()); // 目标库位层 |
| | | // command.setCommand((short) 1); |
| | | try{ |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.addDeviceError("CrnErr", slave.getId(), "巷道号"+command.getLaneNo()+";堆垛机命令地址补丁重新写入:"+JSON.toJSONString(command.getNowTask())); |
| | | } catch (Exception e2){ |
| | | } |
| | | if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command))) { |
| | | log.error("堆垛机命令生成失败,堆垛机号={},巷道={},任务数据={}", slave.getId(), taskWrk.getCrnNo(), JSON.toJSON(command)); |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"巷道堆垛机命令生成失败"); |
| | | CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "运行命令下发失败"); |
| | | throw new CoolException("堆垛机命令生成失败"); |
| | | } |
| | | } catch (Exception eNow3){ |
| | | |
| | | } |
| | | } |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"巷道堆垛机存在吊车任务"); |
| | | CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "堆垛机存在执行中吊车任务"); |
| | | break; |
| | |
| | | } |
| | | if (staProtocol.isOutEnable()){ |
| | | CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "没有可出"); |
| | | } |
| | | if (staProtocol.isLoading()){ |
| | | CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "出库站有物"); |
| | | } |
| | | } else { |
| | | CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "出库站点:非自动"); |
| | |
| | | } |
| | | |
| | | CrnSlave crn = new CrnSlave(crnSlave); |
| | | if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){ |
| | | continue; |
| | | } |
| | | |
| | | if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) { |
| | | for (CrnSlave crnOther : slaveProperties.getCrn()) { |
| | |
| | | } |
| | | // Thread.sleep(300); |
| | | //确认完成信号 |
| | | CrnOperatorParam crnOperatorParam = new CrnOperatorParam(); |
| | | crnOperatorParam.setCrnNo(crn.getId()); |
| | | // CrnOperatorParam crnOperatorParam = new CrnOperatorParam(); |
| | | // crnOperatorParam.setCrnNo(crn.getId()); |
| | | Date now = new Date(); |
| | | |
| | | crnController.crnTaskComplete(crnOperatorParam); |
| | | // crnController.crnTaskComplete(crnOperatorParam); |
| | | // MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, command)) |
| | | crnThread.setResetFlag(true); |
| | | |
| | | if (!Cools.isEmpty(taskWrk)) { |
| | | if (taskWrk.getIoType() == 1 && taskWrk.getWrkSts() == 3) { |
| | | taskWrk.setWrkSts(4);//入库完成 |
| | |
| | | null, // 结束时间 |
| | | null, // 工作状态 |
| | | null, // 入出库类型 |
| | | crn.getId(), // 堆垛机 |
| | | null, // plc |
| | | crnProtocol.getLaneNo(), // 堆垛机 |
| | | crn.getId(), // plc |
| | | null, // 目标库位 |
| | | null, // 目标站 |
| | | null, // 源站 |
| | |
| | | return null; |
| | | } |
| | | // 判断是否满足取货条件 |
| | | if (!staProtocol.isPakMkTask()) { |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), "任务已下发等待小车取"); |
| | | return null; |
| | | } |
| | | // 判断是否满足取货条件 |
| | | if (staProtocol.isAutoing() |
| | | // && staProtocol.isLoading() |
| | | // && staProtocol.isStaOk() |
| | |
| | | if (taskWrk != null) { |
| | | Integer stano = staProtocol.getStaNo(); |
| | | if (staProtocol.getSiteId() == 1004 || staProtocol.getSiteId()==1020){ |
| | | // 判断是否满足取货条件 |
| | | if (!staProtocol.isPakMkRun()) { |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), "异常回退标记,需要回退"); |
| | | return null; |
| | | } |
| | | if (!staProtocol.isLoading()) { |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), "无物"); |
| | | return null; |
| | | } |
| | | if (!staProtocol.isInEnable()) { |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), "等待可入信号"); |
| | | return null; |
| | | } |
| | | if (!staProtocol.isStaOk()) { |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), "等待链条就绪"); |
| | | return null; |
| | | } |
| | | // 尺寸检测异常 |
| | |
| | | back = true; |
| | | } |
| | | if (staProtocol.isFrontErr()) { |
| | | errMsg = "前超限"; |
| | | if (!back){ |
| | | errMsg = "前超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"前超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isBackErr()) { |
| | | errMsg = "后超限"; |
| | | if (staProtocol.isBackErr()) { |
| | | if (!back){ |
| | | errMsg = "后超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"后超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isHighErr()) { |
| | | errMsg = "高超限"; |
| | | if (staProtocol.isHighErr()) { |
| | | if (!back){ |
| | | errMsg = "高超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"高超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isLeftErr()) { |
| | | errMsg = "左超限"; |
| | | if (staProtocol.isLeftErr()) { |
| | | if (!back){ |
| | | errMsg = "左超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"左超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isRightErr()) { |
| | | errMsg = "右超限"; |
| | | if (staProtocol.isRightErr()) { |
| | | if (!back){ |
| | | errMsg = "右超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"右超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | // if (!back && staProtocol.isWeightErr()) { |
| | | // errMsg = "超重"; |
| | | // back = true; |
| | | // } |
| | | if (!back && staProtocol.isBarcodeErr()) { |
| | | errMsg = "扫码失败"; |
| | | if (staProtocol.isBarcodeErr()) { |
| | | if (!back){ |
| | | errMsg = "扫码失败"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"扫码失败"; |
| | | } |
| | | back = true; |
| | | } |
| | | // 退回 |
| | |
| | | staProtocol.setWorkNo(9999); |
| | | staProtocol.setStaNo(staProtocol.getStaNo()+1); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | devpThread.setPakMkRun(staProtocol.getSiteId(), false); |
| | | devpThread.setPakMkTask(staProtocol.getSiteId(), false); |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), errMsg); |
| | | MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); |
| | | try{ |
| | |
| | | try { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); |
| | | |
| | | TaskProtocol issuedTake = new TaskProtocol(); |
| | | TaskProtocol issuedPut = new TaskProtocol(); |
| | |
| | | return false; |
| | | } |
| | | } |
| | | try{ |
| | | devpThread.setPakMkTask(rgvStn.getStaNo(), false); |
| | | } catch (Exception e2){ |
| | | RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"小车任务下发标记更新失败"); |
| | | } |
| | | |
| | | |
| | | BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo())); |
| | | BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert)); |