#
zzgtfwq
12 小时以前 de480b42a379d1cf23e1703977c0169e837fa786
src/main/java/com/zy/core/thread/RgvThread.java
@@ -48,11 +48,11 @@
    //    private RgvProtocol rgvProtocol;
    private TaskProtocolCache taskProtocolCache = new TaskProtocolCache();
    // # 轨道总长
    private Long trackEntireLength = 224000L;
    private Long trackEntireLength = 240000L;
    //# 轨道基准点
    private Long trackBenchmark = 1L;
    //  # 避让距离
    private Long avoidDistance = 5000L;
    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();
@@ -176,11 +176,43 @@
                }
                Thread.sleep(50L);
                OperateResultExOne<byte[]> result = siemensNet.Read("DB100.12", (short) 1);
                boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 0, 1);
                if (status[0]){
                    Thread.sleep(500L);
                    OperateResult result4 = siemensNet.Write("DB100.12.0", false);
                // 构建设备状态对象
                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
                if (rgvProtocol == null) {
                    rgvProtocol = new RgvProtocol();
                }
                if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING) || rgvProtocol.getStatusType().equals(RgvStatusType.FETCHWAITING)){
                    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);
                    Thread.sleep(20L);
                    OperateResult result00 = siemensNet.Write("DB100.0", (short) 0);
                }
            } catch (Exception e) {
                log.error("RGV数据任务下发复位线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
@@ -213,7 +245,7 @@
                    continue;
                }
                // 休眠 1 秒
                Thread.sleep(100);
                Thread.sleep(200L);
                if (!deviceDetection()) {
                    continue;
@@ -281,6 +313,8 @@
                    }
                    continue;
                }
                Thread.sleep(50L);
                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
@@ -666,7 +700,7 @@
                    RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
                    return false;
                }
            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)) {
            } else if (!rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)) {
                if ((rgvProtocolOther.getRgvPosDestination() - rgvProtocolOther.getCarBodyJiaoMing())
                        - (targetPosition + rgvProtocol.getCarBodyKunPeng())
                        > avoidDistance - 50) {//无需避让
@@ -874,7 +908,7 @@
                    return false;
                }
            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)) {
            } else if (!rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)) {
                if ((targetPosition - rgvProtocol.getCarBodyJiaoMing())
                        - (rgvProtocolOther.getRgvPosDestination() + rgvProtocolOther.getCarBodyKunPeng())
                        > avoidDistance-50) {//无需避让
@@ -1010,7 +1044,8 @@
     */
    private void readStatus() {
        try {
            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 20);
            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 36);
            OperateResultExOne<byte[]> result100 = siemensNet.Read("DB100.0", (short) 18);
            if (result.IsSuccess) {
                // 构建设备状态对象
                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
@@ -1021,14 +1056,16 @@
                rgvProtocol.setCarBodyJiaoMing(slave.getCarBodyJiaoMing());
                rgvProtocol.setCarBodyKunPeng(slave.getCarBodyKunPeng());
                rgvProtocol.setRgvPos((long)siemensNet.getByteTransform().TransInt32(result.Content, 0));
                rgvProtocol.setRgvPosDestination((long)siemensNet.getByteTransform().TransInt32(result.Content, 4));
                rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));
//                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 2));
                rgvProtocol.setTaskNo((long)siemensNet.getByteTransform().TransInt32(result.Content, 4));
                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 8));
                rgvProtocol.setLoaded(siemensNet.getByteTransform().TransInt16(result.Content, 10));
                rgvProtocol.setRgvPos((long)siemensNet.getByteTransform().TransInt32(result.Content, 32));
                rgvProtocol.setRgvPosDestination((long)siemensNet.getByteTransform().TransInt32(result100.Content, 14));
                if (rgvProtocol.getRgvPosDestination()==0L){
                    rgvProtocol.setRgvPosDestination(rgvProtocol.getRgvPos());
                }
                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 8));
//                rgvProtocol.setStatus((short)1);
                //作业启动中  解决任务下发后小车状态未更新,小车状态不及时
                if (this.wrkSign == 1 && rgvProtocol.getStatus()!=(short)1){
@@ -1038,26 +1075,22 @@
                    rgvProtocol.setStatus((short)110);
                }
                rgvProtocol.setTaskNo((long)siemensNet.getByteTransform().TransInt32(result.Content, 10));
                rgvProtocol.setRgvNo((int)siemensNet.getByteTransform().TransInt16(result.Content, 14));
                rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 16));
