*
L
3 天以前 85d0972114327e5a1f515a00895d51dc32a4f2b4
src/main/java/com/zy/core/thread/RgvThread.java
@@ -65,6 +65,7 @@
    private boolean resetFlag2 = false;
    private boolean connectRgv = false;
    private boolean connectRgv2 = false;
    public Long currentTimeMilliConnectRgv= 0L;
    private boolean delRgvTask = false;
@@ -77,8 +78,7 @@
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        initRgv();
//        initRgv();
        // 启动线程自动重连
        new Thread(this::rgvConnect).start();
@@ -109,6 +109,8 @@
                    }
                }
            } catch (Exception e) {
                connectRgv = false;
                connectRgv2 = false;
                log.error("rgv连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
@@ -126,8 +128,9 @@
        while (true) {
            try {
                if(!connectRgv){
                    connectRgv2 = false;
                    try {
                        Thread.sleep(1000L);
                        Thread.sleep(20L);
                    } catch (Exception e){
                    }
@@ -138,8 +141,11 @@
//                System.out.println("读线程,小车号"+ slave.getId()+"时间戳:"+System.currentTimeMillis());
                readStatus();
                connectRgv2 = connectRgv;
            } catch (Exception e) {
                connectRgv = false;
                connectRgv2 = false;
                log.error("RGV数据读取线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
@@ -174,7 +180,7 @@
                    delRgvTask = false;
                    continue;
                }
                Thread.sleep(50L);
                Thread.sleep(100L);
                OperateResultExOne<byte[]> result = siemensNet.Read("DB100.12", (short) 1);
                boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 0, 1);
@@ -183,6 +189,8 @@
                    OperateResult result4 = siemensNet.Write("DB100.12.0", false);
                }
            } catch (Exception e) {
                connectRgv = false;
                connectRgv2 = false;
                log.error("RGV数据任务下发复位线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
@@ -190,7 +198,7 @@
                } catch (Exception e2){
//                    log.error("e2:"+e2.getMessage());
                }
                initRgv();
                initRgv2();
//                e.printStackTrace();
            }
@@ -199,83 +207,20 @@
    }
    /**
     * 任务下发
     */
//    private void taskWalkIssued2() {
//        while (true) {
//            try {
//                // 休眠 1 秒
//                Thread.sleep(100);
//                if (!deviceDetection()) {
//                    continue;
//                }
//                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
//                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
//                if (rgvProtocol == null || rgvTaskProtocol == null) {
//                    initRgv();
//                    rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
//                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
//                }
//                if (rgvTaskProtocol.getAvoid() != 0) {
//                    continue;
//                }
//                if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE)){
//                    continue;
//                }
//                if (rgvProtocol.getLoaded() == -1){
//                    continue;
//                }
//
//                List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getAllWalkTaskProtocol();
//                for (TaskProtocol taskProtocol : allTakeTaskProtocol) {
//                    if (taskProtocol.getIsRunning() == 1) {//准备下发
//                        // 双车
//                        if (rgvOtherStatusEnable()) {
//                            //另一台车是否允许此台车执行
//                            if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
//                                continue;
//                            }
//                        }
//                        if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50
//                                && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){
//                            taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
//                            break;
//                        } else {
//                            TaskProtocol issued = new TaskProtocol(taskProtocol,true);
//                            write(issued);
//                            taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
//                            break;
//                        }
//                    }
//                }
//            } catch (Exception e) {
//                log.error("RGV任务下发线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
//                try{
//                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
//                    deviceErrorService.addDeviceError("rgvErr", slave.getId(), "RGV任务下发线程异常"+e.getMessage());
//                } catch (Exception e2){
//                    log.error("e2:"+e2.getMessage());
//                }
////                e.printStackTrace();
//            }
//        }
//    }
    /**
     * 漫游
     */
    private void taskWalkIssued() {
        while (true) {
            try {
                if(!connectRgv){
                if(!connectRgv2){
                    try {
                        Thread.sleep(100L);
                        Thread.sleep(1000L);
                    } catch (Exception e){
                    }
                    continue;
                }
                // 休眠 1 秒
                // 休眠 0.1 秒
                Thread.sleep(100);
                if (!deviceDetection()) {
@@ -283,7 +228,7 @@
                }
                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                if (rgvTaskProtocol == null) {
                    initRgv();
                    initRgv2();
                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                }
                if (rgvTaskProtocol.getAvoid() != 1) {
@@ -301,6 +246,8 @@
                RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
            } catch (Exception e) {
                connectRgv = false;
                connectRgv2 = false;
                log.error("RGV行走任务下发线程异常!!!" + e.getMessage());
//                e.printStackTrace();
            }
@@ -312,7 +259,7 @@
     */
    private void taskIssued() {
        while (true) {
            if(!connectRgv){
            if(!connectRgv2){
                try {
                    Thread.sleep(1000L);
                } catch (Exception e){
@@ -325,7 +272,7 @@
                continue;
            }
            try {
                Thread.sleep(100);
                Thread.sleep(200);
                rgvRun = RgvRunCache.getRgvRun();
//                System.out.println(JSON.toJSON(rgvRun));
@@ -348,7 +295,7 @@
                RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                if (rgvProtocol == null || rgvTaskProtocol == null) {
                    initRgv();
                    initRgv2();
                    rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                }
@@ -458,6 +405,8 @@
                rgvRun.setRgvNo(slave.getOtherId());
                RgvRunCache.updateRgvStatus(rgvRun);
            } catch (Exception e) {
                connectRgv = false;
                connectRgv2 = false;
                log.error("RGV任务下发线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
@@ -1034,6 +983,41 @@
    }
    /**
     * 初始化RGV状态
     */
    private void initRgv2() {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
        if (rgvProtocol == null) {
            rgvProtocol = new RgvProtocol();
            rgvProtocol.setRgvNo(slave.getId());
        }
        rgvProtocol.setMode((short) -1);
        rgvProtocol.setStatus((short) -1);
        rgvProtocol.setWalkPos((short) 0);
        rgvProtocol.setRgvPos(0L);
        rgvProtocol.setAlarm((short) 0);
        rgvProtocol.setxSpeed((short) 0);
        rgvProtocol.setxDistance((short) 0);
        rgvProtocol.setxDuration((short) 0);
        rgvProtocol.setCarBodyJiaoMing(0L);
        rgvProtocol.setCarBodyKunPeng(0L);
        rgvProtocol.setStatusEnable(true);
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        if (rgvTaskProtocol == null) {
            rgvTaskProtocol = new RgvTaskProtocol();
            rgvTaskProtocol.setRgvNo(slave.getId());
        }
        rgvTaskProtocol.setAvoid(0);
        rgvTaskProtocol.setAvoidingTheDestination(0L);
        RgvStatusCache.updateRgvStatus(rgvProtocol);
        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
    }
    @Override
    public boolean connect() {
        boolean result = false;
@@ -1063,7 +1047,7 @@
                }
            }
        }
        initRgv();
        initRgv2();
//        siemensNet.ConnectClose();
        return result;
    }
@@ -1170,8 +1154,9 @@
                RgvStatusCache.updateRgvStatus(rgvProtocol);
            } else {
                initRgv();
                connectRgv = false;
                connectRgv2 = false;
                initRgv();
//                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());
@@ -1183,6 +1168,8 @@
                }
            }
        } catch (Exception e) {
            connectRgv = false;
            connectRgv2 = false;
//            e.printStackTrace();
//            OutputQueue.RGV.offer(MessageFormat.format("【{0}】读取RGV plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
            log.error("读取RGV plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());