#
zzgtfwq
11 小时以前 d91d1fc34a8af84513416cb2a03c75d96fb0304e
#
8个文件已修改
414 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/RgvController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/StartupDto.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 152 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 152 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/RgvController.java
@@ -391,7 +391,11 @@
//            ringThroughParam.setIndex(i);
//            double[] doubles = Utils.RingThroughXY2(perimeter, NumUtils.GetRandomIntInRange(183));
//            double[] doubles = Utils.RingThroughXYRgv(perimeter, perimeter-rgvProtocol.RgvPos.doubleValue());
            double[] doubles = Utils.getRgvPosNew(trackEntireLength, rgvProtocol.RgvPos.doubleValue());
            double v = rgvProtocol.RgvPos.doubleValue() ;
            if (rgv.getId()>2){
                v = rgvProtocol.RgvPos.doubleValue() + 1000000.0;
            }
            double[] doubles = Utils.getRgvPosNew(trackEntireLength, v);
            ringThroughParam.setValueX(doubles[0]);
            ringThroughParam.setValueY(doubles[1]);
@@ -445,7 +449,11 @@
//            double[] doubles = Utils.RingThroughXYSta(perimeter, perimeter-basDevpPosition.getPlcPosition());
//            ringThroughParam.setValueX(doubles[0]>50? doubles[0]+6:doubles[0]-1);
//            ringThroughParam.setValueY(doubles[1]>50? doubles[1]+6:doubles[1]-1);
            double[] doubles = Utils.getRgvPosNew(basDevpPosition.getDevNo(),trackEntireLength, basDevpPosition.getPlcPosition());
            double v = basDevpPosition.getPlcPosition() ;
            if (basDevpPosition.getDevNo()>200){
                v = basDevpPosition.getPlcPosition() + 1000000.0;
            }
            double[] doubles = Utils.getRgvPosNew(basDevpPosition.getDevNo(),trackEntireLength, v);
            ringThroughParam.setValueX(doubles[0]);
            ringThroughParam.setValueY(doubles[1]);
            result.add(ringThroughParam);
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -495,11 +495,11 @@
        switch (sourceStaNo){
            case 118:
            case 121:
            case 122:
            case 124:
            case 218:
            case 221:
            case 222:
                return sourceStaNo+1;
            case 224:
                return sourceStaNo-1;
        }
        return staNo;
    }
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -722,7 +722,7 @@
            }
            // 双深库位且浅库位有货,则需先对浅库位进行库位移转
            if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) {
            if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo()) && crnProtocol.getCrnNo()!=3) {
                String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
                LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!
@@ -869,7 +869,7 @@
                }
                // 双深库位且浅库位有货,则需先对浅库位进行库位移转
                if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
                if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo()) && crnProtocol.getCrnNo()!=3) {
                    String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                    // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!
src/main/java/com/zy/asrs/utils/Utils.java
@@ -87,8 +87,14 @@
     */
    public static String getShallowLoc(SlaveProperties slaveProperties, String deepLoc) {
        int row = getRow(deepLoc);
        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
        int shallowRow = remainder == 1 ? (row + 1) : (row - 1);
        int shallowRow = row;
        if (row==1 || row == 5 || row==11){
            shallowRow = row+1;
        } else if (row==4 || row==8 || row == 14){
            shallowRow = row-1;
        }
//        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
//        int shallowRow = remainder == 1 ? (row + 1) : (row - 1);
        return zerofill(String.valueOf(shallowRow), 2) + deepLoc.substring(2);
    }
@@ -105,15 +111,23 @@
     */
    public static String getDeepLoc(SlaveProperties slaveProperties, String shallowLoc) {
        int row = getRow(shallowLoc);
        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
//        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
        int targetRow;
        if (remainder == 2) {
            targetRow = row - 1;
        } else if (remainder == 3) {
            targetRow = row + 1;
        } else {
//        int targetRow = row;
        if (row==2 || row == 6 || row==12){
            targetRow = row-1;
        } else if (row==3 || row==7 || row == 13){
            targetRow = row+1;
        }else {
            throw new RuntimeException(shallowLoc + "不是浅库位,系统繁忙");
        }
//        if (remainder == 2) {
//            targetRow = row - 1;
//        } else if (remainder == 3) {
//            targetRow = row + 1;
//        } else {
//            throw new RuntimeException(shallowLoc + "不是浅库位,系统繁忙");
//        }
        return zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2);
    }
@@ -121,14 +135,23 @@
     * 获取 浅库位排对应的深库位排
     */
    public static Integer getDeepRow(SlaveProperties slaveProperties, Integer shallowRow) {
        int remainder = (int) Arith.remainder(shallowRow, slaveProperties.getGroupCount());
//        int remainder = (int) Arith.remainder(shallowRow, slaveProperties.getGroupCount());
        int targetRow;
        if (remainder == 2) {
            targetRow = shallowRow - 1;
        } else if (remainder == 3) {
            targetRow = shallowRow + 1;
        } else {
            throw new RuntimeException(shallowRow + "不是浅库位排,系统繁忙");
//        if (remainder == 2) {
//            targetRow = shallowRow - 1;
//        } else if (remainder == 3) {
//            targetRow = shallowRow + 1;
//        } else {
//            throw new RuntimeException(shallowRow + "不是浅库位排,系统繁忙");
//        }
//        int targetRow = row;
        if (shallowRow==2 || shallowRow == 6 || shallowRow==12){
            targetRow = shallowRow-1;
        } else if (shallowRow==3 || shallowRow==7 || shallowRow == 13){
            targetRow = shallowRow+1;
        }else {
            throw new RuntimeException(shallowRow + "不是浅库位,系统繁忙");
        }
        return targetRow;
    }
@@ -217,18 +240,19 @@
//                {680103, 731550, 1115, 882, 1215, 775, 1125, 882},
                // 直线区间(0-134400)
//                {起点, 终点, 类型, x1, y1, x2, y2,
                {0.0, 120000.0, 0, 390.0, 750.0, 60.0, 750.0},
                // 圆弧区间(拐点116-115)新参数:圆心(1115,775)
                {120000.0, 127500.0, 2, 60.0, 750.0, 10.0, 800.0, 60.0, 800.0}, // 修正终点坐标
                {127500.0, 134900.0, 2, 10.0, 800.0, 60.0, 850.0, 60.0, 800.0},
                {134900.0, 680103.0,0, 60.0, 850.0, 1100.0, 850.0},
                {680103.0, 731550.0, 2, 1100.0, 850.0, 1200.0, 750.0, 1100.0, 750.0},
                {731550.0, 972950.0,0, 1200.0, 750.0, 1200.0, 100.0},
                {972950.0, 1016193.0, 2, 1200.0, 100.0, 1150.0, 50.0, 1150.0, 100.0},
                {1016193.0, 1063563.0, 2, 1150.0, 50.0, 1100.0, 100.0, 1150.0, 100.0},
                {1063563.0, 1315250.0,0, 1100.0, 100.0, 1100.0, 700.0},
                {1315250.0, 1322829.0, 2, 1100.0, 700.0, 1050.0, 750.0, 1050.0, 700.0},
                {1322829.0, 1737000.0,0, 1050.0, 750.0, 390.0, 750.0},
                {0.0, 240000.0, 0, 100.0, 225.0, 1100.0, 225.0},
                {1000000.0, 1240000.0, 0, 100.0, 625.0, 1100.0, 625.0},
//                // 圆弧区间(拐点116-115)新参数:圆心(1115,775)
//                {120000.0, 127500.0, 2, 60.0, 750.0, 10.0, 800.0, 60.0, 800.0}, // 修正终点坐标
//                {127500.0, 134900.0, 2, 10.0, 800.0, 60.0, 850.0, 60.0, 800.0},
//                {134900.0, 680103.0,0, 60.0, 850.0, 1100.0, 850.0},
//                {680103.0, 731550.0, 2, 1100.0, 850.0, 1200.0, 750.0, 1100.0, 750.0},
//                {731550.0, 972950.0,0, 1200.0, 750.0, 1200.0, 100.0},
//                {972950.0, 1016193.0, 2, 1200.0, 100.0, 1150.0, 50.0, 1150.0, 100.0},
//                {1016193.0, 1063563.0, 2, 1150.0, 50.0, 1100.0, 100.0, 1150.0, 100.0},
//                {1063563.0, 1315250.0,0, 1100.0, 100.0, 1100.0, 700.0},
//                {1315250.0, 1322829.0, 2, 1100.0, 700.0, 1050.0, 750.0, 1050.0, 700.0},
//                {1322829.0, 1737000.0,0, 1050.0, 750.0, 390.0, 750.0},
        };
        for (Object[] interval : intervals) {
src/main/java/com/zy/common/model/StartupDto.java
@@ -27,11 +27,11 @@
        switch (sourceStaNo){
            case 118:
            case 121:
            case 122:
            case 124:
            case 218:
            case 221:
            case 222:
                return sourceStaNo+1;
            case 224:
                return sourceStaNo-1;
        }
        return staNoE;
    }
src/main/java/com/zy/core/thread/RgvThread.java
@@ -52,7 +52,7 @@
    //# 轨道基准点
    private Long trackBenchmark = 1L;
    //  # 避让距离
    private Long avoidDistance = 14000L;
    private Long avoidDistance = 11200L;
    private String errorRgv = "-";
    /**
@@ -134,7 +134,7 @@
                    initRgv();
                    continue;
                }
                Thread.sleep(20);
                Thread.sleep(100L);
//                System.out.println("读线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis());
                readStatus();
@@ -169,12 +169,12 @@
                    }
                    continue;
                }
//                if (delRgvTask){
//                    writeDelRgvTask();
//                    delRgvTask = false;
//                    continue;
//                }
                Thread.sleep(50L);
                if (delRgvTask){
                    writeDelRgvTask();
                    delRgvTask = false;
                    continue;
                }
                Thread.sleep(200L);
                // 构建设备状态对象
                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
@@ -182,10 +182,33 @@
                    rgvProtocol = new RgvProtocol();
                }
                if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING) || rgvProtocol.getStatusType().equals(RgvStatusType.FETCHWAITING)){
                    OperateResult result2 = siemensNet.Write("DB100.2",(int) 0);
                    OperateResult result = siemensNet.Write("DB100.14", (int) 0);
                    OperateResult result1 = siemensNet.Write("DB100.6", (short) 0);
                    OperateResult result4 = siemensNet.Write("DB100.0", (short) 1);
                    boolean sign = true;
                    int i = 1;
                    while (sign && i<5){
                        i++;
                        sign = false;
                        OperateResult result2 = siemensNet.Write("DB100.2",(int) 0);
                        OperateResult result14 = siemensNet.Write("DB100.14", (int) 0);
                        OperateResult result6 = siemensNet.Write("DB100.6", (short) 0);
                        OperateResult result8 = siemensNet.Write("DB100.8", (short) 0);
                        OperateResult result10 = siemensNet.Write("DB100.10", (short) 0);
                        OperateResult result12 = siemensNet.Write("DB100.12", (short) 0);
                        Thread.sleep(10L);
                        OperateResultExOne<byte[]> resultRead0 = siemensNet.Read("DB100.0", (short) 20);
                        Integer i2 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 2);
                        short i6 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 6);
                        short i8 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 8);
                        short i10 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 10);
                        Integer i14 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 14);
                        if (i2!=0 || i6 != (short) 0
                                || i8!=(short)0 || i10 != (short) 0
                                || i14!=0){
                            sign = true;
                        }
                    }
                    OperateResult result0 = siemensNet.Write("DB100.0", (short) 1);
                }
            } catch (Exception e) {
                log.error("RGV数据任务下发复位线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
@@ -218,7 +241,7 @@
                    continue;
                }
                // 休眠 1 秒
                Thread.sleep(100);
                Thread.sleep(200L);
                if (!deviceDetection()) {
                    continue;
@@ -1154,10 +1177,13 @@
            }
            return false;
        }
        this.wrkSign = 1;
//        convertRow(command);
//        taskProtocol.setRgvNo(slave.getId());
//        Long[] array = new Long[11];
        OperateResult result41 = siemensNet.Write("DB100.0", (short) 0);
        OperateResult result0 = siemensNet.Write("DB100.0", (short) 0);
//        array[0] = taskProtocol.getAckFinish1();
//        array[1] = taskProtocol.getTaskNo();
//        array[2] = taskProtocol.getTaskMode();
@@ -1166,18 +1192,52 @@
        int taskStatus = taskProtocol.getTaskStatus$();
        int targetPositionStaNo = taskProtocol.getTargetPositionStaNo();
        int targetPositionStaNoEnd = taskProtocol.getTargetPositionStaNoEnd();
        OperateResult result2 = siemensNet.Write("DB100.2", taskProtocol.getTaskNo().intValue());
        OperateResult result1 = siemensNet.Write("DB100.6", (short) taskStatus);
        OperateResult result11 = siemensNet.Write("DB100.8", (short) targetPositionStaNo);
        OperateResult result12 = siemensNet.Write("DB100.10", (short) targetPositionStaNo);
        OperateResult result = siemensNet.Write("DB100.14", taskProtocol.getTargetPosition().intValue());
        OperateResult result13 = siemensNet.Write("DB100.18", (short) targetPositionStaNoEnd);
        boolean sign = true;
        int i = 1;
        while (sign && i<5){
            i++;
            sign = false;
            OperateResult result2 = siemensNet.Write("DB100.2", taskProtocol.getTaskNo().intValue());
            OperateResult result6 = siemensNet.Write("DB100.6", (short) taskStatus);
            OperateResult result8 = siemensNet.Write("DB100.8", (short) targetPositionStaNo);
            OperateResult result10 = siemensNet.Write("DB100.10", (short) targetPositionStaNo);
            OperateResult result14 = siemensNet.Write("DB100.14", taskProtocol.getTargetPosition().intValue());
            OperateResult result18 = siemensNet.Write("DB100.18", (short) targetPositionStaNoEnd);
//        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 执行方向(面朝轨道 定位值左小右大)    true:左   false:右
        Thread.sleep(10L);
            Thread.sleep(10L);
        OperateResult result4 = siemensNet.Write("DB100.12", (short) 1);
        this.wrkSign = 1;
            OperateResultExOne<byte[]> resultRead0 = siemensNet.Read("DB100.0", (short) 20);
            short i0 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 0);
            Integer i2 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 2);
            short i6 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 6);
            short i8 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 8);
            short i10 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 10);
            Integer i14 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 14);
            short i18 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 18);
            if (i0 !=(short) 0 || i2!=taskProtocol.getTaskNo().intValue() || i6 != (short) taskStatus
                    || i8!=(short)targetPositionStaNo || i10 != (short) targetPositionStaNo
                    || i14!=taskProtocol.getTargetPosition().intValue() || i18 != (short) targetPositionStaNoEnd){
                sign = true;
            }
        }
        sign = true;
        OperateResult result12 = siemensNet.Write("DB100.12", (short) 1);
//
        i = 1;
        sign = true;
        while (sign && i<5){
            i++;
            sign = false;
//        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 执行方向(面朝轨道 定位值左小右大)    true:左   false:右
            Thread.sleep(10L);
            OperateResultExOne<byte[]> resultRead0 = siemensNet.Read("DB100.0", (short) 20);
            short i12 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 12);
            if (i12 != (short) 1 ){
                sign = true;
            }
            result12 = siemensNet.Write("DB100.12", (short) 1);
        }
//        log.info("任务下发线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis());
@@ -1199,7 +1259,7 @@
                    null,
                    null,
                    null,
                    result.IsSuccess ? 1 : 0,
                    result12.IsSuccess ? 1 : 0,
                    null,
                    new Date(),
                    null
@@ -1209,7 +1269,7 @@
        }
        readStatus();
        if (result != null && result.IsSuccess) {
        if (result12 != null && result0.IsSuccess) {
//            Thread.sleep(50);
//            this.readStatus();
            log.info("RGV 命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(taskProtocol));
@@ -1232,11 +1292,37 @@
    private boolean writeDelRgvTask() throws InterruptedException {
//
        OperateResult result = siemensNet.Write("DB100.12.0", false);
        OperateResult result0 = siemensNet.Write("DB100.0", (int) 0);
        OperateResult result1 = siemensNet.Write("DB100.4", (short) 0);
        OperateResult result2 = siemensNet.Write("DB100.6", (int) 0);
        OperateResult result3 = siemensNet.Write("DB100.10", (short) 0); // 执行方向(面朝轨道 定位值左小右大)    true:左   false:右
        int i = 1;
        boolean sign = true;
        while (sign && i<5){
            i++;
            sign = false;
            OperateResult result0 = siemensNet.Write("DB100.0", (short) 0);
            OperateResult result2 = siemensNet.Write("DB100.2", 0);
            OperateResult result6 = siemensNet.Write("DB100.6", (short) 0);
            OperateResult result8 = siemensNet.Write("DB100.8", (short) 0);
            OperateResult result10 = siemensNet.Write("DB100.10", (short) 0);
            OperateResult result12 = siemensNet.Write("DB100.12",(short)0);
            OperateResult result14 = siemensNet.Write("DB100.14",0);
            OperateResult result18 = siemensNet.Write("DB100.18", (short) 0);
//        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 执行方向(面朝轨道 定位值左小右大)    true:左   false:右
            Thread.sleep(10L);
            OperateResultExOne<byte[]> resultRead0 = siemensNet.Read("DB100.0", (short) 20);
            short i0 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 0);
            Integer i2 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 2);
            short i6 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 6);
            short i8 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 8);
            short i10 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 10);
            short i12 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 12);
            Integer i14 = siemensNet.getByteTransform().TransInt32(resultRead0.Content, 14);
            short i18 = siemensNet.getByteTransform().TransInt16(resultRead0.Content, 18);
            if (i0 !=(short) 0 || i2!=0 || i6 != (short) 0
                    || i8!=(short)0 || i10 != (short) 0 || i12 != (short) 0
                    || i14!=0 || i18 != (short) 0){
                sign = true;
            }
        }
        log.info("任务完成下发线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis());
        try {
@@ -1251,7 +1337,7 @@
                    null,
                    null,
                    null,
                    result.IsSuccess ? 1 : 0,
                    sign ? 1 : 0,
                    null,
                    new Date(),
                    null
@@ -1260,7 +1346,7 @@
        } catch (Exception ignore) {
        }
        if (result != null && result.IsSuccess) {
        if (sign) {
//            Thread.sleep(200);
//            this.readStatus();
            log.info("RGV 命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON("null"));
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -47,13 +47,13 @@
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(101);add(102);add(103);add(104);add(105);add(106);add(107);add(108);add(109);add(110);
        add(111);add(112);add(113);add(114);add(115);add(116);add(117);add(118);add(119);add(120);
        add(121);add(122);add(124);add(125);
        add(121);add(122);add(123);add(124);add(125);
    }};
    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
        add(201);add(202);add(203);add(204);add(205);add(206);add(207);add(208);add(209);add(210);
        add(211);add(212);add(213);add(214);add(215);add(216);add(217);add(218);add(219);add(220);
        add(221);add(222);add(224);add(225);
        add(221);add(222);add(223);add(224);add(225);
    }};
    public static final ArrayList<Integer> staNos1W = new ArrayList<Integer>() {{
        add(118);add(121);add(124);
src/main/resources/application.yml
@@ -59,7 +59,7 @@
  # 轨道转换为米比例
  trackProportion: 10000
  # 避让距离
  avoidDistance: 13300
  avoidDistance: 11200
inventory:
  number: 7
@@ -68,7 +68,7 @@
  # 双深
  doubleDeep: true
  # 双深库位排号
  doubleLocs: 1,4,5,8,9,12,13,16,17,20
  doubleLocs: 1,4,5,8,11,14
  # 一个堆垛机负责的货架排数
  groupCount: 4
  # 堆垛机1
@@ -298,9 +298,9 @@
      directionOther: false
    rgvOutSta[3]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 116
      staNo: 102
      direction: true
      staNoOther: 116
      staNoOther: 102
      directionOther: false
    rgvOutSta[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
@@ -316,9 +316,9 @@
      directionOther: false
    rgvSuperSta[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 116
      staNo: 102
      direction: true
      staNoOther: 116
      staNoOther: 102
      directionOther: false
  # RGV穿梭车2
  rgv[1]:
@@ -402,9 +402,9 @@
      directionOther: false
    rgvOutSta[3]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 102
      staNo: 116
      direction: true
      staNoOther: 102
      staNoOther: 116
      directionOther: false
    rgvOutSta[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
@@ -420,9 +420,9 @@
      directionOther: false
    rgvSuperSta[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 102
      staNo: 116
      direction: true
      staNoOther: 102
      staNoOther: 116
      directionOther: false
  # RGV穿梭车3
  rgv[2]:
@@ -436,49 +436,49 @@
    carBodyKunPeng: 2800
    #RGV源站点
    rgvInSta[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 217
      #执行方向(面朝轨道 定位值左小右大===>  后  前true后false)  true:左   false:右
      direction: false
      staNoOther: 217
      directionOther: false
    rgvInSta[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 220
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: false
      staNoOther: 220
      directionOther: false
    rgvInSta[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 223
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: true
      staNoOther: 223
      directionOther: false
    rgvInSta[3]:
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 204
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: true
      staNoOther: 204
      directionOther: false
    rgvInSta[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 208
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: true
      staNoOther: 208
      directionOther: false
    rgvInSta[5]:
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 212
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: true
      staNoOther: 212
      directionOther: false
    rgvInSta[6]:
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 214
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: true
@@ -486,47 +486,47 @@
      directionOther: false
    #RGV目标站点
    rgvOutSta[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 217
      direction: false
      staNoOther: 217
      directionOther: false
    rgvOutSta[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 220
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: false
      staNoOther: 220
      directionOther: false
    rgvOutSta[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 123
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 223
      direction: false
      staNoOther: 123
      staNoOther: 223
      directionOther: false
    rgvOutSta[3]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 102
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 202
      direction: true
      staNoOther: 102
      staNoOther: 202
      directionOther: false
    rgvOutSta[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 106
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 206
      direction: true
      staNoOther: 106
      staNoOther: 206
      directionOther: false
    rgvOutSta[5]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 110
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 210
      direction: true
      staNoOther: 110
      staNoOther: 210
      directionOther: false
    rgvSuperSta[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 102
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 202
      direction: true
      staNoOther: 102
      staNoOther: 202
      directionOther: false
  # RGV穿梭车4
  rgv[3]:
@@ -540,97 +540,97 @@
    carBodyKunPeng: 2800
    #RGV源站点
    rgvInSta[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 117
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 217
      #执行方向(面朝轨道 定位值左小右大===>  后  前true后false)  true:左   false:右
      direction: false
      staNoOther: 117
      staNoOther: 217
      directionOther: false
    rgvInSta[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 120
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 220
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: false
      staNoOther: 120
      staNoOther: 220
      directionOther: false
    rgvInSta[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 123
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 223
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: true
      staNoOther: 123
      staNoOther: 223
      directionOther: false
    rgvInSta[3]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 104
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 204
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: true
      staNoOther: 104
      staNoOther: 204
      directionOther: false
    rgvInSta[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 108
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 208
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: true
      staNoOther: 108
      staNoOther: 208
      directionOther: false
    rgvInSta[5]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 112
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 212
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: true
      staNoOther: 112
      staNoOther: 212
      directionOther: false
    rgvInSta[6]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 114
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 214
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: true
      staNoOther: 114
      staNoOther: 214
      directionOther: false
    #RGV目标站点
    rgvOutSta[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 117
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 217
      direction: false
      staNoOther: 117
      staNoOther: 217
      directionOther: false
    rgvOutSta[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 120
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 220
      #执行方向(面朝轨道 定位值左小右大)  true:左   false:右
      direction: false
      staNoOther: 120
      staNoOther: 220
      directionOther: false
    rgvOutSta[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 123
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 223
      direction: false
      staNoOther: 123
      staNoOther: 223
      directionOther: false
    rgvOutSta[3]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 116
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 216
      direction: true
      staNoOther: 116
      staNoOther: 216
      directionOther: false
    rgvOutSta[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 106
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 206
      direction: true
      staNoOther: 106
      staNoOther: 206
      directionOther: false
    rgvOutSta[5]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 110
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 210
      direction: true
      staNoOther: 110
      staNoOther: 210
      directionOther: false
    rgvSuperSta[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 116
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 216
      direction: true
      staNoOther: 116
      staNoOther: 216
      directionOther: false
  # 输送线1
  devp[0]: