| | |
| | | import com.zy.core.model.command.LedCommand; |
| | | import com.zy.core.model.command.RgvCommand; |
| | | import com.zy.core.model.protocol.CrnProtocol; |
| | | import com.zy.core.model.protocol.ExtProtocol; |
| | | import com.zy.core.model.protocol.RgvProtocol; |
| | | import com.zy.core.model.protocol.StaProtocol; |
| | | import com.zy.core.properties.SlaveProperties; |
| | | import com.zy.core.thread.BarcodeThread; |
| | | import com.zy.core.thread.LedThread; |
| | | import com.zy.core.thread.SiemensDevpThread; |
| | | import com.zy.core.thread.SiemensRgvThread; |
| | | import com.zy.core.thread.*; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | |
| | | for (RgvSlave rgv : slaveProperties.getRgv()) { |
| | | if (!rgv.getDemo()){ |
| | | continue; |
| | | |
| | | } |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); |
| | |
| | | if (rgvComplete){ |
| | | rgvThread.setPakMk(true); |
| | | } |
| | | |
| | | List<WrkMastSta> wrkMastStas = wrkMastStaMapper.selectList(new EntityWrapper<WrkMastSta>().ne("wrk_sts",3).eq("wrk_no", rgvProtocol.getTaskNo1())); |
| | | if (!Cools.isEmpty(wrkMastStas) || wrkMastStas.size()<=0){ |
| | | WrkMastSta wrkMastSta = wrkMastStas.get(0); |
| | | wrkMastSta.setWrkSts(3); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | public synchronized void ExtTaskAndPut() throws InterruptedException { |
| | | for (ExtSlave extSlave : slaveProperties.getExt()) { |
| | | // if (!rgv.getDemo()) { |
| | | // continue; |
| | | // } |
| | | MelsecExtThread extThread = (MelsecExtThread) SlaveConnection.get(SlaveType.Ext, extSlave.getId()); |
| | | ExtProtocol extProtocol = extThread.getExtProtocol(); |
| | | if (extProtocol == null) { |
| | | continue; |
| | | } |
| | | // else { |
| | | // extProtocol = extProtocol.clone(); |
| | | // } |
| | | if (extProtocol.isTake()){//允许取 |
| | | |
| | | }else if (extProtocol.isPut()){//允许放 |
| | | |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | public synchronized void DevpTaskAndPut() throws InterruptedException { |
| | | try { |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | for (DevpSlave.Sta inSta : devp.getInSta()) { |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | // System.out.println(JSON.toJSONString(staProtocol)); |
| | | if (staProtocol.isAutoing()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),2,1); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().ne("wrk_sts",3).eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | if (count==0){ |
| | | wrkMastSta.setType(1); |
| | | wrkMastSta.setWrkType(3); |
| | | wrkMastStaMapper.insert(wrkMastSta); |
| | | } |
| | | }else if (staProtocol.isLoading()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),2,3); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().ne("wrk_sts",3).eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | if (count==0){ |
| | | wrkMastSta.setType(1); |
| | | wrkMastSta.setWrkType(3); |
| | | wrkMastStaMapper.insert(wrkMastSta); |
| | | } |
| | | }else if (staProtocol.isInEnable()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),2,5); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().ne("wrk_sts",3).eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | if (count==0){ |
| | | wrkMastSta.setType(1); |
| | | wrkMastSta.setWrkType(3); |
| | | wrkMastStaMapper.insert(wrkMastSta); |
| | | } |
| | | }else if (staProtocol.isOutEnable()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),2,7); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().ne("wrk_sts",3).eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | if (count==0){ |
| | | wrkMastSta.setType(1); |
| | | wrkMastSta.setWrkType(3); |
| | | wrkMastStaMapper.insert(wrkMastSta); |
| | | } |
| | | } |
| | | if (staProtocol.isEmptyMk()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),1,10); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().ne("wrk_sts",3).eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | if (count==0){ |
| | | wrkMastSta.setType(1); |
| | | wrkMastSta.setWrkType(3); |
| | | wrkMastStaMapper.insert(wrkMastSta); |
| | | } |
| | | } |
| | | if (staProtocol.isFullPlt()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),3,10); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().ne("wrk_sts",3).eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | if (count==0){ |
| | | wrkMastSta.setType(1); |
| | | wrkMastSta.setWrkType(3); |
| | | wrkMastStaMapper.insert(wrkMastSta); |
| | | } |
| | | } |
| | | if (staProtocol.isCar()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),5,10); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().ne("wrk_sts",3).eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | if (count==0){ |
| | | wrkMastSta.setType(1); |
| | | wrkMastSta.setWrkType(3); |
| | | wrkMastStaMapper.insert(wrkMastSta); |
| | | } |
| | | } |
| | | if (staProtocol.isLow()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),7,10); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().ne("wrk_sts",3).eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | if (count==0){ |
| | | wrkMastSta.setType(1); |
| | | wrkMastSta.setWrkType(3); |
| | | wrkMastStaMapper.insert(wrkMastSta); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("生成小车搬运任务 ===>> 失败", e); |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 执行小车搬运任务 |
| | | */ |
| | | public synchronized void rgvRunWrkMastFullSta() { |
| | | try{ |
| | | SiemensRgvThread rgvThread = (SiemensRgvThread) SlaveConnection.get(SlaveType.Rgv, 1); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | log.error("RGV不在线"); |
| | | return; |
| | | } |
| | | // 只有当RGV空闲、自动,工位一无物//rgv可用 |
| | | if (rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1()==0 |
| | | && rgvProtocol.getTaskNo1() == 0 |
| | | && rgvThread.isPakMk() |
| | | ) { |
| | | Integer selectCount = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().ne("wrk_sts", 3).ne("wrk_sts", 0)); |
| | | if (selectCount>0){ |
| | | log.error("存在执行RGV中任务,但是小车状态空闲!!!"); |
| | | return; |
| | | } |
| | | |
| | | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectList(new EntityWrapper<WrkMastSta>().eq("wrk_sts",0)); |
| | | for (WrkMastSta wrkMastSta : wrkMastStaList){ |
| | | if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=3){//1:满版 3:取放 |
| | | continue; |
| | | } |
| | | boolean sign = rgvTakeFullAll(1, wrkMastSta); //命令下发 |
| | | if (sign){ |
| | | wrkMastSta.setWrkSts(1); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("3875行执行小车搬运任务下发失败"); |
| | | log.error("3875行"+e); |
| | | } |
| | | } |
| | | /* |
| | | * 小车取货至工位任务 |
| | | * */ |
| | | public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgvId); // RGV编号 |
| | | rgvCommand.setAckFinish1(false); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().intValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 工位1任务模式: 取放货 |
| | | rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue()); //工位1起点 |
| | | rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 0); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |