| | |
| | | import com.core.common.DateUtils; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.ArmOrderAssignmentParam; |
| | | import com.zy.asrs.entity.param.ArmTaskAssignmentParam; |
| | | import com.zy.asrs.entity.param.CombParam; |
| | | import com.zy.asrs.entity.result.OrderDetlValueResultUtil; |
| | | import com.zy.asrs.mapper.*; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.utils.PostMesDataUtils; |
| | | import com.zy.asrs.utils.RouteUtils; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.asrs.utils.VersionUtils; |
| | | import com.zy.asrs.utils.core.ReturnT; |
| | | import com.zy.common.constant.ArmConstant; |
| | | import com.zy.common.model.LocTypeDto; |
| | | import com.zy.common.model.MatDto; |
| | | import com.zy.common.model.SearchLocParam; |
| | |
| | | private WrkMastService wrkMastService; |
| | | @Autowired |
| | | private BasRgvMapService basRgvMapService; |
| | | @Autowired |
| | | private BasArmService basArmService; |
| | | @Autowired |
| | | private BasArmMastService basArmMastService; |
| | | |
| | | @Value("${wms.url}") |
| | | private String wmsUrl; |
| | | |
| | | @Value("${wms.comb}") |
| | | private String wmsComb; |
| | | @Value("${inventory.number}") |
| | | private Integer inventoryNumber; |
| | | |
| | |
| | | } else { |
| | | staProtocolIn = staProtocolIn.clone(); |
| | | } |
| | | StaProtocol staProtocolOut = devpThread.getStation().get(1015); |
| | | if (staProtocolOut == null) { |
| | | continue; |
| | | } else { |
| | | staProtocolOut = staProtocolOut.clone(); |
| | | } |
| | | if(staProtocolOut.getWorkNo() != null && staProtocolOut.getStaNo() == 4006){ |
| | | WrkMast wrkMastOut = wrkMastMapper.selectByWrkNo(staProtocolOut.getWorkNo()); |
| | | WrkMast wrkMast = wrkMastMapper.selectByWrkNo(9997); |
| | | if(wrkMast == null){ |
| | | int[] outStaNos = {1015, 2016}; |
| | | for (int outStaNo : outStaNos) { |
| | | StaProtocol staProtocolOut = devpThread.getStation().get(outStaNo);// 盘点出库衔接站点(可能是 1015,也可能是 2016) |
| | | if (staProtocolOut == null) { |
| | | continue; |
| | | } else { |
| | | staProtocolOut = staProtocolOut.clone(); |
| | | } |
| | | try { |
| | | TransplantWork param = new TransplantWork(); |
| | | param.setWorkNo(wrkMastOut.getWrkNo()); |
| | | param.setBarcode(wrkMastOut.getBarcode()); |
| | | param.setSourceStaNo(1015); |
| | | param.setStaNo(wrkMastOut.getStaNo()); |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/auto/TransplantingIn/v1") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | 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)); |
| | | |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | | if (staProtocolOut.getWorkNo() != null && staProtocolOut.getStaNo() == 4006) { |
| | | WrkMast wrkMastOut = wrkMastMapper.selectByWrkNo(staProtocolOut.getWorkNo()); |
| | | WrkMast wrkMast = wrkMastMapper.selectByWrkNo(9997); |
| | | if (wrkMastOut == null) { |
| | | continue; |
| | | } |
| | | if (wrkMast != null) { |
| | | News.info("已存在斜街任务,等待任务完成"); |
| | | continue; |
| | | } |
| | | try { |
| | | TransplantWork param = new TransplantWork(); |
| | | param.setWorkNo(wrkMastOut.getWrkNo()); |
| | | param.setBarcode(wrkMastOut.getBarcode()); |
| | | param.setSourceStaNo(outStaNo); |
| | | param.setStaNo(wrkMastOut.getStaNo()); |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/auto/TransplantingOut/v1") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .build() |
| | | .doPost(); |
| | | |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | 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)); |
| | | |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if(staProtocolIn.getWorkNo() != null &&staProtocolIn.getStaNo() != 4001){ |
| | | WrkMast wrkMastIn = wrkMastMapper.selectByWrkNo(staProtocolIn.getWorkNo()); |
| | | WrkMast wrkMast = wrkMastMapper.selectByWrkNo(9996); |
| | | if(wrkMast == null){ |
| | | if(wrkMastIn == null){ |
| | | continue; |
| | | } |
| | | if(wrkMast != null){ |
| | | News.info("已存在斜街任务,等待任务完成"); |
| | | continue; |
| | | } |
| | | try { |
| | |
| | | param.setStaNo(wrkMastIn.getStaNo()); |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/auto/TransplantingOut/v1") |
| | | .setPath("/rpc/auto/TransplantingIn/v1") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .build() |
| | | .doPost(); |
| | |
| | | // } |
| | | // } |
| | | |
| | | /** |
| | | * 小车上工位左右移动 |
| | | * |
| | | */ |
| | | public synchronized boolean rgvStaMove(Long workNo) { |
| | | try { |
| | | for (RgvSlave rgv : slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | continue; |
| | | } else { |
| | | rgvProtocol = rgvProtocol.clone(); |
| | | } |
| | | if(rgvProtocol.isLoaded2ing() && rgvProtocol.isLoaded1ing()){ |
| | | continue; |
| | | } |
| | | if(rgvProtocol.isLoaded1ing() && !rgvProtocol.isLoaded2ing() && rgvProtocol.getTaskNo1() != 0){ |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1()); |
| | | Short moveSta =0; |
| | | |
| | | if(wrkMastSta.getStaEnd()< 1036 || (2000 < wrkMastSta.getStaEnd() && wrkMastSta.getStaEnd()<2031)){ |
| | | moveSta = 2; |
| | | boolean rgvComplete = rgvComplete3((int) rgvProtocol.getRgvNo(),7,wrkMastSta.getWrkNo(),moveSta); |
| | | if (!rgvComplete){ |
| | | log.error("小车工位移动失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if(!rgvProtocol.isLoaded1ing() && rgvProtocol.isLoaded2ing() && rgvProtocol.getTaskNo2() != 0){ |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2()); |
| | | Short moveSta =0; |
| | | |
| | | if(wrkMastSta.getStaEnd()> 2030 || (1036 < wrkMastSta.getStaEnd() && wrkMastSta.getStaEnd()<2000)){ |
| | | moveSta = 1; |
| | | boolean rgvComplete = rgvComplete3((int) rgvProtocol.getRgvNo(),8,wrkMastSta.getWrkNo(),moveSta); |
| | | if (!rgvComplete){ |
| | | log.error("小车工位移动失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("小车复位线程报错!"+e); |
| | | } |
| | | } |
| | | /** |
| | | * 完成小车任务 |
| | | */ |
| | |
| | | log.error("{}号RGV尚未在数据库进行维护!3", rgv.getId()); |
| | | continue; |
| | | } |
| | | //放货确认 |
| | | if(rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING && rgvProtocol.getModeType() == RgvModeType.AUTO){ |
| | | boolean rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(), 3); |
| | | if (!rgvComplete){ |
| | | log.error("小车放货复位失败,小车号{}!", rgvProtocol.getRgvNo()); |
| | | } |
| | | } |
| | | if(rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING && rgvProtocol.getModeType() == RgvModeType.AUTO){ |
| | | boolean rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(), 6); |
| | | if (!rgvComplete){ |
| | | log.error("小车放货复位失败,小车号{}!", rgvProtocol.getRgvNo()); |
| | | } |
| | | } |
| | | |
| | | // 只有当RGV工位1等待WCS确认、自动 |
| | | if ((rgvProtocol.getStatusType1() == RgvStatusType.WAITING || rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING) |
| | | if (rgvProtocol.getStatusType1() == RgvStatusType.WAITING |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && (rgvProtocol.getStatusType() == RgvStatusType.WORKING1) |
| | | ){ |
| | | log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol); |
| | | |
| | | log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType1(),rgvProtocol); |
| | | if(rgvProtocol.getTaskNo1() == 9999){ // 预调度任务确认 |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | Integer staNo = basRgvMap.getNowRoute(); |
| | |
| | | } |
| | | } |
| | | } |
| | | if (rgvProtocol.getTaskNo1()!=0 && rgvProtocol.getTaskNo1()!=9999){ |
| | | if ( rgvProtocol.getTaskNo1()!=9999){ |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1()); |
| | | if(null == wrkMastSta){ |
| | | log.error("小车无任务"); |
| | | continue; |
| | | } |
| | | if(wrkMastSta.getWrkSts() == 1){//取货确认 |
| | | if(!Objects.equals(rgvProtocol.getRgvPosI2(), wrkMastSta.getStaEnd())){ |
| | | continue; |
| | | } |
| | | wrkMastSta.setUpdateTime(new Date()); |
| | | wrkMastSta.setWrkSts(2); |
| | | // wrkMastSta.setWorkSta(2); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功"); |
| | |
| | | } |
| | | boolean rgvComplete = false; |
| | | |
| | | rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),7); |
| | | rgvComplete = rgvStaMove(wrkMastSta.getWrkNo()); |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | break; |
| | | } |
| | | break; |
| | | } |
| | | if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getWrkSts()!=1){ |
| | | log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); |
| | | continue; |
| | | } |
| | | |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); |
| | | if (!Cools.isEmpty(wrkMast)){ |
| | | if (!staProtocol.isPakMk()){ |
| | | continue; |
| | | } |
| | | // 下发站点信息 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | log.error("rgv任务完成给输送线下发命令:"+wrkMast.getWrkNo()+","+wrkMast.getStaNo()); |
| | | if (!MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol))) { |
| | | continue; |
| | | } |
| | | } |
| | | boolean rgvComplete = false; |
| | | |
| | | rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),3); |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | break; |
| | | } |
| | | WrkMast wrkMast1 = wrkMastService.selectByWrkNo(rgvProtocol.getTaskNo1()); |
| | | wrkMast1.setPdcType("Y"); |
| | | |
| | | wrkMastService.updateById(wrkMast1); |
| | | |
| | | wrkMastSta.setWrkSts(3); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2471"); |
| | | // if(wrkMastSta.getWrkSts() == 4){//行走确认 |
| | | // wrkMastSta.setWrkSts(2); |
| | | // try{ |
| | | // wrkMastStaMapper.updateById(wrkMastSta); |
| | | // log.error("更新小车任务成功"); |
| | | // }catch (Exception e){ |
| | | // log.error("更新小车任务失败"); |
| | | // } |
| | | // boolean rgvComplete = false; |
| | | // |
| | | // rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),7); |
| | | // if (!rgvComplete){ |
| | | // log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | // break; |
| | | // } |
| | | // break; |
| | | // } |
| | | // if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getWrkSts()!=1){ |
| | | // log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); |
| | | // continue; |
| | | // } |
| | | // |
| | | // SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | // StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | | // if (staProtocol == null) { |
| | | // continue; |
| | | // } else { |
| | | // staProtocol = staProtocol.clone(); |
| | | // } |
| | | // if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ |
| | | // continue; |
| | | // } |
| | | // WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); |
| | | // if (!Cools.isEmpty(wrkMast)){ |
| | | // if (!staProtocol.isPakMk()){ |
| | | // continue; |
| | | // } |
| | | // // 下发站点信息 |
| | | // staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | // staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); |
| | | // devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | // log.error("rgv任务完成给输送线下发命令:"+wrkMast.getWrkNo()+","+wrkMast.getStaNo()); |
| | | // if (!MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol))) { |
| | | // continue; |
| | | // } |
| | | // } |
| | | // boolean rgvComplete = false; |
| | | // |
| | | // rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),3); |
| | | // if (!rgvComplete){ |
| | | // log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | // break; |
| | | // } |
| | | // WrkMast wrkMast1 = wrkMastService.selectByWrkNo(rgvProtocol.getTaskNo1()); |
| | | // wrkMast1.setPdcType("Y"); |
| | | // |
| | | // wrkMastService.updateById(wrkMast1); |
| | | // |
| | | // wrkMastSta.setWrkSts(3); |
| | | // wrkMastStaMapper.updateById(wrkMastSta); |
| | | // BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | // basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | // rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2471"); |
| | | } |
| | | |
| | | else { |
| | |
| | | } |
| | | } |
| | | // 只有当RGV工位2等待WCS确认、自动 |
| | | if ((rgvProtocol.getStatusType2() == RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING) |
| | | if (rgvProtocol.getStatusType2() == RgvStatusType.WAITING |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && (rgvProtocol.getStatusType() == RgvStatusType.WORKING1) |
| | | ){ |
| | | log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol); |
| | | log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType2(),rgvProtocol); |
| | | if (rgvProtocol.getTaskNo2() !=0 ){ |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1()); |
| | | if(wrkMastSta.getWrkSts() == 1){//缺货确认 |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2()); |
| | | if(wrkMastSta.getWrkSts() == 1){//取货确认 |
| | | boolean rgvComplete = false; |
| | | rgvComplete = rgvComplete2((int) rgvProtocol.getRgvNo(),8,wrkMastSta.getWrkNo()); |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | break; |
| | | } |
| | | wrkMastSta.setWrkSts(2); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | boolean rgvComplete = false; |
| | | |
| | | rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),7); |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | break; |
| | | } |
| | | break; |
| | | } |
| | | if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getWrkSts()!=1){ |
| | | log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); |
| | | continue; |
| | | } |
| | | // if(wrkMastSta.getWrkSts() == 4){//行走后确认 |
| | | // wrkMastSta.setWrkSts(2); |
| | | // try{ |
| | | // wrkMastStaMapper.updateById(wrkMastSta); |
| | | // log.error("更新小车任务成功"); |
| | | // }catch (Exception e){ |
| | | // log.error("更新小车任务失败"); |
| | | // } |
| | | // boolean rgvComplete = false; |
| | | // |
| | | // rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),7); |
| | | // if (!rgvComplete){ |
| | | // log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | // break; |
| | | // } |
| | | // break; |
| | | // } |
| | | // if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getWrkSts()!=1){ |
| | | // log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); |
| | | // continue; |
| | | // } |
| | | |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); |
| | | if (!Cools.isEmpty(wrkMast)){ |
| | | if (!staProtocol.isPakMk()){ |
| | | continue; |
| | | } |
| | | // 下发站点信息 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | log.error("rgv任务完成给输送线下发命令:"+wrkMast.getWrkNo()+","+wrkMast.getStaNo()); |
| | | if (!MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol))) { |
| | | continue; |
| | | } |
| | | } |
| | | int sourceSta = wrkMast.getSourceStaNo(); |
| | | boolean rgvComplete = false; |
| | | // SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | // StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | | // if (staProtocol == null) { |
| | | // continue; |
| | | // } else { |
| | | // staProtocol = staProtocol.clone(); |
| | | // } |
| | | // if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ |
| | | // continue; |
| | | // } |
| | | // WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); |
| | | // |
| | | // int sourceSta = wrkMast.getSourceStaNo(); |
| | | // boolean rgvComplete = false; |
| | | // |
| | | // //双工位出入库不同工位复位 |
| | | // rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),6); |
| | | |
| | | //双工位出入库不同工位复位 |
| | | rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),6); |
| | | |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | break; |
| | | } |
| | | WrkMast wrkMast1 = wrkMastService.selectByWrkNo(rgvProtocol.getTaskNo1()); |
| | | wrkMast1.setPdcType("Y"); |
| | | |
| | | wrkMastService.updateById(wrkMast1); |
| | | |
| | | wrkMastSta.setWrkSts(3); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2471"); |
| | | // if (!rgvComplete){ |
| | | // log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | // break; |
| | | // } |
| | | // WrkMast wrkMast1 = wrkMastService.selectByWrkNo(rgvProtocol.getTaskNo1()); |
| | | // wrkMast1.setPdcType("Y"); |
| | | // |
| | | // wrkMastService.updateById(wrkMast1); |
| | | // |
| | | // wrkMastSta.setWrkSts(3); |
| | | // wrkMastStaMapper.updateById(wrkMastSta); |
| | | // BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | // basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | // rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2471"); |
| | | } |
| | | else { |
| | | log.error("小车复位失败,小车号{},等待wcs确认但是没有工作号!",rgvProtocol.getRgvNo()); |
| | | log.error("小车复位失败,小车号{},等待wcs确认!",rgvProtocol.getRgvNo()); |
| | | } |
| | | } |
| | | //当小车无任务时取消锁定 |
| | |
| | | continue; |
| | | } |
| | | //小车无任务时跳过 |
| | | if(rgvProtocol.getTaskNo1() ==0 && rgvProtocol.getTaskNo2() == 0){ |
| | | continue; |
| | | } |
| | | // if(rgvProtocol.getTaskNo1() ==0 && rgvProtocol.getTaskNo2() == 0){ |
| | | // continue; |
| | | // } |
| | | //入库放货 |
| | | if(rgvThread.isPakIn()){ |
| | | for(RgvSlave.RgvStn rgvStn : rgv.getRgvInPStn()){//入库放货站点 |
| | |
| | | continue; |
| | | } |
| | | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable() |
| | | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.isInEnable() |
| | | && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) { |
| | | flag = true; |
| | | } |
| | |
| | | continue; |
| | | } |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | // List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | Integer wrkNo = 0; |
| | | // Integer wrkNo = 0; |
| | | if(rgvProtocol.getTaskNo2() != 0){ |
| | | wrkNo = rgvProtocol.getTaskNo2(); |
| | | }else{ |
| | | wrkNo = rgvProtocol.getTaskNo1(); |
| | | } |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(wrkNo));//根据站点工作号和小车工作范围检索任务档 |
| | | // else{ |
| | | // wrkNo = rgvProtocol.getTaskNo1(); |
| | | // } |
| | | if(!rgvProtocol.isLoaded2ing()){ |
| | | continue; |
| | | } |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2());//根据站点工作号和小车工作范围检索任务档 |
| | | if( null == wrkMastSta ) { |
| | | News.infoNoLog( " - 1" + " - 4" + " - 查询无待入库数据--wrk_sts0, 工作号={}", staProtocol.getWorkNo()); |
| | | continue; |
| | | } |
| | | boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,null); //命令下发 |
| | | if(!Objects.equals(rgvProtocol.getRgvPosI2(), wrkMastSta.getStaEnd())){ |
| | | continue; |
| | | } |
| | | |
| | | boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,null,2); //命令下发 |
| | | if (sign){ |
| | | try{ |
| | | wrkMastSta.setWrkSts(3); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功"); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); |
| | | if (!signMap){ |
| | | log.error("货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | // boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); |
| | | // if (!signMap){ |
| | | // log.error("货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | // } |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | continue; |
| | | } |
| | | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isOutEnable() |
| | | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.isOutEnable() |
| | | && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) { |
| | | flag = true; |
| | | } |
| | |
| | | continue; |
| | | } |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | Integer wrkNo = 0; |
| | | // Integer wrkNo = 0; |
| | | if(rgvProtocol.getTaskNo1() != 0){ |
| | | wrkNo = rgvProtocol.getTaskNo1(); |
| | | }else{ |
| | | wrkNo = rgvProtocol.getTaskNo2(); |
| | | } |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(wrkNo));//根据站点工作号和小车工作范围检索任务档 |
| | | // else{ |
| | | // wrkNo = rgvProtocol.getTaskNo2(); |
| | | // } |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1());//根据站点工作号和小车工作范围检索任务档 |
| | | |
| | | if( null == wrkMastSta ) { |
| | | News.infoNoLog( " - 1" + " - 4" + " - 查询无待出库数据--wrk_sts0, 工作号={}", staProtocol.getWorkNo()); |
| | | News.infoNoLog( " - 1" + " - 4" + " - 查询无待入库数据--wrk_sts0, 工作号={}", staProtocol.getWorkNo()); |
| | | continue; |
| | | } |
| | | wrkMastSta.setWrkSts(2); |
| | | boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,null); //命令下发 |
| | | if(!Objects.equals(rgvProtocol.getRgvPosI2(), wrkMastSta.getStaEnd())){ |
| | | continue; |
| | | } |
| | | Integer pos = 2; |
| | | boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,null,pos); //命令下发 |
| | | if (sign){ |
| | | try{ |
| | | wrkMastSta.setWrkSts(3); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功"); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); |
| | | if (!signMap){ |
| | | log.error("货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | } |
| | | |
| | | // 只有当RGV空闲 并且 无任务时才继续执行 |
| | | if ((rgvProtocol.getStatusType1() == RgvStatusType.IDLE || rgvProtocol.getStatusType2() == RgvStatusType.IDLE) |
| | | if ((rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvProtocol.getStatusType2() == RgvStatusType.IDLE) |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvThread.isPakMk()) { |
| | | News.warnNoLog(""+mark+" - 0"+" - 开始执行RGV入出库作业下发"); |
| | | // 如果最近一次是入库模式 |
| | | // rgvRunWrkMastInTest(); |
| | | |
| | | if (rgvProtocol.getLastIo().equals("I")) { |
| | | if (basRgv.getInEnable().equals("Y") && rgvThread.isPakIn()) { |
| | | if (basRgv.getInEnable().equals("1") && rgvThread.isPakIn()) { |
| | | //mark - 1 - .... |
| | | this.rgvRunWrkMastIn(rgv, rgvProtocol,mark); // 入库 |
| | | rgvProtocol.setLastIo("O"); |
| | | } else if (basRgv.getOutEnable().equals("Y") && rgvThread.isPakOut()) { |
| | | } else if (basRgv.getOutEnable().equals("1") && rgvThread.isPakOut()) { |
| | | //mark - 2 - .... |
| | | this.rgvRunWrkMastOut(rgv, rgvProtocol,mark); // 出库 |
| | | rgvProtocol.setLastIo("I"); |
| | |
| | | } |
| | | // 如果最近一次是出库模式 |
| | | else if (rgvProtocol.getLastIo().equals("O")) { |
| | | if (basRgv.getOutEnable().equals("Y") && rgvThread.isPakOut()) { |
| | | if (basRgv.getOutEnable().equals("1") && rgvThread.isPakOut()) { |
| | | this.rgvRunWrkMastOut(rgv, rgvProtocol,mark); // 出库 |
| | | rgvProtocol.setLastIo("I"); |
| | | } else if (basRgv.getInEnable().equals("Y") && rgvThread.isPakIn()) { |
| | | } else if (basRgv.getInEnable().equals("1") && rgvThread.isPakIn()) { |
| | | this.rgvRunWrkMastIn(rgv, rgvProtocol,mark); // 入库 |
| | | rgvProtocol.setLastIo("O"); |
| | | } |
| | |
| | | rgvOutExecute(); |
| | | |
| | | } |
| | | } |
| | | } |
| | | public synchronized void rgvRunWrkMastInTest(){ |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(1); |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | basRgvMap.setNowRoute(1021); //更新小车当前位置站点号 |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(342);//根据站点工作号和小车工作范围检索任务档 |
| | | |
| | | // WrkMastSta wrkMastSta2 = wrkMastStaMapper.selectByWorkSta(2, 1); |
| | | boolean result = false; |
| | | // if(wrkMastSta2 != null && rgvProtocol.getRgvNo() == 1){ //距离计算 2楼单入库口不需要计算 |
| | | // result = rgvCalcDistance((int) rgvProtocol.getRgvNo(),wrkMastSta2.getStaEnd(),wrkMastSta.getStaStart());//工位2放货站点,工位1取货站点 |
| | | // } |
| | | // if(result){//若小车距离放货点距离近于取货点则跳过取货 true跳过取货/false优先取货 |
| | | // rgvThread.setPakRgv(false); |
| | | // continue; |
| | | // } |
| | | wrkMastSta.setWorkSta(1); |
| | | wrkMastSta.setRgvNo(1); |
| | | wrkMastSta.setStaStart(1035); |
| | | Short direction = 2;//双工位最终抵达位置 |
| | | boolean sign = false; |
| | | // sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,direction,); //命令下发 |
| | | if (sign){ |
| | | wrkMastSta.setWrkSts(1); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功"); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | // rgvThread.setPakOut(false);//出库不允许 |
| | | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); |
| | | if (!signMap){ |
| | | log.error("货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | } |
| | | /** |
| | |
| | | } |
| | | |
| | | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable() |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0 |
| | | && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) { |
| | | flag = true; |
| | | } |
| | |
| | | continue; |
| | | } |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | // List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//根据站点工作号和小车工作范围检索任务档 |
| | | // WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//根据站点工作号和小车工作范围检索任务档 |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getWorkNo());//根据站点工作号和小车工作范围检索任务档 |
| | | |
| | | if( null == wrkMastSta ) { |
| | | News.infoNoLog("" + mark + " - 1" + " - 4" + " - 查询无待入库数据--wrk_sts0, 工作号={}", staProtocol.getWorkNo()); |
| | |
| | | rgvThread.setPakRgv(false); |
| | | continue; |
| | | } |
| | | wrkMastSta.setWorkSta(wrkMastSta2 != null ? 1 : 2); |
| | | wrkMastSta.setWorkSta(wrkMastSta2 !=null ? 1 : 2); |
| | | wrkMastSta.setRgvNo((int) rgvProtocol.getRgvNo()); |
| | | Short direction = 2;//双工位最终抵达位置 |
| | | boolean sign = false; |
| | | //若取货为工位2且取货口前一站点有物,给双工位同时下发指令 |
| | | if(wrkMastSta.getWorkSta() == 2 && staProtocol2 != null && staProtocol2.isLoading() && staProtocol2.getWorkNo() > 0){ |
| | | WrkMastSta wrkMastSta3 = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol2.getWorkNo()));//根据站点工作号和小车工作范围检索任务档 |
| | | wrkMastSta3.setWorkSta(1); |
| | | wrkMastSta3.setRgvNo((int) rgvProtocol.getRgvNo()); |
| | | sign = rgvTakeFullAll2(basRgvMap.getRgvNo(), wrkMastSta, wrkMastSta3); |
| | | }else{ |
| | | sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,direction); //命令下发 |
| | | } |
| | | if (sign){ |
| | | // if(!Objects.equals(rgvProtocol.getRgvPosI2(), wrkMastSta.getStaEnd())){ |
| | | // continue; |
| | | // } |
| | | if(Objects.equals(rgvProtocol.getRgvPosI2(), wrkMastSta.getStaEnd()) && wrkMastSta.getWrkSts() == 4){ |
| | | wrkMastSta.setWrkSts(1); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | } |
| | | //若取货为工位2且取货口前一站点有物,给双工位同时下发指令 |
| | | if(wrkMastSta.getWorkSta() == 2 && staProtocol2 != null && staProtocol2.isLoading() && staProtocol2.getWorkNo() > 0 && sign){ |
| | | // WrkMastSta wrkMastSta3 = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol2.getWorkNo()));//根据站点工作号和小车工作范围检索任务档 |
| | | // wrkMastSta3.setWorkSta(1); |
| | | // wrkMastSta3.setRgvNo((int) rgvProtocol.getRgvNo()); |
| | | // sign = rgvTakeFullAll2(basRgvMap.getRgvNo(), wrkMastSta, wrkMastSta3); |
| | | }else{ |
| | | sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,direction,1); //命令下发 |
| | | } |
| | | if (sign){ |
| | | rgvThread.setPakOut(false);//出库不允许 |
| | | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); |
| | | if (!signMap){ |
| | | log.error("货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | // 查询站点详细信息 |
| | | BasDevp staDetl = basDevpService.selectById(rgvStn.getStaNo()); |
| | | if (staDetl == null) { |
| | |
| | | continue; |
| | | } |
| | | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isOutEnable() |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 |
| | | && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) { |
| | | flag = true; |
| | | } |
| | |
| | | continue; |
| | | } |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | // List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//根据站点工作号和小车工作范围检索任务档 |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getWorkNo());//根据站点工作号和小车工作范围检索任务档 |
| | | if( null == wrkMastSta ) { |
| | | News.infoNoLog("" + mark + " - 1" + " - 4" + " - 查询无待入库数据--wrk_sts0, 工作号={}", staProtocol.getWorkNo()); |
| | | continue; |
| | |
| | | continue; |
| | | } |
| | | WrkMastSta wrkMastSta1 = wrkMastStaMapper.selectByWorkSta(1, (int) rgvProtocol.getRgvNo()); |
| | | wrkMastSta.setWorkSta(wrkMastSta1 != null ? 2 : 1);//若1号工位有任务给2号工位 |
| | | wrkMastSta.setWorkSta(wrkMastSta1 !=null ? 2 : 1);//若1号工位有任务给2号工位 |
| | | wrkMastSta.setRgvNo((int) rgvProtocol.getRgvNo()); |
| | | boolean sign = false; |
| | | Short direction = 1;//工位1方向 |
| | | //若取货为工位2且取货口前一站点有物,给双工位同时下发指令 |
| | | if(wrkMastSta.getWorkSta() == 1 && staProtocol2 != null && staProtocol2.isLoading() && staProtocol2.getWorkNo() > 0){ |
| | | WrkMastSta wrkMastSta3 = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol2.getWorkNo()));//根据站点工作号和小车工作范围检索任务档 |
| | | wrkMastSta3.setWorkSta(2); |
| | | wrkMastSta3.setRgvNo((int) rgvProtocol.getRgvNo()); |
| | | sign = rgvTakeFullAll2(basRgvMap.getRgvNo(), wrkMastSta, wrkMastSta3); |
| | | }else{ |
| | | sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,direction); //命令下发 |
| | | } |
| | | if (sign){ |
| | | if(Objects.equals(rgvProtocol.getRgvPosI2(), wrkMastSta.getStaEnd()) && wrkMastSta.getWrkSts() == 4){ |
| | | wrkMastSta.setWrkSts(1); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | } |
| | | if(wrkMastSta.getWorkSta() == 1 && staProtocol2 != null && staProtocol2.isLoading() && staProtocol2.getWorkNo() > 0 && sign){ |
| | | // WrkMastSta wrkMastSta3 = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol2.getWorkNo()));//根据站点工作号和小车工作范围检索任务档 |
| | | // wrkMastSta3.setWorkSta(2); |
| | | // wrkMastSta3.setRgvNo((int) rgvProtocol.getRgvNo()); |
| | | // sign = rgvTakeFullAll2(basRgvMap.getRgvNo(), wrkMastSta, wrkMastSta3); |
| | | }else{ |
| | | sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,direction,2); //命令下发 |
| | | } |
| | | if (sign){ |
| | | rgvThread.setPakIn(false);//入库不允许 |
| | | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); |
| | | if (!signMap){ |
| | | log.error("货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | |
| | | /* |
| | | * 小车取货至工位任务 |
| | | * */ |
| | | public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta,Short direction){ |
| | | public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta,Short direction,Integer pos){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | boolean pakIn1 = true; |
| | | boolean pakIn2 = true; |
| | | rgvCommand.setRgvNo(rgvId); // RGV编号 |
| | | if(wrkMastSta.getWrkSts() == 0){//取货 |
| | | if(wrkMastSta.getWorkSta() == 2){//出库RGV取货 |
| | | if(wrkMastSta.getWrkSts() == 0){//初始后行走 |
| | | rgvCommand.setAckFinish1(false); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(Math.toIntExact(wrkMastSta.getWrkNo())); // 工位1工作号 |
| | | rgvCommand.setTaskStatus1(RgvTaskStatusType.X_MOVE); // 工位1任务模式: 取放货 |
| | | rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd()); //工位1 放货后要去的位置 |
| | | rgvCommand.setTargetPosition1(wrkMastSta.getStaStart()); //工位1目标站点 |
| | | rgvCommand.setCommand(true); //工位1任务确认 |
| | | // } |
| | | wrkMastSta.setWrkSts(4); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功"); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | 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; |
| | | } |
| | | } |
| | | if(wrkMastSta.getWrkSts() == 1){//取货 |
| | | if(pos == 2){//出库RGV取货 |
| | | rgvCommand.setAckFinish2(false); // 工位2任务完成确认位 |
| | | rgvCommand.setTaskNo2(Math.toIntExact(wrkMastSta.getWrkNo())); // 工位2工作号 |
| | | rgvCommand.setTaskStatus2(RgvTaskStatusType.FETCH); // 工位2任务模式: 取放货 |
| | | rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd()); //工位2 放货后要去的位置 |
| | | rgvCommand.setTargetPosition2(wrkMastSta.getStaStart()); //工位2目标站点 |
| | | rgvCommand.setDirection2(direction); |
| | | rgvCommand.setTargetPosition1(wrkMastSta.getStaStart()); //工位2目标站点 |
| | | rgvCommand.setDirection2((short)2); |
| | | // rgvCommand.setWrkTaskMove2(direction); |
| | | rgvCommand.setCommand(true); //工位1任务确认 |
| | | pakIn1 = false; |
| | | }else{ //入库RGV取货 |
| | |
| | | rgvCommand.setTaskStatus1(RgvTaskStatusType.FETCH); // 工位1任务模式: 取放货 |
| | | rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd()); //工位1 放货后要去的位置 |
| | | rgvCommand.setTargetPosition1(wrkMastSta.getStaStart()); //工位1目标站点 |
| | | rgvCommand.setDirection1(direction); |
| | | rgvCommand.setDirection1((short)1); |
| | | // rgvCommand.setWrkTaskMove1(direction); |
| | | rgvCommand.setCommand(true); //工位1任务确认 |
| | | } |
| | | if(!pakIn1){ |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | |
| | | return true; |
| | | } |
| | | }else{ |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { |
| | | 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; |
| | |
| | | } |
| | | } |
| | | if(wrkMastSta.getWrkSts() == 2) {//放货 |
| | | if((wrkMastSta.getWorkSta() == 2)){ //工位2任务放货 |
| | | if((pos == 2)){ //工位2任务放货 |
| | | rgvCommand.setAckFinish2(false); // 工位2任务完成确认位 |
| | | rgvCommand.setTaskNo2(Math.toIntExact(wrkMastSta.getWrkNo())); // 工位2工作号 |
| | | rgvCommand.setTaskStatus2(RgvTaskStatusType.PUT); // 工位2任务模式: 放货 |
| | | rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd()); //工位2 放货后要去的位置 |
| | | rgvCommand.setTargetPosition2(wrkMastSta.getStaEnd()); //工位2目标站点 |
| | | rgvCommand.setTargetPosition1(wrkMastSta.getStaEnd()); //工位2目标站点 |
| | | rgvCommand.setDirection2((short)2); |
| | | rgvCommand.setCommand(true); //工位1任务确认 |
| | | pakIn2 = false; |
| | | }else{ //工位1任务放货 |
| | |
| | | rgvCommand.setTaskStatus1(RgvTaskStatusType.PUT); // 工位1任务模式: 放货 |
| | | rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd()); //工位1 放货后要去的位置 |
| | | rgvCommand.setTargetPosition1(wrkMastSta.getStaEnd()); //工位1目标站点 |
| | | rgvCommand.setDirection1((short)1); |
| | | rgvCommand.setCommand(true); //工位1任务确认 |
| | | } |
| | | if(!pakIn2){ |
| | | if(pakIn2){ |
| | | 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)); |
| | |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 小车复位 |
| | | * */ |
| | | public synchronized boolean rgvComplete2(Integer rgvId,Integer step,Long workNo){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(step, new RgvCommand(),workNo))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={}",rgvId); |
| | | return false; |
| | | } else { |
| | | log.info("RGV命令下发成功,RGV号={}",rgvId); |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("RGV命令下发失败,RGV号={}。异常:"+e,rgvId); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | public synchronized boolean rgvComplete3(Integer rgvId,Integer step,Long workNo,Short moveSta){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(step, new RgvCommand(),workNo,moveSta))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={}",rgvId); |
| | | return false; |
| | | } else { |
| | | log.info("RGV命令下发成功,RGV号={}",rgvId); |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("RGV命令下发失败,RGV号={}。异常:"+e,rgvId); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /* |
| | | * arm任务完成自动组托 |
| | | * */ |
| | | public synchronized void armMissionAccomplished() { |
| | | try{ |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // 遍历拣料入库口 |
| | | for (DevpSlave.Sta armSta : devp.getArmSta()) { |
| | | // 获取条码扫描仪信息 |
| | | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, armSta.getBarcode()); |
| | | if (barcodeThread == null) { |
| | | continue; |
| | | } |
| | | String barcode = barcodeThread.getBarcode(); |
| | | if(!Cools.isEmpty(barcode)) { |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | | continue; |
| | | } |
| | | } else { |
| | | continue; |
| | | } |
| | | |
| | | List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>() |
| | | .eq("arm_no", armSta.getArmNo()) |
| | | .eq("sta_no", armSta.getStaNo()) |
| | | .eq("status", 1)); |
| | | for (BasArm basArm : basArmList) { |
| | | if (basArm.getStatus()!=1){ |
| | | continue; |
| | | } |
| | | try{ |
| | | List<BasArmMast> basArmMastList = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("status", 3) |
| | | ); |
| | | if (basArmMastList.isEmpty()){ |
| | | continue; |
| | | } |
| | | CombParam combParam = new CombParam(basArmMastList); |
| | | combParam.setBarcode(barcode); |
| | | //arm任务完成自动组托 |
| | | ReturnT<String> result = new PostMesDataUtils().postMesData("arm任务完成自动组托",wmsUrl, wmsComb, combParam); |
| | | if (result.getCode()==200){ |
| | | basArmMastService.updateArmMastStatus(basArm.getArmNo(),basArm.getSortingLineSou(),3,4); |
| | | } else { |
| | | log.error("机械臂抓取任务完成:"+JSON.toJSON(basArmMastList)+"===》自动组托失败,等待重试"); |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("arm编号:"+basArm.getArmNo()+"====》机械臂抓取任务完成"+e.getMessage()); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("机械臂抓取任务完成组托失败"+e.getMessage()); |
| | | } |
| | | } |
| | | public synchronized void armMissionAccomplishedScanToCheckIn() { |
| | | try{ |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // 遍历拣料入库口 |
| | | for (DevpSlave.Sta armSta : devp.getArmSta()) { |
| | | |
| | | List<BasArmMast> basArmMastList = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", armSta.getArmNo()) |
| | | .eq("sta_no", armSta.getStaNo()) |
| | | .eq("status", 4) |
| | | ); |
| | | |
| | | if (basArmMastList.isEmpty()){ |
| | | continue; |
| | | } |
| | | // 获取站点信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(armSta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) { |
| | | int workNo = commonService.getWorkNo(6);//待完善 |
| | | // 更新站点信息 且 下发plc命令 |
| | | staProtocol.setWorkNo(workNo); |
| | | staProtocol.setStaNo(armSta.getStaNoEnd().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.error("输送线下发5:"+workNo+","+armSta.getStaNoEnd()); |
| | | if (!result) { |
| | | News.error(""+" - 3"+" - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); |
| | | } |
| | | basArmMastService.updateArmMastStatus(basArmMastList.get(0).getArmNo(),basArmMastList.get(0).getSortingLine(),4,5); |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("组托完成驱动托盘扫码入库失败"+e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * arm任务下发 |
| | | * */ |
| | | public synchronized void armTaskAssignment() { |
| | | try{ |
| | | List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<>()); |
| | | for (BasArm basArm : basArmList) { |
| | | if (basArm.getStatus()!=1){ |
| | | continue; |
| | | } |
| | | try{ |
| | | List<BasArmMast> basArmMastListRuning = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("status", 1) |
| | | ); |
| | | List<BasArmMast> basArmMastListRuning3 = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("status", 3) |
| | | ); |
| | | if (basArmMastListRuning.isEmpty() && basArmMastListRuning3.isEmpty()){ |
| | | List<BasArmMast> basArmMastList = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("status", 0) |
| | | ); |
| | | if (basArmMastList.isEmpty()){ |
| | | continue; |
| | | } |
| | | if (basArmMastList.size()>1){ |
| | | log.error("arm编号:"+basArm.getArmNo()+"====》拆码垛任务异常禁止下发!!!任务待执行数量大于1!!!"); |
| | | continue; |
| | | } |
| | | BasArmMast basArmMast = basArmMastList.get(0); |
| | | List<BasArmMast> basArmMastListOrder = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("sku", basArmMast.getSku()) |
| | | .eq("order_no", basArmMast.getOrderNo()) |
| | | ); |
| | | if (basArmMastListOrder.size()==1){ |
| | | OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getSku()); |
| | | |
| | | if (Cools.isEmpty(orderDetlValueResultUtil)){ |
| | | continue; |
| | | } |
| | | //订单下发 |
| | | try{ |
| | | ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArmMast,orderDetlValueResultUtil); |
| | | // 订单下发(SKU+订单) |
| | | ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取订单(SKU)下发:",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_ADAPTOR, armOrderAssignmentParam); |
| | | if (result.getCode()==200){ |
| | | basArmMast.setStatus(1); |
| | | basArmMastService.updateById(basArmMast); |
| | | } else { |
| | | log.error("机械臂抓取订单(SKU)下发:"+JSON.toJSON(basArmMast)+"===》订单信息下发失败"); |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("机械臂抓取订单(SKU)下发:"+JSON.toJSON(basArmMast)+"===》订单下发订单信息下发失败"); |
| | | continue; |
| | | } |
| | | } |
| | | ArmTaskAssignmentParam armTaskAssignmentParam = new ArmTaskAssignmentParam(basArm.getSortingLineSou()); |
| | | //设置工作空间就绪 |
| | | ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取任务下发:通知工作空间已就绪",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam); |
| | | if (result.getCode()==200){ |
| | | basArmMast.setStatus(1); |
| | | basArmMastService.updateById(basArmMast); |
| | | } else { |
| | | log.error("机械臂抓取任务:"+JSON.toJSON(basArmMast)+"===》任务信息下发失败"); |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("arm编号:"+basArm.getArmNo()+"====》拆码垛任务下发失败"+e.getMessage()); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("arm任务下发失败"+e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | } |