src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/protocol/RgvProtocol.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
@@ -51,6 +51,12 @@ @Value("${constant-parameters.perimeter}") private Long perimeter; @Value("${constant-parameters.proportion}") private Long proportion; @Value("${constant-parameters.acceleration}") private Long acceleration; @Value("${constant-parameters.rgvCount}") private Long rgvCount; /** * 站点任务检测 更新小车位置信息 */ @@ -236,16 +242,26 @@ runRgv: for (List<WrkMast> wrkMastList : wrkMastLists){ for (WrkMast wrkMast: wrkMastList){ log.error("存在任务,RGV号={},任务数据={}", rgvId, JSON.toJSON(wrkMast)); while (rgvId <= rgvCount){ rgvId++; log.info("存在任务,RGV号={},任务数据={}", rgvId, JSON.toJSON(wrkMast)); if (rgvId > rgvCount){ break runRgv; } BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_id", rgvId)); RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo()); RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); if (rgvProtocol == null){ continue ; } double finalVelocity = 0.0; // 最终速度 (m/s) double distance = (Math.pow(finalVelocity, 2) - Math.pow(rgvProtocol.instantaneousSpeed/60, 2)) / (2 * acceleration); BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getSourceStaNo())); if (distance*proportion > SortTheExecutionOfTheCarUtil.LatelyAndLessThan(basDevpPosition.getPlcPosition(),rgvProtocol.getRgvPos(),perimeter)){ continue ; } List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_no", rgvProtocol.getRgvNo()).eq("wrk_sts", 2L)); if (!wrkMasts.isEmpty()){ continue ; @@ -268,14 +284,14 @@ log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); break runRgv; } log.error("RGV命令下发成功,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); log.info("RGV命令下发成功,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); wrkMast.setWrkSts(2L); wrkMast.setRgvNo(rgvProtocol.getRgvNo()); wrkMast.setAppeTime(new Date()); try{ wrkMastService.updateById(wrkMast); continue ; break; }catch (Exception e){ log.error("更新小车任务失败,任务号:"+wrkMast.getWrkNo()); } @@ -284,7 +300,7 @@ break runRgv; } } } } } src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java
@@ -458,4 +458,20 @@ // } //获取最近并在当前位置前边的位置 0==>1000===>1000000==>0 public static Double LatelyAndLessThan(long devPosition,long rgvPosition,long perimeter){ long Difference = perimeter; if (devPosition >= rgvPosition){ if ((devPosition-rgvPosition) < Difference){ Difference = devPosition-rgvPosition; } } else { if (perimeter - (rgvPosition - devPosition) < Difference){ Difference = perimeter - (rgvPosition - devPosition); } } return Double.valueOf(Difference); } } src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -64,6 +64,7 @@ * RGV当前位置 */ public Long RgvPos; public Double instantaneousSpeed;// 瞬时速度 (m/min) /** * 走行在定位 src/main/java/com/zy/core/thread/RgvThread.java
@@ -147,6 +147,7 @@ private void readStatus(){ try { OperateResultExOne<byte[]> result = siemensNet.Read("DB100.0", (short) 20); OperateResultExOne<byte[]> resultV = siemensNet.Read("DB20.16", (short) 2); if (result.IsSuccess) { if (null == rgvProtocol) { rgvProtocol = new RgvProtocol(); @@ -161,6 +162,7 @@ rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 12)); rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 14)); rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransUInt32(result.Content, 16)); rgvProtocol.setInstantaneousSpeed(Double.valueOf(siemensNet.getByteTransform().TransInt16(resultV.Content, 0))); // rgvProtocol.setRgvPos((long)NumUtils.GetRandomIntInRange(1737000)); OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); src/main/resources/application.yml
@@ -33,7 +33,14 @@ enable: false constant-parameters: # 轨道总长 perimeter: 1737000 # 轨道转换为米比例 proportion: 10000 # 加速度 m/s^2 acceleration: -2 # 小车数 rgvCount: 10 # 下位机配置 wcs-slave: