| src/main/java/com/zy/core/enums/RedisKeyType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -10,6 +10,7 @@ LIFT_FLAG("lift_"), DUAL_CRN_COMMAND_("dual_crn_command_"), DUAL_CRN_COMMAND_IDX("dual_crn_command_idx_"), QUEUE_CRN("queue_crn_"), QUEUE_DUAL_CRN("queue_dual_crn_"), src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java
@@ -85,6 +85,11 @@ if (step == 2) { List<SendDualCrnCommandParam> commandList = (List<SendDualCrnCommandParam>) task.getData(); for (SendDualCrnCommandParam sendDualCrnCommandParam : commandList) { DualCrnCommand dualCrnCommand = sendDualCrnCommandParam.getCommands().get(0); redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_IDX.key + dualCrnCommand.getTaskNo(), sendDualCrnCommandParam.getCommandIdx(), 60 * 60 * 24); } redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_.key + crnProtocol.getCrnNo(), JSON.toJSONString(commandList, SerializerFeature.DisableCircularReferenceDetect), 60 * 60 * 24); } else if (step == 3) { sendCommand((DualCrnCommand) task.getData()); @@ -109,28 +114,21 @@ continue; } // if (crnProtocol.getLoaded() == 1 && crnProtocol.getLoadedTwo() == 1) { // Object wait = redisUtil.get(RedisKeyType.DUAL_CRN_PICK_WAIT_NEXT_TASK.key + crnProtocol.getCrnNo()); // if (wait != null) { // redisUtil.del(RedisKeyType.DUAL_CRN_PICK_WAIT_NEXT_TASK.key + crnProtocol.getCrnNo()); // } // } if (!((crnProtocol.getStatusType().equals(DualCrnStatusType.IDLE) || crnProtocol.getStatusType().equals(DualCrnStatusType.FETCH_COMPLETE)) && (crnProtocol.getStatusTypeTwo().equals(DualCrnStatusType.IDLE) || crnProtocol.getStatusTypeTwo().equals(DualCrnStatusType.FETCH_COMPLETE))) ) { continue; } Object commandListObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_.key + crnProtocol.getCrnNo()); if (commandListObj == null) { continue; } List<SendDualCrnCommandParam> commandList = JSON.parseArray(commandListObj.toString(), SendDualCrnCommandParam.class); List<SendDualCrnCommandParam> newCommandList = new ArrayList<>(); for (SendDualCrnCommandParam commandParam : commandList) { SendDualCrnCommandParam processed = processStation(commandParam); if(processed != null) { newCommandList.add(processed); } processStation(commandParam); } redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_.key + crnProtocol.getCrnNo(), JSON.toJSONString(newCommandList, SerializerFeature.DisableCircularReferenceDetect), 60 * 60 * 24); Thread.sleep(100); } catch (Exception e) { log.error("DualCrnCommand Fail", e); @@ -140,12 +138,17 @@ commandThread.start(); } private SendDualCrnCommandParam processStation(SendDualCrnCommandParam commandParam) { private void processStation(SendDualCrnCommandParam commandParam) { Integer station = commandParam.getStation(); Integer idx = commandParam.getCommandIdx(); List<DualCrnCommand> commandList = commandParam.getCommands(); DualCrnCommand firstCommand = commandList.get(0); Object idxObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_IDX.key + firstCommand.getTaskNo()); if(idxObj == null) { return; } Integer idx = (Integer) idxObj; if (idx >= commandList.size()) { return commandParam; return; } DualCrnCommand dualCommand = commandList.get(idx); @@ -167,17 +170,17 @@ if (idx == 0) { if(send) { idx++; commandParam.setCommandIdx(idx); redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_IDX.key + firstCommand.getTaskNo(), idx, 60 * 60 * 24); sendCommand(dualCommand); redisUtil.set(RedisKeyType.DUAL_CRN_PICK_WAIT_NEXT_TASK.key + crnProtocol.getCrnNo(), "lock", 5); } return commandParam; return; }else { if (dualCommand.getTaskMode() == DualCrnTaskModeType.PUT.id.shortValue()) { //等待下一个任务 Object wait = redisUtil.get(RedisKeyType.DUAL_CRN_PICK_WAIT_NEXT_TASK.key + crnProtocol.getCrnNo()); if (wait != null) { return commandParam; return; } Integer taskNo = dualCommand.getTaskNo(); @@ -187,35 +190,35 @@ StationObjModel stationObjModel = JSON.parseObject(outTaskStationInfoObj.toString(), StationObjModel.class); StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo()); if (stationThread == null) { return commandParam; return; } Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap(); StationProtocol stationProtocol = statusMap.get(stationObjModel.getStationId()); if (stationProtocol == null) { return commandParam; return; } if (!stationProtocol.isAutoing()) { return commandParam; return; } if (stationProtocol.isLoading()) { return commandParam; return; } if (stationProtocol.getTaskNo() > 0) { return commandParam; return; } } } if(send) { idx++; commandParam.setCommandIdx(idx); redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_IDX.key + firstCommand.getTaskNo(), idx, 60 * 60 * 24); sendCommand(dualCommand); } return commandParam; return; } } src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
@@ -107,22 +107,40 @@ // 如果最近一次是出库模式 if (dualCrnProtocol.getLastIo().equals("O")) { processLoveMove(basDualCrnp, dualCrnThread); processIn(basDualCrnp, dualCrnThread); processOut(basDualCrnp, dualCrnThread); boolean executeResult1 = processLoveMove(basDualCrnp, dualCrnThread); if (executeResult1) { return; } boolean executeResult2 = processIn(basDualCrnp, dualCrnThread); if (executeResult2) { return; } boolean executeResult3 = processOut(basDualCrnp, dualCrnThread); if (executeResult3) { return; } } // 如果最近一次是入库模式 else if (dualCrnProtocol.getLastIo().equals("I")) { processLoveMove(basDualCrnp, dualCrnThread); processOut(basDualCrnp, dualCrnThread); processIn(basDualCrnp, dualCrnThread); boolean executeResult1 = processLoveMove(basDualCrnp, dualCrnThread); if (executeResult1) { return; } boolean executeResult2 = processOut(basDualCrnp, dualCrnThread); if (executeResult2) { return; } boolean executeResult3 = processIn(basDualCrnp, dualCrnThread); if (executeResult3) { return; } } } private void processIn(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) { private boolean processIn(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) { List<WrkMast> inTaskList = getInTaskList(basDualCrnp); if (inTaskList.isEmpty()) { return; return false; } WrkMast stationOneWrkMast = inTaskList.get(0); @@ -158,13 +176,15 @@ MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, list)); News.info("双工位堆垛机命令下发成功,堆垛机号={},任务数据={}", crnNo, JSON.toJSON(list)); dualCrnProtocol.setLastIo("I"); return true; } return false; } private void processOut(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) { private boolean processOut(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) { List<WrkMast> outTaskList = getOutTaskList(basDualCrnp); if (outTaskList.isEmpty()) { return; return false; } WrkMast stationOneWrkMast = null; @@ -214,13 +234,15 @@ MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, list)); News.info("双工位堆垛机命令下发成功,堆垛机号={},任务数据={}", crnNo, JSON.toJSON(list)); dualCrnProtocol.setLastIo("O"); return true; } return false; } private void processLoveMove(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) { private boolean processLoveMove(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) { List<WrkMast> locMoveTaskList = getLocMoveTaskList(basDualCrnp); if (locMoveTaskList.isEmpty()) { return; return false; } WrkMast stationOneWrkMast = null; @@ -270,7 +292,9 @@ MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, list)); News.info("双工位堆垛机命令下发成功,堆垛机号={},任务数据={}", crnNo, JSON.toJSON(list)); dualCrnProtocol.setLastIo("O"); return true; } return false; } private List<WrkMast> getInTaskList(BasDualCrnp basDualCrnp) { @@ -678,28 +702,13 @@ return; } Object commandListObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_.key + basDualCrnp.getCrnNo()); if (commandListObj == null) { News.error("双工位堆垛机处于等待确认且任务完成状态,但未找到命令。堆垛机号={},工作号={}", basDualCrnp.getCrnNo(), taskNo); return; } List<SendDualCrnCommandParam> dualCrnCommandParamList = JSON.parseArray(commandListObj.toString(), SendDualCrnCommandParam.class); SendDualCrnCommandParam taskCommand = null; for (SendDualCrnCommandParam sendDualCrnCommandParam : dualCrnCommandParamList) { DualCrnCommand dualCrnCommand = sendDualCrnCommandParam.getCommands().get(0); if(dualCrnCommand.getTaskNo() == taskNo){ taskCommand = sendDualCrnCommandParam; break; } } if (taskCommand == null) { News.error("双工位堆垛机处于等待确认且任务完成状态,但未找到命令。堆垛机号={},工作号={}", basDualCrnp.getCrnNo(), taskNo); return; int idx = 10; Object idxObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_IDX.key + wrkMast.getWrkNo()); if(idxObj != null) { idx = (Integer) idxObj; } Integer idx = taskCommand.getCommandIdx(); List<DualCrnCommand> commandList = taskCommand.getCommands(); if (idx >= commandList.size()) { if (idx >= 2) { Long updateWrkSts = null; if (wrkMast.getWrkSts() == WrkStsType.INBOUND_RUN.sts) { updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;