LSH
2023-07-25 cdcda32802aabe65fc6d20fb06907998b3bb9a61
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -534,6 +534,7 @@
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (rgvProtocol == null) {
                continue;
            }
            BasRgv basRgv = basRgvService.selectById(rgv.getId());
@@ -585,6 +586,8 @@
        for (WrkMast wrkMast : wrkMasts) {
            //目标站
            Integer staNo = wrkMast.getStaNo();
            //源站
            Integer sourceStaNo = wrkMast.getSourceStaNo();
            //通过目标站搜索rgv号
            Integer rgvNo = this.searchRgvNo(staNo);
            if (rgvNo == null) {//未找到可用的rgv
@@ -632,7 +635,7 @@
                        }
                        //判断行走路径是否被占用
                        Integer staNo = wrkMast.getStaNo();
                        Integer staNo = wrkMast.getSourceStaNo();
                        BasDevp basDevp = basDevpService.selectById(staNo);
                        if (basDevp == null) {
                            continue;//目标站不存在
@@ -641,8 +644,13 @@
                        int startPath = rgvProtocol.getRgvPos().intValue();
                        //目标路径值
                        int endPath = basDevp.getLocType3().intValue();
                        boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);
                        boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用
                        if (pathUsed) {
                            //行走路径被占用,禁止下发命令
                            continue;
                        }
                        //行走路径空闲,锁定路径
                        RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true);
                        //  命令下发区 --------------------------------------------------------------------------
                        RgvCommand rgvCommand = new RgvCommand();
@@ -672,6 +680,24 @@
                            continue;
                        }
                        //判断行走路径是否被占用
                        Integer staNo = wrkMast.getStaNo();
                        BasDevp basDevp = basDevpService.selectById(staNo);
                        if (basDevp == null) {
                            continue;//目标站不存在
                        }
                        //起始路径
                        int startPath = rgvProtocol.getRgvPos().intValue();
                        //目标路径值
                        int endPath = basDevp.getLocType3().intValue();
                        boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用
                        if (pathUsed) {
                            //行走路径被占用,禁止下发命令
                            continue;
                        }
                        //行走路径空闲,锁定路径
                        RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true);
                        //  命令下发区 --------------------------------------------------------------------------
                        RgvCommand rgvCommand = new RgvCommand();
                        rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV编号
@@ -696,6 +722,24 @@
                        if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV是否无任务、RGV是否无货
                            continue;
                        }
                        //判断行走路径是否被占用
                        Integer staNo = wrkMast.getSourceStaNo();
                        BasDevp basDevp = basDevpService.selectById(staNo);
                        if (basDevp == null) {
                            continue;//目标站不存在
                        }
                        //起始路径
                        int startPath = rgvProtocol.getRgvPos().intValue();
                        //目标路径值
                        int endPath = basDevp.getLocType3().intValue();
                        boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用
                        if (pathUsed) {
                            //行走路径被占用,禁止下发命令
                            continue;
                        }
                        //行走路径空闲,锁定路径
                        RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true);
                        //  命令下发区 --------------------------------------------------------------------------
                        RgvCommand rgvCommand = new RgvCommand();
@@ -725,6 +769,24 @@
                            continue;
                        }
                        //判断行走路径是否被占用
                        Integer staNo = wrkMast.getStaNo();
                        BasDevp basDevp = basDevpService.selectById(staNo);
                        if (basDevp == null) {
                            continue;//目标站不存在
                        }
                        //起始路径
                        int startPath = rgvProtocol.getRgvPos().intValue();
                        //目标路径值
                        int endPath = basDevp.getLocType3().intValue();
                        boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用
                        if (pathUsed) {
                            //行走路径被占用,禁止下发命令
                            continue;
                        }
                        //行走路径空闲,锁定路径
                        RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true);
                        //  命令下发区 --------------------------------------------------------------------------
                        RgvCommand rgvCommand = new RgvCommand();
                        rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV编号
@@ -750,6 +812,10 @@
            }
        }
    }
    private boolean rgvIoExecuteWrk2To3() {
        return false;
    }
    /**
@@ -1735,9 +1801,24 @@
                    wrkMast1.setWrkSts(27L);//27.RGV放货完成
                }
                //解锁路径
                RgvUtils.unLockPath(wrkMast1.getRgvNo());
                wrkMast1.setModiTime(now);
                if (wrkMastMapper.updateById(wrkMast1) == 0) {
                    log.error("工位1修改工作档状态失败!!,工作号={}", wrkMast1.getWrkNo());
                }
                //  命令下发区 --------------------------------------------------------------------------
                RgvCommand rgvCommand = new RgvCommand();
                rgvCommand.setRgvNo(rgv.getId()); // RGV编号
                rgvCommand.setAckFinish1((short) 1);  // 工位1任务完成确认位
                rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 工位1工作号
                rgvCommand.setTaskMode1(RgvTaskModeType.NONE); // 工位1任务模式:  无
                rgvCommand.setCommand((short) 1);   //工位1任务确认
                if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(4, rgvCommand))) {
                    //step=2,工位1、2任务确认;   step=4,工位1确认;     step=5,工位2任务确认
                    log.error("RGV命令下发失败,RGV号={},任务数据={}", rgv.getId(), JSON.toJSON(rgvCommand));
                }
//                //工位1取货完成后,工位2是无货空闲状态时,准备给工位2发任务,确认是否有待执行RGV任务
@@ -3179,4 +3260,81 @@
            }
        }
    }
    /**
     * 其他  ===>> 码垛位自动补充空板:驱动拆盘机输出托盘
     */
    public synchronized void dischargingMachineOutputTray() {
        try {
            List<WrkMast> wrkMasts = wrkMastMapper.selectDischargingMachineOutputTray();
            if (Cools.isEmpty(wrkMasts) || wrkMasts.size()>3){
                return;
            }
            // 获取入库站信息
            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
            StaProtocol staProtocol = devpThread.getStation().get(213);
            if (staProtocol == null) {
                log.error("码垛位自动补充空板:驱动拆盘机输出托盘,任务下发失败,站点查询失败");
                return;
            } else {
                staProtocol = staProtocol.clone();
            }
            if (!staProtocol.isLoading()){
                log.info("码垛位自动补充空板:驱动拆盘机输出托盘,任务下发失败,站点无物,正在自动调出空板!");
                int i = wrkMastMapper.selectConfigCount10468N();
                if (i==1){
                    wrkMastMapper.updateConfig10468Y();
                }
                return;
            }else {
                int i = wrkMastMapper.selectConfigCount10468N();
                if (i==0){
                    return;
                }
            }
            // 判断是否满足入库条件
            if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0 && staProtocol.isPakMk()) {
                staProtocol.setWorkNo((short)9999);
                staProtocol.setStaNo((short)214);
                devpThread.setPakMk(staProtocol.getSiteId(), false);
                boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol));
                if (!result) {
                    throw new CoolException("更新plc站点信息失败==>码垛位自动补充空板:驱动拆盘机输出托盘!");
                }
                log.info("码垛位自动补充空板:驱动拆盘机输出托盘,任务下发成功:工作号9999、目标站214!");
            }else {
                log.error("码垛位自动补充空板:驱动拆盘机输出托盘,任务下发失败,站点状态不符合!");
            }
        }catch (Exception e){
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
    }
    /**
     * 其他  ===>> 拆盘机处空板扫码,驱动托盘向码垛位,不入库
     */
    public synchronized void scanBarcodeEmptyBoard() {
        try {
        }catch (Exception e){
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
    }
    /**
     * 其他  ===>> 码垛完成驱动托盘下一步扫码入库
     */
    public synchronized void stackingCompletionDriveTray() {
        try {
        }catch (Exception e){
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
    }
}