src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/MainProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/SiemensCrnThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -941,6 +941,41 @@ // 已经存在吊车执行任务时,则过滤 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; @@ -1118,6 +1153,39 @@ // 已经存在吊车执行任务时,则过滤 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; src/main/java/com/zy/core/MainProcess.java
@@ -22,7 +22,7 @@ private MainServiceImpl mainService; // 所属线程 private Thread thread; // private Thread thread2; private Thread thread2; /** * =====>> 开始工作 @@ -41,14 +41,10 @@ mainService.generateStoreWrkFile(); // 组托 // mainService.generateStoreWrkFileIsEmptyMk(); // 组托 空托 mainService.generateStoreWrkFileWalk(); // wms入库任务下发 // 出库 ===>> 堆垛机出库站到出库站 mainService.crnStnToOutStn(); // 入出库 ===>> 堆垛机入出库作业下发 mainService.crnIoExecute(); // 入库 ===>> 执行对工作档的完成操作 mainService.storeFinished(); // 堆垛机异常信息记录 mainService.recCrnErr(); // 任务下发 mainService.taskStart(); // 出库 ===>> 堆垛机10分钟无任务则回到源点 @@ -60,33 +56,37 @@ }); thread.start(); // thread2 = new Thread(() -> { // while (!Thread.currentThread().isInterrupted()) { // try { // // 间隔 // Thread.sleep(200); // // 系统运行状态判断 // if (!SystemProperties.WCS_RUNNING_STATUS.get()) { // continue; // } // // 输送线异常信息记录 //// mainService.recDevErr(); // // 出库 ===>> 工作档信息写入led显示器 //// mainService.ledExecute(9); // // 其他 ===>> LED显示器复位,显示默认信息 //// mainService.ledReset(10); // } catch (Exception e) { // e.printStackTrace(); // } // } // }); // thread2.start(); thread2 = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { try { // 间隔 Thread.sleep(200); // 系统运行状态判断 if (!SystemProperties.WCS_RUNNING_STATUS.get()) { continue; } // 出库 ===>> 堆垛机出库站到出库站 mainService.crnStnToOutStn(); // 堆垛机异常信息记录 mainService.recCrnErr(); // 输送线异常信息记录 // mainService.recDevErr(); // 出库 ===>> 工作档信息写入led显示器 // mainService.ledExecute(9); // 其他 ===>> LED显示器复位,显示默认信息 // mainService.ledReset(10); } catch (Exception e) { e.printStackTrace(); } } }); thread2.start(); } @PreDestroy public void shutDown(){ if (thread != null) thread.interrupt(); // if (thread2 != null) thread2.interrupt(); if (thread2 != null) thread2.interrupt(); } } src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -292,6 +292,43 @@ // } catch (Exception e3){ // } // convertRow(command); if (command.getAckFinish() == 0){ try{ Thread.sleep(100L); OperateResultExOne<byte[]> resultReadNOW = siemensNet.Read("DB100.0", (short) 20); if (resultReadNOW.IsSuccess) { CrnCommand one = new CrnCommand(); one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultReadNOW.Content, 2)); one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultReadNOW.Content, 4)); one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultReadNOW.Content, 6)); one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultReadNOW.Content, 8)); one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultReadNOW.Content, 10)); one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultReadNOW.Content, 12)); one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultReadNOW.Content, 14)); one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultReadNOW.Content, 16)); if (one.getTaskNo()>0 || one.getTaskMode()>0 || one.getSourcePosX()!=0 || one.getSourcePosY()!=0 || one.getSourcePosZ()!=0 || one.getDestinationPosX()!=0 || one.getDestinationPosY()!=0 || one.getDestinationPosZ()!=0 ){ try{ DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); deviceErrorService.addDeviceError("CrnErr", slave.getId(), "巷道号"+command.getLaneNo()+";堆垛机命令地址补丁重新写入取消,wcs下发地址存在数据:"+JSON.toJSONString(command.getNowTask())); } catch (Exception e2){ } return true; } } } catch (Exception eNow){ } } command.setCrnNo(slave.getId()); short[] array = new short[10]; array[0] = command.getAckFinish();