自动化立体仓库 - WCS系统
#
Junjie
2025-01-14 ba77f258c619b296e51cadc0958bff23965dfc6d
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -120,6 +120,9 @@
//                    //小车空闲且有跑库程序
//                    shuttleAction.moveLoc(slave.getId());
                    //演示模式
                    shuttleAction.demo(slave.getId());
                    Thread.sleep(200);
                } catch (Exception e) {
                    e.printStackTrace();
@@ -152,6 +155,9 @@
                //采集时间超过5s,保存一次数据记录
                //保存数据记录
                DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
                if (deviceDataLogService == null) {
                    return;
                }
                DeviceDataLog deviceDataLog = new DeviceDataLog();
                deviceDataLog.setOriginData(JSON.toJSONString(this.originDeviceData));
                deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol));
@@ -162,29 +168,8 @@
                //更新采集时间
                shuttleProtocol.setDeviceDataLog(System.currentTimeMillis());
                OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
            }
        }
        //将四向穿梭车状态保存至数据库
        BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class);
        BasShuttle basShuttle = shuttleService.selectOne(new EntityWrapper<BasShuttle>()
                .eq("shuttle_no", slave.getId()));
        if (basShuttle == null) {
            basShuttle = new BasShuttle();
            //四向穿梭车号
            basShuttle.setShuttleNo(slave.getId());
            basShuttle.setStatus(1);
            shuttleService.insert(basShuttle);
        }
        //任务号
        basShuttle.setWrkNo(shuttleProtocol.getTaskNo().intValue());
        //修改时间
        basShuttle.setUpdateTime(new Date());
        //设备状态
        basShuttle.setDeviceStatus(JSON.toJSONString(shuttleProtocol));
        if (shuttleService.updateById(basShuttle)) {
            OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
        }
    }
@@ -315,13 +300,21 @@
                shuttleProtocol.setRunDirection(data.getString("runDir") == null ? "none" : data.getString("runDir"));
                //是否为充电状态
                shuttleProtocol.setHasCharge(data.getInteger("chargState") == 1 ? true : false);
                //运行速度
                shuttleProtocol.setSpeed(data.getInteger("speed"));
                //*********读取扩展字段**********
                InnerSuhttleExtend extend = (InnerSuhttleExtend) shuttleProtocol.getExtend();
                //管制状态
                extend.setSuspendState(data.getInteger("suspendState"));
                //当前速度
                extend.setSpeed(data.getInteger("speed"));
                //最高电芯电压(mV)
                extend.setMaxCellVoltage(data.getInteger("maxCellVoltage"));
                //最低电芯电压(mV)
                extend.setMinCellVoltage(data.getInteger("minCellVoltage"));
                //电池电压
                extend.setVoltage(data.getInteger("voltage"));
                //充放电循环次数
                extend.setChargeCycleTimes(data.getInteger("chargeCycleTimes"));
                //剩余电量
                extend.setSurplusQuantity(data.getInteger("surplusQuantity"));
                //总电量
@@ -333,7 +326,7 @@
                ///读取四向穿梭车状态-end
                //小车处于运行中,将标记置为true
                if (shuttleProtocol.getDeviceStatus() == 1) {
                if (shuttleProtocol.getDeviceStatus() == 0) {
                    shuttleProtocol.setPakMk(true);
                }
@@ -370,6 +363,9 @@
            int removeIdx = -1;
            for (int i = 0; i < socketResults.size(); i++) {
                JSONObject socketResult = socketResults.get(i);
                if (socketResult == null) {
                    continue;
                }
                if (!socketResult.get("msgType").equals("requestMsg")) {//不是请求内容
                    continue;
                }
@@ -399,7 +395,7 @@
                socketResults.remove(removeIdx);
            }
        } catch (Exception e) {
            e.printStackTrace();
//            e.printStackTrace();
        }
    }
@@ -576,6 +572,7 @@
                && this.shuttleProtocol.getMode() == 1
                && this.shuttleProtocol.getPakMk()
                && this.shuttleProtocol.getErrorCode().equals("0")
                && this.shuttleProtocol.getTaskNo() == 0
                && (this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id
                || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id
                || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.CHARGING_WAITING.id)
@@ -810,6 +807,19 @@
    }
    @Override
    public boolean enableDemo(boolean enable) {
        shuttleProtocol.setDemo(enable);
        return true;
    }
    @Override
    public boolean offerSystemMsg(String format, Object... arguments) {
        String msg = News.replace(format, arguments);
        shuttleProtocol.setSystemMsg(msg);
        return true;
    }
    @Override
    public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes) {
        NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
        NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo);
@@ -842,8 +852,8 @@
            data.put("xp", xp);
            data.put("yp", yp);
            data.put("z", z);
            data.put("x", mapNode.getYBase());
            data.put("y", mapNode.getXBase());
            data.put("x", mapNode.getXBase());
            data.put("y", mapNode.getYBase());
            path.add(data);
        }
@@ -851,7 +861,7 @@
        LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                .eq("code", distCodeNum));
                .eq("qr_code_value", distCodeNum));
        if (locMast == null) {
            throw new CoolException("库位信息不存在");
        }
@@ -946,8 +956,7 @@
        String mapStr = JSON.toJSONString(map);
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                .eq("code", mapStr)
                .eq("status", 1));
                .eq("qr_code_value", mapStr));
        if (locMast == null) {
            throw new CoolException("地址码不存在");
        }
@@ -960,8 +969,8 @@
        location.put("xp", row);
        location.put("yp", bay);
        location.put("z", lev);
        location.put("x", mapNode.getYBase());
        location.put("y", mapNode.getXBase());
        location.put("x", mapNode.getXBase());
        location.put("y", mapNode.getYBase());
        HashMap<String, Object> body = new HashMap<>();
        body.put("responseType", "init");//复位
@@ -1117,9 +1126,22 @@
//        int x1 = Math.abs(y - 61) + 11;
//        //WCS系统X轴 => 牛眼Y轴转换公式
//        int y1 = x + 10;
        int x1 = x + 10;
        int y1 = y + 10;
        return new int[]{y1, x1, z};
//        int x1 = x + 10;
//        int y1 = y + 10;
        LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                .eq("row1", x)
                .eq("bay1", y)
                .eq("lev1", z)
                .eq("status", 1));
        if (locMast == null) {
            return null;
        }
        String qrCodeValue = locMast.getQrCodeValue();
        JSONObject data = JSON.parseObject(qrCodeValue);
        return new int[]{data.getInteger("y"), data.getInteger("x"), z};
    }
    @Data
@@ -1132,9 +1154,24 @@
        private Integer suspendState;
        /**
         * 当前速度,单位mm/s
         * 最高电芯电压(mV)
         */
        private Integer speed;
        private Integer maxCellVoltage;
        /**
         * 最低电芯电压(mV),低于2900mv需要立即充电
         */
        private Integer minCellVoltage;
        /**
         * 电池电压(mV)
         */
        private Integer voltage;
        /**
         * 充放电循环次数
         */
        private Integer chargeCycleTimes;
        /**
         * 剩余电量/10(A)