| | |
| | | */ |
| | | @GetMapping("/led") |
| | | public R monitorLed(@RequestParam("ledId") Integer ledId) { |
| | | if (ledId == 1005){ |
| | | return null; |
| | | } |
| | | String ledContent = ""; |
| | | List<LedCommand> commandList = null; |
| | | for (LedSlave slave : slaveProperties.getLed()) { |
| | |
| | | */ |
| | | @GetMapping("/led/error") |
| | | public R monitorLedError(@RequestParam("ledId") Integer ledId) { |
| | | if (ledId == 1005){ |
| | | return null; |
| | | } |
| | | String errorMsg = ""; |
| | | for (LedSlave slave : slaveProperties.getLed()) { |
| | | if (slave.getStaArr().contains(ledId)) { |
| | |
| | | } |
| | | continue; |
| | | } |
| | | WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode).in("io_type", 107, 103, 57)); |
| | | WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode).in("io_type", 107, 103, 57 ,104)); |
| | | if (!Cools.isEmpty(checkPick)) { |
| | | continue; |
| | | } |
| | |
| | | wrkMast.setStaNo(staNo); // 目标站 |
| | | wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 |
| | | wrkMast.setSourceLocNo(""); // 源库位清空 |
| | | wrkMast.setPltType(0);// 盘点/拣料工位号置0 |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | throw new CoolException("更新工作档数据状态失败"); |
| | |
| | | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getForkPos() == 0 && crnProtocol.getTaskNo() == 0 && crnProtocol.getTaskNoTwo() == 0) { |
| | | News.warnNoLog("" + mark + " - 0" + " - 开始执行堆垛机入出库作业下发"); |
| | | if (crnProtocol.getLoaded() == 0 && crnProtocol.getLoadedTwo() == 0) { |
| | | News.error("工位1无物,工位2无物"); |
| | | //堆垛机没有物料 |
| | | // 如果最近一次是入库模式 |
| | | if (crnProtocol.getLastIo().equals("I")) { |
| | |
| | | } |
| | | |
| | | } else if (crnProtocol.getLoaded() == 1 && crnProtocol.getLoadedTwo() == 1) { |
| | | News.error("工位1有物,工位2有物"); |
| | | // 堆垛机有物料 |
| | | WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 1); |
| | | if (wrkMast != null) { |
| | | if (wrkMast.getIoType() >= 100) { |
| | | this.outPut(crn, crnProtocol, mark); |
| | | this.outPutAll(crn, crnProtocol, mark); |
| | | } else { |
| | | this.inPut(crn, crnProtocol, mark); |
| | | } |
| | |
| | | log.error("" + mark + " - 1" + " - 有物料无工作档 ===》异常"); |
| | | } |
| | | } else if (crnProtocol.getLoaded() == 1 && crnProtocol.getLoadedTwo() == 0) { |
| | | News.error("工位1有物,工位2无物"); |
| | | // 堆垛机工位1有物料 |
| | | WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 1); |
| | | if (wrkMast != null) { |
| | |
| | | log.error("" + mark + " - 1" + " - 有物料无工作档 ===》异常"); |
| | | } |
| | | } else if (crnProtocol.getLoaded() == 0 && crnProtocol.getLoadedTwo() == 1) { |
| | | News.error("工位1无物,工位2有物"); |
| | | // 堆垛机工位2有物料 |
| | | WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 2); |
| | | if (wrkMast != null) { |
| | |
| | | } |
| | | |
| | | // 堆垛机控制过滤 |
| | | if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { |
| | | if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0 || crnProtocol.getTaskNoTwo() != 0) { |
| | | // News.infoNoLog(""+mark+" - 1"+" - 7"+" - 堆垛机控制过滤:堆垛机是否空闲={},任务号={}", crnProtocol.getStatusType(),crnProtocol.getTaskNo()); |
| | | continue; |
| | | } |
| | |
| | | } else if (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11) { |
| | | wrkMast.setWrkSts(4L); |
| | | wrkMast.setPltType(0); |
| | | } else { |
| | | }else if (wrkMast.getWrkSts() == 108){ |
| | | crnThread.setResetFlag(true); |
| | | }else { |
| | | continue; |
| | | } |
| | | Date now = new Date(); |
| | |
| | | } else if (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11) { |
| | | wrkMast.setWrkSts(4L); |
| | | wrkMast.setPltType(0); |
| | | }else if (wrkMast.getWrkSts() == 108){ |
| | | crnThread.setResetFlag(true); |
| | | } else { |
| | | continue; |
| | | } |
| | |
| | | |
| | | |
| | | } |
| | | // News.infoNoLog(""+mark+" - 0"+" - 对工作档的完成操作执行完成"); |
| | | News.infoNoLog(""+mark+" - 0"+" - 对工作档的完成操作执行完成"); |
| | | } |
| | | |
| | | /** |
| | |
| | | case 53: |
| | | ledCommand.setTitle("拣料再入库"); |
| | | break; |
| | | case 54: |
| | | ledCommand.setTitle("并板再入库"); |
| | | break; |
| | | case 57: |
| | | ledCommand.setTitle("盘点再入库"); |
| | | break; |
| | |
| | | } else { |
| | | total = locDetl.getAnfme(); |
| | | } |
| | | if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1 || wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) { |
| | | if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1 || wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57 || wrkMast.getIoType() == 54) { |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(), wrkDetl.getOutOrderNo(), wrkDetl.getUnit(), wrkDetl.getWeight(), wrkDetl.getSupp(), wrkDetl.getLength(), wrkDetl.getTemp1(), wrkDetl.getProType(), wrkDetl.getAnfme(), wrkDetl.getTemp2(), total)); |
| | | } |
| | | if (wrkMast.getIoType() == 103) { |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(), wrkDetl.getOutOrderNo(), wrkDetl.getUnit(), wrkDetl.getWeight(), wrkDetl.getSupp(), wrkDetl.getLength(), wrkDetl.getTemp1(), wrkDetl.getProType(), wrkDetl.getAnfme(), wrkDetl.getTemp2(), total)); |
| | | } |
| | | if (wrkMast.getIoType() == 104) { |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(), wrkDetl.getOutOrderNo(), wrkDetl.getUnit(), wrkDetl.getWeight(), wrkDetl.getSupp(), wrkDetl.getLength(), wrkDetl.getTemp1(), wrkDetl.getProType(), wrkDetl.getAnfme(), wrkDetl.getTemp2(), total)); |
| | | } |
| | | if (wrkMast.getIoType() == 107) { |
| | |
| | | continue; |
| | | } |
| | | if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) { |
| | | News.error("{}号LED显示默认命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); |
| | | // News.error("{}号LED显示默认命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); |
| | | } |
| | | } |
| | | } |
| | |
| | | continue; |
| | | } |
| | | |
| | | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { |
| | | if (crnProtocol.getCrnNo() == 1 && crnProtocol.getBay() == 1 && crnProtocol.getLevel() == 1) { |
| | | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getTaskNoTwo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getStatusTypeTwo()== CrnStatusType.IDLE) { |
| | | if (crnProtocol.getCrnNo() == 1 && crnProtocol.getBay() == 11 && crnProtocol.getLevel() == 1) { |
| | | continue; |
| | | } |
| | | Page<BasCrnOpt> basCrnOptPage = crnOptService.selectPage(new Page<>(1, 1), new EntityWrapper<BasCrnOpt>().eq("crn_no", crn.getId()).orderBy("send_time", false)); |
| | |
| | | crnCommand.setTaskNo((short) 9999); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | // crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式: 堆垛机移动 |
| | | crnCommand.setTaskMode(CrnTaskModeType.XY_MOVE);//余姚锐麒回原点任务模式: 站位转移 |
| | | crnCommand.setTaskMode(CrnTaskModeType.XY_MOVE); |
| | | crnCommand.setSourcePosX(crnStn.getRow().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY((short) 1); // 源库位列 |
| | | crnCommand.setSourcePosY((short) 11); // 源库位列 |
| | | crnCommand.setSourcePosZ((short) 1); // 源库位层 |
| | | crnCommand.setDestinationPosX((short) 0); // 目标库位排 |
| | | crnCommand.setDestinationPosY((short) 14); // 目标库位列 |
| | | crnCommand.setDestinationPosY((short) 0); // 目标库位列 |
| | | crnCommand.setDestinationPosZ((short) 0); // 目标库位层 |
| | | crnCommand.setCommand((short) 1);//任务确认位 |
| | | if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 工位1和工位2都有物 出库放货 |
| | | */ |
| | | public synchronized void outPutAll(CrnSlave slave, CrnProtocol crnProtocol, Integer mark) { |
| | | News.warnNoLog("" + mark + " - 2" + " - 0" + " - 堆垛机入出库作业下发:执行出库"); |
| | | for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) { |
| | | // 获取工作状态为11(生成出库ID)的出库工作档 |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep107(slave.getId(), crnStn.getStaNo()); |
| | | for (WrkMast wrkMast : wrkMasts) { |
| | | if (wrkMast == null || wrkMast.getPltType() == 2) { |
| | | continue; |
| | | } |
| | | // 工作档状态判断 |
| | | if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) { |
| | | News.error("" + mark + " - 2" + " - 1" + " - 查询工作档数据不符合条件--入出类型/站点, 工作号={},源库位={},入出类型={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType()); |
| | | continue; |
| | | } |
| | | // 获取源库位信息 |
| | | LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) { |
| | | News.error("" + mark + " - 2" + " - 2" + " - 出库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getLocNo(), sourceSta.getLocSts()); |
| | | continue; |
| | | } |
| | | // 获取堆垛机出库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); |
| | | if (staProtocol == null) { |
| | | News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol); |
| | | break; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | |
| | | // 查询站点详细信息 |
| | | BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); |
| | | if (staDetl == null) { |
| | | News.error("" + mark + " - 2" + " - 5" + " - 出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo()); |
| | | break; |
| | | // continue; |
| | | } |
| | | // 判断堆垛机出库站状态 |
| | | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | |
| | | // 堆垛机控制过滤 |
| | | if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { |
| | | // continue; |
| | | break; |
| | | } |
| | | if (wrkMastMapper.selectByPltType(slave.getId(), wrkMast.getPltType()) == null) { |
| | | News.error("" + mark + " - 1" + " - 9" + " - 堆垛机改工位存在工作档,工位={}", wrkMast.getPltType()); |
| | | } |
| | | |
| | | |
| | | // 已经存在吊车执行任务时,则过滤 |
| | | if (wrkMastMapper.selectWorking(slave.getId()) != null) { |
| | | break; |
| | | // return; |
| | | } |
| | | |
| | | News.warnNoLog("" + mark + " - 2" + " - 12" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue(), sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue(), crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue()); |
| | | |
| | | // 1.堆垛机开始移动 |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setPltType(wrkMast.getPltType()); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | // crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.PUT); // 任务模式: 库位移转 |
| | | // crnCommand.setSourcePosX((short) (sourceSta.getRow1() + slave.getOffset())); // 源库位排 |
| | | // crnCommand.setSourcePosY((short) (sourceSta.getBay1() + slave.getOffset())); // 源库位列 |
| | | // crnCommand.setSourcePosZ((short) (sourceSta.getLev1() + slave.getOffset())); // 源库位层 |
| | | crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 目标库位层 |
| | | crnCommand.setTraySize(sourceSta.getLocType1() == 2); //库位类型 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(108L); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | News.error("" + mark + " - 2" + " - 14" + " - 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | News.infoNoLog("" + mark + " - 2" + " - 0" + " - 堆垛机入出库作业下发 : 出库执行完毕"); |
| | | } |
| | | } |
| | |
| | | // mainService.ioConvert(); |
| | | |
| | | |
| | | // mainService.stnToCrnStnPick2(); |
| | | // mainService.stnToCrnStnPick2(); |
| | | |
| | | // 入库 ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档 |
| | | mainService.generateStoreWrkFile(1); // 组托 |
| | |
| | | // News.info("输入成功"); |
| | | // } |
| | | //堆垛机无任务回入库口待机 |
| | | //mainService.crnMove(); |
| | | mainService.crnMove(); |
| | | // 其他 ===>> LED显示器复位,显示默认信息 |
| | | mainService.ledReset(); |
| | | |
| | |
| | | |
| | | // 复位信号 |
| | | if (!Cools.isEmpty(crnProtocol.getStatusType()) && crnProtocol.getStatusType().equals(CrnStatusType.WAITING)) { |
| | | // if (crnProtocol.getTaskNo() == 0){ |
| | | // News.error("堆垛机工位1工作号为0,不予确认,工位1{}",crnProtocol.getLoaded() == 1 ? "有物" : "无物"); |
| | | // return; |
| | | // } |
| | | News.error("---第一步、[堆垛机号:{}, 工作号:{}, 载货台1信号:{}]==>> 状态为10,等待确认!!", |
| | | slave.getId(), crnProtocol.getTaskNo(), crnProtocol.getLoaded() == 1 ? "有物" : "无物"); |
| | | if (resetFlag) { |
| | |
| | | |
| | | // 复位信号 |
| | | if (!Cools.isEmpty(crnProtocol.getStatusType()) && crnProtocol.getStatusTypeTwo().equals(CrnStatusType.WAITING)) { |
| | | // if (crnProtocol.getTaskNoTwo() == 0){ |
| | | // News.error("堆垛机工位2工作号为0,不予确认,工位2{}",crnProtocol.getLoadedTwo() == 1 ? "有物" : "无物"); |
| | | // return; |
| | | // } |
| | | News.error("---第一步、[堆垛机号:{}, 工作号:{}, 载货台2信号:{}]==>> 状态为10,等待确认!!", |
| | | slave.getId(), crnProtocol.getTaskNo(), crnProtocol.getLoaded() == 1 ? "有物" : "无物"); |
| | | slave.getId(), crnProtocol.getTaskNoTwo(), crnProtocol.getLoadedTwo() == 1 ? "有物" : "无物"); |
| | | if (resetFlagTwo) { |
| | | if (crnProtocol.getTaskNo() == 9999) { |
| | | backHpFlag = false; |
| | |
| | | */ |
| | | private boolean write(CrnCommand command) throws InterruptedException { |
| | | if (null == command) { |
| | | News.error("堆垛机写入命令为空"); |
| | | News.error("堆垛机工位1写入命令为空"); |
| | | return false; |
| | | } |
| | | // 向堆垛机发任务前的堆垛机状态 |
| | |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | News.error("堆垛机命令地址写入后回读出错"); |
| | | News.error("堆垛机工位1命令地址写入后回读出错"); |
| | | } |
| | | // convertRow(command); |
| | | command.setCrnNo(slave.getId()); |
| | | // short[] array = new short[10]; |
| | | short[] array = new short[9]; |
| | | short[] array = new short[10]; |
| | | array[0] = command.getAckFinish(); // 任务完成确认位 |
| | | array[1] = command.getTaskNo(); // 任务号 |
| | | array[2] = command.getTaskMode(); // 模式 |
| | |
| | | array[6] = command.getDestinationPosX(); // 目标位置排号 |
| | | array[7] = command.getDestinationPosY(); // 目标位置列号 |
| | | array[8] = command.getDestinationPosZ(); // 目标位置层号 |
| | | array[9] = command.getCommand(); |
| | | // array[10] = 0; //备用1 |
| | | |
| | | |
| | | OperateResult result = siemensNet.Write("DB100.0", array); |
| | | News.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), array); |
| | | News.info("堆垛机工位1命令下发[id:{}] >>>>> {}", slave.getId(), array); |
| | | |
| | | //堆垛机任务写入后,回读一次,看是否成功 |
| | | Thread.sleep(200); |
| | |
| | | try { |
| | | if (!result.IsSuccess) { |
| | | // if (!resetFlag){ |
| | | News.error("写入堆垛机plc数据失败,重新下发任务 写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(command), writeCount1); |
| | | News.error("写入堆垛机工位1plc数据失败,重新下发任务 写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(command), writeCount1); |
| | | result = siemensNet.Write("DB100.0", array); |
| | | |
| | | // } |
| | |
| | | || !command.getAckFinish().equals(one.getAckFinish()) |
| | | ) { |
| | | try { |
| | | News.error("堆垛机命令地址写入后回读失败==>不一致[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command), JSON.toJSON(one)); |
| | | News.error("堆垛机工位1命令地址写入后回读失败==>不一致[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)); |
| | |
| | | |
| | | } |
| | | // if (!resetFlag){ |
| | | News.error("写入堆垛机plc数据失败,重新下发任务 回读不一致 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(command), writeCount1); |
| | | News.error("写入堆垛机工位1plc数据失败,重新下发任务 回读不一致 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(command), writeCount1); |
| | | result = siemensNet.Write("DB100.0", array); |
| | | // } |
| | | writeCount1++; |
| | | continue; |
| | | } else { |
| | | News.info("堆垛机命令地址写入后回读成功[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command), JSON.toJSON(one)); |
| | | News.info("堆垛机工位1命令地址写入后回读成功[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command), JSON.toJSON(one)); |
| | | break; |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | News.error("堆垛机命令地址写入后回读出错,异常:" + e); |
| | | News.error("堆垛机工位1命令地址写入后回读出错,异常:" + e); |
| | | } |
| | | writeCount1++; |
| | | } while (writeCount1 < 6); |
| | |
| | | if (resultRead.IsSuccess) { |
| | | commandFinish = siemensNet.getByteTransform().TransInt16(resultRead.Content, 0); |
| | | if (commandFinish != 1) { |
| | | News.error("堆垛机任务确认位" + commandFinish + "写入数据与回读数据不一致!" + "循环执行次数:" + writeCount2 + "次"); |
| | | News.error("堆垛机工位1任务确认位" + commandFinish + "写入数据与回读数据不一致!" + "循环执行次数:" + writeCount2 + "次"); |
| | | } else { |
| | | //任务命令写入成功 |
| | | News.info("堆垛机任务确认位" + commandFinish + "回读成功!" + "循环执行次数:" + writeCount2 + "次"); |
| | | News.info("堆垛机工位1任务确认位" + commandFinish + "回读成功!" + "循环执行次数:" + writeCount2 + "次"); |
| | | break; |
| | | } |
| | | } else { |
| | | News.error("堆垛机任务确认位" + commandFinish + "回读失败!" + "循环执行次数:" + writeCount2 + "次"); |
| | | News.error("堆垛机工位1任务确认位" + commandFinish + "回读失败!" + "循环执行次数:" + writeCount2 + "次"); |
| | | } |
| | | } else { |
| | | News.error("堆垛机任务确认位" + commandFinish + "写入失败!" + "循环执行次数:" + writeCount2 + "次"); |
| | | News.error("堆垛机工位1任务确认位" + commandFinish + "写入失败!" + "循环执行次数:" + writeCount2 + "次"); |
| | | } |
| | | } while (writeCount2 < 5); |
| | | } |
| | |
| | | OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); |
| | | return true; |
| | | } else { |
| | | OutputQueue.CRN.offer(MessageFormat.format("【{0}】写入堆垛机plc数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); |
| | | News.error("写入堆垛机plc数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | OutputQueue.CRN.offer(MessageFormat.format("【{0}】写入堆垛机工位1plc数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); |
| | | News.error("写入堆垛机工位1plc数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | return false; |
| | | } |
| | | } |
| | |
| | | */ |
| | | private boolean write2(CrnCommand command) throws InterruptedException { |
| | | if (null == command) { |
| | | News.error("堆垛机写入命令为空"); |
| | | News.error("堆垛机工位2写入命令为空"); |
| | | return false; |
| | | } |
| | | // 向堆垛机发任务前的堆垛机状态 |
| | |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | News.error("堆垛机命令地址写入后回读出错"); |
| | | News.error("堆垛机工位2命令地址写入后回读出错"); |
| | | } |
| | | // convertRow(command); |
| | | command.setCrnNo(slave.getId()); |
| | |
| | | array2[0] = command.getAckFinish(); |
| | | OperateResult result = siemensNet.Write("DB100.20", array); |
| | | OperateResult result2 = siemensNet.Write("DB100.0", array2); |
| | | News.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), array); |
| | | News.info("堆垛机工位2命令下发[id:{}] >>>>> {}", slave.getId(), array); |
| | | |
| | | int writeCount1 = 1; |
| | | do { |
| | | try { |
| | | if (!result.IsSuccess || !result2.IsSuccess) { |
| | | // if (!resetFlag){ |
| | | News.error("写入堆垛机plc数据失败,重新下发任务 写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(command), writeCount1); |
| | | News.error("写入堆垛机工位2plc数据失败,重新下发任务 写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(command), writeCount1); |
| | | result = siemensNet.Write("DB100.0", array); |
| | | // } |
| | | Thread.sleep(100); |
| | |
| | | || !command.getAckFinish().equals(one.getAckFinish()) |
| | | ) { |
| | | try { |
| | | News.error("堆垛机命令地址写入后回读失败==>不一致[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command), JSON.toJSON(one)); |
| | | News.error("堆垛机工位2命令地址写入后回读失败==>不一致[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)); |
| | |
| | | |
| | | } |
| | | // if (!resetFlag){ |
| | | News.error("写入堆垛机plc数据失败,重新下发任务 回读不一致 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(command), writeCount1); |
| | | News.error("写入堆垛机工位2plc数据失败,重新下发任务 回读不一致 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(command), writeCount1); |
| | | result = siemensNet.Write("DB100.0", array); |
| | | // } |
| | | writeCount1++; |
| | | continue; |
| | | } else { |
| | | News.info("堆垛机命令地址写入后回读成功[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command), JSON.toJSON(one)); |
| | | News.info("堆垛机工位2命令地址写入后回读成功[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command), JSON.toJSON(one)); |
| | | break; |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | News.error("堆垛机命令地址写入后回读出错2,异常:" + e); |
| | | News.error("堆垛机工位2命令地址写入后回读出错2,异常:" + e); |
| | | } |
| | | writeCount1++; |
| | | } while (writeCount1 < 6); |
| | |
| | | if (resultRead.IsSuccess) { |
| | | commandFinish = siemensNet.getByteTransform().TransInt16(resultRead.Content, 0); |
| | | if (commandFinish != 1) { |
| | | News.error("堆垛机任务确认位" + commandFinish + "写入数据与回读数据不一致!" + "循环执行次数:" + writeCount2 + "次"); |
| | | News.error("堆垛机工位2任务确认位" + commandFinish + "写入数据与回读数据不一致!" + "循环执行次数:" + writeCount2 + "次"); |
| | | } else { |
| | | //任务命令写入成功 |
| | | // News.info("堆垛机任务确认位"+commandFinish+"回读成功!"+"循环执行次数:"+writeCount2+"次"); |
| | | break; |
| | | } |
| | | } else { |
| | | News.error("堆垛机任务确认位" + commandFinish + "回读失败!" + "循环执行次数:" + writeCount2 + "次"); |
| | | News.error("堆垛机工位2任务确认位" + commandFinish + "回读失败!" + "循环执行次数:" + writeCount2 + "次"); |
| | | } |
| | | } else { |
| | | News.error("堆垛机任务确认位" + commandFinish + "写入失败!" + "循环执行次数:" + writeCount2 + "次"); |
| | | News.error("堆垛机工位2任务确认位" + commandFinish + "写入失败!" + "循环执行次数:" + writeCount2 + "次"); |
| | | } |
| | | } while (writeCount2 < 5); |
| | | } |
| | |
| | | return true; |
| | | } else { |
| | | OutputQueue.CRN.offer(MessageFormat.format("【{0}】写入堆垛机plc数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); |
| | | News.error("写入堆垛机plc数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | News.error("写入堆垛机工位2plc数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | return false; |
| | | } |
| | | } |
| | |
| | | ip: 192.168.7.241 |
| | | port: 5005 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staArr: 1006 |
| | | staArr: 1004 |
| | | crnId: 1 |
| | | # # LED2 |
| | | led[1]: |
| | |
| | | ip: 192.168.7.240 |
| | | port: 5005 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staArr: 1004 |
| | | staArr: 1005 |
| | | crnId: 1 |
| | | # LED1 |
| | | led[2]: |
| | | id: 121 |
| | | ip: 192.168.7.241 |
| | | port: 5005 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staArr: 1006 |
| | | crnId: 1 |
| | | |