自动化立体仓库 - WCS系统
#
LSH
2023-06-27 1e585dfd636f811952a0d2b0fc3e735325cd5243
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -513,6 +513,95 @@
    }
    /**
     * 绑定小车方法
     */
    public synchronized void rgvBindSte() {
        for (RgvSlave rgv : slaveProperties.getRgv()) {
            // 获取RGV信息
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (rgvProtocol == null) {
                continue;
            }
            BasRgv basRgv = basRgvService.selectById(rgv.getId());
            if (basRgv == null) {
                log.error("{}号RGV尚未在数据库进行维护!", rgv.getId());
                continue;
            }
            // 只有当RGV空闲、自动, 并且无任务、无物时才继续执行
            if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
                    && rgvProtocol.getModeType() == RgvModeType.AUTO
                    && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0
                    && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0
            ) {
                // 如果最近一次是入库模式
                if (rgvProtocol.getLastIo().equals("I")) {
                    if (basRgv.getInEnable().equals("Y")) {
                        this.rgvBindSteIn(rgv, rgvProtocol); //  入库
                        rgvProtocol.setLastIo("O");
                    } else if (basRgv.getOutEnable().equals("Y")) {
                        this.rgvBindSteOut(rgv, rgvProtocol); //  出库
                        rgvProtocol.setLastIo("I");
                    }
                }
                // 如果最近一次是出库模式
                else if (rgvProtocol.getLastIo().equals("O")) {
                    if (basRgv.getOutEnable().equals("Y")) {
                        this.rgvBindSteOut(rgv, rgvProtocol); //  出库
                        rgvProtocol.setLastIo("I");
                    } else if (basRgv.getInEnable().equals("Y")) {
                        this.rgvBindSteIn(rgv, rgvProtocol); //  入库
                        rgvProtocol.setLastIo("O");
                    }
                }
            }
        }
    }
    /**
     * 绑定小车入库方法
     */
    public synchronized void rgvBindSteIn(RgvSlave slave, RgvProtocol rgvProtocol) {
        for (RgvSlave.RgvStn rgvStn: slave.getRgvInSStn()){
            Integer staNo = rgvStn.getStaNo();
            BasDevp basDevp = basDevpService.selectById(rgvStn.getDevpPlcId());
            if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()==0){
                continue;
            }else {
                WrkMast wrkMast = wrkMastMapper.selectRgvInSteWrkNo(basDevp.getWrkNo());
                if (!Cools.isEmpty(wrkMast)){
                    wrkMast.setRgvNo(wrkMast.getCrnNo()>3 ? 2 : 1);
                    wrkMast.setAppeTime(new Date());
                    if (wrkMastMapper.updateById(wrkMast)==0){
                        log.error("绑定小车更新工作档失败!!! [工作号:{}]", wrkMast.getWrkNo());
                    }
                }
            }
        }
    }
    /**
     * 绑定小车出库方法
     */
    public synchronized void rgvBindSteOut(RgvSlave slave, RgvProtocol rgvProtocol) {
        for (RgvSlave.RgvStn rgvStn: slave.getRgvOutSStn()){
            BasDevp basDevp = basDevpService.selectById(rgvStn.getDevpPlcId());
            if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()==0){
                continue;
            }else {
                WrkMast wrkMast = wrkMastMapper.selectRgvOutSteWrkNo(basDevp.getWrkNo());
                if (!Cools.isEmpty(wrkMast)){
                    wrkMast.setRgvNo(rgvStn.getStaNo());
                    wrkMast.setAppeTime(new Date());
                    if (wrkMastMapper.updateById(wrkMast)==0){
                        log.error("绑定小车更新工作档失败!!! [工作号:{}]", wrkMast.getWrkNo());
                    }
                }
            }
        }
    }
    /**
     * 入出库  ===>>  RGV入出库作业下发
     */
    public synchronized void rgvIoExecute() {