cpT
7 天以前 fe783a3ae2295dba85fd9775b610eb13e4e41f00
src/main/java/com/zy/core/thread/RgvThread.java
@@ -65,7 +65,10 @@
    private boolean resetFlag2 = false;
    private boolean connectRgv = false;
    public Long currentTimeMilliConnectRgv= 0L;
    private boolean delRgvTask = false;
    private short wrkSign = 0;
    public RgvThread(RgvSlave slave) {
        this.slave = slave;
@@ -74,6 +77,12 @@
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        initRgv();
        try{
            Thread.sleep(2000);
        } catch (Exception e){
        }
        connectRgv = this.connect();
        while(!connectRgv){
            try {
@@ -140,7 +149,7 @@
                    continue;
                }
                Thread.sleep(20);
//                System.out.println("读线程"+ slave.getId());
//                System.out.println("读线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis());
                readStatus();
@@ -179,10 +188,12 @@
                    delRgvTask = false;
                    continue;
                }
                Thread.sleep(40);
                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);
                }
            } catch (Exception e) {
@@ -300,7 +311,7 @@
                write(issued);
                rgvTaskProtocol.setAvoid(0);
                Thread.sleep(200);
//                Thread.sleep(200);
                RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
            } catch (Exception e) {
@@ -328,12 +339,12 @@
                continue;
            }
            try {
                Thread.sleep(50);
                Thread.sleep(100);
                rgvRun = RgvRunCache.getRgvRun();
//                System.out.println(JSON.toJSON(rgvRun));
                // 休眠 1 秒
                if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 1000) {
                if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 500) {
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                } else {
                    continue;
@@ -828,6 +839,67 @@
                            return false;
                        }
                    }
                    TaskProtocol nowPosRunTask2 = taskProtocolCacheOther.getNowPosRunTask2();
                    if (!Cools.isEmpty(nowPosRunTask2)){
                        boolean signNowPosRun = true;
                        boolean signNowPosA = true;
                        if (targetPosition - rgvProtocol.getRgvPos()>0){
                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()>0){
                                if (rgvProtocol.getRgvPos()>rgvProtocolOther.getRgvPos()){
                                    signNowPosA = false;
                                    signNowPosRun = false;
                                }
                            }
                        } else if (targetPosition - rgvProtocol.getRgvPos()<0){
                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()<0){
                                if (rgvProtocol.getRgvPos()<rgvProtocolOther.getRgvPos()){
                                    signNowPosA = false;
                                    signNowPosRun = false;
                                }
                            }
                        }
                        if (signNowPosA){
                            if (nowPosRunTask2.getTaskStatus()==3){
                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
                                if (Math.abs(onePos - twoPos)>100){
                                    if (onePos-50>twoPos+50){
                                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask2.getTargetPositionStaNoPlcId());
                                        StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask2.getTargetPositionStaNo());
                                        if (staProtocol == null ) {
                                            signNowPosRun =false;
                                        }
                                        if (signNowPosRun){
                                            // 判断是否满足入库条件
                                            if (staProtocol.isAutoing() && !staProtocol.isLoading()
                                            ){
                                                errorRgv = slave.getOtherId()+"号RGV等待作业...";
                                                return false;
                                            }
                                        }
                                        signNowPosRun =false;
                                    }
                                }
                            } else {
                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
                                if (twoPos<100){
                                    errorRgv = slave.getOtherId()+"号RGV等待作业...";
                                    return false;
                                }
                                if (Math.abs(onePos - twoPos)>100){
                                    if (onePos-50>twoPos+50){
                                        signNowPosRun =false;
                                    }
                                }
                            }
                        }
                        if (signNowPosRun){
                            errorRgv = slave.getOtherId()+"号RGV等待作业...";
                            return false;
                        }
                    }
                    long avoid = targetPosition - rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
                    if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
                        log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
@@ -991,11 +1063,18 @@
//            OutputQueue.RGV.offer(MessageFormat.format("【{0}】RGV plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
            log.error("RGV plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
            try{
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGVplc连接失败");
            } catch (Exception e2){
            if (System.currentTimeMillis()-currentTimeMilliConnectRgv>1000*60*10){
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGVplc连接失败");
                } catch (Exception e2){
//                log.error("e2:"+e2.getMessage());
                }
                if (currentTimeMilliConnectRgv == 0){
                    currentTimeMilliConnectRgv = System.currentTimeMillis()-1000*60*10-1;
                } else {
                    currentTimeMilliConnectRgv = System.currentTimeMillis();
                }
            }
        }
        initRgv();
@@ -1026,6 +1105,16 @@
                }
                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 8));
//                rgvProtocol.setStatus((short)1);
                //作业启动中  解决任务下发后小车状态未更新,小车状态不及时
                if (this.wrkSign == 1 && rgvProtocol.getStatus()!=(short)1){
                    this.wrkSign = 0;
                }
                if (this.wrkSign == 1){
                    rgvProtocol.setStatus((short)110);
                }
                rgvProtocol.setTaskNo((long)siemensNet.getByteTransform().TransInt32(result.Content, 10));
                rgvProtocol.setRgvNo((int)siemensNet.getByteTransform().TransInt16(result.Content, 14));
@@ -1044,8 +1133,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()));
//                // 工位1复位信号
//                if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING)
@@ -1137,9 +1228,8 @@
        }
//        convertRow(command);
//        taskProtocol.setRgvNo(slave.getId());
        Long[] array = new Long[11];
//        Long[] array = new Long[11];
        OperateResult result41 = siemensNet.Write("DB100.12.0", false);
//        array[0] = taskProtocol.getAckFinish1();
//        array[1] = taskProtocol.getTaskNo();
//        array[2] = taskProtocol.getTaskMode();
@@ -1151,8 +1241,13 @@
        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);
        OperateResult result4 = siemensNet.Write("DB100.12.0", true);
        this.wrkSign = 1;
//        log.info("任务下发线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis());
//        if (taskProtocol.getAckFinish1() == 0) {
//            short commandFinish = 3;  //工位1、2任务同时写入
//            Thread.sleep(100L);
@@ -1180,6 +1275,7 @@
        } catch (Exception ignore) {
        }
        readStatus();
        if (result != null && result.IsSuccess) {
//            Thread.sleep(50);
//            this.readStatus();
@@ -1208,6 +1304,7 @@
        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:右
        log.info("任务完成下发线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis());
        try {
            // 日志记录