*
lsh
2025-01-14 c50f66695f4decb3786d11e4c5dfa515ce9a994b
*
5个文件已修改
111 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvProtocol.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -267,10 +267,20 @@
                            && rgvProtocol.getTaskNo1() == 0
                            && rgvProtocol.getAlarm() == 0) {
                        if (rgvProtocol.getStatusType() == RgvStatusType.ROAM) {
                            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) + (rgvProtocol.instantaneousSpeed / 60) * proportion * rgvDate))) {
//                            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) + (rgvProtocol.instantaneousSpeed / 60) * proportion * rgvDate))) {
//                                continue;
//                            }
                            List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
                            if (basDevpPositions.isEmpty()) {
                                log.error("获取所有站点信息异常,RGV任务下发失败,请联系管理员!!!");
                                break runRgv;
                            }
                            List<Integer> devpList = SortTheExecutionOfTheCarUtil.BasDevpPositionExtractSites(basDevpPositions);
                            if (!SortTheExecutionOfTheCarUtil.calculateShortestDistanceDirection(devpList,wrkMast.getSourceStaNo().intValue(),rgvProtocol.getEndStaM().intValue())){
                                continue;
                            }
                        }
src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java
@@ -462,16 +462,96 @@
    public static Double LatelyAndLessThan(long devPosition,long rgvPosition,long perimeter){
        long Difference = perimeter;
        if (devPosition >= rgvPosition){
            if ((devPosition-rgvPosition) < Difference){
//            if ((devPosition-rgvPosition) < Difference){
                Difference = devPosition-rgvPosition;
            }
//            }
        } else {
            if (perimeter - (rgvPosition - devPosition) < Difference){
//            if (perimeter - (rgvPosition - devPosition) < Difference){
                Difference = perimeter - (rgvPosition - devPosition);
            }
//            }
        }
        return Double.valueOf(Difference);
    }
    public static int calculateShortestDistanceDistance(List<Integer> data, int a, int b) {
        Result result = calculateShortestDistance(data, a, b);
        return result.distance;
    }
    public static List<Integer> calculateShortestDistancePassedData(List<Integer> data, int a, int b) {
        Result result = calculateShortestDistance(data, a, b);
        return result.passedData;
    }
//    public static String calculateShortestDistanceDirection(List<Integer> data, int a, int b) {
//        Result result = calculateShortestDistance(data, a, b);
//        return result.direction;
//    }
    public static boolean calculateShortestDistanceDirection(List<Integer> data, int a, int b) {
        Result result = calculateShortestDistance(data, a, b);
        return result.direction.equals("向前走(顺时针)");
    }
    public static void main(String[] args) {
        List<Integer> data = new ArrayList<>();
        // 用 List<Integer> 初始化数据
        for (int i = 1; i <= 9; i++) {
            data.add(i);
        }
        int a = 3; // 起点
        int b = 3; // 终点
        Result result = calculateShortestDistance(data, a, b);
        System.out.println("最近的距离是: " + result.distance);
        System.out.println("经过的数据: " + result.passedData);
        System.out.println("方向: " + result.direction);
    }
    public static Result calculateShortestDistance(List<Integer> data, int a, int b) {
        int length = data.size();
        int indexA = data.indexOf(a);
        int indexB = data.indexOf(b);
        if (indexA == -1 || indexB == -1) {
            throw new IllegalArgumentException("列表中未找到指定的元素");
        }
        // 顺时针方向的距离及经过的数据
        List<Integer> clockwiseData = new ArrayList<>();
        int clockwiseDistance = (indexB - indexA + length) % length;
        for (int i = 0; i <= clockwiseDistance; i++) {
            clockwiseData.add(data.get((indexA + i) % length));
        }
        // 逆时针方向的距离及经过的数据
        List<Integer> counterClockwiseData = new ArrayList<>();
        int counterClockwiseDistance = (indexA - indexB + length) % length;
        for (int i = 0; i <= counterClockwiseDistance; i++) {
            counterClockwiseData.add(data.get((indexA - i + length) % length));
        }
        // 比较距离并返回结果
        if (clockwiseDistance <= counterClockwiseDistance) {
            return new Result(clockwiseDistance, clockwiseData, "向前走(顺时针)");
        } else {
            return new Result(counterClockwiseDistance, counterClockwiseData, "向后走(逆时针)");
        }
    }
    // 用于返回结果的类
    static class Result {
        public int distance;
        public List<Integer> passedData;
        public String direction;
        public Result(int distance, List<Integer> passedData, String direction) {
            this.distance = distance;
            this.passedData = passedData;
            this.direction = direction;
        }
    }
}
src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -65,6 +65,7 @@
     */
    public Long RgvPos;
    public Double instantaneousSpeed;// 瞬时速度 (m/min)
    public Short endStaM;// 瞬时速度 (m/min)  漫游目的地
    /**
     * 走行在定位
src/main/java/com/zy/core/thread/RgvThread.java
@@ -149,6 +149,7 @@
        try {
            OperateResultExOne<byte[]> result = siemensNet.Read("DB100.0", (short) 20);
            OperateResultExOne<byte[]> resultV = siemensNet.Read("DB20.16", (short) 2);
            OperateResultExOne<byte[]> resultE = siemensNet.Read("DB20.26", (short) 2);
            if (result.IsSuccess) {
                if (null == rgvProtocol) {
                    rgvProtocol = new RgvProtocol();
@@ -164,6 +165,7 @@
                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.setEndStaM(siemensNet.getByteTransform().TransInt16(resultE.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
@@ -42,7 +42,7 @@
  # 小车数
  rgvCount: 10
  # 延迟时间
  rgvDate: 2
  rgvDate: 0.5
# 下位机配置
wcs-slave: