自动化立体仓库 - WCS系统
Junjie
2023-11-29 35fac40cfc0d636479bde094391e6f237b3116d4
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -274,80 +274,80 @@
            if (err15[5]) { crnProtocol.setAlarm4(72); }
            if (err15[6]) { crnProtocol.setAlarm4(73); }
            boolean[] bool1 = siemensNet.getByteTransform().TransBool(result.Content, 60, 1);    // 62
            crnProtocol.setConnStatus(bool1[0]);
            crnProtocol.setCorrection(bool1[3]);
            crnProtocol.setTuError(bool1[4]);
            crnProtocol.setNoneError(bool1[5]);
            crnProtocol.setStockError(bool1[6]);
            crnProtocol.setJobInvalid(bool1[7]);
            boolean[] bool2 = siemensNet.getByteTransform().TransBool(result.Content, 61, 1);    // 63
            crnProtocol.setIdle(bool2[0]);
            crnProtocol.setControl(bool2[1]);
            crnProtocol.setStopQuasi(bool2[2]);
            crnProtocol.setRunning(bool2[3]);
            crnProtocol.setFault(bool2[4]);
            crnProtocol.setForkHome(bool2[5]);
            crnProtocol.setForkSingleLeft(bool2[6]);
            crnProtocol.setForkSingleRight(bool2[7]);
            boolean[] bool3 = siemensNet.getByteTransform().TransBool(result.Content, 62, 1);    // 64
            crnProtocol.setForkDoubleLeft(bool3[0]);
            crnProtocol.setForkDoubleRight(bool3[1]);
            crnProtocol.setSingleHigh(bool3[2]);
            crnProtocol.setSingleLow(bool3[3]);
            crnProtocol.setDoubleHigh(bool3[4]);
            crnProtocol.setDoubleLow(bool3[5]);
            crnProtocol.setPlatformHigh(bool3[6]);
            crnProtocol.setPlatformLow(bool3[7]);
            boolean[] bool4 = siemensNet.getByteTransform().TransBool(result.Content, 64, 1);    // 66
            crnProtocol.setLoaded((short) (bool4[4]?1:0));  // 有物
//            boolean[] bool1 = siemensNet.getByteTransform().TransBool(result.Content, 60, 1);    // 62
//            crnProtocol.setConnStatus(bool1[0]);
//            crnProtocol.setCorrection(bool1[3]);
//            crnProtocol.setTuError(bool1[4]);
//            crnProtocol.setNoneError(bool1[5]);
//            crnProtocol.setStockError(bool1[6]);
//            crnProtocol.setJobInvalid(bool1[7]);
//            boolean[] bool2 = siemensNet.getByteTransform().TransBool(result.Content, 61, 1);    // 63
//            crnProtocol.setIdle(bool2[0]);
//            crnProtocol.setControl(bool2[1]);
//            crnProtocol.setStopQuasi(bool2[2]);
//            crnProtocol.setRunning(bool2[3]);
//            crnProtocol.setFault(bool2[4]);
//            crnProtocol.setForkHome(bool2[5]);
//            crnProtocol.setForkSingleLeft(bool2[6]);
//            crnProtocol.setForkSingleRight(bool2[7]);
//            boolean[] bool3 = siemensNet.getByteTransform().TransBool(result.Content, 62, 1);    // 64
//            crnProtocol.setForkDoubleLeft(bool3[0]);
//            crnProtocol.setForkDoubleRight(bool3[1]);
//            crnProtocol.setSingleHigh(bool3[2]);
//            crnProtocol.setSingleLow(bool3[3]);
//            crnProtocol.setDoubleHigh(bool3[4]);
//            crnProtocol.setDoubleLow(bool3[5]);
//            crnProtocol.setPlatformHigh(bool3[6]);
//            crnProtocol.setPlatformLow(bool3[7]);
//            boolean[] bool4 = siemensNet.getByteTransform().TransBool(result.Content, 64, 1);    // 66
//            crnProtocol.setLoaded((short) (bool4[4]?1:0));  // 有物
            // 速度
            crnProtocol.setXSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 22));    // 24
            crnProtocol.setYSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 24));    // 26
            crnProtocol.setZSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 26));    // 28
            // 累计里程、时长
            crnProtocol.setXDistance((float) siemensNet.getByteTransform().TransInt32(result.Content, 88));    // 90
            crnProtocol.setYDistance((float) siemensNet.getByteTransform().TransInt32(result.Content, 92));    // 94
            crnProtocol.setXDuration((float) siemensNet.getByteTransform().TransInt32(result.Content, 96));    // 98
            crnProtocol.setYDuration((float) siemensNet.getByteTransform().TransInt32(result.Content, 100));    // 102
//            crnProtocol.setXSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 22));    // 24
//            crnProtocol.setYSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 24));    // 26
//            crnProtocol.setZSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 26));    // 28
//            // 累计里程、时长
//            crnProtocol.setXDistance((float) siemensNet.getByteTransform().TransInt32(result.Content, 88));    // 90
//            crnProtocol.setYDistance((float) siemensNet.getByteTransform().TransInt32(result.Content, 92));    // 94
//            crnProtocol.setXDuration((float) siemensNet.getByteTransform().TransInt32(result.Content, 96));    // 98
//            crnProtocol.setYDuration((float) siemensNet.getByteTransform().TransInt32(result.Content, 100));    // 102
            // 增强
            if (crnProtocol.getForkHome()) {
                crnProtocol.setForkPos(CrnForkPosType.HOME);
            }
            if (crnProtocol.getForkSingleLeft()) {
                crnProtocol.setForkPos(CrnForkPosType.LEFT);
            }
            if (crnProtocol.getForkSingleRight()) {
                crnProtocol.setForkPos(CrnForkPosType.RIGHT);
            }
            if (crnProtocol.getForkDoubleLeft()) {
                crnProtocol.setForkPos(CrnForkPosType._LEFT);
            }
            if (crnProtocol.getForkDoubleRight()) {
                crnProtocol.setForkPos(CrnForkPosType._RIGHT);
            }
            if (crnProtocol.getSingleHigh()) {
                crnProtocol.setLiftPos(CrnLiftPosType.UP);
            }
            if (crnProtocol.getSingleLow()) {
                crnProtocol.setLiftPos(CrnLiftPosType.DOWN);
            }
            if (crnProtocol.getDoubleHigh()) {
                crnProtocol.setLiftPos(CrnLiftPosType._UP);
            }
            if (crnProtocol.getDoubleLow()) {
                crnProtocol.setLiftPos(CrnLiftPosType._DOWN);
            }
            if (crnProtocol.getIdle()) {
                crnProtocol.setStatus(CrnStatusType.IDLE);
            }
