| | |
| | | |
| | | public BasDevpOpt() {} |
| | | |
| | | public BasDevpOpt(Integer wrkNo,Date sendTime,Integer sourceSta,Integer posSta,Date updateTime,String sourceLoading,String barcode,Long frontErr,Long backErr,Long highErr,Long leftErr,Long rightErr,Long barcodeErr) { |
| | | public BasDevpOpt(Integer wrkNo,Date sendTime,Integer sourceSta,Integer posSta,Date updateTime,String sourceLoading,String barcode,Long frontErr,Long backErr,Long highErr,Long leftErr,Long rightErr,Long barcodeErr,String posLoading) { |
| | | this.wrkNo = wrkNo; |
| | | this.sendTime = sendTime; |
| | | this.sourceSta = sourceSta; |
| | |
| | | this.leftErr = leftErr; |
| | | this.rightErr = rightErr; |
| | | this.barcodeErr = barcodeErr; |
| | | this.posLoading =posLoading; |
| | | } |
| | | |
| | | // BasDevpOpt basDevpOpt = new BasDevpOpt( |
| | |
| | | switch (basAgvMast.getIoType()){ |
| | | case 0: |
| | | getAgvTaskAssignmentParam0(basAgvMast); |
| | | taskTyp = "1FQ3"; |
| | | ctnrTyp = "1"; |
| | | return; |
| | | case 1: |
| | | getAgvTaskAssignmentParam1(basAgvMast); |
| | | // taskTyp = "1FQ2"; |
| | | ctnrTyp = "1"; |
| | | return; |
| | | case 2: |
| | | getAgvTaskAssignmentParam2(basAgvMast); |
| | | taskTyp = "1FQ1"; |
| | | ctnrTyp = "1"; |
| | | return; |
| | | case 3: |
| | | getAgvTaskAssignmentParam3(basAgvMast); |
| | | // taskTyp = "1FQ4"; |
| | | ctnrTyp = "1"; |
| | | return; |
| | | default: |
| | | return; |
| | |
| | | @Mapper |
| | | @Repository |
| | | public interface BasDevpOptMapper extends BaseMapper<BasDevpOpt> { |
| | | |
| | | String getErr(Integer wrkNo); |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.service.IService; |
| | | |
| | | public interface BasDevpOptService extends IService<BasDevpOpt> { |
| | | String getErr(Integer wrkNo); |
| | | |
| | | } |
| | |
| | | |
| | | @Service("basDevpOptService") |
| | | public class BasDevpOptServiceImpl extends ServiceImpl<BasDevpOptMapper, BasDevpOpt> implements BasDevpOptService { |
| | | |
| | | @Override |
| | | public String getErr(Integer wrkNo){ |
| | | return baseMapper.getErr(wrkNo); |
| | | } |
| | | } |
| | |
| | | private BasArmMastService basArmMastService; |
| | | @Autowired |
| | | private ApiLogService apiLogService; |
| | | @Autowired |
| | | private BasDevpOptService basDevpOptService; |
| | | |
| | | @Value("${wms.url}") |
| | | private String wmsUrl; |
| | |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg)); |
| | | } |
| | | staProtocol.setWorkNo(wrkNo); |
| | | staProtocol.setErrCode(errMsg); |
| | | News.info("异常判断{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo); |
| | | wrkNo++; |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); |
| | | } |
| | | staProtocol.setWorkNo(wrkNo); |
| | | staProtocol.setErrCode(errMsg); |
| | | News.info("条码判断{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo); |
| | | wrkNo++; |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | |
| | | } |
| | | try { |
| | | LocTypeDto locTypeDto = new LocTypeDto(staProtocol); |
| | | |
| | | SearchLocParam param = new SearchLocParam(); |
| | | param.setBarcode(barcode); |
| | | param.setIoType(1); |
| | |
| | | staProtocol.setWorkNo(wrkNo); |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | switch (jsonObject.getInteger("code")){ |
| | | case 700: staProtocol.setErrCode("未组托");break; |
| | | case 500: staProtocol.setErrCode("工作档/库存条码数据已存在");break; |
| | | } |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | News.info("任务下发判断{}入库回退:{},错误编号{},任务号:{}", inSta.getStaNo(), errMsg,jsonObject.getInteger("code"),wrkNo); |
| | | wrkNo++; |
| | |
| | | WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); |
| | | if (null == wrkMast) { |
| | | if(staProtocol.getWorkNo() > 9999){ //异常退出 |
| | | MessageQueue.offer(SlaveType.Led, 2, new Task(3, "异常退出")); |
| | | String err = basDevpOptService.getErr(staProtocol.getWorkNo()); |
| | | MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, err)); |
| | | } |
| | | continue; |
| | | } |
| | |
| | | // 命令集合 |
| | | boolean reset = true; |
| | | for (Integer staNo : led.getStaArr()) { |
| | | // System.out.println("staArr = " + staNo); |
| | | |
| | | // 获取叉车站点 |
| | | StaProtocol staProtocol = devpThread.getStation().get(staNo); |
| | | if (staProtocol == null) { continue; } |
| | |
| | | } |
| | | if(rgvProtocol.getStatusType1() == RgvStatusType.WORKING){ |
| | | rgvThread.setPaking(true); |
| | | }else if(rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 && rgvProtocol.getStatusType1() == RgvStatusType.IDLE){ |
| | | } |
| | | if(rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 && rgvProtocol.getStatusType1() == RgvStatusType.IDLE){ |
| | | rgvThread.setPaking(true); |
| | | } |
| | | if(rgvProtocol.isLoaded1ing() && rgvProtocol.isLoaded2ing()){ |
| | |
| | | // News.info("{}号站点存在任务执行中,请等待任务执行完毕:{}", outStaAgv.getStaNo(), barcode); |
| | | continue; |
| | | } |
| | | |
| | | if(barcode.equals("0")){ |
| | | continue; |
| | | } |
| | | List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("barcode", barcode)); |
| | | if (!locMastList.isEmpty()) { |
| | | News.info("{}号站点条码信息重复:{}", outStaAgv.getStaNo(), barcode); |
| | |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * agv任务生成 异常送到入库口 |
| | | * */ |
| | | public synchronized void agvTaskCreateException() { |
| | | // 根据输送线plc遍历 |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | Integer outStaAgv = 1041; |
| | | // 获取入库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(outStaAgv); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | // 判断是否满足入库条件 |
| | | if (!staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | |
| | | if (staProtocol.isAutoing() && staProtocol.getWorkNo() > 10000) { |
| | | |
| | | // 判断重复工作档 |
| | | List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("sta_no", 1037)); |
| | | if (!basAgvMastList.isEmpty()) { |
| | | News.info("{}号站点存在任务执行中,等待任务执行完毕!!!", outStaAgv); |
| | | continue; |
| | | } |
| | | // 任务生成区 -------------------------------------------------------------------------- |
| | | |
| | | BasAgvMast basAgvMast = new BasAgvMast(); |
| | | try { |
| | | basAgvMast.setTaskNo(staProtocol.getWorkNo()); |
| | | basAgvMast.setSourceStaNo(1041); |
| | | basAgvMast.setStaNo(1037); |
| | | basAgvMast.setDevpId(devp.getId()); |
| | | basAgvMast.setIoType(3);//输送==》输送线站点 3 |
| | | basAgvMastService.insert(basAgvMast); |
| | | break; |
| | | } catch (Exception e) { |
| | | News.error(JSON.toJSONString(e.getMessage())); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /* |
| | | * agv任务下发:AGV库位==》输送线站点 |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /* |
| | | * agv任务下发:AGV库位==》AGV库位 |
| | | * */ |
| | |
| | | continue; |
| | | } |
| | | //agv任务下发 |
| | | // mainService.agvTaskAssignment0();//0===》1 AGV库位==》输送线站点 0 |
| | | // mainService.agvTaskAssignment1();//0===》1 AGV库位==》AGV库位 1 |
| | | // mainService.agvTaskAssignment2();//0===》1 输送线站点==》AGV库位 2 |
| | | // mainService.agvTaskAssignment3();//0===》1 输送线站点==》输送线站点 3 |
| | | // |
| | | // |
| | | // mainService.agvTaskCreateFull();//任务生成 出库口==》AGV库位 |
| | | // mainService.agvTaskCreateEmpty();//任务生成 出库口==》AGV库位 |
| | | // mainService.agvTaskCreateR();//任务生成 AGV库位==》入库口 |
| | | mainService.agvTaskAssignment0();//0===》1 AGV库位==》输送线站点 0 |
| | | mainService.agvTaskAssignment1();//0===》1 AGV库位==》AGV库位 1 |
| | | mainService.agvTaskAssignment2();//0===》1 输送线站点==》AGV库位 2 |
| | | mainService.agvTaskAssignment3();//0===》1 输送线站点==》输送线站点 3 |
| | | |
| | | |
| | | mainService.agvTaskCreateFull();//任务生成 出库口==》AGV库位 |
| | | mainService.agvTaskCreateEmpty();//任务生成 出库口==》AGV库位 |
| | | mainService.agvTaskCreateR();//任务生成 AGV库位==》入库口 |
| | | mainService.agvTaskCreateException();//任务生成 出库口==》入库口 |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | |
| | | // 站点编号 |
| | | private Integer siteId; |
| | | |
| | | //错误编号 |
| | | private String errCode = null; |
| | | |
| | | // ---------------------------------------------------------------- |
| | | // 工作号 |
| | | private Integer workNo = 0; |
| | |
| | | private Boolean sensorDecL = false; //左移方向减速 |
| | | private Boolean sensorArriveR = false; //右移方向到位 |
| | | private Boolean sensorDecR = false; //右移方向减速 |
| | | |
| | | //agv---------------------------------------------------------- |
| | | private Boolean heartbeatDevp = false; //心跳 |
| | | private Boolean conveyorAllowPick = false;//输送线允许取货 |
| | | private Boolean conveyorAllowPlace = false;//输送线允许放货 |
| | | private Boolean conveyorPickDone = false;//输送线取货完成确认 |
| | | private Boolean conveyorPlaceDone = false;//输送线放货完成确认 |
| | | private Boolean safetyDoorOpen = false;//安全门打开 |
| | | private Boolean externalEmergencyStop = false;//外部急停 |
| | | private Boolean heartbeatAgv = false; |
| | | private Boolean agvRequestPlace = false;//AGV 申请放货 |
| | | private Boolean agvRequestPick = false;//AGV 申请取货 |
| | | private Boolean agvPickDone = false;//AGV 取货完成 |
| | | private Boolean agvPlaceDone = false;//AGV 放货完成 |
| | | private Boolean agvForbidden = false;//AGV 禁止运行 |
| | | |
| | | |
| | | public BasDevpErrorLog toSqlModelError(){ |
| | |
| | | put(1036, 512);put(1103, 476);put(1047, 452);put(2037, 270);put(4001,294); |
| | | |
| | | }}; |
| | | public static final Map<Integer, Integer> siteAgvOffsetMap = new HashMap<Integer, Integer>() {{ |
| | | put(1037, 0);put(1039, 2);put(1041, 4);put(2033, 0);put(2034,2);put(4003,4);put(4006,6); |
| | | |
| | | }}; |
| | | |
| | | // 特殊站点集合 |
| | | private static final Set<Integer> specialSites = new HashSet<>( |
| | |
| | | private static final Set<Integer> specialSites3 = new HashSet<>(//机械臂站点 |
| | | Arrays.asList(1098,1093,1087,1082,1074,1071,1061,1058)); |
| | | |
| | | private static final Set<Integer> specialAgvSites = new HashSet<>(//agv取放货站点 |
| | | Arrays.asList(1037,1039,1041,2033,2034,4003,4006)); |
| | | |
| | | public static final ArrayList<Integer> BarcodeList = new ArrayList<Integer>() {{ |
| | | add(0); add(1); add(2); |
| | |
| | | write((StaProtocol)task.getData()); |
| | | log.error("输送线下发命令:"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo()); |
| | | break; |
| | | // case 3: |
| | | // writeAgv((StaProtocol)task.getData()); |
| | | // break; |
| | | default: |
| | | break; |
| | | } |
| | |
| | | OperateResultExOne<byte[]> result4 = null;//1054-1079 |
| | | OperateResultExOne<byte[]> result5 = null;//1080-1110 |
| | | OperateResultExOne<byte[]> resultErr = null; |
| | | OperateResultExOne<byte[]> resultAlarm = null; |
| | | OperateResultExOne<byte[]> resultPlc = null; |
| | | OperateResultExOne<byte[]> resultAgv = null; |
| | | |
| | | if(staNoSize == 102){ |
| | | result1 = siemensS7Net.Read("DB100.0", (short) (2768));//1001-1028 |
| | |
| | | result4 = siemensS7Net.Read("DB103.0", (short) (2824));//1054-1079 |
| | | result5 = siemensS7Net.Read("DB102.0", (short) (3428));//1080-1110 |
| | | resultErr = siemensS7Net.Read("DB3.0", (short) (536)); |
| | | // resultAlarm = siemensS7Net.Read("DB800.0", (short) (220)); |
| | | // resultAgv = siemensS7Net.Read("DB901.0", (short) (5)); //agv取放货请求 |
| | | // resultPlc = siemensS7Net.Read("DB902.0", (short) (5)); //输送线确认 |
| | | }else{ |
| | | result1 = siemensS7Net.Read("DB200.0", (short) (3000));//2001-2030 |
| | | result2 = siemensS7Net.Read("DB201.0", (short) (720));//2031-2037 |
| | | result3 = siemensS7Net.Read("DB400.0", (short) (600));//4001-4006 |
| | | resultErr = siemensS7Net.Read("DB3.0", (short) (354)); |
| | | // resultAlarm = siemensS7Net.Read("DB800.0", (short) (126)); |
| | | |
| | | // resultAgv = siemensS7Net.Read("DB901.0", (short) (7)); //agv取放货请求 |
| | | // resultPlc = siemensS7Net.Read("DB902.0", (short) (7)); //输送线确认 |
| | | } |
| | | |
| | | |
| | |
| | | staProtocol.setSensorDecL(statusSign[19]); |
| | | staProtocol.setSensorArriveR(statusSign[20]); |
| | | staProtocol.setSensorDecR(statusSign[21]); |
| | | |
| | | // Integer offsetAgv = siteAgvOffsetMap.get(siteId); |
| | | // |
| | | // boolean[] statusPlc = siemensS7Net.getByteTransform().TransBool(resultPlc.Content, offsetAgv, 1); |
| | | // boolean[] statusAgv = siemensS7Net.getByteTransform().TransBool(resultAgv.Content, offsetAgv, 1); |
| | | // |
| | | // if(specialAgvSites.contains(siteId)){ |
| | | // // 心跳 |
| | | // staProtocol.setHeartbeatDevp(statusPlc[0]); |
| | | // staProtocol.setHeartbeatAgv(statusAgv[0]); |
| | | // // 输送线(PLC) |
| | | // staProtocol.setConveyorAllowPick(statusPlc[1]); |
| | | // staProtocol.setConveyorAllowPlace(statusPlc[2]); |
| | | // staProtocol.setConveyorPickDone(statusPlc[3]); |
| | | // staProtocol.setConveyorPlaceDone(statusPlc[4]); |
| | | // staProtocol.setSafetyDoorOpen(statusPlc[5]); |
| | | // staProtocol.setExternalEmergencyStop(statusPlc[6]); |
| | | // // AGV |
| | | // staProtocol.setAgvRequestPlace(statusAgv[1]); |
| | | // staProtocol.setAgvRequestPick(statusAgv[2]); |
| | | // staProtocol.setAgvPickDone(statusAgv[3]); |
| | | // staProtocol.setAgvPlaceDone(statusAgv[4]); |
| | | // staProtocol.setAgvForbidden(statusAgv[5]); |
| | | // } |
| | | |
| | | |
| | | if( (staProtocol.getPassTimeOut() || |
| | |
| | | staProtocol.isHighErr()? 1L:0L, |
| | | staProtocol.isLeftErr()? 1L:0L, |
| | | staProtocol.isRightErr()? 1L:0L, |
| | | staProtocol.isBarcodeErr()? 1L:0L |
| | | |
| | | staProtocol.isBarcodeErr()? 1L:0L, |
| | | staProtocol.getErrCode() |
| | | ); |
| | | bean.insert(basDevpOpt); |
| | | } catch (Exception ignore) { |
| | |
| | | |
| | | </resultMap> |
| | | |
| | | <select id="getErr" resultType="String"> |
| | | SELECT TOP 1 pos_loading |
| | | FROM asr_bas_devp_opt |
| | | WHERE wrk_no = #{wrkNo} |
| | | ORDER BY send_time DESC |
| | | </select> |
| | | |
| | | </mapper> |