zjj
2023-11-24 af1b0101f2f19fb562ba81eb2bbe3a7976e3d716
#堆垛机出入库
3个文件已修改
256 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 200 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-prod.yml 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -84,56 +84,60 @@
        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
            // 遍历堆垛机出库站
            for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
                // 获取堆垛机出库站信息
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) {
                    // 查询工作档
                    TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnSlave.getId(), staProtocol.getSiteId().toString());
                    if (taskWrk == null) {
                List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", crnSlave.getId()).eq("crn_stn", crnStn.getStaNo()));
                for (StaDesc staDesc : staDescs){
                    // 获取堆垛机出库站信息
                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
                    StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
                    if (staProtocol == null) {
                        continue;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    // 判断工作档条件
                    if (taskWrk.getWrkSts() == 12 && taskWrk.getIoType() == 2) {
                        // 判断吊车是否实际已完成,且电脑状态在move中,以备电脑进行更新工作档
                        CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, taskWrk.getCrnNo());
                        CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                        if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
                            // 移动中
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) {
                        // 查询工作档
                        TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnSlave.getId(), staDesc.getStnNo().toString());
                        if (taskWrk == null) {
                            continue;
                        }
                        //  判断堆垛机状态等待确认
                        if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(taskWrk.getWrkNo().shortValue())
                                && crnProtocol.getTaskFinish() == 0
                                && crnProtocol.forkPosType == CrnForkPosType.HOME) {
                            // 命令下发区 --------------------------------------------------------------------------
                            // 下发站点信息
                            staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
                            String targetPoint = taskWrk.getTargetPoint();
                            int i = Integer.parseInt(targetPoint);
                            staProtocol.setStaNo((short)i);
                            if (!CommandUtils.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
                        // 判断工作档条件
                        if (taskWrk.getWrkSts() == 12 && taskWrk.getIoType() == 2) {
                            // 判断吊车是否实际已完成,且电脑状态在move中,以备电脑进行更新工作档
                            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, taskWrk.getCrnNo());
                            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                            if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
                                // 移动中
                                continue;
                            }
                            //  判断堆垛机状态等待确认
                            if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(taskWrk.getWrkNo().shortValue())
                                    && crnProtocol.getTaskFinish() == 0
                                    && crnProtocol.forkPosType == CrnForkPosType.HOME) {
                                // 命令下发区 --------------------------------------------------------------------------
                            // 更新工作档状态为14失败
                            taskWrk.setWrkSts(14);
                            if (taskWrkMapper.updateById(taskWrk) != 0) {
                                // 复位堆垛机
                                crnThread.setResetFlag(true);
                            } else {
                                log.error("更新工作档的工作状态为14失败!!! [工作号:{}]", taskWrk.getWrkNo());
                                // 下发站点信息
                                staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
                                String targetPoint = taskWrk.getTargetPoint();
                                int i = Integer.parseInt(targetPoint);
                                staProtocol.setStaNo((short)i);
                                if (!CommandUtils.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
                                    continue;
                                }
                                // 更新工作档状态为14失败
                                taskWrk.setWrkSts(14);
                                if (taskWrkMapper.updateById(taskWrk) != 0) {
                                    // 复位堆垛机
                                    crnThread.setResetFlag(true);
                                } else {
                                    log.error("更新工作档的工作状态为14失败!!! [工作号:{}]", taskWrk.getWrkNo());
                                }
                            }
                        }
                    }
                }
            }
        }
    }
