#
lty
2025-08-05 83f222c9eebcee8db94d41a081596506f60f9775
#
5个文件已修改
308 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/command/RgvCommand.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvProtocol.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -213,20 +213,20 @@
                        log.error("输送线下发1:"+wrkNo+","+inSta.getBackSta());
                        continue;
                    }
                    if (staProtocol.getSiteId()!= 159){
                        if( Cools.isEmpty(barcodeMat) || "NG".endsWith(barcodeMat) || "NoRead".equals(barcodeMat) || "00000000".equals(barcodeMat)) {
                            News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcodeMat(), barcodeMat);
                            staProtocol.setWorkNo(wrkNo);
                            News.info("{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo);
                            wrkNo++;
                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            log.error("输送线下发1:"+wrkNo+","+inSta.getBackSta());
                            continue;
                        }
                    }
//                    if (staProtocol.getSiteId()!= 159){
//                        if( Cools.isEmpty(barcodeMat) || "NG".endsWith(barcodeMat) || "NoRead".equals(barcodeMat) || "00000000".equals(barcodeMat)) {
//                            News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcodeMat(), barcodeMat);
//
//                            staProtocol.setWorkNo(wrkNo);
//                            News.info("{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo);
//                            wrkNo++;
//                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
//                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//                            log.error("输送线下发1:"+wrkNo+","+inSta.getBackSta());
//                            continue;
//                        }
//                    }
                    // 判断重复工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
                    if (wrkMast != null) {
@@ -2505,9 +2505,9 @@
        }
    }
//    /**
//     *  自动生成RGV接驳任务
//     */
    /**
     *  自动生成RGV接驳任务(检索4楼任务,非3号堆垛机,则生成对应接驳任务)
     */
//    public synchronized  void rgvCreateWrkMastSta(){
//        try{
//
@@ -2543,17 +2543,17 @@
                ){
                    log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol);
                    if (rgvProtocol.getTaskNo1()!=0){
                        if (rgvProtocol.getTaskNo1()==32222){
                            boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
                            if (!rgvComplete){
                                log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo());
                            }
                            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
                            rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2415");
                            rgvThread.setPakMk(true);
                            break;
                        }
//                        if (rgvProtocol.getTaskNo1()==32222){
//                            boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
//                            if (!rgvComplete){
//                                log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo());
//                            }
//                            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
//                            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
//                            rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2415");
//                            rgvThread.setPakMk(true);
//                            break;
//                        }
                        WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue());
                        if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getWrkSts()!=1){
                            log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta);
@@ -2583,22 +2583,31 @@
                            if (!MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol))) {
                                continue;
                            }
                        }else {
                            log.error("rgv任务完成给输送线下发命令,但未查询到工作档");
                            // 下发站点信息
                            Map<Integer,Integer> map = new HashMap<>();
                            map.put(101,102);map.put(112,111);
                            map.put(100,100);
                            staProtocol.setWorkNo(rgvProtocol.getTaskNo1().intValue());
                            staProtocol.setStaNo(map.get(rgvProtocol.getRgvPosI()).shortValue());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
//                            log.error("rgv任务完成给输送线下发命令:"+wrkMast.getWrkNo()+","+wrkMast.getStaNo());
                            if (!MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol))) {
                                continue;
                            }
                        }
                        boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
//                        boolean rgvComplete = true;
//                        else {
//                            log.error("rgv任务完成给输送线下发命令,但未查询到工作档");
//                            // 下发站点信息
//                            Map<Integer,Integer> map = new HashMap<>();
//                            map.put(101,102);map.put(112,111);
//                            map.put(100,100);
//                            staProtocol.setWorkNo(rgvProtocol.getTaskNo1().intValue());
//                            staProtocol.setStaNo(map.get(rgvProtocol.getRgvPosI()).shortValue());
//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
////                            log.error("rgv任务完成给输送线下发命令:"+wrkMast.getWrkNo()+","+wrkMast.getStaNo());
//                            if (!MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol))) {
//                                continue;
//                            }
//                        }
                        int sourceSta = wrkMast.getSourceStaNo();
                        boolean rgvComplete = false;
                        //双工位出入库不同工位复位
                        if((sourceSta >= 1001 && sourceSta <= 1035) || (sourceSta >= 2001 && sourceSta <= 2030)){
                            rgvComplete = rgvComplete(rgvProtocol.getRgvNo(),6);
                        }else{
                            rgvComplete = rgvComplete(rgvProtocol.getRgvNo(),3);
                        }
                        if (!rgvComplete){
                            log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo());
                            break;
