自动化立体仓库 - WCS系统
#
lsh
2024-01-25 6efee0aeb0bada6e10af55e13d469ff52572fdfb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.zy.common.utils;
 
import com.alibaba.fastjson.JSON;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.RgvNode;
 
import java.util.ArrayList;
import java.util.List;
 
public class RgvUtils {
 
    //判断行走路径是否被占用
    public static boolean isPathUsed(Integer startPath,Integer endPath) {
        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
        Object data = redisUtil.get("rgv_map");
        List<RgvNode> rgvNodes = JSON.parseArray(data.toString(), RgvNode.class);//实时地图
        List<RgvNode> pathList = getPathList(startPath, endPath);//通过起点和目标点获取行走路径
        //提取受控路径
        ArrayList<Integer> list = new ArrayList<>();
        for (RgvNode rgvNode : pathList) {
            //判断路径是否被占用
            if (rgvNode.getPath().equals(startPath)) {
                //起点路径不纳入计算范围
                continue;
            }
            list.add(rgvNode.getPath());
        }
 
        for (RgvNode node : rgvNodes) {//遍历实时地图
            if (list.contains(node.getPath())) {
                //路径相同,判断是否被占用
                if (node.getLock()) {
                    return true;//只要有一条路径被占用,整体路均不可用
                }
            }
        }
 
        return false;
    }
 
    //锁定/解锁路径
    public static void lockPath(Integer startPath, Integer endPath, Integer rgvNo, Integer wrkNo, boolean lock) {
        List<RgvNode> pathList = getPathList(startPath, endPath);//通过起点和目标点获取行走路径
        lockPath(pathList, rgvNo, wrkNo, lock);
    }
 
    //锁定/解锁路径
    public static void lockPath(List<RgvNode> pathList, Integer rgvNo, Integer wrkNo, boolean lock) {
        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
        Object data = redisUtil.get("rgv_map");
        List<RgvNode> rgvNodes = JSON.parseArray(data.toString(), RgvNode.class);//实时地图
        ArrayList<Integer> list = new ArrayList<>();
        for (RgvNode rgvNode : pathList) {//提取受控路径
            list.add(rgvNode.getPath());
        }
 
        for (RgvNode rgvNode : rgvNodes) {//遍历实时地图
            if (list.contains(rgvNode.getPath())) {
                //路径相同
                if (lock) {
                    rgvNode.setLock(true);//锁定
                    rgvNode.setRgvNo(rgvNo);//RGV号
                    rgvNode.setWrkNo(wrkNo);//工作号
                } else {
                    rgvNode.setLock(false);//解锁
                    rgvNode.setRgvNo(0);
                    rgvNode.setRgvNo(0);
                }
            }
        }
    }
 
    //解锁路径,通过RGV号进行解锁。注意:调用此方法会解锁RGV号对应车辆全部路径
    public static void unLockPath(Integer rgvNo) {
        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
        Object data = redisUtil.get("rgv_map");
        List<RgvNode> rgvNodes = JSON.parseArray(data.toString(), RgvNode.class);//实时地图
        for (RgvNode rgvNode : rgvNodes) {//遍历实时地图
            if (rgvNode.getRgvNo().equals(rgvNo)) {
                //RGV号相同
                rgvNode.setLock(false);//解锁
                rgvNode.setRgvNo(0);
            }
        }
    }
 
    //通过起点和目标点获取行走路径
    public static List<RgvNode> getPathList(Integer startPath, Integer endPath) {
        int result = startPath - endPath;
        ArrayList<RgvNode> list = new ArrayList<>();
        if (result == 0) {
            list.add(new RgvNode(startPath));
            return list;
        }
 
        if (result > 0) {
            //起点 - 目标点 > 0  正方向
            for (int i = startPath; i >= endPath; i--) {
                list.add(new RgvNode(i));
            }
        }else {
            //起点 = 目标点 < 0  负方向
            for (int i = startPath; i <= endPath; i++) {
                list.add(new RgvNode(i));
            }
        }
        return list;
    }
 
    public static void main(String[] args) {
        System.out.println(getPathList(5,5));
    }
 
}