zhangchao
2024-09-07 9f981b542e85a6ec4acffe40c6fab60756e2b486
输送线指令优化
4个文件已修改
108 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -491,8 +491,14 @@
                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
//                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
                    if (wrkMast == null) {
                        WrkMast wrkMast1 = wrkMastMapper.selectPakInStepBarcode(barcode);
                        if (!(wrkMast1 != null && wrkMast1.getWrkSts() == 2 && wrkMast1.getIoType() == 53)) {
                        // 无拣料数据
                        continue;
                        } else {
                            wrkMast1.setIoType(103);
                            wrkMast = wrkMast1;
                        }
                    }
                    if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
                        continue;
@@ -508,6 +514,7 @@
//                        log.error("{}号任务数据异常!", wrkMast.getWrkNo());
//                    }
                    // 获取目标站
                    Wrapper<StaDesc> wrapper = new QueryWrapper<StaDesc>().eq("type_no", wrkMast.getIoType() - 50).eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站
                            .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号
                    StaDesc staDesc = staDescService.getOne(wrapper);
@@ -1330,17 +1337,17 @@
            //  状态:等待确认 并且  任务完成位 = 1
            if (wait && crnProtocol.getTaskNo() != 0) {
                News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作");
                if (crnProtocol.getTaskNo() == 9999) {
                    // 堆垛机复位
                    if (statusType == CrnStatusType.WAITING_ONE) {
                        crnThread.setResetFlag(true);
                    } else if (statusTypeTwo == CrnStatusType.WAITING_TWO) {
                        crnThread.setResetFlagTwo(true);
                    } else {
                        crnThread.setResetFlag(true);
                        crnThread.setResetFlagTwo(true);
                    }
                } else {
//                if (crnProtocol.getTaskNo() == 9999) {
//                    // 堆垛机复位
//                    if (statusType == CrnStatusType.WAITING_ONE) {
//                        crnThread.setResetFlag(true);
//                    } else if (statusTypeTwo == CrnStatusType.WAITING_TWO) {
//                        crnThread.setResetFlagTwo(true);
//                    } else {
//                        crnThread.setResetFlag(true);
//                        crnThread.setResetFlagTwo(true);
//                    }
//                } else {
                    // 获取入库待确认工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
                    if (wrkMast == null) {
@@ -1373,7 +1380,7 @@
                    }
                }
            }
            //}
        }
        News.infoNoLog("" + mark + " - 0" + " - 对工作档的完成操作执行完成");
    }
src/main/java/com/zy/core/MainProcess.java
@@ -42,6 +42,8 @@
                    if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
                        continue;
                    }
                    // 拣料、并板、盘点再入库
                    mainService.stnToCrnStnPick(3);
                    // 演示
                    //mainService.crnDemoOfLocMove1();
@@ -51,8 +53,7 @@
                    mainService.generateStoreWrkFile(1); // 组托
                    //mainService.generateStoreWrkFile0(2); // WMS入库
                    Thread.sleep(500);
                    // 拣料、并板、盘点再入库
                    mainService.stnToCrnStnPick(3);
                    // 出库  ===>>  堆垛机出库站到出库站
                    mainService.crnStnToOutStn(4);
                    // 入出库  ===>>  堆垛机入出库作业下发
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -295,6 +295,7 @@
                Integer siteId = staNos.get(i); // 站点编号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr2.Content, i * 4, 1);
                StaProtocol staProtocol = station.get(siteId);
                if (staProtocol != null) {
                staProtocol.setBreakerErr(status[0]);
                staProtocol.setInfraredErr(status[1]);
                staProtocol.setOutTimeErr(status[2]);
@@ -303,7 +304,7 @@
                staProtocol.setInverterErr(status[5]);
                staProtocol.setContactErr(status[6]);
                staProtocol.setUpcontactErr(status[7]);
                }
            }
        }
@@ -340,39 +341,64 @@
        if (null == staProtocol) {
            return;
        }
        System.out.println(staProtocol);
        int index = staNosAll.indexOf(staProtocol.getSiteId());
        OperateResult write = null;
        OperateResult write1 = null;
        //任务下发次数
        int writeCount = 0;
        boolean wrkNoFlag = false;
        boolean staNoFlag = false;
        do {
            if (!wrkNoFlag) {
            write = siemensS7Net.Write("DB100." + index * 6, (int) staProtocol.getWorkNo());    // 工作号
            Thread.sleep(300);
            write1 = siemensS7Net.Write("DB100." + (index * 6 + 4), staProtocol.getStaNo());    // 目标站
            Thread.sleep(100);
            if (write.IsSuccess && write1.IsSuccess) {
                Thread.sleep(200);
                if (write.IsSuccess) {
                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index * 6, (short) 4);
                OperateResultExOne<byte[]> readResult1 = siemensS7Net.Read("DB100." + (index * 6 + 4), (short) 2);
                if (readResult.IsSuccess && readResult1.IsSuccess) {
                    if (readResult.IsSuccess) {
                    short workNo = (short) siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0);
                    short staNo = siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 0);
                    if (staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)) {
                        if (staProtocol.getWorkNo().equals(workNo)) {
                        //任务命令写入成功
                        log.info("写入堆垛机命令后返回成功,并且回读成功。堆垛机plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                        break;
                            log.info("写入工作号命令后返回成功,并且回读成功。堆垛机plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                            wrkNoFlag = true;
                    } else {//返回结果是成功了,但是真实值不相同
                        writeCount++;
                        log.error("写入堆垛机命令后返回成功,但是读取任务值不一致。堆垛机plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                            log.error("写入工作号命令后返回成功,但是读取任务值不一致。堆垛机plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                    }
                } else {
                    writeCount++;
                    log.error("写入堆垛机命令后读取失败。堆垛机plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                        log.error("写入工作号命令后读取失败。堆垛机plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                }
            } else {
                writeCount++;
                log.error("写入堆垛机命令后读取失败。堆垛机plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                    log.error("写入工作号命令失败。堆垛机plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                }
            }
            if (!staNoFlag) {
                write1 = siemensS7Net.Write("DB100." + (index * 6 + 4), staProtocol.getStaNo());    // 目标站
                Thread.sleep(300);
                if (write1.IsSuccess) {
                    OperateResultExOne<byte[]> readResult1 = siemensS7Net.Read("DB100." + (index * 6 + 4), (short) 2);
                    if (readResult1.IsSuccess) {
                        short staNo = siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 0);
                        if (staProtocol.getStaNo().equals(staNo)) {
                            //任务命令写入成功
                            log.info("写入目标站命令后返回成功,并且回读成功。堆垛机plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                            staNoFlag = true;
                        } else {//返回结果是成功了,但是真实值不相同
                            writeCount++;
                            log.error("写入目标站命令后返回成功,但是读取任务值不一致。堆垛机plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                        }
                    } else {
                        writeCount++;
                        log.error("写入目标站命令后读取失败。堆垛机plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                    }
                } else {
                    writeCount++;
                    log.error("写入目标站命令失败。堆垛机plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                }
            }
            if (wrkNoFlag && staNoFlag) {
                break;
            }
        } while (writeCount < 5);
@@ -387,6 +413,18 @@
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
            News.info("SiemensDevp" + " - 5" + " - 输送线命令下发 [id:{}] >>>>> 命令下发: {}", slave.getId(), JSON.toJSON(staProtocol));
        }
        if (!write1.IsSuccess) {
            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("SiemensDevp" + " - 4" + " - 写入输送线站点数据失败。输送线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("SiemensDevp" + " - 5" + " - 输送线命令下发 [id:{}] >>>>> 命令下发: {}", slave.getId(), JSON.toJSON(staProtocol));
        }
    }
    // 更新入出库模式
src/main/resources/application.yml
@@ -26,7 +26,7 @@
#    field-strategy: 0
logging:
  path: /stock/out/@pom.build.finalName@/logs
  path: stock/out/@pom.build.finalName@/logs
super:
  pwd: xltys1995
@@ -35,7 +35,7 @@
  enable: false
wms:
  url: 127.0.0.1:8088/bjycwms
  url: 10.10.10.200:8088/bjycwms
# 下位机配置
wcs-slave: