#
Junjie
2025-01-07 fd5d26ae0d1dbf71f90b99ef84d09a34e2d10d83
#
11个文件已修改
192 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/ForkLiftController.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ShuttleController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/action/ForkLiftAction.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/action/ShuttleAction.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/RedisKeyType.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/ForkLiftSlave.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/ForkLiftProtocol.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ForkLiftController.java
@@ -164,7 +164,7 @@
    @RequestMapping(value = "/command/query")
    public R liftCommandQuery(@RequestParam("wrkNo") Integer wrkNo) {
        Object o = redisUtil.get(RedisKeyType.LIFT.key + wrkNo);
        Object o = redisUtil.get(RedisKeyType.FORK_LIFT_WORK_FLAG.key + wrkNo);
        if (o == null) {
            return R.error();
        }
@@ -176,13 +176,13 @@
    @RequestMapping(value = "/command/rollback")
    public R liftCommandRollback(@RequestParam("wrkNo") Integer wrkNo
            , @RequestParam("commandStep") Integer commandStep) {
        Object o = redisUtil.get(RedisKeyType.LIFT.key + wrkNo);
        Object o = redisUtil.get(RedisKeyType.FORK_LIFT_WORK_FLAG.key + wrkNo);
        if (o == null) {
            return R.error();
        }
        LiftRedisCommand redisCommand = JSON.parseObject(o.toString(), LiftRedisCommand.class);
        redisCommand.setCommandStep(commandStep);
        redisUtil.set(RedisKeyType.LIFT.key + wrkNo, JSON.toJSONString(redisCommand));
        redisUtil.set(RedisKeyType.FORK_LIFT_WORK_FLAG.key + wrkNo, JSON.toJSONString(redisCommand));
        return R.ok();
    }
@@ -191,7 +191,7 @@
    public R liftCommandCompleteSwitch(@RequestParam("wrkNo") Integer wrkNo
            , @RequestParam("commandStep") Integer commandStep
            , @RequestParam("complete") Integer complete) {
        Object o = redisUtil.get(RedisKeyType.LIFT.key + wrkNo);
        Object o = redisUtil.get(RedisKeyType.FORK_LIFT_WORK_FLAG.key + wrkNo);
        if (o == null) {
            return R.error();
        }
@@ -200,14 +200,14 @@
        List<ForkLiftCommand> commands = assignCommand.getCommands();
        ForkLiftCommand command = commands.get(commandStep);
        command.setComplete(complete != 0);
        redisUtil.set(RedisKeyType.LIFT.key + wrkNo, JSON.toJSONString(redisCommand));
        redisUtil.set(RedisKeyType.FORK_LIFT_WORK_FLAG.key + wrkNo, JSON.toJSONString(redisCommand));
        return R.ok();
    }
    //重启任务(命令)
    @RequestMapping(value = "/command/restart")
    public R liftCommandCompleteSwitch(@RequestParam("wrkNo") Integer wrkNo) {
        Object o = redisUtil.get(RedisKeyType.LIFT.key + wrkNo);
        Object o = redisUtil.get(RedisKeyType.FORK_LIFT_WORK_FLAG.key + wrkNo);
        if (o == null) {
            return R.error();
        }
@@ -232,11 +232,11 @@
    //删除任务(命令)
    @RequestMapping(value = "/command/del")
    public R liftCommandDel(@RequestParam("wrkNo") Integer wrkNo) {
        Object o = redisUtil.get(RedisKeyType.LIFT.key + wrkNo);
        Object o = redisUtil.get(RedisKeyType.FORK_LIFT_WORK_FLAG.key + wrkNo);
        if (o == null) {
            return R.error();
        }
        redisUtil.del(RedisKeyType.LIFT.key + wrkNo);
        redisUtil.del(RedisKeyType.FORK_LIFT_WORK_FLAG.key + wrkNo);
        return R.ok();
    }
src/main/java/com/zy/asrs/controller/ShuttleController.java
@@ -81,7 +81,7 @@
            shuttleData.put("moveAdvancePath", null);//穿梭车预计路径
            if (shuttleProtocol.getTaskNo() != 0) {
                //存在任务,获取指令
                Object object = redisUtil.get(RedisKeyType.SHUTTLE.key + shuttleProtocol.getTaskNo());
                Object object = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo());
                if (object != null) {
                    ShuttleRedisCommand redisCommand = JSON.parseObject(object.toString(), ShuttleRedisCommand.class);
                    shuttleData.put("moveAdvancePath", redisCommand.getAssignCommand().getNodes());//穿梭车预计路径
@@ -165,7 +165,7 @@
    @RequestMapping(value = "/command/query")
    public R shuttleCommandQuery(@RequestParam("wrkNo") Integer wrkNo) {
        Object o = redisUtil.get(RedisKeyType.SHUTTLE.key + wrkNo);
        Object o = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + wrkNo);
        if (o == null) {
            return R.error();
        }
@@ -177,13 +177,13 @@
    @RequestMapping(value = "/command/rollback")
    public R shuttleCommandRollback(@RequestParam("wrkNo") Integer wrkNo
            , @RequestParam("commandStep") Integer commandStep) {
        Object o = redisUtil.get(RedisKeyType.SHUTTLE.key + wrkNo);
        Object o = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + wrkNo);
        if (o == null) {
            return R.error();
        }
        ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class);
        redisCommand.setCommandStep(commandStep);
        redisUtil.set(RedisKeyType.SHUTTLE.key + wrkNo, JSON.toJSONString(redisCommand));
        redisUtil.set(RedisKeyType.SHUTTLE_WORK_FLAG.key + wrkNo, JSON.toJSONString(redisCommand));
        return R.ok();
    }
@@ -192,7 +192,7 @@
    public R shuttleCommandCompleteSwitch(@RequestParam("wrkNo") Integer wrkNo
            , @RequestParam("commandStep") Integer commandStep
            , @RequestParam("complete") Integer complete) {
        Object o = redisUtil.get(RedisKeyType.SHUTTLE.key + wrkNo);
        Object o = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + wrkNo);
        if (o == null) {
            return R.error();
        }
@@ -201,14 +201,14 @@
        List<ShuttleCommand> commands = assignCommand.getCommands();
        ShuttleCommand command = commands.get(commandStep);
        command.setComplete(complete != 0);
        redisUtil.set(RedisKeyType.SHUTTLE.key + wrkNo, JSON.toJSONString(redisCommand));
        redisUtil.set(RedisKeyType.SHUTTLE_WORK_FLAG.key + wrkNo, JSON.toJSONString(redisCommand));
        return R.ok();
    }
    //重启任务(命令)
    @RequestMapping(value = "/command/restart")
    public R shuttleCommandCompleteSwitch(@RequestParam("wrkNo") Integer wrkNo) {
        Object o = redisUtil.get(RedisKeyType.SHUTTLE.key + wrkNo);
        Object o = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + wrkNo);
        if (o == null) {
            return R.error();
        }
@@ -230,11 +230,11 @@
    //删除任务(命令)
    @RequestMapping(value = "/command/del")
    public R liftCommandDel(@RequestParam("wrkNo") Integer wrkNo) {
        Object o = redisUtil.get(RedisKeyType.SHUTTLE.key + wrkNo);
        Object o = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + wrkNo);
        if (o == null) {
            return R.error();
        }
        redisUtil.del(RedisKeyType.SHUTTLE.key + wrkNo);
        redisUtil.del(RedisKeyType.SHUTTLE_WORK_FLAG.key + wrkNo);
        return R.ok();
    }
src/main/java/com/zy/core/action/ForkLiftAction.java
@@ -50,7 +50,7 @@
        redisCommand.setCommandStep(0);//命令执行步序
        redisCommand.setAssignCommand(assignCommand);//命令
        //任务数据保存到redis
        if (redisUtil.set(RedisKeyType.FORK_LIFT.key + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand))) {
        if (redisUtil.set(RedisKeyType.FORK_LIFT_WORK_FLAG.key + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand))) {
            forkLiftThread.setSyncTaskNo(assignCommand.getTaskNo().intValue());
            return true;
        }
@@ -58,7 +58,7 @@
    }
    public synchronized boolean executeWork(Integer liftNo, Integer taskNo) {
        Object obj = redisUtil.get(RedisKeyType.FORK_LIFT.key + taskNo);
        Object obj = redisUtil.get(RedisKeyType.FORK_LIFT_WORK_FLAG.key + taskNo);
        if (obj == null) {
            return false;
        }
@@ -125,7 +125,7 @@
            //更新redis数据
            redisCommand.setCommandStep(commandStep);
            // 更新redis数据
            redisUtil.set(RedisKeyType.FORK_LIFT.key + taskNo, JSON.toJSONString(redisCommand));
            redisUtil.set(RedisKeyType.FORK_LIFT_WORK_FLAG.key + taskNo, JSON.toJSONString(redisCommand));
        }
        return true;
src/main/java/com/zy/core/action/ShuttleAction.java
@@ -61,7 +61,7 @@
        redisCommand.setCommandStep(0);//命令执行步序
        redisCommand.setAssignCommand(assignCommand);//命令
        //任务数据保存到redis
        if (redisUtil.set(RedisKeyType.SHUTTLE.key + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand, SerializerFeature.DisableCircularReferenceDetect))) {
        if (redisUtil.set(RedisKeyType.SHUTTLE_WORK_FLAG.key + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand, SerializerFeature.DisableCircularReferenceDetect))) {
            shuttleThread.setSyncTaskNo(assignCommand.getTaskNo());
            return true;
        }
@@ -69,7 +69,7 @@
    }
    public synchronized boolean executeWork(Integer shuttleNo, Integer taskNo) {
        Object obj = redisUtil.get(RedisKeyType.SHUTTLE.key + taskNo);
        Object obj = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + taskNo);
        if (obj == null) {
            return false;
        }
@@ -192,7 +192,7 @@
            if(updateCommand) {
                // 更新redis数据
                redisUtil.set(RedisKeyType.SHUTTLE.key + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand, SerializerFeature.DisableCircularReferenceDetect));
                redisUtil.set(RedisKeyType.SHUTTLE_WORK_FLAG.key + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand, SerializerFeature.DisableCircularReferenceDetect));
            }
            if (!command.getComplete()) {
@@ -226,7 +226,7 @@
                }
                //删除redis
                redisUtil.del(RedisKeyType.SHUTTLE.key + redisCommand.getWrkNo());
                redisUtil.del(RedisKeyType.SHUTTLE_WORK_FLAG.key + redisCommand.getWrkNo());
                return false;//禁止再下发命令
            }
        }
@@ -264,7 +264,7 @@
        //更新redis数据
        redisCommand.setCommandStep(commandStep);
        //任务数据保存到redis
        redisUtil.set(RedisKeyType.SHUTTLE.key + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
        redisUtil.set(RedisKeyType.SHUTTLE_WORK_FLAG.key + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
        return true;
    }
src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -2,9 +2,10 @@
public enum RedisKeyType {
    SHUTTLE("shuttle_wrk_no_"),
    LIFT("lift_wrk_no_"),
    FORK_LIFT("fork_lift_wrk_no_"),
    SHUTTLE_WORK_FLAG("shuttle_wrk_no_"),
    SHUTTLE_FLAG("shuttle_"),
    FORK_LIFT_WORK_FLAG("fork_lift_wrk_no_"),
    FORK_LIFT_FLAG("fork_lift_"),
    MAP("realtimeBasMap_"),
    BASIC_MAP("basicMap_"),
    ;
src/main/java/com/zy/core/model/ForkLiftSlave.java
@@ -11,6 +11,10 @@
@Data
public class ForkLiftSlave extends Slave {
    private Integer rack;
    private Integer slot;
    //提升机站点
    private List<Sta> sta = new ArrayList<>();
src/main/java/com/zy/core/model/protocol/ForkLiftProtocol.java
@@ -1,11 +1,14 @@
package com.zy.core.model.protocol;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.BasLiftErr;
import com.zy.asrs.service.BasLiftErrService;
import com.zy.common.utils.RedisUtil;
import com.zy.core.enums.ForkLiftIoModeType;
import com.zy.core.enums.ForkLiftProtocolStatusType;
import com.zy.core.enums.ForkLiftTaskModeType;
import com.zy.core.enums.RedisKeyType;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@@ -30,6 +33,11 @@
     * 任务号
     */
    private Integer taskNo = 0;
    /**
     * PLC任务号
     */
    private Integer wrkNo;
    /**
     * 任务状态
@@ -159,6 +167,25 @@
        return basLiftErr.getErrName();
    }
    public Integer getTaskNo() {
        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
        if (null != redisUtil) {
            Object o = redisUtil.get(RedisKeyType.FORK_LIFT_FLAG.key + this.liftNo);
            if (!Cools.isEmpty(o)) {
                this.taskNo = Integer.parseInt(String.valueOf(o));
            }
        }
        return this.taskNo == null ? 0 : this.taskNo;
    }
    public synchronized void setSyncTaskNo(Integer taskNo) {
        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
        if (null != redisUtil) {
            redisUtil.set(RedisKeyType.FORK_LIFT_FLAG.key + this.liftNo, taskNo);
            this.taskNo = taskNo;
        }
    }
    @Override
    public ForkLiftProtocol clone() {
        try {
src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
@@ -195,7 +195,7 @@
    public Integer getTaskNo() {
        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
        if (null != redisUtil) {
            Object o = redisUtil.get(RedisKeyType.SHUTTLE.key + this.shuttleNo);
            Object o = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + this.shuttleNo);
            if (!Cools.isEmpty(o)) {
                this.taskNo = Integer.parseInt(String.valueOf(o));
            }
@@ -206,7 +206,7 @@
    public synchronized void setSyncTaskNo(Integer taskNo) {
        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
        if (null != redisUtil) {
            redisUtil.set(RedisKeyType.SHUTTLE.key + this.shuttleNo, taskNo);
            redisUtil.set(RedisKeyType.SHUTTLE_FLAG.key + this.shuttleNo, taskNo);
            this.taskNo = taskNo;
        }
    }
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -106,7 +106,7 @@
                        continue;
                    }
                    Object object = redisUtil.get(RedisKeyType.SHUTTLE.key + slave.getId());
                    Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + slave.getId());
                    if (object == null) {
                        continue;
                    }
@@ -713,7 +713,7 @@
        ArrayList<NavigateNode> path = new ArrayList<>();
        if (shuttleProtocol.getTaskNo() != 0) {
            //存在任务,获取指令
            Object object = redisUtil.get(RedisKeyType.SHUTTLE.key + shuttleProtocol.getTaskNo());
            Object object = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo());
            if (object != null) {
                ShuttleRedisCommand redisCommand = null;
                try {
src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java
@@ -1,6 +1,8 @@
package com.zy.core.thread.impl;
import HslCommunication.Core.Types.OperateResult;
import HslCommunication.Core.Types.OperateResultExOne;
import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
@@ -14,9 +16,12 @@
import com.zy.common.ExecuteSupport;
import com.zy.common.utils.RedisUtil;
import com.zy.core.News;
import com.zy.core.action.ForkLiftAction;
import com.zy.core.action.ShuttleAction;
import com.zy.core.cache.OutputQueue;
import com.zy.core.enums.ForkLiftProtocolStatusType;
import com.zy.core.enums.ForkLiftTaskModeType;
import com.zy.core.enums.RedisKeyType;
import com.zy.core.model.CommandResponse;
import com.zy.core.model.ForkLiftSlave;
import com.zy.core.model.command.ForkLiftCommand;
@@ -56,7 +61,21 @@
    @Override
    public boolean connect() {
        return false;
        boolean result = false;
        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1500, slave.getIp());
        siemensS7Net.setRack(slave.getRack().byteValue());
        siemensS7Net.setSlot(slave.getSlot().byteValue());
        OperateResult connect = siemensS7Net.ConnectServer();
        if(connect.IsSuccess){
            result = true;
            OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】货叉提升机连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
            News.info("货叉提升机连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】货叉提升机连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
            News.error("货叉提升机连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
        }
        // siemensS7Net.ConnectClose();
        return result;
    }
    @Override
@@ -72,9 +91,28 @@
            try {
                read();
                Thread.sleep(200);
                execute();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    private void execute() {
        ForkLiftAction forkLiftAction = SpringUtils.getBean(ForkLiftAction.class);
        if (forkLiftAction == null) {
            return;
        }
        Object object = redisUtil.get(RedisKeyType.FORK_LIFT_FLAG.key + slave.getId());
        if (object == null) {
            return;
        }
        Integer taskNo = Integer.valueOf(String.valueOf(object));
        if (taskNo != 0) {
            //存在任务需要执行
            boolean result = forkLiftAction.executeWork(slave.getId(), taskNo);
        }
    }
@@ -109,8 +147,8 @@
                //----------读取提升机状态-----------
                //模式
                forkLiftProtocol.setModel((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 0));
                //任务号
                forkLiftProtocol.setTaskNo((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 4));
                //PLC任务号
                forkLiftProtocol.setWrkNo((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 4));
                //任务状态
                forkLiftProtocol.setProtocolStatus((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 8));
                //任务模式
@@ -194,22 +232,59 @@
    @Override
    public CommandResponse pickAndPut(ForkLiftCommand command) {
        return null;
        CommandResponse response = new CommandResponse(false);
        short[] array = new short[4];
        array[0] = command.getTaskNo();//任务号
        array[1] = command.getMode();//任务模式
        array[2] = command.getPick();//取货数据
        array[3] = command.getPut();//放货数据
        OperateResult result = siemensS7Net.Write("DB103.0", array);
        if (result.IsSuccess) {
            OperateResult result2 = siemensS7Net.Write("DB103.16", command.getConfirm());
            if (result2.IsSuccess) {
                response.setResult(true);
            }
        }
        return response;
    }
    @Override
    public CommandResponse shuttleSwitch(ForkLiftCommand command) {
        return null;
        CommandResponse response = new CommandResponse(false);
        short[] array = new short[4];
        array[0] = command.getTaskNo();//任务号
        array[1] = command.getMode();//任务模式
        array[2] = command.getPick();//取货数据
        array[3] = command.getPut();//放货数据
        OperateResult result = siemensS7Net.Write("DB103.0", array);
        if (result.IsSuccess) {
            OperateResult result2 = siemensS7Net.Write("DB103.16", command.getConfirm());
            if (result2.IsSuccess) {
                response.setResult(true);
            }
        }
        return response;
    }
    @Override
    public CommandResponse reset(ForkLiftCommand command) {
        return null;
        CommandResponse response = new CommandResponse(false);
        return response;
    }
    @Override
    public boolean isIdle() {
        return false;
        if (this.forkLiftProtocol.getTaskNo() == null
                || this.forkLiftProtocol.getProtocolStatus() == null
        ) {
            return false;
        }
        boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id
                && this.forkLiftProtocol.getTaskNo() == 0;
        return res;
    }
    @Override
@@ -229,12 +304,13 @@
    @Override
    public boolean setSyncTaskNo(Integer taskNo) {
        return false;
        this.forkLiftProtocol.setSyncTaskNo(taskNo);
        return true;
    }
    @Override
    public int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type) {
        return 0;
        return taskNo;
    }
    @Override
src/main/resources/application.yml
@@ -163,6 +163,8 @@
    id: 1
    ip: 10.10.10.131
    port: 102
    rack: 0
    slot: 0
    staRow: 13
    staBay: 22
    sta[0]: