#
1
9 天以前 a3c831343b4a975cb3bf71e5c8300e4598bcfef4
#
3个文件已修改
594 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 454 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastStaMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1040,7 +1040,11 @@
                        if (jsonObject.getInteger("code").equals(200)) {
                            staProtocolOut.setWorkNo(9997);
                            devpThread.setPakMk(staProtocolOut.getSiteId(), false);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocolOut));
                            Integer devpId = 1;
                            if(staProtocolOut.getSiteId() > 2000){
                                devpId = 2;
                            }
                            boolean result = MessageQueue.offer(SlaveType.Devp, devpId, new Task(2, staProtocolOut));
                            if (!result) {
                                throw new CoolException("更新plc站点信息失败");
@@ -1084,7 +1088,11 @@
                    if (jsonObject.getInteger("code").equals(200)) {
                        staProtocolIn.setWorkNo(9996);
                        devpThread.setPakMk(staProtocolIn.getSiteId(), false);
                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocolIn));
                        Integer devpId = 1;
                        if(staProtocolIn.getSiteId() > 2000){
                            devpId = 2;
                        }
                        boolean result = MessageQueue.offer(SlaveType.Devp, devpId, new Task(2, staProtocolIn));
                        if (!result) {
                            throw new CoolException("更新plc站点信息失败");
@@ -1151,6 +1159,23 @@
                    }
                }
            }
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
                    && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0 && crnProtocol.getCrnNo() == 3) {
                News.warnNoLog(""+mark+" - 0"+" - 开始执行堆垛机入出库作业下发");
                if (crnProtocol.getLastIo().equals("O")) {
                    if (basCrnp.getInEnable().equals("Y")) {
                        this.locToCrnStn9996(crn, crnProtocol,mark); //  入库
                    }
                }
                // 如果最近一次是出库模式
                else if (crnProtocol.getLastIo().equals("I")) {
                    if (basCrnp.getOutEnable().equals("Y")) {
                        this.locToCrnStn9997(crn, crnProtocol,mark); //  出库
                    }
                }
            }
            // 库位移转
            //mark - 3 - ....
            this.locToLoc(crn, crnProtocol,mark);
@@ -1173,7 +1198,7 @@
                    new EntityWrapper<BasCrnp>().eq("crn_no", crnProtocol.getCrnNo())
            );
            boolean result = true;
            if(crnProtocol.getCrnNo() != 3 ){
            if(crnProtocol.getCrnNo() != 5 ){
                return;
            }
            for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
@@ -1465,205 +1490,6 @@
            // 获取工作状态为11(生成出库ID)的出库工作档
//            WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId(), crnStn.getStaNo());
            List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
            WrkMast wrkMast9997 = wrkMastMapper.selectByWrkNo9997(9997);
            WrkMast wrkMast9996 = wrkMastMapper.selectByWrkNo9997(9996);
            if (slave.getId() == 3 && wrkMast9997 != null) {
                SiemensDevpThread devpThread1 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                StaProtocol staProtocol2 = devpThread1.getStation().get(1015);
                if (staProtocol2 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol2);
                    break;
                } else {
                    staProtocol2 = staProtocol2.clone();
                }
                SiemensDevpThread devpThread2 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
                StaProtocol staProtocol4004 = devpThread2.getStation().get(4004);
                if (staProtocol4004 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol4004);
                    break;
                } else {
                    staProtocol4004 = staProtocol4004.clone();
                }
                StaProtocol staProtocol3 = devpThread2.getStation().get(2016);
                if (staProtocol3 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol2);
                    break;
                } else {
                    staProtocol3 = staProtocol3.clone();
                }
                BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                if (staDetl == null) {
                    News.error(""+mark+" - 2"+" - 5"+" - 出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                    break;
//                    continue;
                }
                if(staProtocol2.isLoading() && staProtocol2.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")){
                    // 堆垛机控制过滤
                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
//                        continue;
                        break;
                    }
                    // 已经存在吊车执行任务时,则过滤
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                        break;
//                        return;
                    }
                    if(staProtocol4004.isLoading()){
                        continue;
                    }
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo((short) 9997); // 工作号
//                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                    crnCommand.setSourcePosX((short) 9);     // 源库位排
                    crnCommand.setSourcePosY((short) 52);     // 源库位列
                    crnCommand.setSourcePosZ((short) 1);     // 源库位层
                    crnCommand.setDestinationPosX((short) 11);     // 目标库位排
                    crnCommand.setDestinationPosY((short) 52);     // 目标库位列
                    crnCommand.setDestinationPosZ((short) 3);     // 目标库位层
