自动化立体仓库 - WCS系统
#
Junjie
2023-09-19 8254197b29064846c3eafc916e340b74434fde6a
src/main/java/com/zy/core/thread/NyShuttleThread.java
@@ -176,6 +176,20 @@
                //小车处于运行中,将标记置为true
                if (shuttleProtocol.getFree() == 0) {
                    shuttleProtocol.setPakMk(true);
                }else {
                    //小车处于等待确认且空闲状态,如有工作号则清空路径
                    if (shuttleProtocol.getTaskNo() != 0 && shuttleProtocol.getProtocolStatusType() == ShuttleProtocolStatusType.IDLE) {
                        Object o = redisUtil.get("shuttle_wrk_no_" + shuttleProtocol.getTaskNo());
                        if (o != null) {
                            ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class);
                            ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
                            NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(shuttleProtocol.getCurrentLocNo()));
                            navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//解锁路径
                            //删除redis
                            redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
                        }
                    }
                }
                //将四向穿梭车状态保存至数据库
@@ -411,7 +425,9 @@
        //锁定路径,锁定当前路径和下一步路径
        List<NavigateNode> nodes = command.getNodes();
        if (nextNodes != null) {
        nodes.addAll(nextNodes);
        }
        navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//所使用的路径进行锁定禁用
        //可执行命令
@@ -455,8 +471,12 @@
        }else {
            //已执行完成
            //最后一段命令为移动命令,则暂缓删除redis等待清除路径时一次性删除
            //最后一段命令为不是移动命令,则删除redis
            if (!command.getRequest().getBody().get("requestType").equals("move")) {
            //删除redis
            redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
            }
            if (!assignCommand.getCharge()) {
                //对主线程抛出等待确认状态waiting
@@ -573,7 +593,9 @@
            if (basLift == null) {
                continue;
            }
            if (basLift.getPoint().equals(shuttleProtocol.getPoint())) {
            Integer liftX = basLift.getPoint$().getX();
            Integer liftY = basLift.getPoint$().getY();
            if (liftX.equals(shuttleProtocol.getPoint().getX()) && liftY.equals(shuttleProtocol.getPoint().getY())) {
                //小车在提升机内
                //判断提升机是否空闲
                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
@@ -588,6 +610,8 @@
                    //提升机处于空闲,放行
                    return true;
                }
            }else {
                return true;//不在提升机内,放行
            }
        }
        return false;//默认不放行
@@ -601,10 +625,16 @@
        //检测路径是否可行走(检查路径锁定状态,检测路径是否有其他小车)
        //检测当前行走路径,和下一步路径
        boolean checkPathIsAvailable = NavigateUtils.checkPathIsAvailable(currentNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
        if (nextNodes == null) {
            if (checkPathIsAvailable) {
                return true;//可行走
            }
        }else {
        boolean checkPathIsAvailable2 = NavigateUtils.checkPathIsAvailable(nextNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
        if (checkPathIsAvailable && checkPathIsAvailable2) {
            return true;//可行走
        }
        }
        ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
        NavigateNode currentTarget = currentNodes.get(currentNodes.size() - 1);