//            // 增强
//            if (crnProtocol.getForkHome()) {
//                crnProtocol.setForkPos(CrnForkPosType.HOME);
//            }
//            if (crnProtocol.getForkSingleLeft()) {
//                crnProtocol.setForkPos(CrnForkPosType.LEFT);
//            }
//            if (crnProtocol.getForkSingleRight()) {
//                crnProtocol.setForkPos(CrnForkPosType.RIGHT);
//            }
//            if (crnProtocol.getForkDoubleLeft()) {
//                crnProtocol.setForkPos(CrnForkPosType._LEFT);
//            }
//            if (crnProtocol.getForkDoubleRight()) {
//                crnProtocol.setForkPos(CrnForkPosType._RIGHT);
//            }
//            if (crnProtocol.getSingleHigh()) {
//                crnProtocol.setLiftPos(CrnLiftPosType.UP);
//            }
//            if (crnProtocol.getSingleLow()) {
//                crnProtocol.setLiftPos(CrnLiftPosType.DOWN);
//            }
//            if (crnProtocol.getDoubleHigh()) {
//                crnProtocol.setLiftPos(CrnLiftPosType._UP);
//            }
//            if (crnProtocol.getDoubleLow()) {
//                crnProtocol.setLiftPos(CrnLiftPosType._DOWN);
//            }
//            if (crnProtocol.getIdle()) {
//                crnProtocol.setStatus(CrnStatusType.IDLE);
//            }
            OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
            // 复位信号
            if (crnProtocol.getTaskFinish() == 1) {
            if (crnProtocol.getTaskFinish() == 0) {
                if (resetFlag) {
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setAckFinish((short)1);
@@ -392,7 +392,7 @@
        }
        command.setCrnNo(slave.getId());
        short[] array = new short[12];
        short[] array = new short[10];
        if (Cools.isEmpty(command.getAckFinish())) {
            array[0] = 5;
        } else {
@@ -413,7 +413,7 @@
//        }else {
            array[4] = command.getSourcePosX();
//        }
        array[5] = command.getDestinationPosY();
        array[5] = command.getSourcePosY();
        array[6] = command.getDestinationPosZ();
//        if (rowOne.contains(command.getDestinationPosX())){
@@ -429,9 +429,7 @@
//        }
        array[8] = command.getDestinationPosY();
        array[9] = command.getCommand();
        if (!Cools.isEmpty(command.getAuto())){
            array[10] = command.getAuto();
        }
        // 作业信息
@@ -448,7 +446,7 @@
//        }
        // 日志记录
        try {
//        try {
            if (command.getAckFinish() != 1) {
                BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class);
                BasCrnOpt basCrnOpt = new BasCrnOpt(
@@ -470,7 +468,7 @@
                );
                bean.insert(basCrnOpt);
            }
        } catch (Exception ignore) {}
//        } catch (Exception ignore) {}
        //更新命令日志
        CommandInfoLogService commandInfoLogService = SpringUtils.getBean(CommandInfoLogService.class);
@@ -478,6 +476,23 @@
        CommandInfo commandInfo = commandInfoService.selectById(command.getCommandId());
        CommandInfoLog commandInfoLog = JSON.parseObject(JSON.toJSONString(commandInfo), CommandInfoLog.class);
        commandInfoLog.setId(null);
//        CommandInfoLog commandInfoLog = new CommandInfoLog();
//        if (commandInfo != null) {
//            commandInfoLog = JSON.parseObject(JSON.toJSONString(commandInfo), CommandInfoLog.class);
//            commandInfoLog.setId(null);
//        }else {
//            Date now = new Date();
//            commandInfoLog.setCommand(JSON.toJSONString(command));
//            commandInfoLog.setCommandStatus(3);
//            commandInfoLog.setStartTime(now);
//            commandInfoLog.setExecuteTime(now);
//            commandInfoLog.setCompleteTime(now);
//            commandInfoLog.setDevice(SlaveType.Devp.toString());
//            commandInfoLog.setWrkNo(9999);
//            commandInfoLog.setTaskNo("9999");
//            commandInfoLog.setCommandDesc("手动命令");
//        }
        if (result.IsSuccess) {
            log.warn("堆垛机命令下发[id:{},时间:{}] >>>>> {}", slave.getId(), DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F), JSON.toJSON(command));
@@ -486,6 +501,13 @@
            //更新指令日志
            commandInfoLog.setDeviceLog("指令下发成功");
            commandInfoLogService.insert(commandInfoLog);
            //线程暂存指令ID
            crnProtocol.setCommandId(command.getCommandId());
            //更新指令状态
            commandInfo.setCommandStatus(CommandStatusType.EXECUTE.id);//执行中
            commandInfoService.updateById(commandInfo);
            //更新任务步序
            TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class);
@@ -512,9 +534,27 @@
            log.error("堆垛机写入命令为空");
            return false;
        }
        OperateResult result = new OperateResult();
        short[] array = new short[1];
        array[0] = command.getAuto();
        OperateResult result = siemensNet.Write("DB100.20", array);
        if(command.getAuto() !=0){
            array[0] = command.getAuto();
            result = siemensNet.Write("DB103.0", array);
        }else if (command.getOnlineWrk1() != 0){
            array[0] = command.getOnlineWrk1();
            result = siemensNet.Write("DB103.2", array);
        }else if (command.getOnlineWrk2() !=0){
            array[0] = command.getOnlineWrk2();
            result = siemensNet.Write("DB103.4", array);
        }else if (command.getOnlineWrk3() != 0){
            array[0] = command.getOnlineWrk3();
            result = siemensNet.Write("DB103.6", array);
        }else if (command.getOnlineWrk4() != 0){
            array[0] = command.getOnlineWrk4();
            result = siemensNet.Write("DB103.8", array);
        }
        //更新命令日志
        CommandInfoLogService commandInfoLogService = SpringUtils.getBean(CommandInfoLogService.class);