自动化立体仓库 - WCS系统
#
lsh
2024-06-27 843adafd2eb2934e26a935e2de2b57a9e577d29a
#
10个文件已修改
605 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/WrkMastExecute.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastExecuteMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkMastExecuteService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 435 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkMastExecuteServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/SteTaskModeType.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 126 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastExecuteMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMastExecute.java
@@ -141,7 +141,7 @@
    /**
     * 工作状态
     * 0:初始  wrk_type
     * 0:初始  wrk_sts
     * 1:RGV小车避让、2:避让完成、3:开门中、4:开门完成、5:更新完成    //io_type = 1、3
     * 1:RGV小车避让、2:避让完成、3:关门中、4:关门完成、5:更新完成    //io_type = 2、4
     * 1:RGV小车移动、2:RGV小车到位、3:rgv取货、4:rgv取货完成、5:Ste穿梭版入硫化罐、6:入罐完成、7:更新完成   //io_type = 5
src/main/java/com/zy/asrs/mapper/WrkMastExecuteMapper.java
@@ -18,10 +18,10 @@
    List<WrkMastExecute> selectWrkMastExecuteByType(@Param("type") Integer type);
    List<WrkMastExecute> selectWrkMastExecuteByTypeAndIoTyperAndWrkType(@Param("type")Integer type,@Param("ioType")Integer ioType,@Param("wrkType")Integer wrkType);
    List<WrkMastExecute> selectWrkMastExecuteByTypeAndIoTyperAndWrkType(@Param("type")Integer type,@Param("ioType")Integer ioType,@Param("wrkSts")Integer wrkSts);
    List<WrkMastExecute> selectWrkMastExecuteByWrk(@Param("type")Integer type,@Param("ioType")Integer ioType,
                                                   @Param("wrkType")Integer wrkType,@Param("steNo")Integer steNo,
                                                   @Param("wrkSts")Integer wrkSts,@Param("steNo")Integer steNo,
                                                   @Param("jarNo")Integer jarNo,@Param("rgvNo")Integer rgvNo);
src/main/java/com/zy/asrs/service/WrkMastExecuteService.java
@@ -13,7 +13,7 @@
    List<WrkMastExecute> selectWrkMastExecuteByType(Integer type);
    List<WrkMastExecute> selectWrkMastExecuteByTypeAndIoTyperAndWrkType(Integer type,Integer ioType,Integer wrkType);
    List<WrkMastExecute> selectWrkMastExecuteByTypeAndIoTyperAndWrkType(Integer type,Integer ioType,Integer wrkSts);
    List<WrkMastExecute> selectWrkMastExecuteByWrk(WrkMastExecute wrkMastExecute);
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -5267,7 +5267,16 @@
    * JarWrkMastExecute任务创建==>下发
    * Action
    * */
    public synchronized void jarWrkMastExecuteAction(Integer sign) {
    public synchronized void jarWrkMastExecuteAction(Integer sign,Integer sign2) {
        if (sign2==0){
            jarWrkMastExecuteActionOne(sign);
        } else if (sign2 == 1){
            jarWrkMastExecuteActionTwo(sign);
        } else if (sign2 == 2){
            jarWrkMastExecuteActionThree(sign);
        }
    }
    public synchronized void jarWrkMastExecuteActionOne(Integer sign) {
        try{
            List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, null,0);
            for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){
@@ -5328,6 +5337,108 @@
    }
    /*
     * JarWrkMastExecute任务创建==>下发
     * Action
     * */
    public synchronized void jarWrkMastExecuteActionTwo(Integer sign) {
        try{
            List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, null,2);
            for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){
                /*
                 * 任务类型 0: 未知
                 * 1: 开进料门  2: 关进料门  3: 开出料门  4: 关出料门
                 * 5: 入硫化罐
                 * 6: 入冷却槽
                 * 7: 穿梭车进冷却槽  8: 穿梭车离开冷却槽
                 * 9: 出冷却槽
                 * 10:A=>B 11:B=>A
                 * */
                switch (wrkMastExecute.getIoType()){
                    case 1://1: 开进料门
                    case 3://3: 开出料门
                        if (jarWrkMastExecuteActionExecute1(wrkMastExecute,sign)){
                            break;
                        }
                        return;
                    case 2:
                    case 4:
                        if (jarWrkMastExecuteActionExecute2(wrkMastExecute,sign)){
                            break;
                        }
                        return;
                    case 5:
                        if (jarWrkMastExecuteActionExecute5(wrkMastExecute,sign)){
                            break;
                        }
                        return;
                    case 6:
                        if (jarWrkMastExecuteActionExecute6(wrkMastExecute,sign)){
                            break;
                        }
                        return;
                    case 7:
                    case 8:
                        if (jarWrkMastExecuteActionExecute7(wrkMastExecute,sign)){
                            break;
                        }
                        return;
                    case 9:
                        if (jarWrkMastExecuteActionExecute9Two(wrkMastExecute,sign)){
                            break;
                        }
                        return;
                    case 10:
                    case 11:
                        if (jarWrkMastExecuteActionExecute10(wrkMastExecute,sign)){
                            break;
                        }
                        return;
                }
            }
        } catch (Exception e){
            log.error("JarWrkMastExecute任务创建===>Action==>下发"+e.getMessage());
        }
    }
    /*
     * JarWrkMastExecute任务创建==>下发
     * Action
     * */
    public synchronized void jarWrkMastExecuteActionThree(Integer sign) {
        try{
            List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, null,4);
            for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){
                /*
                 * 任务类型 0: 未知
                 * 1: 开进料门  2: 关进料门  3: 开出料门  4: 关出料门
                 * 5: 入硫化罐
                 * 6: 入冷却槽
                 * 7: 穿梭车进冷却槽  8: 穿梭车离开冷却槽
                 * 9: 出冷却槽
                 * 10:A=>B 11:B=>A
                 * */
                switch (wrkMastExecute.getIoType()){
                    case 5:
                        if (jarWrkMastExecuteActionExecute5Three(wrkMastExecute,sign)){
                            break;
                        }
                        return;
                    case 6:
                        if (jarWrkMastExecuteActionExecute6Three(wrkMastExecute,sign)){
                            break;
                        }
                        return;
                }
            }
        } catch (Exception e){
            log.error("JarWrkMastExecute任务创建===>Action==>下发"+e.getMessage());
        }
    }
    /**
     *  JarWrkMastExecute任务==>下发 //完成
     *  1、3开进料门
@@ -5360,7 +5471,7 @@
//            if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1)){
//                return false;
//            }
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
            StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo());
            if (staProtocolRGV == null) {
                return false;
@@ -5403,7 +5514,7 @@
                                        wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                            }
                            wrkMastExecute.setWrkType(1);
                            wrkMastExecute.setWrkSts(1);
                            wrkMastExecute.setWrkSts(2);
                            if (wrkMastExecuteService.updateById(wrkMastExecute)){
                                log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}",
                                        wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
@@ -5478,7 +5589,7 @@
//                return false;
//            }
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
            StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo());
            if (staProtocolRGV == null) {
                return false;
@@ -5520,7 +5631,7 @@
                                        wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                            }
                            wrkMastExecute.setWrkType(1);
                            wrkMastExecute.setWrkSts(1);
                            wrkMastExecute.setWrkSts(2);
                            if (wrkMastExecuteService.updateById(wrkMastExecute)){
                                log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}",
@@ -5641,6 +5752,7 @@
                                ,SteAndJarUtil.getRgvStaRow(wrkMastExecute.getJarEnterStaNo())==3)){
                            log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                            return true;
                        }
                        wrkMastExecute.setWrkType(1);
                        wrkMastExecute.setWrkSts(3);
@@ -5655,9 +5767,114 @@
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                        }
                        wrkMastExecute.setWrkType(1);
                        wrkMastExecute.setWrkSts(1);
                        wrkMastExecute.setWrkSts(2);
                        if (wrkMastExecuteService.updateById(wrkMastExecute)){
                            log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                        }
                    }
                    return true;
                }
                return false;
            } else {
                log.error("jarWrkMastExecuteActionExecute1===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(basJar.getEnterRgvNo())+";WrkMastExecute:"+JSON.toJSONString(wrkMastExecute));
                return false;
            }
        } catch (Exception e){
            log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage());
        }
        return false;
    }
    /**
     *  JarWrkMastExecute任务==>下发 //完成
     *  io_type==>5:入硫化罐  :  wrkSts  ==>4:rgv取货完成
     *  =====>wrkSts ==>5:Ste穿梭版入硫化罐(清楚RGV资料)
     *  任务下发
     */
    public synchronized boolean jarWrkMastExecuteActionExecute5Three(WrkMastExecute wrkMastExecute,Integer sign) {
        try{
            List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.getWrkMastExecuteByJarNo(wrkMastExecute.getJarId());
            if (wrkMastExecuteByJarNo.size()!=1 || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo())){
                return false;
            }
            // 获取硫化罐信息
            JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, wrkMastExecute.getJarId());
            JarProtocol jarProtocol = jarThread.getJarProtocol();
            if (jarProtocol == null) {
                return false;
            }
            if (jarProtocol.modeType != JarModeType.AUTO){
                return false;
            }
            BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo());
            if (Cools.isEmpty(basJar)){
                log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo());
                return false;
            }
