| | |
| | | import com.zy.common.utils.HttpHandler; |
| | | import com.zy.core.CrnThread; |
| | | import com.zy.core.DevpThread; |
| | | import com.zy.core.RgvThread; |
| | | import com.zy.core.cache.MessageQueue; |
| | | import com.zy.core.cache.SlaveConnection; |
| | | import com.zy.core.enums.*; |
| | |
| | | private FillingMastService fillingMastService; |
| | | @Autowired |
| | | private VacuumMastService vacuumMastService; |
| | | @Autowired |
| | | private BasErrLogService basErrLogService; |
| | | @Autowired |
| | | private WrkMastStaService wrkMastStaService; |
| | | @Autowired |
| | | private BasRgvErrService basRgvErrService; |
| | | |
| | | @Value("${wms.url}") |
| | | private String wmsUrl; |
| | |
| | | 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); |
| | | wrkMastSta.setBignTime(new Date()); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | // System.out.println(JSON.toJSONString(staProtocol)); |
| | | if (staProtocol.isAutoing()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),2,1); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | 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); |
| | |
| | | } |
| | | }else if (staProtocol.isLoading()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),2,3); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | 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); |
| | |
| | | } |
| | | }else if (staProtocol.isInEnable()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),2,5); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | 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); |
| | |
| | | } |
| | | }else if (staProtocol.isOutEnable()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),2,7); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | 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); |
| | |
| | | } |
| | | if (staProtocol.isEmptyMk()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),1,10); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | 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); |
| | |
| | | } |
| | | if (staProtocol.isFullPlt()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),3,10); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | 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); |
| | |
| | | } |
| | | if (staProtocol.isCar()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),5,10); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | 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); |
| | |
| | | } |
| | | if (staProtocol.isLow()){ |
| | | WrkMastSta wrkMastSta = new WrkMastSta(new Date(),7,10); |
| | | Integer count = wrkMastStaMapper.selectCount(new EntityWrapper<WrkMastSta>().eq("wrk_no", wrkMastSta.getWrkNo())); |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 执行小车搬运任务 |
| | | */ |
| | | 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); |
| | | wrkMastSta.setUpdateTime(new Date()); |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | public synchronized void recCrnErr() { |
| | | Date now = new Date(); |
| | | |
| | | // 获取堆垛机信息 |
| | | SiemensRgvThread rgvThread = (SiemensRgvThread) SlaveConnection.get(SlaveType.Rgv, 1); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | return; |
| | | } |
| | | if (true) { |
| | | // if (crnProtocol.getModeType() != CrnModeType.STOP) { |
| | | // 有任务 |
| | | if (rgvProtocol.getTaskNo1() != 0) { |
| | | |
| | | BasErrLog latest = basErrLogService.findLatestByTaskNo(1, rgvProtocol.getTaskNo1()); |
| | | // 有异常 |
| | | if (latest == null) { |
| | | if (rgvProtocol.getAlarm() != null && rgvProtocol.getAlarm() > 0) { |
| | | WrkMastSta wrkMastSta = wrkMastStaService.selectOne(new EntityWrapper<WrkMastSta>() |
| | | .setSqlSelect("TOP 1 wrk_no as wrkNo , wrk_sts as wrkSts,wrk_start as wrkStart,wrk_end as wrkEnd, create_time as createTime") |
| | | .eq("wrk_No", rgvProtocol.getTaskNo1()) |
| | | .orderBy("create_time", false) |
| | | |
| | | ); |
| | | if (wrkMastSta == null) { |
| | | return; |
| | | } |
| | | BasRgvErr rgvErr = basRgvErrService.selectById(rgvProtocol.getAlarm()); |
| | | String errName = rgvErr == null ? String.valueOf(rgvProtocol.getAlarm()) : rgvErr.getErrName(); |
| | | BasErrLog basErrLog = new BasErrLog( |
| | | null, // 编号 |
| | | wrkMastSta.getWrkNo().intValue(), // 工作号 |
| | | now, // 发生时间 |
| | | null, // 结束时间 |
| | | wrkMastSta.getWrkSts().longValue(), // 工作状态 |
| | | wrkMastSta.getType(), // 入出库类型 |
| | | 1, // 堆垛机 |
| | | null, // plc |
| | | null, // 目标库位 |
| | | wrkMastSta.getWrkEnd(), // 目标站 |
| | | wrkMastSta.getWrkEnd(), // 源站 |
| | | null, // 源库位 |
| | | null, // 条码 |
| | | (int) rgvProtocol.getAlarm(), // 异常码 |
| | | errName, // 异常 |
| | | 1, // 异常情况 |
| | | now, // 添加时间 |
| | | null, // 添加人员 |
| | | now, // 修改时间 |
| | | null, // 修改人员 |
| | | "任务中异常" // 备注 |
| | | ); |
| | | if (!basErrLogService.insert(basErrLog)) { |
| | | |
| | | } |
| | | } |
| | | } else { |
| | | // 异常修复 |
| | | if (rgvProtocol.getAlarm() == null || rgvProtocol.getAlarm() == 0) { |
| | | latest.setEndTime(now); |
| | | latest.setUpdateTime(now); |
| | | latest.setStatus(2); |
| | | if (!basErrLogService.updateById(latest)) { |
| | | |
| | | } |
| | | } |
| | | } |
| | | // 无任务 |
| | | } else { |
| | | BasErrLog latest = basErrLogService.findLatest(1); |
| | | |
| | | // 有异常 |
| | | if (rgvProtocol.getAlarm() != null && rgvProtocol.getAlarm() > 0) { |
| | | |
| | | // 记录新异常 |
| | | if (latest == null || (latest.getErrCode() != rgvProtocol.getAlarm().intValue())) { |
| | | BasRgvErr rgvErr = basRgvErrService.selectById(rgvProtocol.getAlarm()); |
| | | String errName = rgvErr == null ? String.valueOf(rgvProtocol.getAlarm()) : rgvErr.getErrName(); |
| | | BasErrLog basErrLog = new BasErrLog( |
| | | null, // 编号 |
| | | null, // 工作号 |
| | | now, // 发生时间 |
| | | null, // 结束时间 |
| | | null, // 工作状态 |
| | | null, // 入出库类型 |
| | | 1, // 堆垛机 |
| | | null, // plc |
| | | null, // 目标库位 |
| | | null, // 目标站 |
| | | null, // 源站 |
| | | null, // 源库位 |
| | | null, // 条码 |
| | | (int) rgvProtocol.getAlarm(), // 异常码 |
| | | errName, // 异常 |
| | | 1, // 异常情况 |
| | | now, // 添加时间 |
| | | null, // 添加人员 |
| | | now, // 修改时间 |
| | | null, // 修改人员 |
| | | "无任务异常" // 备注 |
| | | ); |
| | | if (!basErrLogService.insert(basErrLog)) { |
| | | |
| | | } |
| | | } |
| | | // 无异常 |
| | | } else { |
| | | // 异常修复 |
| | | if (latest != null && latest.getStatus() == 1) { |
| | | latest.setEndTime(now); |
| | | latest.setUpdateTime(now); |
| | | latest.setStatus(2); |
| | | if (!basErrLogService.updateById(latest)) { |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // News.infoNoLog(""+mark+" - 0"+" - 堆垛机异常信息记录执行完成"); |
| | | } |
| | | |
| | | |
| | | |
| | | } |