自动化立体仓库 - WCS系统
#
Junjie
2023-09-19 8254197b29064846c3eafc916e340b74434fde6a
#
4个文件已修改
66 ■■■■ 已修改文件
src/main/java/com/zy/common/utils/NavigateMapData.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/NyShuttleThread.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/console.html 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -245,6 +245,8 @@
        ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class);
        List<List<MapNode>> lists = filterMap(NavigationMapType.NONE.id, arrayList, lev, null, null);//获取全部地图数据
        NavigateMapData mapData = new NavigateMapData(nodes.get(0).getZ());
        List<List<MapNode>> realMap = mapData.getJsonData(-1, null, null);//获取完整地图(包括入库出库)
        for (NavigateNode node : nodes) {
            if (node.getZ() != lev) {
                continue;
@@ -255,11 +257,10 @@
            if (lock) {
                mapNode.setValue(-999);//禁用库位
            }else {
                if (node.getX() == 11 || node.getX() == 19) {
                    mapNode.setValue(3);//恢复库位,母轨道
                }else {
                    mapNode.setValue(0);//恢复库位,普通库位
                }
                //获取原始节点数据
                List<MapNode> rows = realMap.get(node.getX());
                MapNode col = rows.get(node.getY());
                mapNode.setValue(col.getValue());//恢复库位
            }
            listX.set(node.getY(), mapNode);
src/main/java/com/zy/core/MainProcess.java
@@ -69,7 +69,7 @@
                    // 异常信息记录
                    mainService.recErr();
                    // 入库  ===>> 空栈板初始化入库,叉车入库站放货
                    mainService.storeEmptyPlt();
//                    mainService.storeEmptyPlt();
                    // 出库  ===>> 工作档信息写入led显示器
                    mainService.ledExecute();
                    // 其他  ===>> LED显示器复位,显示默认信息
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();
        nodes.addAll(nextNodes);
        if (nextNodes != null) {
            nodes.addAll(nextNodes);
        }
        navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//所使用的路径进行锁定禁用
        //可执行命令
@@ -455,8 +471,12 @@
        }else {
            //已执行完成
            //删除redis
            redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
            //最后一段命令为移动命令,则暂缓删除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,9 +625,15 @@
        //检测路径是否可行走(检查路径锁定状态,检测路径是否有其他小车)
        //检测当前行走路径,和下一步路径
        boolean checkPathIsAvailable = NavigateUtils.checkPathIsAvailable(currentNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
        boolean checkPathIsAvailable2 = NavigateUtils.checkPathIsAvailable(nextNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
        if (checkPathIsAvailable && checkPathIsAvailable2) {
            return true;//可行走
        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();
src/main/webapp/views/console.html
@@ -37,13 +37,13 @@
                                <!-- 充电桩 -->
                                <div class="item" style="font-size: 24px">&#9889;</div>
                            </div>
                            <div v-else-if="col.value < 0">
                                <!-- 禁止显示区域 -->
                                <div class="item" style="visibility: hidden">{{idx}}</div>
                            </div>
                            <div v-else-if="col.value == -999">
                                <!-- 路径占用区域 -->
                                <div class="item" style="background:#f83333;color: #fff;">{{idx}}</div>
                            </div>
                            <div v-else-if="col.value < 0">
                                <!-- 禁止显示区域 -->
                                <div class="item" style="visibility: hidden">{{idx}}</div>
                            </div>
                            <div v-else>
                                <div class="item" v-if="col.data.length > 0">{{col.data}}</div>
@@ -356,6 +356,7 @@
                            this.getShuttleStateInfo() //获取四向穿梭车信息
                            this.getLiftStateInfo() //获取提升机信息
                            this.getSiteInfo() //获取输送站点数据
                            this.getMap(this.currentLev) //获取实时地图数据
                        }, 1000)
                    },
                    //获取地图数据