//                crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //库位类型
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast9997.getCrnNo(), new Task(2, crnCommand))) {
                        News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast9997.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
                        // 修改工作档状态 11.生成出库ID => 12.吊车出库中
                        Date now = new Date();
                        wrkMast9997.setWrkSts(12L);
                        wrkMast9997.setCrnStrTime(now);
                        wrkMast9997.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast9997) == 0) {
                            News.error("" + mark + " - 2" + " - 14" + " - 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast9997.getWrkNo());
                        }
                        break;
                    }
                }
                if(staProtocol3.isLoading() && staProtocol3.isAutoing()){
                    // 堆垛机控制过滤
                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
//                        continue;
                        break;
                    }
                    // 已经存在吊车执行任务时,则过滤
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                        break;
//                        return;
                    }
                    if(staProtocol4004.isLoading()){
                        continue;
                    }
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo((short) 9997); // 工作号
//                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                    crnCommand.setSourcePosX((short) 11);     // 源库位排
                    crnCommand.setSourcePosY((short) 52);     // 源库位列
                    crnCommand.setSourcePosZ((short) 2);     // 源库位层
                    crnCommand.setDestinationPosX((short) 11);     // 目标库位排
                    crnCommand.setDestinationPosY((short) 52);     // 目标库位列
                    crnCommand.setDestinationPosZ((short) 3);     // 目标库位层
//                crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //库位类型
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast9997.getCrnNo(), new Task(2, crnCommand))) {
                        News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast9997.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
                        // 修改工作档状态 11.生成出库ID => 12.吊车出库中
                        Date now = new Date();
                        wrkMast9997.setWrkSts(12L);
                        wrkMast9997.setCrnStrTime(now);
                        wrkMast9997.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast9997) == 0) {
                            News.error("" + mark + " - 2" + " - 14" + " - 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast9997.getWrkNo());
                        }
                        break;
                    }
                }
            }
            if (slave.getId() == 3 && wrkMast9996 != null) {
                SiemensDevpThread devpThread1 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                SiemensDevpThread devpThread2 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
                StaProtocol staProtocol4001 = devpThread2.getStation().get(4001);
                if (staProtocol4001 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol4001);
                    break;
                } else {
                    staProtocol4001 = staProtocol4001.clone();
                }
                StaProtocol staProtocol2013 = devpThread2.getStation().get(2013);
                if (staProtocol2013 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol2013);
                    break;
                } else {
                    staProtocol2013 = staProtocol2013.clone();
                }
                StaProtocol staProtocol1019 = devpThread1.getStation().get(1019);
                if (staProtocol1019 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol1019);
                    break;
                } else {
                    staProtocol1019 = staProtocol1019.clone();
                }
                BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                if (staDetl == null) {
                    News.error(""+mark+" - 2"+" - 5"+" - 出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                    break;
//                    continue;
                }
                if(staProtocol4001.isLoading() && staProtocol4001.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")){
                    // 堆垛机控制过滤
                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
//                        continue;
                        break;
                    }
                    // 已经存在吊车执行任务时,则过滤
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                        break;
//                        return;
                    }
                    if(staProtocol1019.isLoading() && wrkMast9996.getStaNo() < 2000){
                        continue;
                    }
                    if(staProtocol2013.isLoading() && wrkMast9996.getStaNo() > 2000){
                        continue;
                    }
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo((short) 9996); // 工作号
//                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                    crnCommand.setSourcePosX((short) 9);     // 源库位排
                    crnCommand.setSourcePosY((short) 52);     // 源库位列
                    crnCommand.setSourcePosZ((short) 3);     // 源库位层
                    if(wrkMast9996.getStaNo()>2000){
                        crnCommand.setDestinationPosX((short) 9);     // 目标库位排
                        crnCommand.setDestinationPosY((short) 52);     // 目标库位列
                        crnCommand.setDestinationPosZ((short) 2);     // 目标库位层
                    }else{
                        crnCommand.setDestinationPosX((short) 11);     // 目标库位排
                        crnCommand.setDestinationPosY((short) 52);     // 目标库位列
                        crnCommand.setDestinationPosZ((short) 1);     // 目标库位层
                    }
//                crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //库位类型
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast9996.getCrnNo(), new Task(2, crnCommand))) {
                        News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast9996.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
                        // 修改工作档状态 11.生成出库ID => 12.吊车出库中
                        Date now = new Date();
                        wrkMast9996.setWrkSts(12L);
                        wrkMast9996.setCrnStrTime(now);
                        wrkMast9996.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast9996) == 0) {
                            News.error("" + mark + " - 2" + " - 14" + " - 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast9996.getWrkNo());
                        }
                        break;
                    }
                }
            }
            for (WrkMast wrkMast : wrkMasts) {
                if (wrkMast == null) {
                    continue;
@@ -1820,6 +1646,222 @@
        News.infoNoLog(""+mark+" - 2"+" - 0"+" - 堆垛机入出库作业下发 : 出库执行完毕");
    }
    public synchronized void locToCrnStn9996(CrnSlave slave, CrnProtocol crnProtocol,Integer mark) {
        News.warnNoLog(""+mark+" - 2"+" - 0"+" - 堆垛机入出库作业下发:执行出库");
        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
            // 获取工作状态为11(生成出库ID)的出库工作档
//            WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId(), crnStn.getStaNo());
            List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
            WrkMast wrkMast9996 = wrkMastMapper.selectByWrkNo9997(9996);
            if (slave.getId() == 3 && wrkMast9996 != null) {
                SiemensDevpThread devpThread1 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                SiemensDevpThread devpThread2 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
                StaProtocol staProtocol4001 = devpThread2.getStation().get(4001);
                if (staProtocol4001 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol4001);
                    break;
                } else {
                    staProtocol4001 = staProtocol4001.clone();
                }
                StaProtocol staProtocol2013 = devpThread2.getStation().get(2013);
                if (staProtocol2013 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol2013);
                    break;
                } else {
                    staProtocol2013 = staProtocol2013.clone();
                }
                StaProtocol staProtocol1019 = devpThread1.getStation().get(1019);
                if (staProtocol1019 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol1019);
                    break;
                } else {
                    staProtocol1019 = staProtocol1019.clone();
                }
                BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                if (staDetl == null) {
                    News.error(""+mark+" - 2"+" - 5"+" - 出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                    break;
//                    continue;
                }
                if(staProtocol4001.isLoading() && staProtocol4001.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")){
                    // 堆垛机控制过滤
                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
//                        continue;
                        break;
                    }
                    // 已经存在吊车执行任务时,则过滤
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                        break;
//                        return;
                    }
                    if(staProtocol1019.isLoading() && wrkMast9996.getStaNo() < 2000){
                        continue;
                    }
                    if(staProtocol2013.isLoading() && wrkMast9996.getStaNo() > 2000){
                        continue;
                    }
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo((short) 9996); // 工作号
//                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                    crnCommand.setSourcePosX((short) 9);     // 源库位排
                    crnCommand.setSourcePosY((short) 52);     // 源库位列
                    crnCommand.setSourcePosZ((short) 3);     // 源库位层
                    if(wrkMast9996.getStaNo()>2000){
                        crnCommand.setDestinationPosX((short) 9);     // 目标库位排
                        crnCommand.setDestinationPosY((short) 52);     // 目标库位列
                        crnCommand.setDestinationPosZ((short) 2);     // 目标库位层
                    }else{
                        crnCommand.setDestinationPosX((short) 11);     // 目标库位排
                        crnCommand.setDestinationPosY((short) 52);     // 目标库位列
                        crnCommand.setDestinationPosZ((short) 1);     // 目标库位层
                    }
//                crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //库位类型
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast9996.getCrnNo(), new Task(2, crnCommand))) {
                        News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast9996.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
                        // 修改工作档状态 11.生成出库ID => 12.吊车出库中
                        Date now = new Date();
                        wrkMast9996.setWrkSts(12L);
                        wrkMast9996.setCrnStrTime(now);
                        wrkMast9996.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast9996) == 0) {
                            News.error("" + mark + " - 2" + " - 14" + " - 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast9996.getWrkNo());
                        }
                        break;
                    }
                }
            }
        }
        News.infoNoLog(""+mark+" - 2"+" - 0"+" - 堆垛机入出库作业下发 : 出库执行完毕");
    }
    public synchronized void locToCrnStn9997(CrnSlave slave, CrnProtocol crnProtocol,Integer mark) {
        News.warnNoLog(""+mark+" - 2"+" - 0"+" - 堆垛机入出库作业下发:执行出库");
        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
            // 获取工作状态为11(生成出库ID)的出库工作档
//            WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId(), crnStn.getStaNo());
            List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
            WrkMast wrkMast9997 = wrkMastMapper.selectByWrkNo9997(9997);
            if (slave.getId() == 3 && wrkMast9997 != null) {
                SiemensDevpThread devpThread1 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                StaProtocol staProtocol2 = devpThread1.getStation().get(1015);
                if (staProtocol2 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol2);
                    break;
                } else {
                    staProtocol2 = staProtocol2.clone();
                }
                SiemensDevpThread devpThread2 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
                StaProtocol staProtocol4004 = devpThread2.getStation().get(4004);
                if (staProtocol4004 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol4004);
                    break;
                } else {
                    staProtocol4004 = staProtocol4004.clone();
                }
                StaProtocol staProtocol3 = devpThread2.getStation().get(2016);
                if (staProtocol3 == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol2);
                    break;
                } else {
                    staProtocol3 = staProtocol3.clone();
                }
                BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                if (staDetl == null) {
                    News.error("" + mark + " - 2" + " - 5" + " - 出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                    break;
//                    continue;
                }
                if (staProtocol2.isLoading() && staProtocol2.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) {
                    // 堆垛机控制过滤
                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
//                        continue;
                        break;
                    }
                    // 已经存在吊车执行任务时,则过滤
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                        break;
//                        return;
                    }
                    if (staProtocol4004.isLoading()) {
                        continue;
                    }
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo((short) 9997); // 工作号
//                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                    crnCommand.setSourcePosX((short) 9);     // 源库位排
                    crnCommand.setSourcePosY((short) 52);     // 源库位列
                    crnCommand.setSourcePosZ((short) 1);     // 源库位层
                    crnCommand.setDestinationPosX((short) 11);     // 目标库位排
                    crnCommand.setDestinationPosY((short) 52);     // 目标库位列
                    crnCommand.setDestinationPosZ((short) 3);     // 目标库位层