@@ -2667,31 +2676,31 @@
                            continue;
                        }
                        //判断工作结束位置状态
                        boolean signDev = false;
                        BasDevp devNo = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", wrkMastSta.getStaEnd()));
                        if (devNo.getDevNo()==113){
                            BasDevp devNo114 = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 114));
                            if (!Cools.isEmpty(devNo114)){
                                if (devNo114.getOutEnable().equals("Y")){
                                    signDev = true;
                                }
                            }
                        }
                        if (!Cools.isEmpty(devNo)){
                            if (devNo.getAutoing().equals("Y") && !devNo.getWrkNo().equals(0) && !devNo.getLoading().equals("N")){
                                continue;
                            }
                            if (!signDev && devNo.getDevNo()==113){
                                if (!devNo.getAutoing().equals("Y") || !devNo.getWrkNo().equals(0) || !devNo.getLoading().equals("N")){
                                    wrkEnable = true;
                                    continue;
                                }
                                if (!devNo.getOutEnable().equals("Y")){
                                    wrkEnable = true;
                                    continue;
                                }
                            }
                        }
//                        boolean signDev = false;
//                        BasDevp devNo = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", wrkMastSta.getStaEnd()));
//                        if (devNo.getDevNo()==113){
//                            BasDevp devNo114 = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 114));
//                            if (!Cools.isEmpty(devNo114)){
//                                if (devNo114.getOutEnable().equals("Y")){
//                                    signDev = true;
//                                }
//                            }
//                        }
//                        if (!Cools.isEmpty(devNo)){
//                            if (devNo.getAutoing().equals("Y") && !devNo.getWrkNo().equals(0) && !devNo.getLoading().equals("N")){
//                                continue;
//                            }
//                            if (!signDev && devNo.getDevNo()==113){
//                                if (!devNo.getAutoing().equals("Y") || !devNo.getWrkNo().equals(0) || !devNo.getLoading().equals("N")){
//                                    wrkEnable = true;
//                                    continue;
//                                }
//                                if (!devNo.getOutEnable().equals("Y")){
//                                    wrkEnable = true;
//                                    continue;
//                                }
//                            }
//                        }
                        boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发
                        wrkEnable = true;
                        if (sign){
@@ -2969,21 +2978,41 @@
     * */
    public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta){
        try{
            int startSta = wrkMastSta.getStaStart();
            //  命令下发区 --------------------------------------------------------------------------
            RgvCommand rgvCommand = new RgvCommand();
            rgvCommand.setRgvNo(rgvId); // RGV编号
            rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位
            rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 工位1工作号
            rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 工位1任务模式:  取放货
            rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue());   //工位1起点
            rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue());   //工位1目标站点
            rgvCommand.setCommand((short) 1);   //工位1任务确认
            if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
                //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务
                log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand));
                return false;
            } else {
                return true;
            if((startSta >= 1001 && startSta <= 1035) || (startSta >= 2001 && startSta <= 2030)){//出库RGV取货
                rgvCommand.setAckFinish2((short) 0);  // 工位1任务完成确认位
                rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 工位2工作号
                rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 工位2任务模式:  取放货
                rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue());   //工位2起点
                rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue());   //工位2目标站点
                rgvCommand.setCommand((short) 2);   //工位1任务确认
            }else{  //入库RGV取货
                rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位
                rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 工位1工作号
                rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 工位1任务模式:  取放货
                rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue());   //工位1起点
                rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue());   //工位1目标站点
                rgvCommand.setCommand((short) 1);   //工位1任务确认
            }
            if(rgvCommand.getCommand() == 1){
                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
                    //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务
                    log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand));
                    return false;
                } else {
                    return true;
                }
            }else{
                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
                    //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务
                    log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand));
                    return false;
                } else {
                    return true;
                }
            }
        }catch (Exception e){
            return false;
@@ -3093,10 +3122,10 @@
    /*
     * 小车复位
     * */
    public synchronized boolean rgvComplete(Integer rgvId){
    public synchronized boolean rgvComplete(Integer rgvId,Integer step){
        try{
            //  命令下发区 --------------------------------------------------------------------------
            if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(3, new RgvCommand()))) {
            if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(step, new RgvCommand()))) {
                //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务
                log.error("RGV命令下发失败,RGV号={}",rgvId);
                return false;
src/main/java/com/zy/core/MainProcess.java
@@ -121,13 +121,13 @@
                    // RGV  ===>>  小车任务作业下发
                    try{
                        boolean rgvIoExecuteSign = mainService.rgvRunWrkMastFullSta();
                        if (rgvIoExecuteSign){
                            k = 0;
                        } else if (k>4){
                            k = 0;
                            mainService.rgvRunWrkMastEmptyStaAvoidance();//避让
                        }
                        mainService.rgvRunWrkMastFullSta();
//                        if (rgvIoExecuteSign){
//                            k = 0;
//                        } else if (k>4){
//                            k = 0;
//                            mainService.rgvRunWrkMastEmptyStaAvoidance();//避让
//                        }
                    }catch (Exception e){
                        log.error("RGV  ===>>  小车任务作业下发异常"+e);
                    }
src/main/java/com/zy/core/model/command/RgvCommand.java
@@ -65,12 +65,12 @@
    private RgvTaskModeType taskModeType2;
    /*
    工位1源站
    工位2源站
     */
    private Short sourceStaNo2 = 0;
    /*
    工位1目标站
    工位2目标站
     */
    private Short destinationStaNo2 = 0;
    ///////////////////////////////////////////////////////////////////////////////////////
src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -75,29 +75,29 @@
    public Short walkPos;
    //////////////////////     工位2定义   //////////////////////////////////////////////////
//    /**
//     * 工位2任务号
//     */
//    public Short taskNo2 = 0;
//
//    /**
//     * RGV工位2当前状态
//     * 0:空闲,无任务
//     * 11:取货中
//     * 12:放货中
//     * 10:任务完成等待WCS确认
//     */
//    public Short status2;
//
//    /**
//     * 状态枚举
//     */
//    public RgvStatusType statusType2;
//
//    /**
//     * 工位2有物
//     */
//    public Short loaded2;
    /**
     * 工位2任务号
     */
    public Short taskNo2 = 0;
    /**
     * RGV工位2当前状态
     * 0:空闲,无任务
     * 11:取货中
     * 12:放货中
     * 10:任务完成等待WCS确认
     */
    public Short status2;
    /**
     * 状态枚举
     */
    public RgvStatusType statusType2;
    /**
     * 工位2有物
     */
    public Short loaded2;
    ///////////////////////////////////////////////////////////////////////////////////////
    /**
src/main/java/com/zy/core/thread/RgvThread.java
@@ -82,9 +82,9 @@
                        write1((RgvCommand) task.getData());
                        break;
//                    //工位2写入数据
//                    case 5:
//                        write2((RgvCommand) task.getData());
//                        break;
                    case 5:
                        write2((RgvCommand) task.getData());
                        break;
                    // 复位
                    case 3:
                        RgvCommand command = (RgvCommand) task.getData();
@@ -99,6 +99,20 @@
                        command.setDestinationStaNo1((short)0);     // 目标站
                        command.setCommand((short)0);
                        write1(command);
                        break;
                    case 6:
                        RgvCommand command2 = (RgvCommand) task.getData();
                        if (null == command2) {
                            command2 = new RgvCommand();
                        }
                        command2.setRgvNo(slave.getId()); // RGV编号
                        command2.setTaskNo2((short) 0); // 工作号
                        command2.setAckFinish2((short) 1);  // 任务完成确认位
                        command2.setTaskMode2(RgvTaskModeType.NONE); // 任务模式
                        command2.setSourceStaNo2((short)0);     // 源站
                        command2.setDestinationStaNo2((short)0);     // 目标站
                        command2.setCommand((short)0);
                        write2(command2);
                        break;
                    // 回原点  避让
                    case 9:
@@ -145,9 +159,10 @@
        rgvProtocol.setLoaded1((short)0);
        rgvProtocol.setWalkPos((short)0);
        rgvProtocol.setRgvPos((short)0);
//        rgvProtocol.setTaskNo2((short)0);
//        rgvProtocol.setStatus2((short)-1);
//        rgvProtocol.setLoaded2((short)0);
        //工位2状态
        rgvProtocol.setTaskNo2((short)0);
        rgvProtocol.setStatus2((short)-1);
        rgvProtocol.setLoaded2((short)0);
        rgvProtocol.setAlarm((short)0);
        rgvProtocol.setxSpeed((short) 0);
        rgvProtocol.setxDistance((short) 0);
@@ -193,6 +208,8 @@
                rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransInt16(result.Content, 10));
                rgvProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 12));
                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 14));
//                rgvProtocol.setTaskNo2(siemensNet.getByteTransform().TransInt16(result.Content, 4));
//                rgvProtocol.setLoaded2(siemensNet.getByteTransform().TransInt16(result.Content, 8));
//                rgvProtocol.setStatus2(siemensNet.getByteTransform().TransInt16(result.Content, 16));
                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 18));
//                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20));
@@ -220,17 +237,17 @@
                    }
                }
                // 工位2复位信号
//                if (rgvProtocol.getStatusType2().equals(RgvStatusType.WAITING)
//                        || rgvProtocol.getStatusType2().equals(RgvStatusType.FETCHWAITING)) {
//                    if (resetFlag2) {
//                        RgvCommand rgvCommand = new RgvCommand();
//                        rgvCommand.setAckFinish2((short)1);
//                        if (write(rgvCommand)) {
//                            resetFlag2 = false;
//                        }
//                    }
//                }
//                 工位2复位信号
                if (rgvProtocol.getStatusType2().equals(RgvStatusType.WAITING)
                        || rgvProtocol.getStatusType2().equals(RgvStatusType.FETCHWAITING)) {
                    if (resetFlag2) {
                        RgvCommand rgvCommand = new RgvCommand();
                        rgvCommand.setAckFinish2((short)1);
                        if (write(rgvCommand)) {
                            resetFlag2 = false;
                        }
                    }
                }
                try {
                    // 根据实时信息更新数据库