自动化立体仓库 - WCS系统
Junjie
2023-12-08 ff2b6e2329ae2c5d3fede2f9413170fd6e87c46c
src/main/java/com/zy/core/thread/LiftThread.java
@@ -32,6 +32,7 @@
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
@@ -87,6 +88,8 @@
                    case 3:
                        assignWork((LiftAssignCommand) task.getData());
                        break;
                    case 4:
                        write2((HashMap<String, Object>) task.getData());
                    default:
                        break;
                }
@@ -326,7 +329,7 @@
        redisCommand.setCommandStep(0);//命令执行步序
        redisCommand.setAssignCommand(assignCommand);//命令
        //任务数据保存到redis
        redisUtil.set("lift_wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand));
        redisUtil.set(RedisKeyType.LIFT.key + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand));
        liftProtocol.setAssignCommand(assignCommand);
        liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);
        //执行下发任务
@@ -341,7 +344,7 @@
        }
        WrkMastMapper wrkMastMapper = SpringUtils.getBean(WrkMastMapper.class);
        Object o = redisUtil.get("lift_wrk_no_" + wrkNo);
        Object o = redisUtil.get(RedisKeyType.LIFT.key + wrkNo);
        if (o == null) {
            return false;
        }
@@ -354,6 +357,10 @@
        //取出命令
        NyLiftCommand command = commands.get(commandStep);
        if (!redisCommand.getLiftNo().equals(liftProtocol.getLiftNo())) {
            return false;
        }
        //下发命令
        if (!write(command)) {
@@ -373,7 +380,7 @@
            short[] commandArr = getCommandArr(command);//获取命令报文
            BasLiftOpt opt = new BasLiftOpt(
                    redisCommand.getWrkNo().intValue(),
                    redisCommand.getLiftNo().intValue(),
                    liftProtocol.getLiftNo().intValue(),
                    new Date(),
                    null,
                    null,
@@ -381,6 +388,7 @@
                    JSON.toJSONString(command),
                    JSON.toJSONString(liftProtocol)
            );
            opt.setDeviceWrk(command.getTaskNo().toString());//设备工作号
            liftOptService.insert(opt);
        }
@@ -391,11 +399,11 @@
            commandStep++;
            redisCommand.setCommandStep(commandStep);
            //任务数据保存到redis
            redisUtil.set("lift_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
            redisUtil.set(RedisKeyType.LIFT.key + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
        }else {
            //已执行完成
            //删除redis
            redisUtil.del("lift_wrk_no_" + redisCommand.getWrkNo());
            redisUtil.del(RedisKeyType.LIFT.key + redisCommand.getWrkNo());
            //对主线程抛出等待确认状态waiting
            liftProtocol.setProtocolStatus(LiftProtocolStatusType.WAITING);
@@ -417,6 +425,35 @@
        return true;
    }
    //给提升机写入进出状态
    private void write2(HashMap<String,Object> data) {
//        //出
//        status = true;
//        //进
//        status = false;
        int lev = Integer.parseInt(data.get("lev").toString());
        boolean status = Boolean.parseBoolean(data.get("status").toString());
        ArrayList<String> list = new ArrayList<String>(){{
            add("83.8.0");
            add("83.8.1");
            add("83.8.2");
            add("83.8.3");
            add("83.8.4");
            add("83.8.5");
            add("83.8.6");
            add("83.8.7");
            add("83.9.0");
            add("83.9.1");
        }};
        OperateResult result = siemensS7Net.Write("DB" + list.get(lev - 1), status);
        if (result != null && result.IsSuccess) {
            News.info("提升机命令下发[id:{}]", slave.getId());
        } else {
            News.error("写入提升机plc数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
        }
    }
    /******************************************************************************************/
    /**************************************** 测试专用 *****************************************/
    /*****************************************************************************************/