| | |
| | | } |
| | | RgvCommand command = new RgvCommand(); |
| | | command.setRgvNo(param.getRgvNo()); // RGV编号 |
| | | command.setAckFinish1(true); // 任务完成确认位 |
| | | // command.setTaskNo1( 0); // 工作号 |
| | | command.setTaskMode1(RgvTaskModeType.NONE); // 任务模式 |
| | | command.setSourceStaNo1((short) 0); // 源站 |
| | | command.setDestinationStaNo1((short) 0); // 目标站 |
| | | command.setAckFinish2(true); // 任务完成确认位 |
| | | command.setTaskNo2(0); // 工作号 |
| | | command.setTaskMode2(RgvTaskModeType.NONE); // 任务模式 |
| | | command.setSourceStaNo2((short) 0); // 源站 |
| | | command.setDestinationStaNo2((short) 0); // 目标站 |
| | | command.setCommand(true); |
| | | command.setWrkTaskPri(0); //执行工位 |
| | | command.setTaskNo(Math.toIntExact(0)); // 工作号 |
| | | command.setTaskStatus((short)0); // 任务模式: 取货 |
| | | command.setTargetPosition(0); // 目标站 |
| | | |
| | | return rgvControl(command)? R.ok(): R.error(); |
| | | return rgvClear(command)? R.ok(): R.error(); |
| | | } |
| | | |
| | | @ManagerAuth(memo = "手动复位") |
| | |
| | | return false; |
| | | } |
| | | |
| | | private boolean rgvClear(RgvCommand command){ |
| | | if (command.getRgvNo() == null) { |
| | | throw new CoolException("请选择RGV"); |
| | | } |
| | | for (RgvSlave rgv : slaveProperties.getRgv()) { |
| | | // 获取RGV信息 |
| | | if (command.getRgvNo().equals(rgv.getId())) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); |
| | | if (rgvThread == null) { |
| | | throw new CoolException("RGV不在线"); |
| | | } |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | throw new CoolException("RGV不在线"); |
| | | } |
| | | if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(3, command))) { |
| | | return true; |
| | | } else { |
| | | throw new CoolException("命令下发失败"); |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | @TableField("rgv_no") |
| | | private Integer rgvNo; |
| | | |
| | | private Integer mk; |
| | | |
| | | public WrkMastSta() {} |
| | | |
| | | public WrkMastSta(Long wrkNo, Integer wrkStart, Integer wrkEnd, Integer staStart, Integer staEnd, Date createTime, Date updateTime, Integer type, Integer wrkSts, Integer lineNumber, Integer wrkType, Date bignTime,Integer workSta, Integer rgvNo) { |
| | | public WrkMastSta(Long wrkNo, Integer wrkStart, Integer wrkEnd, Integer staStart, Integer staEnd, Date createTime, Date updateTime, Integer type, Integer wrkSts, Integer lineNumber, Integer wrkType, Date bignTime,Integer workSta, Integer rgvNo,Integer mk) { |
| | | this.wrkNo = wrkNo; |
| | | this.wrkStart = wrkStart; |
| | | this.wrkEnd = wrkEnd; |
| | |
| | | this.bignTime = bignTime; |
| | | this.workSta = workSta; |
| | | this.rgvNo = rgvNo; |
| | | this.mk = mk; |
| | | } |
| | | |
| | | // WrkMastSta wrkMastSta = new WrkMastSta( |
| | |
| | | for (DevpSlave.Sta inSta : devp.getInSta()) { |
| | | // 获取条码扫描仪信息 |
| | | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); |
| | | BarcodeThread barcodeThreadMat = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcodeMat()); |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); |
| | |
| | | continue; |
| | | } |
| | | |
| | | if (barcodeThreadMat == null) { |
| | | continue; |
| | | } |
| | | |
| | | String barcode = barcodeThread.getBarcode(); |
| | | |
| | | String barcodeMat = barcodeThreadMat.getBarcode(); |
| | | // 尺寸检测异常 |
| | | boolean back = false; |
| | | String errMsg = ""; |
| | |
| | | && staProtocol.isInEnable() |
| | | && !staProtocol.isEmptyMk() |
| | | && staProtocol.isPakMk()) { |
| | | if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) { |
| | | if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | | // News.error(JSON.toJSONString(staProtocol)); |
| | | News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); |
| | | // led 异常显示 |
| | | if (ledThread != null) { |
| | |
| | | // } |
| | | // } |
| | | else { |
| | | News.error(JSON.toJSONString(staProtocol)); |
| | | staProtocol.setWorkNo(wrkNo); |
| | | wrkNo++; |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (slave.getId() == 3) { |
| | | SiemensDevpThread devpThread1 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); |
| | | StaProtocol staProtocol2 = devpThread1.getStation().get(4001); |
| | | if (staProtocol2 == null) { |
| | | News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol2); |
| | | break; |
| | | } else { |
| | | staProtocol2 = staProtocol2.clone(); |
| | | } |
| | | WrkMast wrkMast9999 = wrkMastMapper.selectByWrkNo(9996); |
| | | BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); |
| | | if (staDetl == null) { |
| | | News.error(""+mark+" - 2"+" - 5"+" - 出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo()); |
| | | break; |
| | | // continue; |
| | | } |
| | | if(wrkMast9999 != null && staProtocol2.isAutoing() && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")){ |
| | | // 堆垛机控制过滤 |
| | | if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { |
| | | // continue; |
| | | break; |
| | | } |
| | | // 已经存在吊车执行任务时,则过滤 |
| | | if (wrkMastMapper.selectWorking(slave.getId()) != null) { |
| | | break; |
| | | // return; |
| | | } |
| | | // 1.堆垛机开始移动 |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo((short) 9996); // 工作号 |
| | | // crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 |
| | | crnCommand.setSourcePosX((short) 5); // 源库位排 |
| | | crnCommand.setSourcePosY((short) 1); // 源库位列 |
| | | crnCommand.setSourcePosZ((short) 4); // 源库位层 |
| | | crnCommand.setDestinationPosX((short) 6); // 目标库位排 |
| | | crnCommand.setDestinationPosY((short) 1); // 目标库位列 |
| | | crnCommand.setDestinationPosZ((short) 1); // 目标库位层 |
| | | // crnCommand.setTraySize(sourceSta.getLocType1() == 2); //库位类型 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast9999.getCrnNo(), new Task(2, crnCommand))) { |
| | | News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast9999.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | Date now = new Date(); |
| | | wrkMast9999.setWrkSts(3L); |
| | | wrkMast9999.setCrnStrTime(now); |
| | | wrkMast9999.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast9999) == 0) { |
| | | News.error("" + mark + " - 2" + " - 14" + " - 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast9999.getWrkNo()); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | // if (slave.getId() == 3) { |
| | | // SiemensDevpThread devpThread1 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); |
| | | // StaProtocol staProtocol2 = devpThread1.getStation().get(4001); |
| | | // if (staProtocol2 == null) { |
| | | // News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol2); |
| | | // break; |
| | | // } else { |
| | | // staProtocol2 = staProtocol2.clone(); |
| | | // } |
| | | // WrkMast wrkMast9999 = wrkMastMapper.selectByWrkNo(9996); |
| | | // BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); |
| | | // if (staDetl == null) { |
| | | // News.error(""+mark+" - 2"+" - 5"+" - 出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo()); |
| | | // break; |
| | | //// continue; |
| | | // } |
| | | // if(wrkMast9999 != null && staProtocol2.isAutoing() && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")){ |
| | | // // 堆垛机控制过滤 |
| | | // if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { |
| | | //// continue; |
| | | // break; |
| | | // } |
| | | // // 已经存在吊车执行任务时,则过滤 |
| | | // if (wrkMastMapper.selectWorking(slave.getId()) != null) { |
| | | // break; |
| | | //// return; |
| | | // } |
| | | // // 1.堆垛机开始移动 |
| | | // CrnCommand crnCommand = new CrnCommand(); |
| | | // crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | // crnCommand.setTaskNo((short) 9996); // 工作号 |
| | | //// crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | // crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 |
| | | // crnCommand.setSourcePosX((short) 5); // 源库位排 |
| | | // crnCommand.setSourcePosY((short) 1); // 源库位列 |
| | | // crnCommand.setSourcePosZ((short) 4); // 源库位层 |
| | | // crnCommand.setDestinationPosX((short) 6); // 目标库位排 |
| | | // crnCommand.setDestinationPosY((short) 1); // 目标库位列 |
| | | // crnCommand.setDestinationPosZ((short) 1); // 目标库位层 |
| | | //// crnCommand.setTraySize(sourceSta.getLocType1() == 2); //库位类型 |
| | | // if (!MessageQueue.offer(SlaveType.Crn, wrkMast9999.getCrnNo(), new Task(2, crnCommand))) { |
| | | // News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast9999.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | // } else { |
| | | // // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | // Date now = new Date(); |
| | | // wrkMast9999.setWrkSts(3L); |
| | | // wrkMast9999.setCrnStrTime(now); |
| | | // wrkMast9999.setModiTime(now); |
| | | // if (wrkMastMapper.updateById(wrkMast9999) == 0) { |
| | | // News.error("" + mark + " - 2" + " - 14" + " - 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast9999.getWrkNo()); |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // 查询站点详细信息 |
| | | BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); |
| | | if (staDetl == null) { |
| | |
| | | public synchronized void autoEmptyOut() { |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | List<Integer> list = new ArrayList<>(); |
| | | list.add(1108);list.add(2031); |
| | | list.add(1109);list.add(2031); |
| | | for (Integer site:list){ |
| | | Integer emptyCount = wrkMastMapper.countPakOutEmpty(site); |
| | | StaProtocol staProtocol = null; |
| | | if(emptyCount >= 2 && site == 1108){ |
| | | if(emptyCount >= 2 && site == 1109){ |
| | | continue; |
| | | }else if(emptyCount == 1 && site == 2031){ |
| | | continue; |
| | | } |
| | | //如果站点可出禁用,则不生成空盘出库任务 |
| | | switch (site){ |
| | | case 1108:staProtocol = devpThread.getStation().get(site - 2);break; |
| | | case 1109:staProtocol = devpThread.getStation().get(site - 2);break; |
| | | case 2031:staProtocol = devpThread.getStation().get(site);break; |
| | | } |
| | | if (staProtocol == null) { |
| | |
| | | list.add(1038); |
| | | for (Integer site:list){ |
| | | StaProtocol staProtocol = devpThread.getStation().get(site); |
| | | StaProtocol staProtocol1 = devpThread.getStation().get(1040); |
| | | if (staProtocol == null) { |
| | | return; |
| | | } else { |
| | |
| | | && staProtocol.isLoading() //有物 |
| | | && staProtocol.isInEnable() //可入信号 |
| | | && staProtocol.isPakMk() |
| | | && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) //工作号为0或者工作号是9991~9999(输送机留用) |
| | | && staProtocol1.isFull() //叠满信号 |
| | | && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990 ) //工作号为0或者工作号是9991~9999(输送机留用) |
| | | ) { |
| | | |
| | | System.out.println(staProtocol); |
| | | try { |
| | | Short loctype1 = 1; |
| | | LocTypeDto locTypeDto = new LocTypeDto(loctype1, (short) 1, (short) 1); |
| | |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | Integer workNo = rgvProtocol.getTaskNo2() !=0 ? rgvProtocol.getTaskNo2() : rgvProtocol.getTaskNo1(); //入库放货优先工位2执行 |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNoPut(workNo); |
| | | WrkMast wrkMast = wrkMastMapper.selectByWrkNo(workNo); |
| | | if( null == wrkMastSta ) { |
| | | News.infoNoLog( " - 1" + " - 4" + " - 查询无待入库数据--wrk_sts0, 工作号={}", staProtocol.getWorkNo()); |
| | | continue; |
| | | } |
| | | |
| | | |
| | | boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发 |
| | | if (sign){ |
| | | try{ |
| | | wrkMast.setSheetNo("2"); |
| | | wrkMastSta.setWrkSts(2); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | log.error("更新小车任务成功"); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | |
| | | boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发 |
| | | if (sign){ |
| | | try{ |
| | | wrkMastSta.setWrkSts(3); |
| | | wrkMastSta.setWrkSts(2); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功"); |
| | | }catch (Exception e){ |
| | |
| | | List<WrkMastSta> wrkMastStaList = wrkMastStaService.selectList( |
| | | new EntityWrapper<WrkMastSta>() |
| | | .eq("wrk_sts" ,2) |
| | | .eq("rgv_no", rgvProtocol.getRgvNo()) |
| | | ); |
| | | for(WrkMastSta wrkMastSta : wrkMastStaList){ |
| | | if(!Objects.equals(wrkMastSta.getWrkNo(), taskNo1) && !Objects.equals(wrkMastSta.getWrkNo(), taskNo2)){ |
| | |
| | | } |
| | | } |
| | | } |
| | | if(rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 && !rgvProtocol.isLoaded1ing() && !rgvProtocol.isLoaded2ing()){ |
| | | if(rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 |
| | | && !rgvProtocol.isLoaded1ing() |
| | | && !rgvProtocol.isLoaded2ing()){ |
| | | rgvThread.setPakRgv(true); |
| | | rgvThread.setPakIn(true); |
| | | rgvThread.setPakOut(true); |
| | |
| | | // rgvPreScheduling();//若暂无下发任务预调度提前到取货点 |
| | | // } |
| | | |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO) { |
| | | if (rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO) { |
| | | //小车执行放货任务 |
| | | rgvOutExecute(); |
| | | |
| | |
| | | News.error("" + mark + " - 1" + " - 2" + " - 入库 ===>>Rgv站点在数据库不存在, 站点编号={}", rgvStn.getStaNo()); |
| | | continue; |
| | | } |
| | | WrkMastSta wrkMastSta2 = wrkMastStaMapper.selectByWrkNo(staProtocol2.getWorkNo()); |
| | | if(wrkMastSta2 != null){ |
| | | wrkMastSta2.setMk(1); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta2); |
| | | log.error("锁定相隔站点任务"); |
| | | }catch (Exception e){ |
| | | log.error("锁定相隔站点任务失败"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | if (staProtocol == null) { |
| | | News.infoNoLog("" + mark + " - 1" + " - 1" + " - Rgv入库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol); |
| | |
| | | boolean sign = false; |
| | | sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发 |
| | | if (sign){ |
| | | if(LEFT_POSITION.contains(wrkMastSta.getStaEnd())){ |
| | | rgvThread.setPakToCrn(false); //锁定小车只能接接驳任务 |
| | | } |
| | | |
| | | rgvThread.setPakOut(false);//出库不允许 |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | |
| | | News.error("" + mark + " - 1" + " - 2" + " - 入库 ===>>Rgv站点在数据库不存在, 站点编号={}", rgvStn.getStaNo()); |
| | | continue; |
| | | } |
| | | WrkMastSta wrkMastSta2 = wrkMastStaMapper.selectByWrkNo(staProtocol2.getWorkNo()); |
| | | if(wrkMastSta2 != null){ |
| | | wrkMastSta2.setMk(1); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta2); |
| | | log.error("锁定相隔站点任务"); |
| | | }catch (Exception e){ |
| | | log.error("锁定相隔站点任务失败"); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | if (staProtocol == null) { |
| | | News.infoNoLog("" + mark + " - 1" + " - 1" + " - Rgv出库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol); |
| | |
| | | boolean sign = false; |
| | | sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发 |
| | | if (sign){ |
| | | if(LEFT_POSITION.contains(wrkMastSta.getStaEnd())){ |
| | | rgvThread.setPakToCrn(false); //锁定小车只能接接驳任务 |
| | | } |
| | | rgvThread.setPakIn(false);//入库不允许 |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | |
| | | continue; |
| | | } |
| | | String barcode = barcodeThread.getBarcode(); |
| | | barcode="999997"; |
| | | if(!Cools.isEmpty(barcode)) { |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | | continue; |
| | |
| | | |
| | | List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>() |
| | | .eq("arm_no", armSta.getArmNo()) |
| | | .eq("sta_no", armSta.getStaNo()) |
| | | .eq("sta_no_sou", armSta.getStaNo()) |
| | | .eq("status", 1)); |
| | | for (BasArm basArm : basArmList) { |
| | | if (basArm.getStatus()!=1){ |
| | |
| | | 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()); |
| | | } |
| | | // 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){ |
| | |
| | | continue; |
| | | } |
| | | try{ |
| | | List<BasArmMast> basArmMastListError = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("status", 9) |
| | | ); |
| | | if (!basArmMastListError.isEmpty()){ |
| | | log.error(basArm.getArmNo()+"号机械臂存在异常数据需要维护!!!"); |
| | | continue; |
| | | } |
| | | List<BasArmMast> basArmMastListRuning = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | |
| | | // generator.table="sys_host"; |
| | | // sqlserver |
| | | generator.sqlOsType = SqlOsType.SQL_SERVER; |
| | | generator.url="192.168.4.191:50948;databasename=jshdasrs"; |
| | | generator.url="localhost:1433;databasename=jshdasrs"; |
| | | generator.username="sa"; |
| | | generator.password="sa@123"; |
| | | generator.table="asr_bas_arm"; |
| | | generator.table="asr_bas_devp_opt"; |
| | | generator.packagePath="com.zy.asrs"; |
| | | generator.build(); |
| | | } |
| | |
| | | |
| | | if (i>10){ |
| | | //空托盘自动出库 |
| | | mainService.autoEmptyOut(); |
| | | // mainService.autoEmptyOut(); |
| | | //空托盘自动入库 |
| | | mainService.autoEmptyIn(); |
| | | i=0; |
| | |
| | | * 工位1任务号 |
| | | */ |
| | | public Integer taskNo1 = 0; |
| | | /** |
| | | * 工位1目标站 |
| | | */ |
| | | public Integer staNo1 = 0; |
| | | |
| | | /** |
| | | * RGV工位1当前状态 |
| | |
| | | public Short walkPos; |
| | | |
| | | /** |
| | | * 急停 |
| | | * 急停触发 |
| | | */ |
| | | public Boolean err1; |
| | | |
| | | /** |
| | | * 有物无资料 |
| | | * |
| | | */ |
| | | public Boolean err2; |
| | | |
| | |
| | | */ |
| | | public Boolean err7; |
| | | |
| | | public Boolean err8; |
| | | public Boolean err9; |
| | | public Boolean err10; |
| | | public Boolean err11; |
| | | public Boolean err12; |
| | | |
| | | ////////////////////// 工位2定义 ////////////////////////////////////////////////// |
| | | /** |
| | | * 工位2任务号 |
| | | */ |
| | | public Integer taskNo2 = 0; |
| | | /** |
| | | * 工位1目标站 |
| | | */ |
| | | public Integer staNo2 = 0; |
| | | |
| | | /** |
| | | * RGV工位2当前状态 |
| | |
| | | // 目标站 |
| | | private Short staNo; |
| | | |
| | | private String barcode; |
| | | |
| | | // ---------------------------------------------------------------- |
| | | // 自动 |
| | | private boolean autoing; |
| | |
| | | // 低 |
| | | private boolean low; |
| | | |
| | | // 叠盘叠满 |
| | | private boolean full; |
| | | |
| | | // 锁定标记 |
| | | private boolean pakMk = true; |
| | | |
| | |
| | | |
| | | //lfd入库印记 当stamp>=2时才入库 |
| | | private Integer stamp = 0; |
| | | |
| | | private boolean err = false; |
| | | |
| | | |
| | | |
| | | // 外形检测 ------------------------------------------------------------------------ |
| | | |
| | |
| | | BasDevp basDevp = new BasDevp(); |
| | | basDevp.setDevNo(siteId); |
| | | basDevp.setWrkNo(workNo.intValue()); |
| | | basDevp.setBarcode(barcode); |
| | | basDevp.setAutoing(autoing?"Y":"N"); |
| | | basDevp.setLoading(loading?"Y":"N"); |
| | | basDevp.setInEnable(inEnable?"Y":"N"); |
| | |
| | | import HslCommunication.Profinet.Siemens.SiemensPLCS; |
| | | import HslCommunication.Profinet.Siemens.SiemensS7Net; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.common.SpringUtils; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.BasDevp; |
| | | import com.zy.asrs.entity.BasRgv; |
| | | import com.zy.asrs.entity.BasRgvMap; |
| | | import com.zy.asrs.entity.BasRgvOpt; |
| | | import com.zy.asrs.service.BasDevpService; |
| | | import com.zy.asrs.service.BasRgvMapService; |
| | | import com.zy.asrs.service.BasRgvOptService; |
| | | import com.zy.asrs.service.BasRgvService; |
| | | import com.zy.common.utils.News; |
| | |
| | | import com.zy.core.model.command.CrnCommand; |
| | | import com.zy.core.model.command.RgvCommand; |
| | | import com.zy.core.model.protocol.RgvProtocol; |
| | | import com.zy.core.model.protocol.StaProtocol; |
| | | import lombok.Data; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.text.MessageFormat; |
| | | import java.util.Date; |
| | | import java.util.*; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | |
| | | /** |
| | | * RGV线程 |
| | |
| | | private SiemensS7Net siemensNet; |
| | | private RgvSlave slave; |
| | | private RgvProtocol rgvProtocol; |
| | | private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); |
| | | |
| | | /** |
| | | * 工位1复位信号 |
| | | */ |
| | |
| | | command.setTaskStatus(RgvTaskStatusType.NONE); // 任务模式 |
| | | command.setTargetPosition(0); // 源站 |
| | | command.setWrkTaskPri(0); // 目标站 |
| | | write(command); |
| | | command.setCommand(false); |
| | | write2(command); |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | } |
| | | |
| | | } |
| | | } |
| | | private static final Set<Integer> specialSites = new HashSet<>( |
| | | Arrays.asList(1004,1014,1018,1028,1035)); |
| | | public static final Map<Integer, Integer> StaPosition = new HashMap<Integer, Integer>() {{ |
| | | put(1004, 1001);put(1014, 1011);put(1018, 1015);put(1028, 1025);put(1035, 1032); |
| | | |
| | | }}; |
| | | public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{ |
| | | add(1);add(2); |
| | | |
| | | }}; |
| | | |
| | | public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{ |
| | | add(3);add(4); |
| | | |
| | | }}; |
| | | /** |
| | | * 初始化站点状态 |
| | | */ |
| | | private void initSite() { |
| | | ArrayList<Integer> staNos = getStaNo(); |
| | | |
| | | // 站点编号 |
| | | for (Integer siteId : staNos) { |
| | | StaProtocol staProtocol = station.get(siteId); |
| | | if (null == staProtocol) { |
| | | staProtocol = new StaProtocol(); |
| | | staProtocol.setSiteId(siteId); |
| | | station.put(siteId, staProtocol); |
| | | } |
| | | staProtocol.setWorkNo(0); // ID |
| | | staProtocol.setAutoing(false); // 自动 |
| | | staProtocol.setLoading(false); // 有物 |
| | | staProtocol.setInEnable(false); // 可入 |
| | | staProtocol.setOutEnable(false); // 可出 |
| | | staProtocol.setEmptyMk(false); // 空板信号 |
| | | staProtocol.setStaNo((short) 0); // 目标站 |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | // rgvProtocol.setxDistance((short) 0); |
| | | // rgvProtocol.setxDuration((short) 0); |
| | | } |
| | | |
| | | private ArrayList<Integer> getStaNo() { |
| | | switch (slave.getId()) { |
| | | case 1: |
| | | return staNos1; |
| | | case 2: |
| | | return staNos2; |
| | | default: |
| | | throw new CoolException("服务器异常"); |
| | | } |
| | | } |
| | | @Override |
| | | public boolean connect() { |
| | | boolean result = false; |
| | |
| | | */ |
| | | private void readStatus(){ |
| | | try { |
| | | OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 27); |
| | | ArrayList<Integer> staNos = getStaNo(); |
| | | |
| | | OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 38); |
| | | if (result.IsSuccess) { |
| | | if (null == rgvProtocol) { |
| | | rgvProtocol = new RgvProtocol(); |
| | |
| | | rgvProtocol.setStatus1(siemensNet.getByteTransform().TransInt16(result.Content, 12)); |
| | | rgvProtocol.setTaskNo1(siemensNet.getByteTransform().TransInt32(result.Content, 16)); |
| | | rgvProtocol.setTaskNo2(siemensNet.getByteTransform().TransInt32(result.Content, 20)); |
| | | boolean[] status1 = siemensNet.getByteTransform().TransBool(result.Content, 24, 2); |
| | | rgvProtocol.setStaNo1(siemensNet.getByteTransform().TransInt32(result.Content, 28)); |
| | | rgvProtocol.setStaNo2(siemensNet.getByteTransform().TransInt32(result.Content, 32)); |
| | | boolean[] status1 = siemensNet.getByteTransform().TransBool(result.Content, 24, 1); |
| | | rgvProtocol.setLoaded1(status1[0]); |
| | | rgvProtocol.setLoaded2(status1[1]); |
| | | boolean[] status2 = siemensNet.getByteTransform().TransBool(result.Content, 26, 1); |
| | | boolean[] status2 = siemensNet.getByteTransform().TransBool(result.Content, 36,1); |
| | | rgvProtocol.setErr1(status2[0]); |
| | | rgvProtocol.setErr2(status2[1]); |
| | | rgvProtocol.setErr3(status2[2]); |
| | |
| | | rgvProtocol.setErr5(status2[4]); |
| | | rgvProtocol.setErr6(status2[5]); |
| | | rgvProtocol.setErr7(status2[6]); |
| | | OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId())); |
| | | rgvProtocol.setErr8(status2[7]); |
| | | boolean[] status3 = siemensNet.getByteTransform().TransBool(result.Content, 37, 1); |
| | | rgvProtocol.setErr9(status3[0]); |
| | | rgvProtocol.setErr10(status3[1]); |
| | | rgvProtocol.setErr11(status3[2]); |
| | | rgvProtocol.setErr12(status3[3]); |
| | | BasRgvMapService basRgvMapService = SpringUtils.getBean(BasRgvMapService.class); |
| | | |
| | | |
| | | OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId())); |
| | | try { |
| | | // 根据实时信息更新数据库 |
| | | BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class); |
| | |
| | | } |
| | | byte[] writeBytes = new byte[14]; |
| | | command.setRgvNo(slave.getId()); |
| | | if(specialSites.contains(command.getTargetPosition())){ |
| | | command.setTargetPosition(StaPosition.get(command.getTargetPosition())); |
| | | } |
| | | writeInt32(writeBytes, 0, command.getWrkTaskPri()); |
| | | writeInt32(writeBytes, 4, command.getTargetPosition()); |
| | | writeInt16(writeBytes, 8, (short)command.getTaskStatus()); |
| | |
| | | int writeCount2 = 0; |
| | | do { |
| | | writeCount2++; |
| | | boolean commandFinish = true; |
| | | Short commandFinish = 1; |
| | | result = siemensNet.Write("DB100.34.0", commandFinish); |
| | | if(result.IsSuccess){ |
| | | //RGV任务写入后,回读一次,看是否成功 |
| | | Thread.sleep(200); |
| | | OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.34", (short) 2); |
| | | if (resultRead.IsSuccess) { |
| | | commandFinish=siemensNet.getByteTransform().TransBool(resultRead.Content, 0); |
| | | if (!commandFinish){ |
| | | commandFinish=siemensNet.getByteTransform().TransInt16(resultRead.Content, 0); |
| | | if (commandFinish !=1){ |
| | | News.error("RGV任务确认位"+commandFinish+"写入数据与回读数据不一致!"+"循环执行次数:"+writeCount2+"次"); |
| | | }else{ |
| | | //任务命令写入成功 |
| | | News.info("RGV任务确认位"+commandFinish+"回读成功!"+"循环执行次数:"+writeCount2+"次"); |
| | | break; |
| | | } |
| | | }else { |
| | | News.error("RGV任务确认位"+commandFinish+"回读失败!"+"循环执行次数:"+writeCount2+"次"); |
| | | } |
| | | } else { |
| | | News.error("RGV任务确认位"+commandFinish+"写入失败!"+"循环执行次数:"+writeCount2+"次"); |
| | | } |
| | | }while (writeCount2<5); |
| | | } |
| | | try { |
| | | // 日志记录 |
| | | BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); |
| | | BasRgvOpt basRgvOpt = new BasRgvOpt( |
| | | command.getTaskNo(), |
| | | command.getRgvNo(), |
| | | new Date(), |
| | | command.getTaskStatus().toString(), |
| | | command.getTargetPosition(), |
| | | command.getWrkTaskPri(), |
| | | new Date() |
| | | ); |
| | | bean.insert(basRgvOpt); |
| | | } catch (Exception ignore) { |
| | | log.error(ignore.getMessage()); |
| | | } |
| | | |
| | | if (result != null && result.IsSuccess) { |
| | | Thread.sleep(200); |
| | | this.readStatus(); |
| | | log.info("RGV 工位命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); |
| | | OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 工位命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); |
| | | return true; |
| | | } else { |
| | | OutputQueue.RGV.offer(MessageFormat.format("【{0}】写入RGV plc工位数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); |
| | | log.error("写入RGV plc工位数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | return false; |
| | | } |
| | | } |
| | | private boolean write2(RgvCommand command) throws InterruptedException { |
| | | if (null == command) { |
| | | log.error("RGV写入命令为空"); |
| | | return false; |
| | | } |
| | | OperateResultExOne<byte[]> result1 = siemensNet.Read("DB100.0", (short) 39); |
| | | if (result1.IsSuccess){ |
| | | RgvCommand one = new RgvCommand(); |
| | | one.setWrkTaskPri(siemensNet.getByteTransform().TransInt32(result1.Content, 0));//执行工位 |
| | | one.setTargetPosition(siemensNet.getByteTransform().TransInt32(result1.Content, 4));//行走目标站 |
| | | one.setTaskStatus(siemensNet.getByteTransform().TransInt16(result1.Content, 8));//小车状态 |
| | | one.setTaskNo(siemensNet.getByteTransform().TransInt32(result1.Content, 10));//下发工作号 |
| | | News.info("RGV命令下发前读取状态[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one)); |
| | | } |
| | | byte[] writeBytes = new byte[36]; |
| | | command.setRgvNo(slave.getId()); |
| | | if(specialSites.contains(command.getTargetPosition())){ |
| | | command.setTargetPosition(StaPosition.get(command.getTargetPosition())); |
| | | } |
| | | writeInt32(writeBytes, 0, command.getWrkTaskPri()); |
| | | writeInt32(writeBytes, 4, command.getTargetPosition()); |
| | | writeInt16(writeBytes, 8, (short)command.getTaskStatus()); |
| | | writeInt32(writeBytes, 10, command.getTaskNo()); |
| | | writeBool(writeBytes, 34, 0, command.getCommand()); |
| | | OperateResult result = siemensNet.Write("DB100.0", writeBytes); |
| | | |
| | | if (!result.IsSuccess){ |
| | | News.error("写入RGVplc数据失败,重新添加任务到队列 ===> [id:{}],{}",slave.getId(),JSON.toJSON(command)); |
| | | MessageQueue.offer(SlaveType.Rgv,slave.getId(),new Task(2,command)); |
| | | Thread.sleep(100); |
| | | readStatus(); |
| | | return false; |
| | | } |
| | | |
| | | //RGV任务写入后,回读一次,看是否成功 |
| | | Thread.sleep(400); |
| | | try { |
| | | OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 14); |
| | | if (resultRead.IsSuccess){ |
| | | RgvCommand one = new RgvCommand(); |
| | | one.setWrkTaskPri(siemensNet.getByteTransform().TransInt32(resultRead.Content, 0));//执行工位 |
| | | one.setTargetPosition(siemensNet.getByteTransform().TransInt32(resultRead.Content, 4));//行走目标站 |
| | | one.setTaskStatus(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));//小车状态 |
| | | one.setTaskNo(siemensNet.getByteTransform().TransInt32(resultRead.Content, 10));//下发工作号 |
| | | if ( |
| | | !command.getTaskNo().equals(one.getTaskNo()) || |
| | | !command.getTaskStatus().equals(one.getTaskStatus()) || |
| | | !command.getWrkTaskPri().equals(one.getWrkTaskPri()) || |
| | | !command.getTargetPosition().equals(one.getTargetPosition()) |
| | | ) { |
| | | try{ |
| | | News.error("RGV命令地址写入后回读失败[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one)); |
| | | }catch (Exception e){ |
| | | try{ |
| | | News.error("日志打印失败:===>>参数one报错 [id:{}],{}", slave.getId(), JSON.toJSON(command),JSON.toJSON(resultRead)); |
| | | }catch (Exception e1){ |
| | | News.error("日志打印失败:===>> [id:{}],{}", slave.getId(), JSON.toJSON(command)); |
| | | } |
| | | } |
| | | News.error("Rgv命令回读失败后,重新添加任务到队列 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command)); |
| | | MessageQueue.offer(SlaveType.Rgv, slave.getId(), new Task(2, command)); |
| | | Thread.sleep(100); |
| | | readStatus(); |
| | | return false; |
| | | }else { |
| | | News.info("RGV命令地址写入后回读成功[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one)); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | News.error("RGV命令地址写入后回读出错"); |
| | | } |
| | | |
| | | if (result.IsSuccess) { //任务下发确认 |
| | | Thread.sleep(300); |
| | | //任务下发次数 |
| | | int writeCount2 = 0; |
| | | do { |
| | | writeCount2++; |
| | | Short commandFinish = 1; |
| | | result = siemensNet.Write("DB100.34.0", commandFinish); |
| | | if(result.IsSuccess){ |
| | | //RGV任务写入后,回读一次,看是否成功 |
| | | Thread.sleep(200); |
| | | OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.34", (short) 2); |
| | | if (resultRead.IsSuccess) { |
| | | commandFinish=siemensNet.getByteTransform().TransInt16(resultRead.Content, 0); |
| | | if (commandFinish !=1){ |
| | | News.error("RGV任务确认位"+commandFinish+"写入数据与回读数据不一致!"+"循环执行次数:"+writeCount2+"次"); |
| | | }else{ |
| | | //任务命令写入成功 |
| | |
| | | } |
| | | } |
| | | |
| | | public Integer getRgvPosI(Integer pos) { |
| | | if (pos == null) return 0; |
| | | |
| | | // key: 站点号 value: 基准物理位置 |
| | | Map<Integer, Integer> posMap = new HashMap<>(); |
| | | posMap.put(1004, 6534); |
| | | posMap.put(1007, 33634); |
| | | posMap.put(1010, 75174); |
| | | posMap.put(1014, 102124); |
| | | posMap.put(1018, 138224); |
| | | posMap.put(1021, 178034); |
| | | posMap.put(1024, 219684); |
| | | posMap.put(1028, 246724); |
| | | posMap.put(1031, 288194); |
| | | posMap.put(1035, 315204); |
| | | int tolerance = 50; // 允许误差范围 |
| | | |
| | | for (Map.Entry<Integer, Integer> entry : posMap.entrySet()) { |
| | | int site = entry.getKey(); |
| | | int basePos = entry.getValue(); |
| | | if (Math.abs(pos - basePos) <= tolerance) { |
| | | return site; |
| | | } |
| | | } |
| | | |
| | | return 0; // 没匹配到站点 |
| | | } |
| | | |
| | | @Override |
| | | public void close() { |
| | |
| | | add(1029);add(1031); |
| | | add(1032);add(1033);add(1035); |
| | | add(1036);add(1037);add(1038); |
| | | add(1039);add(1041); |
| | | add(1039);add(1040);add(1041); |
| | | add(1042);add(1043);add(1044);add(1045);add(1046);add(1047);add(1048);add(1050);add(1051);add(1052);add(1053);add(1054);add(1055);add(1056);add(1057); |
| | | add(1058);add(1059);add(1060);add(1061);add(1062);add(1063);add(1064);add(1065);add(1066);add(1067);add(1068);add(1069);add(1070);add(1071);add(1072); |
| | | add(1073);add(1074);add(1075);add(1076);add(1077);add(1078);add(1079);add(1080);add(1081);add(1082);add(1083);add(1084);add(1085);add(1086);add(1087); |
| | |
| | | // 特殊站点集合 |
| | | private static final Set<Integer> specialSites2 = new HashSet<>( |
| | | Arrays.asList(1051,1055,1057,1065,1067,1069,1077,1081,1083,1086,1089,1092,1095,1097,1100)); |
| | | |
| | | private static final Set<Integer> specialSites3 = new HashSet<>(//机械臂站点 |
| | | Arrays.asList(1098,1093,1087,1082,1074,1071,1062,1059)); |
| | | |
| | | |
| | | public static final ArrayList<Integer> BarcodeList = new ArrayList<Integer>() {{ |
| | |
| | | ArrayList<Integer> staNos = getStaNo(); |
| | | int staNoSize = staNos.size(); |
| | | OperateResultExOne<byte[]> result = null; |
| | | OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100.0", (short) (2764));//1001-1028 |
| | | OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.0", (short) (1264));//1029-1037 |
| | | OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB104.0", (short) (1264));//1042-1053 |
| | | OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB103.0", (short) (2820));//1054-1079 |
| | | OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB102.0", (short) (3424));//1080-1110 |
| | | OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100.0", (short) (2768));//1001-1028 |
| | | OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.0", (short) (1268));//1029-1037 |
| | | OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB104.0", (short) (1268));//1042-1053 |
| | | OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB103.0", (short) (2824));//1054-1079 |
| | | OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB102.0", (short) (3428));//1080-1110 |
| | | |
| | | |
| | | |
| | |
| | | } |
| | | Integer offset2 = getOffsetBySiteId(siteId); |
| | | Integer offset3 = getOffsetBySiteId2(siteId); |
| | | staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, offset + offset2)); // 工作号 |
| | | staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, offset + offset2 + 12)); // 目标站 |
| | | if(specialSites2.contains(siteId)){ |
| | | staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, offset + offset2 + 48)); // 目标站 |
| | | if(siteId == 1040){ |
| | | boolean[] full = siemensS7Net.getByteTransform().TransBool(result.Content, offset, 2); |
| | | staProtocol.setFull(full[0]); |
| | | } |
| | | if(siteId ==1041){ |
| | | News.info("1"); |
| | | staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, offset + offset2)); // 工作号 |
| | | staProtocol.setStaNo((short)siemensS7Net.getByteTransform().TransInt32(result.Content, offset + offset2 + 12)); // 目标站 |
| | | staProtocol.setBarcode(String.valueOf(siemensS7Net.getByteTransform().TransInt32(result.Content, offset + offset2 + 16))); //条码 |
| | | |
| | | if(specialSites2.contains(siteId)){ |
| | | staProtocol.setStaNo((short)siemensS7Net.getByteTransform().TransInt32(result.Content, offset + offset2 + 48)); // 目标站 |
| | | staProtocol.setBarcode(String.valueOf(siemensS7Net.getByteTransform().TransInt32(result.Content, offset + offset2 + 52))); //条码 |
| | | |
| | | } |
| | | |
| | | boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, offset + offset3, 2); |
| | |
| | | |
| | | staProtocol.setLoading(!status1[0]); // 有物 |
| | | |
| | | staProtocol.setInEnable(true); // 可入 |
| | | staProtocol.setOutEnable(true);// 可出 |
| | | staProtocol.setInEnable(status1[2]); // 可入 |
| | | staProtocol.setOutEnable(status1[2]);// 可出 |
| | | staProtocol.setErr(status1[6]); |
| | | // staProtocol.setInEnable(status1[1]); // 可入 |
| | | // staProtocol.setOutEnable(status1[3]);// 可出 |
| | | // staProtocol.setEmptyMk(status[4]); // 空板信号 |
| | |
| | | } |
| | | } |
| | | } |
| | | BasRgvMapService basRgvMapService = SpringUtils.getBean(BasRgvMapService.class); |
| | | //条码扫描器 |
| | | ArrayList<Integer> barcodeList = BarcodeList; |
| | | OperateResultExOne<byte[]> reasultBarcode1 = siemensS7Net.Read("DB101.780", (short) 8);//1036 |
| | | OperateResultExOne<byte[]> reasultBarcode2 = siemensS7Net.Read("DB104.548", (short) 8);//1047 |
| | | OperateResultExOne<byte[]> reasultBarcode3 = siemensS7Net.Read("DB102.2780", (short) 8);//1103 |
| | | // OperateResultExOne<byte[]> reasultBarcode4 = siemensS7Net.Read("DB104.180", (short) 184); |
| | | if(reasultBarcode1.IsSuccess){ |
| | | Integer barcodeId = barcodeList.get(0); |
| | | String barcode = String.valueOf(siemensS7Net.getByteTransform().TransInt32(reasultBarcode1.Content, 0)); |
| | | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId + 1); |
| | | if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { |
| | | barcodeThread.setBarcode(barcode); |
| | | } |
| | | // News.error(JSON.toJSONString(barcode+"线程"+barcodeId)); |
| | | |
| | | } |
| | | if(reasultBarcode2.IsSuccess){ |
| | | Integer barcodeId = barcodeList.get(1); |
| | | String barcode = String.valueOf(siemensS7Net.getByteTransform().TransInt32(reasultBarcode2.Content, 0)); |
| | | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId + 1); |
| | | if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { |
| | | barcodeThread.setBarcode(barcode); |
| | | } |
| | | // News.error(JSON.toJSONString(barcode+"线程"+barcodeId)); |
| | | |
| | | } |
| | | if(reasultBarcode3.IsSuccess){ |
| | | Integer barcodeId = barcodeList.get(2); |
| | | String barcode = String.valueOf(siemensS7Net.getByteTransform().TransInt32(reasultBarcode3.Content, 0)); |
| | | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId + 1); |
| | | if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { |
| | | barcodeThread.setBarcode(barcode); |
| | | } |
| | | // News.error(JSON.toJSONString(barcode+"线程"+barcodeId)); |
| | | |
| | | } |
| | | |
| | | |
| | | // BasRgvMapService basRgvMapService = SpringUtils.getBean(BasRgvMapService.class); |
| | | // RGV小车1 |
| | | // Thread.sleep(100); |
| | | // OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB101.",(short)27); |
| | | // if (result3.IsSuccess) { |
| | | // BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo((int) siemensS7Net.getByteTransform().TransInt16(result3.Content, 0)); |
| | | // OperateResultExOne<byte[]> resultCar1 = siemensS7Net.Read("DB101.0",(short)36); |
| | | // if (resultCar1.IsSuccess) { |
| | | // BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo((int) siemensS7Net.getByteTransform().TransInt16(resultCar1.Content, 0) + 1); |
| | | // if (!Cools.isEmpty(basRgvMap)){ |
| | | // Integer siteId1 = 1; |
| | | // Integer siteId2 = 2; |
| | | // StaProtocol staProtocol1 = station.get(siteId1); |
| | | // StaProtocol staProtocol2 = station.get(siteId1); |
| | | // StaProtocol staProtocol2 = station.get(siteId2); |
| | | // |
| | | // if (null == staProtocol1) { |
| | | // staProtocol1 = new StaProtocol(); |
| | |
| | | // station.put(siteId2, staProtocol2); |
| | | // |
| | | // } |
| | | // String pos = String.valueOf(getRgvPosI(siemensS7Net.getByteTransform().TransInt32(result.Content, 4))); |
| | | // staProtocol1.setAutoing(siemensS7Net.getByteTransform().TransInt16(result.Content, 2) == 2); |
| | | // staProtocol2.setAutoing(siemensS7Net.getByteTransform().TransInt16(result.Content, 2) == 2); |
| | | // String pos = String.valueOf(getRgvPosI(siemensS7Net.getByteTransform().TransInt32(resultCar1.Content, 4))); |
| | | // staProtocol1.setAutoing(siemensS7Net.getByteTransform().TransInt16(result.Content, 2) == 0); |
| | | // staProtocol2.setAutoing(siemensS7Net.getByteTransform().TransInt16(result.Content, 2) == 0); |
| | | // staProtocol1.setNearbySta(pos); |
| | | // staProtocol1.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, 8)); |
| | | // staProtocol2.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, 8)); |
| | | // staProtocol1.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 16)); |
| | | // staProtocol2.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 20)); |
| | | // boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result.Content, 24, 2); |
| | | // staProtocol1.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(resultCar1.Content, 28)); |
| | | // staProtocol2.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(resultCar1.Content, 32)); |
| | | // staProtocol1.setWorkNo(siemensS7Net.getByteTransform().TransInt32(resultCar1.Content, 16)); |
| | | // staProtocol2.setWorkNo(siemensS7Net.getByteTransform().TransInt32(resultCar1.Content, 20)); |
| | | // boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultCar1.Content, 24, 1); |
| | | // staProtocol1.setLoading(status1[0]); |
| | | // staProtocol2.setLoading(status1[1]); |
| | | // // staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result3.Content, 8))); |
| | |
| | | // } |
| | | // } |
| | | |
| | | // //条码扫描器 |
| | | // ArrayList<Integer> barcodeList = BarcodeList; |
| | | // OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.840", (short) (barcodeList.size() * 8)); |
| | | // if (result2.IsSuccess) { |
| | | // for (int i = 0; i < barcodeList.size(); i++) { |
| | | // Integer barcodeId = barcodeList.get(i); |
| | | // String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8"); |
| | | // BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId + 1); |
| | | // if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { |
| | | // barcodeThread.setBarcode(barcode); |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | |
| | | //条码扫描器 |
| | | // ArrayList<Integer> barcodeListMat = BarcodeListMat; |
| | | // OperateResultExOne<byte[]> result2Mat = siemensS7Net.Read("DB103.0", (short) (barcodeListMat.size() * 30)); |
| | |
| | | write1 = siemensS7Net.Write("DB104." + (offset + offset2 + 12), staProtocol.getStaNo().intValue()); // 目标站 |
| | | } |
| | | }else if(siteId < 1080){ |
| | | write = siemensS7Net.Write("DB104." + (offset + offset2), staProtocol.getWorkNo()); // 工作号 |
| | | write = siemensS7Net.Write("DB103." + (offset + offset2), staProtocol.getWorkNo()); // 工作号 |
| | | Thread.sleep(200); |
| | | if(specialSites2.contains(siteId)){ |
| | | write1 = siemensS7Net.Write("DB103." + (offset + offset2 + 48), staProtocol.getStaNo().intValue()); // 目标站 |
| | |
| | | write1 = siemensS7Net.Write("DB103." + (offset + offset2 + 12), staProtocol.getStaNo().intValue()); // 目标站 |
| | | } |
| | | }else if(siteId < 1111){ |
| | | write = siemensS7Net.Write("DB104." + (offset + offset2), staProtocol.getWorkNo()); // 工作号 |
| | | write = siemensS7Net.Write("DB102." + (offset + offset2), staProtocol.getWorkNo()); // 工作号 |
| | | Thread.sleep(200); |
| | | if(specialSites2.contains(siteId)){ |
| | | write1 = siemensS7Net.Write("DB102." + (offset + offset2 + 48), staProtocol.getStaNo().intValue()); // 目标站 |
| | |
| | | |
| | | if (!write.IsSuccess) { |
| | | staProtocol = station.get(staProtocol.getSiteId()); |
| | | if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { |
| | | if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0 && !staProtocol.isLoading()) { |
| | | staProtocol.setPakMk(true); |
| | | } |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); |
| | |
| | | datasource: |
| | | driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver |
| | | # url: jdbc:sqlserver://localhost:1433;databasename=jshdasrs |
| | | url: jdbc:sqlserver://10.10.10.198:1433;databasename=jshdasrs |
| | | url: jdbc:sqlserver://127.0.0.1:1433;databasename=jshdasrs |
| | | username: sa |
| | | password: sa@123 |
| | | # url: jdbc:sqlserver://192.168.4.191:50948;databasename=jshdasrs |
| | |
| | | crnInStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 1015 |
| | | row: 10 |
| | | row: 9 |
| | | bay: 52 |
| | | lev: 1 |
| | | crnInStn[1]: |
| | |
| | | led: ${wcs-slave.led[1].id} |
| | | # 入库口1 |
| | | inSta[0]: |
| | | staNo: 1044 |
| | | barcode: ${wcs-slave.barcode[0].id} |
| | | barcodeMat: ${wcs-slave.barcode[3].id} |
| | | staNo: 1043 |
| | | barcode: ${wcs-slave.barcode[1].id} |
| | | backSta: 1041 |
| | | led: ${wcs-slave.led[1].id} |
| | | inSta[1]: |
| | | staNo: 1036 |
| | | barcode: ${wcs-slave.barcode[0].id} |
| | | backSta: 1035 |
| | | led: ${wcs-slave.led[1].id} |
| | | # 空板入库口1 |
| | | emptyInSta[0]: |
| | |
| | | led: ${wcs-slave.led[5].id} |
| | | backSta: 1037 |
| | | # 入库口1 |
| | | inSta[1]: |
| | | staNo: 1103 |
| | | barcode: ${wcs-slave.barcode[1].id} |
| | | barcodeMat: ${wcs-slave.barcode[4].id} |
| | | inSta[2]: |
| | | staNo: 1104 |
| | | barcode: ${wcs-slave.barcode[2].id} |
| | | backSta: 1041 |
| | | led: ${wcs-slave.led[2].id} |
| | | # inSta[2]: |
| | |
| | | select top 1 * from asr_wrk_mast_sta |
| | | where 1=1 |
| | | and wrk_no = #{workNo} |
| | | and wrk_sts = 2 |
| | | and wrk_sts = 1 |
| | | </select> |
| | | |
| | | <!-- <select id="selectNoInterfere" resultMap="BaseResultMap">--> |
| | |
| | | </script> |
| | | <script type="text/javascript"> |
| | | // 弹窗站点信息 |
| | | $('.site').on('click', function () { |
| | | $(document).on('click', '.site' ,function () { |
| | | var id = this.id.split("-")[1]; |
| | | $("#siteWindow").attr("style", "display:block;");//显示div |
| | | $("#crnWindow").attr("style", "display:none;"); |
| | | $(".detailed").empty(); |
| | | $('.detailed').append(id + '站点详细信息'); |
| | | $("#siteWindow").css("display", "block");//显示div |
| | | $("#crnWindow").css("display", "none"); |
| | | $(".detailed").empty().append(id + '站点详细信息'); |
| | | $.ajax({ |
| | | url: baseUrl + "/console/site/detail", |
| | | headers: { |
| | |
| | | if (find[0].type === 'text') { |
| | | find.val(res.data[val]); |
| | | } else if (find[0].type === 'checkbox') { |
| | | find.attr("checked", res.data[val] === 'Y'); |
| | | find.prop("checked", res.data[val] === 'Y'); |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | }); |
| | | // 堆垛机信息 |
| | | $('.machine').on('click', function () { |
| | | $(document).on('click', '.machine',function () { |
| | | var id = this.id.split("-")[1]; |
| | | $("#crnWindow").attr('style', 'display:block;'); |
| | | $("#siteWindow").attr("style", "display:none;"); |
| | | $('.detailed').empty(); |
| | | $('.detailed').append(id + '号堆垛机'); |
| | | $("#crnWindow").css("display","block"); |
| | | $("#siteWindow").css("display","none"); |
| | | $(".detailed").empty().append(id + '号堆垛机'); |
| | | $.ajax({ |
| | | url: baseUrl + "/console/crn/detail", |
| | | headers: { |
| | | 'token': localStorage.getItem('token') |
| | | }, |
| | | data: { |
| | | crnNo: id |
| | | }, |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | data: {crnNo: id}, |
| | | method: 'post', |
| | | success: function (res) { |
| | | for (var val in res.data) { |
| | | var find = $("#crnWindow").find(":input[name='" + val + "']"); |
| | | if (find[0].type === 'text') { |
| | | for(var val in res.data){ |
| | | var find = $("#crnWindow").find(":input[name='"+ val + "']"); |
| | | if(find[0].type === 'text'){ |
| | | find.val(res.data[val]); |
| | | } else if (find[0].type === 'checkbox') { |
| | | find.attr("checked", res.data[val] === 'Y'); |
| | | }else if (find[0].type === 'checkbox'){ |
| | | find.prop("checked", res.data[val] === 'Y') |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | }) |
| | | |
| | | }) |
| | |
| | | // crnEl.animate({left: (crns[i].bay * unit) + 'px'}, 1000); |
| | | // crns[i].bay = 15; |
| | | var offSet = 120; |
| | | unit = 52; |
| | | // switch (i) { |
| | | // case 0: |
| | | // case 1: |
| | | // case 2: |
| | | // case 3: |
| | | // unit = 35; |
| | | // offSet = 500; |
| | | // break; |
| | | // case 5: |
| | | // unit = 124; |
| | | // offSet = 550; |
| | | // break; |
| | | // case 4: |
| | | // case 6: |
| | | // unit = 62; |
| | | // offSet = 550; |
| | | // break; |
| | | // } |
| | | unit = 15; |
| | | |
| | | |
| | | if(crns[i].bay === 1){ |
| | | crnEl.animate({left: offSet + 'px'}, 19); |
| | | crnEl.animate({left: offSet + 'px'}, 10); |
| | | } else { |
| | | crnEl.animate({left: (offSet - unit + (crns[i].bay * unit)) + 'px'}, 19); |
| | | crnEl.animate({left: (offSet - unit + (crns[i].bay * unit)) + 'px'}, 10); |
| | | } |
| | | |
| | | } |
| | |
| | | <th>工位1工作号</th> |
| | | <th>工位2工作号</th> |
| | | <th>状态</th> |
| | | <th>目标站</th> |
| | | <!-- <th>源库位</th>--> |
| | | <th>走行目标站</th> |
| | | <th>工位1目标站</th> |
| | | <th>工位2目标站</th> |
| | | <!-- <th>源库位</th>--> |
| | | <!-- <th>目标库位</th>--> |
| | | <!-- <th>走行速度(m/min)</th>--> |
| | | <!-- <th>升降速度(m/min)</th>--> |
| | |
| | | <!-- <button class="item" onclick="lock()">解锁</button>--> |
| | | <!-- <button class="item" onclick="pause()">暂停</button>--> |
| | | <!-- <button class="item" onclick="boot()">启动</button>--> |
| | | <!-- <button class="item" onclick="clearCommand()">清除命令</button>--> |
| | | <button class="item" onclick="clearCommand()">清除命令</button> |
| | | <!-- <button class="item" onclick="handleReset()">复位</button>--> |
| | | </div> |
| | | </fieldset> |