//                crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //库位类型
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast9997.getCrnNo(), new Task(2, crnCommand))) {
                        News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast9997.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
                        // 修改工作档状态 11.生成出库ID => 12.吊车出库中
                        Date now = new Date();
                        wrkMast9997.setWrkSts(12L);
                        wrkMast9997.setCrnStrTime(now);
                        wrkMast9997.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast9997) == 0) {
                            News.error("" + mark + " - 2" + " - 14" + " - 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast9997.getWrkNo());
                        }
                        break;
                    }
                }
                if (staProtocol3.isLoading() && staProtocol3.isAutoing()) {
                    // 堆垛机控制过滤
                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
//                        continue;
                        break;
                    }
                    // 已经存在吊车执行任务时,则过滤
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                        break;
//                        return;
                    }
                    if (staProtocol4004.isLoading()) {
                        continue;
                    }
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo((short) 9997); // 工作号
//                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                    crnCommand.setSourcePosX((short) 11);     // 源库位排
                    crnCommand.setSourcePosY((short) 52);     // 源库位列
                    crnCommand.setSourcePosZ((short) 2);     // 源库位层
                    crnCommand.setDestinationPosX((short) 11);     // 目标库位排
                    crnCommand.setDestinationPosY((short) 52);     // 目标库位列
                    crnCommand.setDestinationPosZ((short) 3);     // 目标库位层
//                crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //库位类型
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast9997.getCrnNo(), new Task(2, crnCommand))) {
                        News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast9997.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
                        // 修改工作档状态 11.生成出库ID => 12.吊车出库中
                        Date now = new Date();
                        wrkMast9997.setWrkSts(12L);
                        wrkMast9997.setCrnStrTime(now);
                        wrkMast9997.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast9997) == 0) {
                            News.error("" + mark + " - 2" + " - 14" + " - 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast9997.getWrkNo());
                        }
                        break;
                    }
                }
            }
        }
        News.infoNoLog(""+mark+" - 2"+" - 0"+" - 堆垛机入出库作业下发 : 出库执行完毕");
    }
//    /**
//     * 出库  ===>>  库位到堆垛机站
//     */
@@ -4862,8 +4904,9 @@
                        basArmMast.setArmNo(basArm.getArmNo());
                        basArmMast.setStaNo(basArm.getStaNoSou());
                        basArmMast.setSortingLine(basArm.getSortingLineSou());
                        if(basArmMastList2.size() > num){
                        if(basArmMastList2.size() >= num){
                            basArmMastFinal = basArmMast;
                            num = basArmMastList2.size();
                        }
                    }
                    if(basArmMastFinal != null){
@@ -5518,9 +5561,10 @@
                                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",dto.getLocNo()));
                                locMast.setBarcode(wrkMast.getBarcode());
                                locMastService.updateById(locMast);
                            }else{
                                agvBindCtnrAndBinParam.setCtnrTyp("1");
                                ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam);
                            }
                            agvBindCtnrAndBinParam.setCtnrTyp("1");
                            ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam);
                            wrkMast.setTakeNone("2");
                            wrkMastMapper.updateById(wrkMast);
                        } else {
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -895,79 +895,83 @@
        Integer offset = siteOffsetMap.get(siteId);
        Integer offset2 = getOffsetBySiteId(siteId);
        Integer offset3 = getOffsetBySiteId2(siteId);
        //任务下发次数
        OperateResult write = null;
        OperateResult write1 = null;
        //任务下发次数
        int writeCount = 0;
        do {
            String workNoAddress = "";
            String staNoAddress = "";
            // 根据站点判断地址
            if (siteId < 1029) {
                workNoAddress = "DB100." + (offset + offset2);
                staNoAddress = "DB100." + (offset + offset2 + 12);
            } else if (siteId < 1042) {
                workNoAddress = "DB101." + (offset + offset2);
                staNoAddress = "DB101." + (offset + offset2 + 12);
            } else if (siteId < 1054) {
                workNoAddress = "DB104." + (offset + offset2);
                staNoAddress = "DB104." + (offset + offset2 + (specialSites2.contains(siteId) ? 48 : 12));
            } else if (siteId < 1080) {
                workNoAddress = "DB103." + (offset + offset2);
                staNoAddress = "DB103." + (offset + offset2 + (specialSites2.contains(siteId) ? 48 : 12));
            } else if (siteId < 1111) {
                workNoAddress = "DB102." + (offset + offset2);
                staNoAddress = "DB102." + (offset + offset2 + (specialSites2.contains(siteId) ? 48 : 12));
            } else if (siteId < 2031) {
                workNoAddress = "DB200." + (offset + offset2);
                staNoAddress = "DB200." + (offset + offset2 + (specialSites2.contains(siteId) ? 48 : 12));
            } else if (siteId < 2121) {
                workNoAddress = "DB201." + (offset + offset2);
                staNoAddress = "DB201." + (offset + offset2 + (specialSites2.contains(siteId) ? 48 : 12));
            } else if (siteId < 4000) {
                Integer offsetBarcode = site2lBarcodeOffsetMap.get(siteId);
                workNoAddress = "DB202." + offsetBarcode;
                staNoAddress = "DB202." + offsetBarcode;  // For barcode site, only one address used
            } else {
                workNoAddress = "DB400." + (offset + offset2);
                staNoAddress = "DB400." + (offset + offset2 + (specialSites2.contains(siteId) ? 48 : 12));
            }
            // 执行写入
            write = siemensS7Net.Write(workNoAddress, staProtocol.getWorkNo()); // 写入工作号
            Thread.sleep(200);
            write1 = siemensS7Net.Write(staNoAddress, staProtocol.getStaNo().intValue()); // 写入目标站
            // 读取并验证
            if (write.IsSuccess && write1.IsSuccess) {
                // 假设使用 ReadInt() 方法读取 Int32 数据
                OperateResultExOne<byte[]> readResult1 = siemensS7Net.Read(workNoAddress, (short) 4); // 读取工作号
                OperateResultExOne<byte[]> readResult2 = siemensS7Net.Read(staNoAddress,(short) 4); // 读取目标站
                if (readResult1.IsSuccess && readResult2.IsSuccess) {
                    Integer writtenWorkNo = staProtocol.getWorkNo();
                    Integer writtenStaNo = staProtocol.getStaNo().intValue();
                    Integer workNo = siemensS7Net.getByteTransform().TransInt32(readResult1.Content, 0);
                    Integer staNo = siemensS7Net.getByteTransform().TransInt32(readResult2.Content, 0);
                    // 对比读取到的数据与写入的数据是否一致
                    if (workNo == writtenWorkNo && staNo == writtenStaNo) {
                        log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                        break; // 数据一致,跳出循环
                    } else {
                        writeCount++;
                        log.error("写入输送线命令失败,数据不一致。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                    }
            if(siteId < 1029){
                write = siemensS7Net.Write("DB100." + (offset + offset2), staProtocol.getWorkNo());    // 工作号
                Thread.sleep(200);
                write1 = siemensS7Net.Write("DB100." + (offset + offset2 + 12), staProtocol.getStaNo().intValue());    // 目标站
            }else if(siteId < 1042){
                write = siemensS7Net.Write("DB101." + (offset + offset2), staProtocol.getWorkNo());    // 工作号
                Thread.sleep(200);
                write1 = siemensS7Net.Write("DB101." + (offset + offset2 + 12), staProtocol.getStaNo().intValue());    // 目标站
            }else if(siteId < 1054){
                write = siemensS7Net.Write("DB104." + (offset + offset2), staProtocol.getWorkNo());    // 工作号
                Thread.sleep(200);
                if(specialSites2.contains(siteId)){
                    write1 = siemensS7Net.Write("DB104." + (offset + offset2 + 48), staProtocol.getStaNo().intValue());    // 目标站
                }else{
                    write1 = siemensS7Net.Write("DB104." + (offset + offset2 + 12), staProtocol.getStaNo().intValue());    // 目标站
                }
            } else {
            }else if(siteId < 1080){
                write = siemensS7Net.Write("DB103." + (offset + offset2), staProtocol.getWorkNo());    // 工作号
                Thread.sleep(200);
                if(specialSites2.contains(siteId)){
                    write1 = siemensS7Net.Write("DB103." + (offset + offset2 + 48), staProtocol.getStaNo().intValue());    // 目标站
                }else{
                    write1 = siemensS7Net.Write("DB103." + (offset + offset2 + 12), staProtocol.getStaNo().intValue());    // 目标站
                }
            }else if(siteId < 1111){
                write = siemensS7Net.Write("DB102." + (offset + offset2), staProtocol.getWorkNo());    // 工作号
                Thread.sleep(200);
                if(specialSites2.contains(siteId)){
                    write1 = siemensS7Net.Write("DB102." + (offset + offset2 + 48), staProtocol.getStaNo().intValue());    // 目标站
                }else{
                    write1 = siemensS7Net.Write("DB102." + (offset + offset2 + 12), staProtocol.getStaNo().intValue());    // 目标站
                }
            }else if(siteId < 2031){
                write = siemensS7Net.Write("DB200." + (offset + offset2), staProtocol.getWorkNo());    // 工作号
                Thread.sleep(200);
                if(specialSites2.contains(siteId)){
                    write1 = siemensS7Net.Write("DB200." + (offset + offset2 + 48), staProtocol.getStaNo().intValue());    // 目标站
                }else{
                    write1 = siemensS7Net.Write("DB200." + (offset + offset2 + 12), staProtocol.getStaNo().intValue());    // 目标站
                }
            }else if(siteId < 2121){
                write = siemensS7Net.Write("DB201." + (offset + offset2), staProtocol.getWorkNo());    // 工作号
                Thread.sleep(200);
                if(specialSites2.contains(siteId)){
                    write1 = siemensS7Net.Write("DB201." + (offset + offset2 + 48), staProtocol.getStaNo().intValue());    // 目标站
                }else{
                    write1 = siemensS7Net.Write("DB201." + (offset + offset2 + 12), staProtocol.getStaNo().intValue());    // 目标站
                }
            } else if(siteId < 4000){
                Integer offsetBarcode = site2lBarcodeOffsetMap.get(siteId);
                write = siemensS7Net.Write("DB202." + offsetBarcode, staProtocol.getBarcode());    // 条码
                write1 = siemensS7Net.Write("DB202." + offsetBarcode, staProtocol.getBarcode());
                Thread.sleep(200);
            }else{
                write = siemensS7Net.Write("DB400." + (offset + offset2), staProtocol.getWorkNo());    // 工作号
                Thread.sleep(200);
                if(specialSites2.contains(siteId)){
                    write1 = siemensS7Net.Write("DB400." + (offset + offset2 + 48), staProtocol.getStaNo().intValue());    // 目标站
                }else{
                    write1 = siemensS7Net.Write("DB400." + (offset + offset2 + 12), staProtocol.getStaNo().intValue());    // 目标站
                }
            }
            if(write.IsSuccess && write1.IsSuccess){
                log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                break;
            }
            else {
                writeCount++;
                log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
        } while (writeCount < 5); // 重试最多5次
        }while (writeCount<5);
        try {
            // 日志记录
            BasDevpOptService bean = SpringUtils.getBean(BasDevpOptService.class);
src/main/resources/mapper/WrkMastStaMapper.xml
@@ -119,10 +119,12 @@
        or sta_end = 0
        )
        and wrk_sts=0
        and sta_end in (2006.2012,2018,2024,2030,1004,1014,1018,1028,1035)
        and wrk_no = #{workNo}
        order by
        case when mk = 1 then 0 else 1 end,
        ORDER BY
        CASE
        WHEN mk = 1 THEN 0
        ELSE 1
        END,
        line_number,
        id
    </select>