//            //判断小车状态
//            if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1)){
//                return false;
//            }
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
            StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo());
            if (staProtocolRGV == null) {
                return false;
            } else {
                staProtocolRGV = staProtocolRGV.clone();
            }
            if (staProtocolRGV == null) {
                return false;
            }
            StaProtocol staProtocolRGVOther = devpThread.getStation().get(basJar.getOutRgvNo());
            if (staProtocolRGVOther == null) {
                return false;
            } else {
                staProtocolRGVOther = staProtocolRGVOther.clone();
            }
            if (staProtocolRGVOther == null) {
                return false;
            }
            if (staProtocolRGV.rgvBoolean(2) && staProtocolRGVOther.rgvBoolean(1)){
                if (staProtocolRGV.getNowRow() != staProtocolRGVOther.getNowRow()){
                    //移走  == > 2
                    if (jarRgvMoveTake(wrkMastExecute,2)){
                        log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}",
                                wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                    }
                    return true;
                }
                //门作业  无
                //自动、空闲、  进料们打开需关闭
                if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 && jarProtocol.isLeftDoor() && jarProtocol.isRightDoor()
                        && jarProtocol.leftDoorOpen==0  && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0  && jarProtocol.rightDoorClose==0){
                    if (SteAndJarUtil.steAndJarNowRow(staProtocolRGV.getNowRow() , jarProtocol.getJarNo())){
                        //判断小车状态
                        if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1,SteStatusType.IDLE)){
                            return false;
                        }
                        //调车  == > 取货
                        if (jarSteTake(wrkMastExecute,SteLocaType.POINT20.id,SteLocaType.POINT22.id,SteTaskModeType.STE_WFFH_13,false)){
                            log.error("穿梭板Ste命令下发失败,ste号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                        }
                        wrkMastExecute.setWrkType(1);
                        wrkMastExecute.setWrkSts(5);
                        if (wrkMastExecuteService.updateById(wrkMastExecute)){
                            log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                        }
                    } else {
                        //调车  == > endRow
                        if (jarRgvMoveTake(wrkMastExecute,SteAndJarUtil.getRgvJarNowRow(wrkMastExecute.getJarId()))){
                            log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                        }
                    }
@@ -5707,7 +5924,7 @@
//                return false;
//            }
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
            StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo());
            if (staProtocolRGV == null) {
                return false;
@@ -5765,7 +5982,117 @@
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                        }
                        wrkMastExecute.setWrkType(1);
                        wrkMastExecute.setWrkSts(1);
                        wrkMastExecute.setWrkSts(2);
                        if (wrkMastExecuteService.updateById(wrkMastExecute)){
                            log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                        }
                    }
                    return true;
                }
                return false;
            } else {
                log.error("jarWrkMastExecuteActionExecute1===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(basJar.getEnterRgvNo())+";WrkMastExecute:"+JSON.toJSONString(wrkMastExecute));
                return false;
            }
        } catch (Exception e){
            log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage());
        }
        return false;
    }
    /**
     *  JarWrkMastExecute任务==>下发 //完成
     *  6:入冷却槽
     *  任务下发
     */
    public synchronized boolean jarWrkMastExecuteActionExecute6Three(WrkMastExecute wrkMastExecute,Integer sign) {
        try{
            List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.getWrkMastExecuteByJarNo(wrkMastExecute.getJarId());
            if (wrkMastExecuteByJarNo.size()!=1 || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo())){
                return false;
            }
            // 获取硫化罐信息
            JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, wrkMastExecute.getJarId());
            JarProtocol jarProtocol = jarThread.getJarProtocol();
            if (jarProtocol == null) {
                return false;
            }
            if (jarProtocol.modeType != JarModeType.AUTO){
                return false;
            }
            BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo());
            if (Cools.isEmpty(basJar)){
                log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo());
                return false;
            }
