| | |
| | | import com.zy.common.utils.News; |
| | | import com.zy.core.CrnThread; |
| | | import com.zy.core.DevpThread; |
| | | import com.zy.core.ThreadHandler; |
| | | import com.zy.core.cache.MessageQueue; |
| | | import com.zy.core.cache.SlaveConnection; |
| | | import com.zy.core.enums.*; |
| | |
| | | */ |
| | | @Slf4j |
| | | @Service("mainService") |
| | | @Transactional |
| | | public class MainServiceImpl { |
| | | |
| | | public static final long COMMAND_TIMEOUT = 5 * 1000; |
| | |
| | | WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); |
| | | if (wrkMast == null) { |
| | | // 无拣料数据 |
| | | log.info("无拣料数据,托盘码:{}",barcode); |
| | | continue; |
| | | } |
| | | if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { |
| | | log.info("工作档入出库类型不符合,入出库类型:{},工作档目标站{},工作档源站{}",wrkMast.getIoType(),wrkMast.getStaNo(),wrkMast.getSourceStaNo()); |
| | | continue; |
| | | } |
| | | // 获取目标站 |
| | |
| | | if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue()) && crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.forkPosType == CrnForkPosType.HOME) { |
| | | log.info("堆垛机出库完成 - 开始执行"); |
| | | |
| | | Date date = new Date(); |
| | | long diffInMillis = date.getTime() - wrkMast.getCrnStrTime().getTime(); |
| | | if (!(diffInMillis >= 30000)){ |
| | | continue; |
| | | } |
| | | |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | |
| | | // 下发站点信息 |
| | |
| | | public synchronized void crnIoExecute(Integer mark) { |
| | | |
| | | for (CrnSlave crn : slaveProperties.getCrn()) { |
| | | //获取堆垛机出库站的下一站信息 |
| | | SiemensDevpThread devpThread =(SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crn.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(1002); |
| | | // 获取堆垛机信息 |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); |
| | | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); |
| | |
| | | // } |
| | | |
| | | // 只有当堆垛机空闲 并且 无任务时才继续执行 |
| | | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getForkPos() == 0 && crnProtocol.getTaskNo() == 0 && crnProtocol.getTaskNoTwo() == 0) { |
| | | if ( |
| | | crnProtocol.getStatusType() == CrnStatusType.IDLE |
| | | && crnProtocol.getModeType() == CrnModeType.AUTO |
| | | && crnProtocol.getForkPos() == 0 |
| | | && crnProtocol.getTaskNo() == 0 |
| | | && crnProtocol.getStatusTypeTwo() == CrnStatusType.IDLE |
| | | && crnProtocol.getForkPosTwo() == 0 |
| | | && crnProtocol.getTaskNoTwo() == 0) { |
| | | News.warnNoLog("" + mark + " - 0" + " - 开始执行堆垛机入出库作业下发"); |
| | | if (crnProtocol.getLoaded() == 0 && crnProtocol.getLoadedTwo() == 0) { |
| | | //News.error("工位1无物,工位2无物"); |
| | |
| | | if (wrkMast.getIoType() >= 100) { |
| | | WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep1(crn.getId(), wrkMast.getSourceStaNo()); |
| | | if (wrkMast1 != null) { |
| | | if (Integer.parseInt(wrkMast1.getSourceLocNo().substring(2,5)) == 1){ |
| | | if (Integer.parseInt(wrkMast1.getSourceLocNo().substring(2,5)) == 1 || (staProtocol.isAutoing()&&staProtocol.isLoading())){ |
| | | this.outPut(crn, crnProtocol, mark); |
| | | continue; |
| | | } |
| | |
| | | if (wrkMast.getIoType() >= 100) { |
| | | WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep1(crn.getId(), wrkMast.getSourceStaNo()); |
| | | if (wrkMast1 != null) { |
| | | if (Integer.parseInt(wrkMast1.getSourceLocNo().substring(2,5)) == 29){ |
| | | if (Integer.parseInt(wrkMast1.getSourceLocNo().substring(2,5)) == 29 || (staProtocol.isAutoing()&&staProtocol.isLoading())){ |
| | | this.outPut(crn, crnProtocol, mark); |
| | | continue; |
| | | } |
| | |
| | | * @return |
| | | */ |
| | | private Integer getCrnStation(String locNo) { |
| | | String bay = locNo.substring(2, 5); |
| | | String bay = locNo.substring(2, 5);//0100203 |
| | | if (Integer.parseInt(bay) == 1) { |
| | | return 1; |
| | | } else if (Integer.parseInt(bay) == 29) { |
| | | return 2; |
| | | } |
| | | if (Integer.parseInt(locNo.substring(0, 2)) >= 14) { |
| | | return 1; |
| | | } else { |
| | | // if (Integer.parseInt(locNo.substring(0, 2)) >= 14) { |
| | | if (Integer.parseInt(bay) >= 14) { |
| | | return 2; |
| | | } else { |
| | | return 1; |
| | | } |
| | | } |
| | | |
| | |
| | | // 获取堆垛机出库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); |
| | | //堆垛机出库站点的下一站 |
| | | StaProtocol staProtocol1 = devpThread.getStation().get(1002); |
| | | if (staProtocol == null) { |
| | | News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol); |
| | | break; |
| | |
| | | break; |
| | | } |
| | | // 判断堆垛机出库站状态 |
| | | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { |
| | | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()&&staProtocol1.isAutoing()&&!staProtocol1.isLoading()) { |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | |
| | | // 堆垛机控制过滤 |
| | |
| | | return; |
| | | } |
| | | |
| | | // 堆垛机控制过滤 |
| | | if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { |
| | | return; |
| | | } |
| | | |
| | | // 已经存在吊车执行任务时,则过滤 |
| | | if (wrkMastMapper.selectWorking(slave.getId()) != null) { |
| | | return; |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | if (crnStation == 0) { |
| | | return; |
| | | }else if(crnStation == 1) { |
| | | // 堆垛机控制过滤 |
| | | if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { |
| | | return; |
| | | } |
| | | }else if(crnStation == 2) { |
| | | // 堆垛机控制过滤 |
| | | if (!crnProtocol.getStatusTypeTwo().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNoTwo() != 0) { |
| | | return; |
| | | } |
| | | }else { |
| | | } |
| | | |
| | | News.warnNoLog("" + mark + " - 3" + " - 3" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue(), sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue(), sta.getRow1().shortValue(), sta.getBay1().shortValue(), sta.getLev1().shortValue()); |
| | | |
| | |
| | | } |
| | | // 状态:等待确认 并且 任务完成位 = 1 |
| | | if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { |
| | | News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作,任务号:" + crnProtocol.getTaskNo()); |
| | | if (crnProtocol.getTaskNo() == 9999) { |
| | | crnThread.setResetFlag(true); |
| | | continue; |
| | | } |
| | | |
| | | if ((System.currentTimeMillis() - crnProtocol.getLastCommandTime()) < 1000 * 6) { |
| | | News.error("" + mark + " - 0" + " - 堆垛机指令等待确认完成过快异常,任务号:" + crnProtocol.getTaskNo()); |
| | | continue; |
| | | } |
| | | |
| | | News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作,任务号:" + crnProtocol.getTaskNo()); |
| | | // if (crnProtocol.getTaskNo() == 9999) { |
| | | // crnThread.setResetFlag(true); |
| | | // continue; |
| | | // } |
| | | // 获取入库待确认工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue()); |
| | | if (wrkMast == null) { |
| | | News.error("" + mark + " - 1" + " - 堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},工作号={}", crn.getId(), crnProtocol.getTaskNo()); |
| | | continue; |
| | | } |
| | | Date date = new Date(); |
| | | long diffInMillis = date.getTime() - wrkMast.getCrnStrTime().getTime(); |
| | | if (!(diffInMillis >= 30000)){ |
| | | continue; |
| | | } |
| | | // 入库 + 库位转移 ==> 4.入库完成 |
| | | if (wrkMast.getWrkSts() == 3) { |
| | | wrkMast.setWrkSts(4L); |