#
TQS
2023-04-17 565f82be8402eb5a6e8a70347b119f937c0d0488
#
4个文件已修改
92 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SteThread.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1090,14 +1090,27 @@
                        News.error("MainServiceImpl  1028行"+"存在捡料、盘点未入库货物,2号堆垛机暂时禁止出库!!!");
                        return false;
                    }
                    //如果存在目标站300且正在执行的拣料/盘点任务,则2号堆垛机不允许做拣料/盘点出库
                    WrkMast one = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                            .eq("sta_no",300)
                            .last(" and wrk_sts>11 and io_type in (103,107) "));
                    if(!Cools.isEmpty(one)){
                        News.error("MainServiceImpl  1099行"+"存在捡料、盘点未入库货物,2号堆垛机暂时禁止出库!!!");
                        return false;
                    }
                }
                if (wrkMast.getWrkSts() == 11 && wrkMast.getIoType() == 101){
                    Integer sour = wrkMast.getSourceStaNo();
                    List<WrkMast> wrkMasts = wrkMastMapper.selectWrkStsAndIoType1(sour);
                    if (wrkMasts.size() > 0){
                        News.error("MainServiceImpl  1028行"+"204存在全板出库中货物,2号堆垛机暂时禁止全板出库!!!");
                        return false;
                        for (WrkMast one : wrkMasts){
                            if(one.getWrkNo().equals(wrkMast.getWrkNo())){
                                News.error("MainServiceImpl  1028行"+"204存在全板出库中货物,2号堆垛机暂时禁止全板出库!!!");
                                return false;
                            }
                        }
                    }
                }
            }
@@ -1110,7 +1123,7 @@
                    .last(" and wrk_sts < 10"));
            if(one1 != null){
                News.error("{}出库任务无法作业,因入库任务已绑定小车!", wrkMast.getWrkNo());
                continue;
                return false;
            }
            //加强判断,确保因出库导致的移库整套任务全部结束后,才能执行下一笔出库任务。只有库位完成移库回去全部任务后,才认为当组出库任务完成
@@ -1120,13 +1133,13 @@
                if(one.getWrkSts() > 10 && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getSourceLocNo())
                        || Utils.getBay(wrkMast.getSourceLocNo()) != Utils.getBay(one.getSourceLocNo())
                        || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getSourceLocNo()))){
                    continue;
                    return false;
                }
                //存在移库任务,且在移回中,且移库目标库位与待出库库位不在同一库位组,时跳出,确保移库/出库全套任务完成后,再执行下一笔
                if(one.getWrkSts() < 11  && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getLocNo())
                        || Utils.getBay(wrkMast.getSourceLocNo()) != Utils.getBay(one.getLocNo())
                        || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getLocNo()))){
                    continue;
                    return false;
                }
            }
@@ -1655,6 +1668,11 @@
                            }
                        }
                        break;
//                    } else {
//                        LocMast curLoc = locMastService.selectById(locNo);
//                        if(curLoc != null && curLoc.getLocSts().equals("O")){
//
//                        }
                    }
                }
            }
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -228,6 +228,22 @@
            return false;
        }
        //下发前克隆一份
        CrnCommand crnCommand = new CrnCommand();
        crnCommand.setCrnNo(command.getCrnNo());
        crnCommand.setAckFinish(command.getAckFinish());
        crnCommand.setTaskNo(command.getTaskNo());
        crnCommand.setTaskMode(command.getTaskMode());
        crnCommand.setSourcePosX(command.getSourcePosX());
        crnCommand.setSourcePosY(command.getSourcePosY());
        crnCommand.setSourcePosZ(command.getSourcePosZ());
        crnCommand.setDestinationPosX(command.getDestinationPosX());
        crnCommand.setDestinationPosY(command.getDestinationPosY());
        crnCommand.setDestinationPosZ(command.getDestinationPosZ());
        crnCommand.setSourceStaNo(command.getSourceStaNo());
        crnCommand.setDestinationStaNo(command.getDestinationStaNo());
        crnCommand.setCommand(command.getCommand());
//        convertRow(command);
        command.setCrnNo(slave.getId());
        short[] array = new short[10];
@@ -242,6 +258,14 @@
        array[8] = command.getDestinationPosZ();
        array[9] = command.getCommand();
        OperateResult result = siemensNet.Write("DB100.0", array);
        if(!result.IsSuccess){
            log.error("写入堆垛机plc数据失败,重新添加任务到队列 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(crnCommand));
            MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand));
            Thread.sleep(100);
            readStatus();
            return false;
        }
        //堆垛机任务写入后,回读一次,看是否成功
        Thread.sleep(200);
@@ -262,6 +286,13 @@
                || command.getDestinationPosY()!=one.getDestinationPosY() || command.getDestinationPosZ()!=one.getDestinationPosZ()
            ){
                News.error("堆垛机命令地址写入后回读失败[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
                News.error("堆垛机命令回读失败后,重新添加任务到队列 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(crnCommand));
                MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand));
                Thread.sleep(100);
                readStatus();
                return false;
            }else{
                News.info("堆垛机命令地址写入后回读成功[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
            }
        }
@@ -270,7 +301,19 @@
                short commandFinish = 1;
                Thread.sleep(300);
                News.info("堆垛机命令地址写入成功,开始写确认位[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
                result = siemensNet.Write("DB100.18", commandFinish);
                Integer counts = 0;
                while(true) {
                    result = siemensNet.Write("DB100.18", commandFinish);
                    if(result.IsSuccess){
                        break;
                    } else {
                        counts++;
                        if(counts>5){
                            break;
                        }
                    }
                    Thread.sleep(300);
                }
            }
        }
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -238,16 +238,23 @@
        }
        int index = staNos.indexOf(staProtocol.getSiteId());
        OperateResult write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo());    // 工作号
        Thread.sleep(500);
        if(!write.IsSuccess){
            News.error("写入输送线ID失败,重新添加任务到队列。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol)));
            MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol));
            return;
        }
        Thread.sleep(200);
        OperateResult write1 = siemensS7Net.Write("DB101." + index*2, staProtocol.getStaNo());    // 目标站
        if (!write.IsSuccess || !write1.IsSuccess) {
            MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol));
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol)));
            News.error("写入输送线站点数据失败,重新添加任务到队列。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
            staProtocol = station.get(staProtocol.getSiteId());
            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
                staProtocol.setPakMk(true);
            }
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol)));
            News.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
            News.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}",  slave.getId(), JSON.toJSON(staProtocol));
src/main/java/com/zy/core/thread/SteThread.java
@@ -67,6 +67,8 @@
                    // 写入数据
                    case 2:
                        write((SteCommand) task.getData());
                        Thread.sleep(200);
                        readStatus();
                        break;
                    default:
                        break;
@@ -235,8 +237,8 @@
        // 开始任务
        if (!command.getComplete()) {
            //组织任务前,先清空写任务确认位,以及任务完成确认位
            siemensS7Net.Write("V2000.0", false);
            siemensS7Net.Write("V2000.1", false);
            OperateResult result01 = siemensS7Net.Write("V2000.0", false);
            OperateResult result02 = siemensS7Net.Write("V2000.1", false);
            // 1.任务号
            OperateResult result0 = siemensS7Net.Write("V998", command.getTaskNo().shortValue());
            try {