@@ -188,68 +192,72 @@
     */
    public void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol){
        for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
            boolean flag = false;
            // 获取堆垛机入库站信息
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
            if (staProtocol == null) {
                continue;
            } else {
                staProtocol = staProtocol.clone();
            }
            // 查询站点详细信息
            BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
            if (staDetl == null) {
                log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                continue;
            }
            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
                    && staDetl.getCanining()!=null && staDetl.getCanining().equals("Y")) {
                flag = true;
            }
            if (!flag) {
                continue;
            }
            // 获取工作状态为2(设备上走)的入库工作档
            TaskWrk taskWrk = taskWrkMapper.selectPakIn(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo().toString());
            if(null == taskWrk) {
                continue;
            }
            List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", slave.getId()).eq("crn_stn", crnStn.getStaNo()));
            for (StaDesc staDesc : staDescs) {
                boolean flag = false;
                // 获取堆垛机入库站信息
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                // 查询站点详细信息
                BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                if (staDetl == null) {
                    log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                    continue;
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
                        && staDetl.getCanining()!=null && staDetl.getCanining().equals("Y")) {
                    flag = true;
                }
                if (!flag) {
                    continue;
                }
                // 获取工作状态为2(设备上走)的入库工作档
                TaskWrk taskWrk = taskWrkMapper.selectPakIn(slave.getId(), staProtocol.getWorkNo().intValue(), staDesc.getStnNo().toString());
                if(null == taskWrk) {
                    continue;
                }
            // 堆垛机控制过滤
            if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
                continue;
            }
                // 堆垛机控制过滤
                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
                    continue;
                }
            // 已经存在吊车执行任务时,则过滤
            if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) {
                continue;
            }
                // 已经存在吊车执行任务时,则过滤
                if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) {
                    continue;
                }
            // 命令下发区 --------------------------------------------------------------------------
            CrnCommand crnCommand = new CrnCommand();
            crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
            crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 工作号
            crnCommand.setAckFinish((short) 0);  // 任务完成确认位
            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
            crnCommand.setSourcePosX(crnStn.getBay().shortValue());     // 源库位列
            crnCommand.setSourcePosY(crnStn.getLev().shortValue());     // 源库位层
            crnCommand.setSourcePosZ(crnStn.getRow().shortValue());     // 源库位排
            crnCommand.setDestinationPosX(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位列
            crnCommand.setDestinationPosY(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位层
            crnCommand.setDestinationPosZ(Utils.getRowShort(taskWrk.getTargetPoint()));     // 目标库位排
            crnCommand.setCommand((short)1);
            if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
                log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
            } else {
                // 修改工作档状态 2.设备上走 => 3.吊车入库中
                Date now = new Date();
                taskWrk.setWrkSts(3);
                taskWrk.setModiTime(now);
                if (taskWrkMapper.updateById(taskWrk) == 0) {
                    log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", taskWrk.getWrkNo());
                // 命令下发区 --------------------------------------------------------------------------
                CrnCommand crnCommand = new CrnCommand();
                crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 工作号
                crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                crnCommand.setSourcePosX(crnStn.getBay().shortValue());     // 源库位列
                crnCommand.setSourcePosY(crnStn.getLev().shortValue());     // 源库位层
                crnCommand.setSourcePosZ(crnStn.getRow().shortValue());     // 源库位排
                crnCommand.setDestinationPosX(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位列
                crnCommand.setDestinationPosY(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位层
                crnCommand.setDestinationPosZ(Utils.getRowShort(taskWrk.getTargetPoint()));     // 目标库位排
                crnCommand.setCommand((short)1);
                if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
                    log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
                } else {
                    // 修改工作档状态 2.设备上走 => 3.吊车入库中
                    Date now = new Date();
                    taskWrk.setWrkSts(3);
                    taskWrk.setModiTime(now);
                    if (taskWrkMapper.updateById(taskWrk) == 0) {
                        log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", taskWrk.getWrkNo());
                    }
                }
            }
            return;
        }
    }
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -413,7 +413,7 @@
//        }else {
            array[4] = command.getSourcePosX();
//        }
        array[5] = command.getDestinationPosY();
        array[5] = command.getSourcePosY();
        array[6] = command.getDestinationPosZ();
//        if (rowOne.contains(command.getDestinationPosX())){
src/main/resources/application-prod.yml
@@ -27,13 +27,13 @@
      row: 3
      bay: 41
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
    crnInStn[1]:  #堆垛机入库站点2
      staNo: 205
      row: 4
      bay: 41
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
  crn[1]: #堆垛机2
    id: 2
    ip: 172.17.91.7
@@ -59,13 +59,13 @@
      row: 3
      bay: 41
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
    crnInStn[1]:  #堆垛机入库站点2
      staNo: 205
      row: 4
      bay: 41
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
  crn[2]: #堆垛机3
    id: 3
    ip: 172.17.91.12
@@ -87,17 +87,17 @@
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnOutStn[1]:  #堆垛机出库站点
      staNo: 200
      staNo: 206
      row: 3
      bay: 41
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
    crnInStn[1]:  #堆垛机入库站点2
      staNo: 205
      staNo: 211
      row: 4
      bay: 41
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
  crn[3]: #堆垛机4
    id: 4
    ip: 172.17.91.17
@@ -119,17 +119,17 @@
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnOutStn[1]:  #堆垛机出库站点
      staNo: 200
      row: 3
      bay: 41
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 218
      row: 12
      bay: 22
      lev: 2
      devpPlcId: ${wcs-slave.devp[1].id}
    crnInStn[1]:  #堆垛机入库站点2
      staNo: 205
      row: 4
      bay: 41
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 223
      row: 13
      bay: 22
      lev: 2
      devpPlcId: ${wcs-slave.devp[1].id}
  crn[4]: #堆垛机5
    id: 5
    ip: 172.17.91.22
@@ -151,17 +151,17 @@
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnOutStn[1]:  #堆垛机出库站点
      staNo: 200
      staNo: 224
      row: 3
      bay: 41
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
    crnInStn[1]:  #堆垛机入库站点2
      staNo: 205
      staNo: 229
      row: 4
      bay: 41
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
  crn[5]: #堆垛机6
    id: 6
    ip: 172.17.91.27
@@ -183,17 +183,17 @@
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnOutStn[1]:  #堆垛机出库站点
      staNo: 200
      staNo: 230
      row: 3
      bay: 41
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
    crnInStn[1]:  #堆垛机入库站点2
      staNo: 205
      staNo: 235
      row: 4
      bay: 41
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
  devp[0]: #输送线
    id: 1
    ip: 172.17.91.36
@@ -258,7 +258,7 @@
    slot: 0
  devp[2]: #输送线
    id: 3
    ip: 10.10.10.30
    ip: 172.17.8.201
    rack: 0
    slot: 0
    port: 102