自动化立体仓库 - WCS系统
#
Junjie
2023-09-19 aac4bc5bdfd808fa7d33ee04924741a4c03944fc
src/main/java/com/zy/core/thread/LiftThread.java
@@ -1,9 +1,7 @@
package com.zy.core.thread;
import HslCommunication.Core.Transfer.DataFormat;
import HslCommunication.Core.Types.OperateResult;
import HslCommunication.Core.Types.OperateResultExOne;
import HslCommunication.ModBus.ModbusTcpNet;
import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
@@ -12,23 +10,19 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.BasLift;
import com.zy.asrs.entity.BasLiftOpt;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.BasLiftOptService;
import com.zy.asrs.service.BasLiftService;
import com.zy.asrs.utils.Utils;
import com.zy.common.utils.CommonUtils;
import com.zy.common.utils.RedisUtil;
import com.zy.core.DevpThread;
import com.zy.core.News;
import com.zy.core.ThreadHandler;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.*;
import com.zy.core.model.LiftSlave;
import com.zy.core.model.Task;
import com.zy.core.model.command.*;
import com.zy.core.model.protocol.LiftStaProtocol;
import com.zy.core.model.protocol.LiftProtocol;
import com.zy.core.model.protocol.StaProtocol;
import lombok.Data;
@@ -50,10 +44,20 @@
    private LiftSlave slave;
    private LiftProtocol liftProtocol;
    private RedisUtil redisUtil;
    private List<LiftStaProtocol> liftStaProtocols = new ArrayList<>();
    public LiftThread(LiftSlave slave,RedisUtil redisUtil) {
        this.slave = slave;
        this.redisUtil = redisUtil;
        //初始化站点
        for (LiftSlave.Sta sta : this.slave.getSta()) {
            LiftStaProtocol liftStaProtocol = new LiftStaProtocol();
            liftStaProtocol.setStaNo(sta.getStaNo());//站点号
            liftStaProtocol.setLev(sta.getLev());//站点楼层
            liftStaProtocols.add(liftStaProtocol);
        }
    }
    @Override
@@ -136,50 +140,47 @@
    private void readStatus() {
        try {
            OperateResultExOne<byte[]> result = siemensS7Net.Read("M100.0", (short) 28);
            if (result.IsSuccess) {
            //获取提升机数据
            OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB4.0", (short) 10);
            if (result1.IsSuccess) {
                if (null == liftProtocol) {
                    liftProtocol = new LiftProtocol();
                    liftProtocol.setLiftNo(slave.getId().shortValue());
                }
                //----------读取提升机状态-----------
                //获取数据
                byte[] content = result.Content;
                //读取4.0-4.7数据
                boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result1.Content, 0, 1);
                //读取5.0-5.7数据
                boolean[] status2 = siemensS7Net.getByteTransform().TransBool(result1.Content, 1, 1);
                //模式
                liftProtocol.setModel(siemensS7Net.getByteTransform().TransBool(content, 0));
                liftProtocol.setModel(status1[0]);
                //忙闲
                liftProtocol.setBusy(siemensS7Net.getByteTransform().TransBool(content, 1));
                liftProtocol.setBusy(status1[1]);
                //前超限
                liftProtocol.setFrontOverrun(siemensS7Net.getByteTransform().TransBool(content, 7));
                liftProtocol.setFrontOverrun(status1[4]);
                //后超限
                liftProtocol.setBackOverrun(siemensS7Net.getByteTransform().TransBool(content, 8));
                liftProtocol.setBackOverrun(status1[5]);
                //左超限
                liftProtocol.setLeftOverrun(siemensS7Net.getByteTransform().TransBool(content, 9));
                liftProtocol.setLeftOverrun(status1[6]);
                //右超限
                liftProtocol.setRightOverrun(siemensS7Net.getByteTransform().TransBool(content, 10));
                liftProtocol.setRightOverrun(status1[7]);
                //超高
                liftProtocol.setOverHeight(siemensS7Net.getByteTransform().TransBool(content, 11));
                liftProtocol.setOverHeight(status2[0]);
                //超重
                liftProtocol.setOverWeight(siemensS7Net.getByteTransform().TransBool(content, 12));
                liftProtocol.setOverWeight(status2[1]);
                //有托盘
                liftProtocol.setHasTray(siemensS7Net.getByteTransform().TransBool(content, 16));
                liftProtocol.setHasTray(status2[5]);
                //有小车
                liftProtocol.setHasCar(siemensS7Net.getByteTransform().TransBool(content, 17));
                liftProtocol.setHasCar(status2[6]);
                //设备故障
                liftProtocol.setDeviceError(siemensS7Net.getByteTransform().TransBool(content, 18));
                liftProtocol.setDeviceError(status2[7]);
                //任务号
                liftProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt16(content, 19));
                //任务地址
                liftProtocol.setTaskAddress(siemensS7Net.getByteTransform().TransInt16(content, 21));
                liftProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt16(result1.Content, 2));
                //目的地址
                liftProtocol.setDistAddress(siemensS7Net.getByteTransform().TransInt16(content, 21));
                liftProtocol.setDistAddress(siemensS7Net.getByteTransform().TransInt16(result1.Content, 4));
                //已完成任务号
                liftProtocol.setCompleteTaskNo(siemensS7Net.getByteTransform().TransInt16(content, 23));
                liftProtocol.setCompleteTaskNo(siemensS7Net.getByteTransform().TransInt16(result1.Content, 6));
                //当前楼层
                liftProtocol.setLev(siemensS7Net.getByteTransform().TransInt16(content, 25));
                ///读取提升机状态-end
                liftProtocol.setLev(siemensS7Net.getByteTransform().TransInt16(result1.Content, 8));
                //将提升机状态保存至数据库
                BasLiftService liftService = SpringUtils.getBean(BasLiftService.class);
@@ -205,7 +206,6 @@
                basLift.setHasTray(liftProtocol.getHasTray());
                basLift.setHasCar(liftProtocol.getHasCar());
                basLift.setDeviceError(liftProtocol.getDeviceError());
                basLift.setTaskAddress(liftProtocol.getTaskAddress().intValue());
                basLift.setDistAddress(liftProtocol.getDistAddress().intValue());
                basLift.setCompleteTaskNo(liftProtocol.getCompleteTaskNo().intValue());
                basLift.setLev(liftProtocol.getLev().intValue());
@@ -213,11 +213,52 @@
                    OutputQueue.LIFT.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
//                    log.info(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
                }
            }else {
                OutputQueue.LIFT.offer(MessageFormat.format("【{0}】{1}提升机plc状态信息失败", DateUtils.convert(new Date()), slave.getId()));
                throw new CoolException(MessageFormat.format( "提升机plc状态信息失败 ===>> [id:{0}] [ip:{1}] [port:{2}]", slave.getId(), slave.getIp(), slave.getPort()));
            }
            Thread.sleep(200);
            //获取提升机站点数据
            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB14.0", (short) (10 * liftStaProtocols.size()));
            if (result1.IsSuccess) {
                for (int i = 0; i < slave.getSta().size(); i++) {
                    LiftStaProtocol liftStaProtocol = liftStaProtocols.get(i);
                    int i1 = 0 + (i * 10);
                    int i2 = 1 + (i * 10);
                    //读取x4.0-x4.7数据
                    boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result2.Content, i1, 1);
                    //读取x5.0-x5.7数据
                    boolean[] status2 = siemensS7Net.getByteTransform().TransBool(result2.Content, i2, 1);
                    //模式
                    liftStaProtocol.setModel(status1[0]);
                    //忙闲
                    liftStaProtocol.setBusy(status1[1]);
                    //有托盘
                    liftStaProtocol.setHasTray(status1[2]);
                    //前超限
                    liftStaProtocol.setFrontOverrun(status1[4]);
                    //后超限
                    liftStaProtocol.setBackOverrun(status1[5]);
                    //左超限
                    liftStaProtocol.setLeftOverrun(status1[6]);
                    //右超限
                    liftStaProtocol.setRightOverrun(status1[7]);
                    //超高
                    liftStaProtocol.setOverHeight(status2[0]);
                    //超重
                    liftStaProtocol.setOverWeight(status2[1]);
                    //有小车
                    liftStaProtocol.setHasCar(status2[6]);
                    //设备故障
                    liftStaProtocol.setDeviceError(status2[7]);
                    //任务号
                    liftStaProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt16(result2.Content, 2));
                    //已完成任务号
                    liftStaProtocol.setCompleteTaskNo(siemensS7Net.getByteTransform().TransInt16(result2.Content, 6));
                }
            }
        } catch (Exception e) {
            OutputQueue.LIFT.offer(MessageFormat.format("【{0}】提升机plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
        }
@@ -327,7 +368,8 @@
                    null,
                    null,
                    JSON.toJSONString(command),
                    JSON.toJSONString(commandArr)
                    JSON.toJSONString(commandArr),
                    JSON.toJSONString(liftProtocol)
            );
            liftOptService.insert(opt);
        }