//                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20));
//                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28));
//                rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40));
//                rgvProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48));
                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 16));
//                OperateResultExOne<byte[]> result11 = siemensNet.Read("DB100.12", (short) 1);
                boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 18, 2);
                rgvProtocol.setLoaded(status[0]? (short)1:(short)0);
                rgvProtocol.setErr1(status[8]);
                rgvProtocol.setErr2(status[9]);
                rgvProtocol.setErr3(status[10]);
                rgvProtocol.setErr4(status[11]);
                rgvProtocol.setErr5(status[12]);
                rgvProtocol.setErr6(status[13]);
                rgvProtocol.setErr7(status[14]);
                rgvProtocol.setErr8(status[15]);
//                boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 18, 2);
//                rgvProtocol.setLoaded(status[0]? (short)1:(short)0);
//                rgvProtocol.setErr1(status[8]);
//                rgvProtocol.setErr2(status[9]);
//                rgvProtocol.setErr3(status[10]);
//                rgvProtocol.setErr4(status[11]);
//                rgvProtocol.setErr5(status[12]);
//                rgvProtocol.setErr6(status[13]);
//                rgvProtocol.setErr7(status[14]);
//                rgvProtocol.setErr8(status[15]);
//                System.out.println("读线程"+ slave.getId()+"---"+JSON.toJSONString(rgvProtocol));
//                System.out.println("读线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis()+"小车数据:"+JSON.toJSONString(rgvProtocol));
                OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId()));
@@ -1072,9 +1105,9 @@
//                        }
//                    }
//                }
                if (rgvProtocol.getAlarm$()!=0){
                    RgvErrCache.updateRgvErr(slave.getId(),rgvProtocol.getAlarmM());
                }
//                if (rgvProtocol.getAlarm$()!=0){
//                    RgvErrCache.updateRgvErr(slave.getId(),rgvProtocol.getAlarmM());
//                }
                try {
                    // 根据实时信息更新数据库
@@ -1138,6 +1171,7 @@
     * 写入数据
     */
    private boolean write(TaskProtocol taskProtocol) throws InterruptedException {
        Thread.sleep(50L);
        if (null == taskProtocol) {
            log.error("RGV写入命令为空 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
@@ -1149,25 +1183,67 @@
            }
            return false;
        }
        this.wrkSign = 1;
//        convertRow(command);
//        taskProtocol.setRgvNo(slave.getId());
//        Long[] array = new Long[11];
        OperateResult result41 = siemensNet.Write("DB100.12.0", false);
        OperateResult result0 = siemensNet.Write("DB100.0", (short) 0);
//        array[0] = taskProtocol.getAckFinish1();
//        array[1] = taskProtocol.getTaskNo();
//        array[2] = taskProtocol.getTaskMode();
//        array[4] = command.getDestinationStaNo();
//        array[10] = taskProtocol.getCommand();
        int taskStatus = taskProtocol.getTaskStatus();
        int taskStatus = taskProtocol.getTaskStatus$();
        int targetPositionStaNo = taskProtocol.getTargetPositionStaNo();
        int targetPositionStaNoEnd = taskProtocol.getTargetPositionStaNoEnd();
        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);
        OperateResult result = siemensNet.Write("DB100.0", taskProtocol.getTargetPosition().intValue());
        OperateResult result1 = siemensNet.Write("DB100.4", (short) taskStatus);
        OperateResult result2 = siemensNet.Write("DB100.6", taskProtocol.getTaskNo().intValue());
        OperateResult result3 = siemensNet.Write("DB100.10", taskProtocol.isDirection()? (short) 1 :  (short) 2); // 执行方向(面朝轨道 定位值左小右大)    true:左   false:右
        Thread.sleep(20L);
            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);
        OperateResult result4 = siemensNet.Write("DB100.12.0", true);
        this.wrkSign = 1;
            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());
@@ -1189,7 +1265,7 @@
                    null,
                    null,
                    null,
                    result.IsSuccess ? 1 : 0,
                    result12.IsSuccess ? 1 : 0,
                    null,
                    new Date(),
                    null
@@ -1199,7 +1275,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));
@@ -1222,11 +1298,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 {
@@ -1241,7 +1343,7 @@
                    null,
                    null,
                    null,
                    result.IsSuccess ? 1 : 0,
                    sign ? 1 : 0,
                    null,
                    new Date(),
                    null
@@ -1250,7 +1352,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"));