//            //判断小车状态
//            if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1)){
//                return false;
//            }
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
            StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo());
            if (staProtocolRGV == null) {
                return false;
            } else {
                staProtocolRGV = staProtocolRGV.clone();
            }
            if (staProtocolRGV == null) {
                return false;
            }
            StaProtocol staProtocolRGVOther = devpThread.getStation().get(basJar.getOutRgvNo());
            if (staProtocolRGVOther == null) {
                return false;
            } else {
                staProtocolRGVOther = staProtocolRGVOther.clone();
            }
            if (staProtocolRGVOther == null) {
                return false;
            }
            if (staProtocolRGV.rgvBoolean(1) && staProtocolRGVOther.rgvBoolean(1)){
                if (staProtocolRGV.getNowRow() != staProtocolRGVOther.getNowRow()){
                    //移走  == > 2
                    if (jarRgvMoveTake(wrkMastExecute,2)){
                        log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}",
                                wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                    }
                    return true;
                }
                //门作业  无
                //自动、空闲、
                if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 && jarProtocol.isLeftDoor() && jarProtocol.isRightDoor()
                        && jarProtocol.leftDoorOpen==0  && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0  && jarProtocol.rightDoorClose==0){
                    if (SteAndJarUtil.steAndJarNowRow(staProtocolRGV.getNowRow() , jarProtocol.getJarNo())){
                        //判断小车状态
                        if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1,SteStatusType.IDLE)){
                            return false;
                        }
                        //调车  == > 取货
                        if (jarSteTake(wrkMastExecute,SteLocaType.POINT23.id,SteLocaType.POINT21.id,SteTaskModeType.STE_WFQH_12,false)){
                            log.error("穿梭板Ste命令下发失败,ste号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                        }
                        wrkMastExecute.setWrkType(1);
                        wrkMastExecute.setWrkSts(3);
                        if (wrkMastExecuteService.updateById(wrkMastExecute)){
                            log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                        }
                    } else {
                        //调车  == > endRow
                        if (jarRgvMoveTake(wrkMastExecute,SteAndJarUtil.getRgvJarNowRow(wrkMastExecute.getJarId()))){
                            log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                        }
                        wrkMastExecute.setWrkType(1);
                        wrkMastExecute.setWrkSts(2);
                        if (wrkMastExecuteService.updateById(wrkMastExecute)){
                            log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
@@ -5833,7 +6160,7 @@
//                return false;
//            }
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
            StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo());
            if (staProtocolRGV == null) {
                return false;
@@ -5923,7 +6250,7 @@
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                        }
                        wrkMastExecute.setWrkType(1);
                        wrkMastExecute.setWrkSts(1);
                        wrkMastExecute.setWrkSts(2);
                        if (wrkMastExecuteService.updateById(wrkMastExecute)){
                            log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
@@ -5991,7 +6318,7 @@
//                return false;
//            }
//
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
            StaProtocol staProtocol = devpThread.getStation().get(basJar.getStaNo());
            if (staProtocol == null) {
                return false;
@@ -6058,6 +6385,54 @@
    /**
     *  JarWrkMastExecute任务==>下发 //完成
     *  9:出冷却槽
     *  任务下发
     */
    public synchronized boolean jarWrkMastExecuteActionExecute9Two(WrkMastExecute wrkMastExecute,Integer sign) {
        try{
            List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.getWrkMastExecuteByJarNo(wrkMastExecute.getJarId());
            if (wrkMastExecuteByJarNo.size()!=1 || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo())){
                return false;
            }
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
            StaProtocol staProtocol = devpThread.getStation().get(wrkMastExecute.getJarOutStaNo());
            if (staProtocol == null) {
                return false;
            } else {
                staProtocol = staProtocol.clone();
            }
            if (staProtocol == null) {
                return false;
            }
            if (staProtocol.getWorkNo()!=0 || !staProtocol.isAutoing() || !staProtocol.isLoading()){
                return false;
            }
            //判断STE小车状态
            if (jarWrkMastExecuteGenerateSteStatus(wrkMastExecute.getSteId(),3,SteStatusType.IDLE)){
                // 下发站点信息
                staProtocol.setWorkNo(wrkMastExecute.getWrkNo().intValue());
                staProtocol.setStaNo(staProtocol.getStaNo());
                if (!MessageQueue.offer(SlaveType.Devp, 2, new Task(2, staProtocol))) {
                    return false;
                }
                wrkMastExecute.setWrkType(1);
                wrkMastExecute.setWrkSts(3);
                if (wrkMastExecuteService.updateById(wrkMastExecute)){
                    log.error("输送线出库目标站命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},放货站点数据={},sign={}",
                            wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(staProtocol),sign);
                }
            }
            return true;
        } catch (Exception e){
            log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage());
        }
        return false;
    }
    /**
     *  JarWrkMastExecute任务==>下发 //完成
     *  10:A=>B\11:B=>A
     *  任务下发
     */
@@ -6089,7 +6464,7 @@
//                return false;
//            }
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
            StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo());
            if (staProtocolRGV == null) {
                return false;
@@ -6178,7 +6553,7 @@
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
                        }
                        wrkMastExecute.setWrkType(1);
                        wrkMastExecute.setWrkSts(1);
                        wrkMastExecute.setWrkSts(2);
                        if (wrkMastExecuteService.updateById(wrkMastExecute)){
                            log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}",
                                    wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign);
@@ -6234,6 +6609,26 @@
            return true;
        }catch (Exception e){
            log.error("平衡车Rgv命令下发失败,Rgv号={},任务数据={},RGV4={},RGV5={}", wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(RGV4), JSON.toJSON(RGV5));
        }
        return false;
    }
    /*
     * Rgv  动作  取货完成复位
     * */
    public synchronized boolean jarRgvGetFuTake(WrkMastExecute wrkMastExecute,boolean RGV6){
        try {
            StaProtocol staProtocol = new StaProtocol();
            staProtocol.setSiteId(wrkMastExecute.getRgvId());
            staProtocol.setRGV6(RGV6);
            // 下发站点信息
            if (!MessageQueue.offer(SlaveType.Devp, 2, new Task(11, staProtocol))) {
                log.error("平衡车Rgv命令下发失败,堆垛机号={},任务数据={},下发数据={}", wrkMastExecute.getRgvId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(staProtocol));
                return false;
            }
            return true;
        }catch (Exception e){
            log.error("平衡车Rgv命令下发失败,Rgv号={},任务数据={},RGV6={}", wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(RGV6));
        }
        return false;
    }
@@ -6478,7 +6873,7 @@
                        && jarProtocol.rightDoorOpen!=1 && jarProtocol.rightDoorOpen!=3
                        && (jarProtocol.leftDoorOpen==2  || jarProtocol.rightDoorOpen==2)){
                    WrkMastExecute wrkMastExecuteSou = new WrkMastExecute();
                    wrkMastExecuteSou.setWrkType(3);
                    wrkMastExecuteSou.setWrkSts(3);
                    List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecuteSou);
                    if (wrkMastExecuteList.isEmpty()){
                        WrkMastExecute execute = new WrkMastExecute();
@@ -6512,7 +6907,7 @@
                        && jarProtocol.rightDoorClose!=1 && jarProtocol.rightDoorClose!=3
                        && (jarProtocol.leftDoorClose==2  || jarProtocol.rightDoorClose==2)){
                    WrkMastExecute wrkMastExecuteSou = new WrkMastExecute();
                    wrkMastExecuteSou.setWrkType(3);
                    wrkMastExecuteSou.setWrkSts(3);
                    List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecuteSou);
                    if (wrkMastExecuteList.isEmpty()){
                        WrkMastExecute execute = new WrkMastExecute();
@@ -6555,7 +6950,7 @@
    public synchronized boolean jarWrkMastExecuteGenerateRgvComplete1(Integer sign) {
        try{
            WrkMastExecute wrkMastExecuteSou = new WrkMastExecute();
            wrkMastExecuteSou.setWrkType(1);
            wrkMastExecuteSou.setWrkSts(1);
            List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecuteSou);
            for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){
                if (wrkMastExecute.getIoType() == 9){
@@ -6605,7 +7000,7 @@
    public synchronized boolean jarWrkMastExecuteGenerateRgvComplete2(Integer sign) {
        try{
            WrkMastExecute wrkMastExecuteSou = new WrkMastExecute();
            wrkMastExecuteSou.setWrkType(3);
            wrkMastExecuteSou.setWrkSts(3);
            wrkMastExecuteSou.setIoType(5);
            List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecuteSou);
            for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){
@@ -6631,6 +7026,12 @@
                }
                if (staProtocolRGV.getNowRow() == staProtocolRGVEnd.getNowRow()
                        && staProtocolRGV.getNowRow() == SteAndJarUtil.getRgvJarNowRow(wrkMastExecute.getJarId())){
                    //调车  == > 取货完成复位
                    if (!jarRgvGetFuTake(wrkMastExecute,true)){
                        log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}",
                                wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(staProtocolRGV),sign);
                        return false;
                    }
                    wrkMastExecute.setWrkSts(4);
                    if (wrkMastExecuteService.updateById(wrkMastExecute)){
                        log.error("平衡车Rgv命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},平衡车Rgv数据={},sign={}",
src/main/java/com/zy/asrs/service/impl/WrkMastExecuteServiceImpl.java
@@ -27,13 +27,13 @@
    }
    @Override
    public List<WrkMastExecute> selectWrkMastExecuteByTypeAndIoTyperAndWrkType(Integer type,Integer ioType,Integer wrkType) {
        return this.baseMapper.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(type,ioType,wrkType);
    public List<WrkMastExecute> selectWrkMastExecuteByTypeAndIoTyperAndWrkType(Integer type,Integer ioType,Integer wrkSts) {
        return this.baseMapper.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(type,ioType,wrkSts);
    }
    @Override
    public List<WrkMastExecute> selectWrkMastExecuteByWrk(WrkMastExecute wrkMastExecute) {
        return this.baseMapper.selectWrkMastExecuteByWrk(wrkMastExecute.getType(),wrkMastExecute.getIoType(),wrkMastExecute.getWrkType(),wrkMastExecute.getSteId(),wrkMastExecute.getJarId(),wrkMastExecute.getRgvId());
        return this.baseMapper.selectWrkMastExecuteByWrk(wrkMastExecute.getType(),wrkMastExecute.getIoType(),wrkMastExecute.getWrkSts(),wrkMastExecute.getSteId(),wrkMastExecute.getJarId(),wrkMastExecute.getRgvId());
    }
    @Override
src/main/java/com/zy/core/MainProcess.java
@@ -28,6 +28,7 @@
    private int i = 0;
    private int j = 0;
    private int k = 0;
    private int l = 0;
    /**
     * =====>>  开始工作
@@ -36,9 +37,15 @@
        thread = new Thread(() -> {
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    k++; if (k>10) k=0;
                    i++; if (i>5) i=0;
                    j++; if (j>5) j=0;
                    k++;
                    if (k>13) {
                        k=0;
                        l++;
                        if (l>3) l=0;
                    }
                    // 间隔
                    Thread.sleep(1000);
@@ -100,7 +107,7 @@
                    //JarWrkMastExecute任务创建   //硫化罐
                    mainService.jarWrkMastExecuteGenerate(k);
                    //JarWrkMastExecute任务执行
                    mainService.jarWrkMastExecuteAction(k);
                    mainService.jarWrkMastExecuteAction(k,j);
                    //Jar任务创建  //完成
                    mainService.jarMastGenerate();
src/main/java/com/zy/core/enums/SteTaskModeType.java
@@ -24,8 +24,8 @@
//    CHARGE_RIGHT(14, "右充电"),         // 左充电
//    CHECK_LEFT(14, "左盘点"),     // 左盘点
//    CHECK_RIGHT(15, "右盘点"),    // 右盘点
    STE_YDQH_10(10,"原地取货"),
    STE_YDFH_11(11,"原地放货"),
//    STE_YDQH_10(10,"原地取货"),
//    STE_YDFH_11(11,"原地放货"),
    STE_WFQH_12(12,"往返取货"),
    STE_WFFH_13(13,"往返放货"),
    STE_MOVE_14(14,"移动"),
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -87,6 +87,13 @@
    private boolean RGV5;//小车改右侧货物目标站   取2(右)货物  (面朝入料口)
    private boolean RGV6;//上位机清除平移车资料
    private short RGV11;//小车无货空闲
    private short RGV22;//小车输送线取货到位
    private short RGV33;//小车运行中
    private short RGV44;//小车改左侧货物目标站   取1(左)货物  (面朝入料口)
    private short RGV55;//小车改右侧货物目标站   取2(右)货物  (面朝入料口)
    private short RGV66;//上位机清除平移车资料
    public BasDevp toSqlModel(){
        BasDevp basDevp = new BasDevp();
        basDevp.setDevNo(siteId);
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -203,6 +203,9 @@
                    case 10:
                        write10((StaProtocol)task.getData());
                        break;
                    case 11:
                        write11((StaProtocol)task.getData());
                        break;
                    default:
                        break;
                }
@@ -301,6 +304,7 @@
            int[] staNosRgv = {623,624,625,626};
            for (int i = 0; i < staNosRgv.length; i++) {
                OperateResultExOne<byte[]> resultRgv = siemensS7Net.Read("DB100."+(1800+i*6), (short) 5);
                OperateResultExOne<byte[]> resultRgv2 = siemensS7Net.Read("DB100."+(1824+i*4), (short) 4);
                if (resultRgv.IsSuccess) {
                    Integer siteId = staNosRgv[i]; // 站点编号
                    StaProtocol staProtocol = station.get(siteId);
@@ -310,17 +314,18 @@
                        station.put(siteId, staProtocol);
                    }
                    try{
                        staProtocol.setEndRow(siemensS7Net.getByteTransform().TransInt16(resultRgv.Content, 0));     // 小车目标位
                        staProtocol.setEndRow(siemensS7Net.getByteTransform().TransInt16(resultRgv2.Content, 0));     // 小车目标位
                        staProtocol.setNowRow(siemensS7Net.getByteTransform().TransInt16(resultRgv.Content, 2));   // 目标站
                        staProtocol.setNowRow(siemensS7Net.getByteTransform().TransInt16(resultRgv.Content, 2));   // 当前位置
                        boolean[] status = siemensS7Net.getByteTransform().TransBool(resultRgv.Content, 4, 1);
                        boolean[] status2 = siemensS7Net.getByteTransform().TransBool(resultRgv2.Content, 2, 1);
                        staProtocol.setRGV1(status[0]);  // 自动
                        staProtocol.setRGV2(status[1]);  // 有物
                        staProtocol.setRGV3(status[2]); // 可入
                        staProtocol.setRGV4(status[3]);//
                        staProtocol.setRGV5(status[4]);  //
                        staProtocol.setRGV6(status[5]);  // 满托盘
                        staProtocol.setRGV4(status2[0]);//
                        staProtocol.setRGV5(status2[1]);  //
                        staProtocol.setRGV6(status2[2]);  // 满托盘
                    }catch (Exception e){
                        System.out.println(e.getMessage());
                    }
@@ -550,6 +555,74 @@
    /**
     * 写入 ID+目标站 =====> 单站点写入
     */
    private void write11(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
        }
        boolean rgv6 = staProtocol.isRGV6();
        OperateResult result1 = null;
        String resultV1 = "";
        switch (staProtocol.getSiteId()){
            case 623:
                resultV1 = "DB100.1826.2";
                break;
            case 624:
                resultV1 = "DB100.1830.2";
                break;
            case 625:
                resultV1 = "DB100.1834.2";
                break;
            case 626:
                resultV1 = "DB100.1838.2";
                break;
            default:
                return;
        }
        result1 = siemensS7Net.Write(resultV1, rgv6);
        //硫化罐任务写入后,回读一次,看是否成功
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        int writeCount = 1;
        do {
            try{
                if(!result1.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    result1 = siemensS7Net.Write(resultV1, rgv6);
                    Thread.sleep(100);
                    writeCount++;
                    continue;
                }
                OperateResultExOne<byte[]> resultRead1 = siemensS7Net.Read(resultV1, (short) 2);
                if (resultRead1.IsSuccess) {
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultRead1.Content, 0, 1);
                    if (status[2]){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        result1 = siemensS7Net.Write(resultV1, rgv6);
                        Thread.sleep(100);
                        writeCount++;
                        continue;
                    }
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    result1 = siemensS7Net.Write(resultV1, rgv6);
                    Thread.sleep(100);
                    writeCount++;
                    continue;
                }
            }catch (Exception e){
                log.error("写入RGV数据后回读出错,异常:"+e);
            }
            writeCount++;
        } while (writeCount<6);
    }
    private void write10(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
@@ -560,24 +633,24 @@
        String resultV1 = "";
        switch (staProtocol.getSiteId()){
            case 623:
                resultV1 = "DB100.1804";
                resultV1 = "DB100.1826";
                break;
            case 624:
                resultV1 = "DB100.1810";
                resultV1 = "DB100.1830";
                break;
            case 625:
                resultV1 = "DB100.1816";
                resultV1 = "DB100.1834";
                break;
            case 626:
                resultV1 = "DB100.1822";
                resultV1 = "DB100.1838";
                break;
            default:
                return;
        }
        if (rgv4){
            result1 = siemensS7Net.Write(resultV1+".3", rgv4);
            result1 = siemensS7Net.Write(resultV1+".0", rgv4);
        } else {
            result1 = siemensS7Net.Write(resultV1+".4", rgv5);
            result1 = siemensS7Net.Write(resultV1+".1", rgv5);
        }
        //硫化罐任务写入后,回读一次,看是否成功
        try {
@@ -592,9 +665,9 @@
                if(!result1.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    if (rgv4){
                        result1 = siemensS7Net.Write(resultV1+".3", rgv4);
                        result1 = siemensS7Net.Write(resultV1+".0", rgv4);
                    } else {
                        result1 = siemensS7Net.Write(resultV1+".4", rgv5);
                        result1 = siemensS7Net.Write(resultV1+".1", rgv5);
                    }
                    Thread.sleep(100);
                    writeCount++;
@@ -603,14 +676,14 @@
                OperateResultExOne<byte[]> resultRead1 = siemensS7Net.Read(resultV1, (short) 2);
                if (resultRead1.IsSuccess) {
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultRead1.Content, 0, 1);
                    if (status[rgv4? 3:4]){
                    if (status[rgv4? 0:1]){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        if (rgv4){
                            result1 = siemensS7Net.Write(resultV1+".3", rgv4);
                            result1 = siemensS7Net.Write(resultV1+".0", rgv4);
                        } else {
                            result1 = siemensS7Net.Write(resultV1+".4", rgv5);
                            result1 = siemensS7Net.Write(resultV1+".1", rgv5);
                        }
                        Thread.sleep(100);
                        writeCount++;
@@ -619,9 +692,9 @@
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    if (rgv4){
                        result1 = siemensS7Net.Write(resultV1+".3", rgv4);
                        result1 = siemensS7Net.Write(resultV1+".0", rgv4);
                    } else {
                        result1 = siemensS7Net.Write(resultV1+".4", rgv5);
                        result1 = siemensS7Net.Write(resultV1+".1", rgv5);
                    }
                    Thread.sleep(100);
                    writeCount++;
@@ -633,6 +706,7 @@
            writeCount++;
        } while (writeCount<6);
    }
    private void write9(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
@@ -644,20 +718,20 @@
        String resultV2 = "";
        switch (staProtocol.getSiteId()){
            case 623:
                resultV1 = "1800";
                resultV2 = "1812";
                resultV1 = "DB100.1824";
                resultV2 = "DB100.1828";
                break;
            case 624:
                resultV1 = "1806";
                resultV2 = "1818";
                resultV1 = "DB100.1828";
                resultV2 = "DB100.1824";
                break;
            case 625:
                resultV1 = "1812";
                resultV2 = "1800";
                resultV1 = "DB100.1832";
                resultV2 = "DB100.1836";
                break;
            case 626:
                resultV1 = "1818";
                resultV2 = "1806";
                resultV1 = "DB100.1836";
                resultV2 = "DB100.1832";
                break;
            default:
                return;
src/main/resources/mapper/WrkMastExecuteMapper.xml
@@ -33,8 +33,8 @@
        <if test="ioType != null">
            and io_type = #{ioType}
        </if>
        <if test="wrkType != null">
            and wrk_type = #{wrkType}
        <if test="wrkSts != null">
            and wrk_sts = #{wrkSts}
        </if>
        <if test="steNo != null">
            and ste_id = #{steNo}
@@ -84,8 +84,8 @@
        <if test="ioType != null">
            and io_type = #{ioType}
        </if>
        <if test="wrkType != null">
            and wrk_type = #{wrkType}
        <if test="wrkSts != null">
            and wrk_sts = #{wrkSts}
        </if>
    </select>