| src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/enums/RgvStatusType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/RgvThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -515,7 +515,7 @@ log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); continue; } if (rgvProtocol.getStatusType() == RgvStatusType.WAITING) { if (rgvProtocol.getStatusType() == RgvStatusType.WAITING || rgvProtocol.getStatusType() == RgvStatusType.WAITING101) { log.info("{}号小车等待wcs确认,状态{},参数{}", rgvProtocol.getRgvNo(), rgvProtocol.getStatusType(), rgvProtocol); } // 只有当RGV等待WCS确认、自动 @@ -524,7 +524,7 @@ && rgvProtocol.getTaskNo1() != 0 ) { // log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol); WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvProtocol.getTaskNo1().longValue())); WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvProtocol.getTaskNo1().longValue()).eq("rgv_no",rgvProtocol.getRgvNo())); if (Cools.isEmpty(wrkMast) || !wrkMast.getWrkSts().equals(2L)) { log.error("未查到小车执行任务或者执行任务状态不符合!" + wrkMast); continue; @@ -576,6 +576,15 @@ } } catch (Exception e){} wrkMastService.updateById(wrkMast); } else if (rgvProtocol.getStatusType() == RgvStatusType.WAITING101 && rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getTaskNo1() != 0 ){ boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); if (!rgvComplete) { log.error("小车复位失败,小车号{}!", rgvProtocol.getRgvNo()); break; } } } catch (Exception e) { log.error("小车复位线程报错!" + e); @@ -598,34 +607,35 @@ && rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getTaskNo1() != 0 ) { WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvProtocol.getTaskNo1().longValue())); if (Cools.isEmpty(wrkMast) || !wrkMast.getWrkSts().equals(2L)) { log.error("未查到小车执行任务或者执行任务状态不符合!" + wrkMast); continue; } RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setRgvNo(rgvProtocol.getRgvNo()); rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); rgvCommand.setTaskNo1(rgvProtocol.getTaskNo1()); rgvCommand.setTaskMode1(RgvTaskModeType.CANCEL); // 工位1任务模式: 取消 rgvCommand.setSourceStaNo1((short)-1); //工位1起点 rgvCommand.setDestinationStaNo1((short)-1); //工位1目标站点 rgvCommand.setCommand((short) 1); //工位1任务确认 rgvCommand.setRgvSome((short) 1); if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(2, rgvCommand))) { if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(4, rgvCommand))) { // log.error("RGV取消命令下发失败,RGV号={},任务数据={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); wrkMast.setLogErrTime(new Date()); wrkMast.setLogErrMemo("RGV取消命令下发失败,RGV号={"+rgvProtocol.getRgvNo()+"}===>跳过"); wrkMastService.updateById(wrkMast); // wrkMast.setLogErrTime(new Date()); // wrkMast.setLogErrMemo("RGV取消命令下发失败,RGV号={"+rgvProtocol.getRgvNo()+"}===>跳过"); // wrkMastService.updateById(wrkMast); continue; } log.info("RGV取消命令下发成功,RGV号={},任务数据={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvProtocol.getTaskNo1().longValue()).eq("rgv_no",rgvProtocol.getRgvNo())); if (Cools.isEmpty(wrkMast) || !wrkMast.getWrkSts().equals(2L)) { log.error("未查到小车执行任务或者执行任务状态不符合!" + wrkMast); continue; } Date now = new Date(); wrkMast.setWrkSts(1L); wrkMast.setRgvNo(null); wrkMast.setAppeTime(now); wrkMast.setLogErrTime(now); wrkMast.setRgvNo(null); src/main/java/com/zy/core/enums/RgvStatusType.java
@@ -16,6 +16,7 @@ CANCEL(12, "等待取消","#95A5A6"), WALK(20, "走行","#F1C40F"), WAITING(100, "任务执行完成等待确认","#AED6F1"), WAITING101(101, "任务执行完成等待确认","#AED6F1"), SOS110(110, "报警","#E74C3C"), SOS(999, "未知","#FF0000") ; src/main/java/com/zy/core/thread/RgvThread.java
@@ -16,6 +16,7 @@ import com.zy.core.ThreadHandler; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; import com.zy.core.enums.RgvModeType; import com.zy.core.enums.RgvTaskModeType; import com.zy.core.enums.SlaveType; import com.zy.core.model.RgvSlave; @@ -127,6 +128,12 @@ rgvOpt(command); write3(command); break; //工位1写入取消数据 case 4: RgvCommand command4 = (RgvCommand) task.getData(); rgvOpt(command4); write4(command4); break; // 漫游 case 5: Long aLong = (Long) task.getData(); @@ -217,6 +224,30 @@ rgvProtocol.setxDuration((short) 0); } // /** // * 初始化RGV状态 // */ // private void initRgv() { // if (null == rgvProtocol) { // rgvProtocol = new RgvProtocol(); // } // rgvProtocol.setRgvNo(slave.getId()); // rgvProtocol.setMode((short) 3); // rgvProtocol.setStatus((short)0); // rgvProtocol.setTaskNo1((short)0); // rgvProtocol.setStatus1((short)0); // rgvProtocol.setLoaded1((short)0); // rgvProtocol.setWalkPos((short)0); // rgvProtocol.setRgvPos(slave.getId()*100000L); // rgvProtocol.setTaskNo2((short)0); // rgvProtocol.setStatus2((short)0); // rgvProtocol.setLoaded2((short)0); // rgvProtocol.setAlarm((short)0); // rgvProtocol.setxSpeed((short) 0); // rgvProtocol.setxDistance((short) 0); // rgvProtocol.setxDuration((short) 0); // } @Override public boolean connect() { boolean result = false; @@ -259,7 +290,10 @@ rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 10)); rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 12)); rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 14)); rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransUInt32(result.Content, 16)); long poi = siemensNet.getByteTransform().TransInt32(result.Content, 16); if (poi>0){ rgvProtocol.setRgvPos(poi); } rgvProtocol.setInstantaneousSpeed(Double.valueOf(siemensNet.getByteTransform().TransInt16(resultV.Content, 0))); rgvProtocol.setEndStaM(siemensNet.getByteTransform().TransInt16(resultE.Content, 0)); boolean[] statusAlarmList = siemensNet.getByteTransform().TransBool(resultError.Content, 0, 13); @@ -398,6 +432,68 @@ return false; } } private boolean write4(RgvCommand command) throws InterruptedException { if (null == command) { log.error("RGV写入命令为空"); return false; } // siemensNet.Write("DB24.10.0", false); // siemensNet.Write("DB24.10.1", false); command.setRgvNo(slave.getId()); short[] array = new short[5]; array[0] = command.getRgvNo().shortValue(); array[1] = command.getSourceStaNo1(); array[2] = command.getDestinationStaNo1(); array[3] = command.getTaskMode1();//任务模式 array[4] = command.getTaskNo1(); OperateResult result = siemensNet.Write("DB24.0", array); // // if (command.getAckFinish1().equals((short)0)) { //// Thread.sleep(100L); //// siemensNet.Write("DB24.10.7", command.getRgvSome() == 1); //// Thread.sleep(20L); //// result = siemensNet.Write("DB24.10.0", true); // } else { // siemensNet.Write("DB24.10.1", true); // } try { // 日志记录 BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); BasRgvOpt basRgvOpt = new BasRgvOpt( command.getTaskNo1().intValue(), command.getTaskNo2().intValue(), command.getRgvNo(), new Date(), command.getTaskModeType1().toString(), command.getSourceStaNo1().intValue(), command.getDestinationStaNo1().intValue(), command.getSourceStaNo2().intValue(), command.getDestinationStaNo2().intValue(), null, new Date(), null ); bean.insert(basRgvOpt); } catch (Exception ignore) {} if (result != null && result.IsSuccess) { // Thread.sleep(200); // this.readStatus(); log.info("RGV 工位1取消命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSONString(command)); OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 工位1命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSONString(command))); return true; } else { OutputQueue.RGV.offer(MessageFormat.format("【{0}】写入RGV plc工位1数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); log.error("写入RGV plc工位1取消数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); return false; } } /** * 完成 src/main/resources/application.yml
@@ -57,7 +57,7 @@ # 小车数 rgvCount: 10 # 延迟时间 rgvDate: 1 rgvDate: 0.5 # 下位机配置 wcs-slave: