| | |
| | | import com.zy.core.model.Task; |
| | | import com.zy.core.model.command.StationCommand; |
| | | import com.zy.core.model.protocol.StationProtocol; |
| | | import com.zy.core.model.protocol.StationTaskBufferItem; |
| | | import com.zy.core.network.DeviceConnectPool; |
| | | import com.zy.core.network.ZyStationConnectDriver; |
| | | import com.zy.core.network.entity.ZyStationStatusEntity; |
| | |
| | | stationProtocol.setEnableIn(statusEntity.isEnableIn()); |
| | | stationProtocol.setWeight(statusEntity.getWeight()); |
| | | stationProtocol.setTaskWriteIdx(statusEntity.getTaskWriteIdx()); |
| | | stationProtocol.setTaskBufferItems(statusEntity.getTaskBufferItems()); |
| | | } |
| | | |
| | | if (!Cools.isEmpty(stationProtocol.getSystemWarning())) { |
| | |
| | | Integer stationId, |
| | | Integer targetStationId, |
| | | Integer palletSize) { |
| | | return getCommand(commandType, taskNo, stationId, targetStationId, palletSize, null); |
| | | } |
| | | |
| | | @Override |
| | | public StationCommand getCommand(StationCommandType commandType, |
| | | Integer taskNo, |
| | | Integer stationId, |
| | | Integer targetStationId, |
| | | Integer palletSize, |
| | | Double pathLenFactor) { |
| | | StationCommand stationCommand = new StationCommand(); |
| | | stationCommand.setTaskNo(taskNo); |
| | | stationCommand.setStationId(stationId); |
| | |
| | | stationCommand.setCommandType(commandType); |
| | | |
| | | if (commandType == StationCommandType.MOVE && !stationId.equals(targetStationId)) { |
| | | List<NavigateNode> nodes = calcPathNavigateNodes(taskNo, stationId, targetStationId); |
| | | List<NavigateNode> nodes = calcPathNavigateNodes(taskNo, stationId, targetStationId, pathLenFactor); |
| | | return fillMoveCommandPath(stationCommand, nodes, taskNo, stationId, targetStationId); |
| | | } |
| | | return stationCommand; |
| | |
| | | Integer stationId, |
| | | Integer targetStationId, |
| | | Integer palletSize) { |
| | | return getRunBlockRerouteCommand(taskNo, stationId, targetStationId, palletSize, null); |
| | | } |
| | | |
| | | @Override |
| | | public synchronized StationCommand getRunBlockRerouteCommand(Integer taskNo, |
| | | Integer stationId, |
| | | Integer targetStationId, |
| | | Integer palletSize, |
| | | Double pathLenFactor) { |
| | | if (taskNo == null || taskNo <= 0 || stationId == null || targetStationId == null) { |
| | | return null; |
| | | } |
| | | if (Objects.equals(stationId, targetStationId)) { |
| | | return getCommand(StationCommandType.MOVE, taskNo, stationId, targetStationId, palletSize); |
| | | return getCommand(StationCommandType.MOVE, taskNo, stationId, targetStationId, palletSize, pathLenFactor); |
| | | } |
| | | |
| | | RunBlockRerouteState rerouteState = loadRunBlockRerouteState(taskNo, stationId); |
| | |
| | | rerouteState.setPlanCount((rerouteState.getPlanCount() == null ? 0 : rerouteState.getPlanCount()) + 1); |
| | | rerouteState.setLastPlanTime(System.currentTimeMillis()); |
| | | |
| | | List<List<NavigateNode>> candidatePathList = calcCandidatePathNavigateNodes(taskNo, stationId, targetStationId); |
| | | List<List<NavigateNode>> candidatePathList = calcCandidatePathNavigateNodes(taskNo, stationId, targetStationId, pathLenFactor); |
| | | if (candidatePathList.isEmpty()) { |
| | | saveRunBlockRerouteState(rerouteState); |
| | | log.warn("输送线堵塞重规划失败,候选路径为空,taskNo={}, planCount={}, stationId={}, targetStationId={}", |
| | |
| | | } |
| | | |
| | | @Override |
| | | public synchronized boolean clearPath(Integer taskNo) { |
| | | if (taskNo == null || taskNo <= 0) { |
| | | return false; |
| | | } |
| | | if (zyStationConnectDriver == null) { |
| | | return false; |
| | | } |
| | | List<StationProtocol> status = getStatus(); |
| | | if (status == null || status.isEmpty()) { |
| | | return false; |
| | | } |
| | | |
| | | boolean found = false; |
| | | boolean success = true; |
| | | for (StationProtocol stationProtocol : status) { |
| | | List<StationTaskBufferItem> taskBufferItems = stationProtocol == null ? null : stationProtocol.getTaskBufferItems(); |
| | | if (taskBufferItems == null || taskBufferItems.isEmpty()) { |
| | | continue; |
| | | } |
| | | Integer stationId = stationProtocol.getStationId(); |
| | | for (StationTaskBufferItem item : taskBufferItems) { |
| | | if (item == null || !Objects.equals(taskNo, item.getTaskNo())) { |
| | | continue; |
| | | } |
| | | found = true; |
| | | if (!zyStationConnectDriver.clearTaskBufferSlot(stationId, item.getSlotIdx())) { |
| | | success = false; |
| | | log.warn("输送站缓存区残留路径清理失败。stationId={}, slotIdx={}, taskNo={}", |
| | | stationId, item.getSlotIdx(), item.getTaskNo()); |
| | | continue; |
| | | } |
| | | item.setTaskNo(0); |
| | | item.setTargetStaNo(0); |
| | | } |
| | | } |
| | | return found && success; |
| | | } |
| | | |
| | | @Override |
| | | public CommandResponse sendCommand(StationCommand command) { |
| | | CommandResponse commandResponse = null; |
| | | try { |
| | |
| | | e.printStackTrace(); |
| | | } finally { |
| | | BasStationOptService optService = SpringUtils.getBean(BasStationOptService.class); |
| | | if (optService == null) { |
| | | return commandResponse; |
| | | } |
| | | List<ZyStationStatusEntity> statusListEntity = zyStationConnectDriver.getStatus(); |
| | | ZyStationStatusEntity matched = null; |
| | | if (statusListEntity != null) { |
| | |
| | | null, |
| | | JSON.toJSONString(command), |
| | | JSON.toJSONString(matched), |
| | | 1, |
| | | commandResponse != null && Boolean.TRUE.equals(commandResponse.getResult()) ? 1 : 0, |
| | | JSON.toJSONString(commandResponse) |
| | | ); |
| | | if (optService != null) { |
| | | optService.save(basStationOpt); |
| | | } |
| | | optService.save(basStationOpt); |
| | | } |
| | | return commandResponse; |
| | | } |
| | |
| | | return zyStationConnectDriver.readOriginCommand(address, length); |
| | | } |
| | | |
| | | private List<NavigateNode> calcPathNavigateNodes(Integer taskNo, Integer startStationId, Integer targetStationId) { |
| | | private List<NavigateNode> calcPathNavigateNodes(Integer taskNo, |
| | | Integer startStationId, |
| | | Integer targetStationId, |
| | | Double pathLenFactor) { |
| | | NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class); |
| | | if (navigateUtils == null) { |
| | | return new ArrayList<>(); |
| | | } |
| | | return navigateUtils.calcByStationId(startStationId, targetStationId, taskNo); |
| | | return navigateUtils.calcByStationId(startStationId, targetStationId, taskNo, pathLenFactor); |
| | | } |
| | | |
| | | private List<List<NavigateNode>> calcCandidatePathNavigateNodes(Integer taskNo, |
| | | Integer startStationId, |
| | | Integer targetStationId) { |
| | | Integer targetStationId, |
| | | Double pathLenFactor) { |
| | | NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class); |
| | | if (navigateUtils == null) { |
| | | return new ArrayList<>(); |
| | | } |
| | | return navigateUtils.calcCandidatePathByStationId(startStationId, targetStationId, taskNo); |
| | | return navigateUtils.calcCandidatePathByStationId(startStationId, targetStationId, taskNo, pathLenFactor); |
| | | } |
| | | |
| | | private StationCommand buildMoveCommand(Integer taskNo, |