自动化立体仓库 - WCS系统
Junjie
2023-11-29 8b71bde8d68d5d2bb11fa51a297990cd1474e9c6
src/main/java/com/zy/core/model/protocol/CrnProtocol.java
@@ -1,9 +1,7 @@
package com.zy.core.model.protocol;
import com.zy.core.enums.CrnForkPosType;
import com.zy.core.enums.CrnLiftPosType;
import com.zy.core.enums.CrnModeType;
import com.zy.core.enums.CrnStatusType;
import com.zy.asrs.entity.BasCrnp;
import com.zy.core.enums.*;
import lombok.Data;
/**
@@ -16,49 +14,45 @@
     * 1 = 手动模式
     * 2 = 自动模式
     * 3 = 电脑模式
     * 4 = 手动模式启动中
     * 5 = 自动模式启动中
     * 6 = 电脑模式启动中
     */
    public short mode;
    public Short mode;
    public CrnModeType modeType;
    /**
     * 1 = 急停
     * 堆垛机任务完成
     */
    public short eStop;
    public Short taskFinish;
    /**
     * 异常码
     * 校验结果 1表示检验成功
     */
    public short alarm;
    public Short valid;
    /**
     * 1 = 急停
     */
    public Short eStop;
    /**
     * 任务号
     */
    public short taskNo;
    public Short taskNo = 0;
    /**
     * 堆垛机当前状态
     * 0 = 未知
     * 1 = 空闲
     * 2 = 检查任务数据
     * 3 = 定位到取货位
     * 7 = 取货完成
     * 8 = 等待调度柜允许
     * 9 = 移动到放货位置
     * 10 = 放货中
     * 13 = 搬运完成
     * 14 = 空载避让
     * 15 = 检查任务数据
     * 20 = 检查源位置
     * 21 = 检查目标位置
     * 50 = 移动任务
     * 98 = 任务完成,wcs未确认
     * 99 = 报警
     * 0:空闲,无任务
     * 1:取货定位中
     * 2:取货中
     * 3:取货完成,放货定位中
     * 4:放货中
     * 5:回原点中
     * 6:反原点
     * 7:库位移位
     * 90:任务完成等待WCS确认
     * 99:报警
     */
    public short status;
    public Short status;
    /**
     * 状态枚举
@@ -68,12 +62,122 @@
    /**
     * 堆垛机当前列号
     */
    public short bay;
    public Short bay;
    /**
     * 堆垛机当前层号
     */
    public short level;
    public Short level;
    /**
     * 堆垛机当前排
     */
    public Short row;
    /**
     * 堆垛机当前巷道号
     */
    public Short lane;
    /**
     * 堆垛机通讯状态
     */
    public Boolean connStatus;
    /**
     * 申请入库修正
     */
    public Boolean correction;
    /**
     * 托盘号错
     */
    public Boolean tuError;
    /**
     * 取货无箱
     */
    public Boolean noneError;
    /**
     * 双重入库
     */
    public Boolean stockError;
    /**
     * 作业数据无效
     */
    public Boolean jobInvalid;
    /**
     * 空闲状态
     */
    public Boolean idle;
    /**
     * 控制柜使能
     */
    public Boolean control;
    /**
     * 停准
     */
    public Boolean stopQuasi;
    /**
     * 运行
     */
    public Boolean running;
    /**
     * 故障
     */
    public Boolean fault;
    /**
     * 货叉中位
     */
    public Boolean forkHome;
    /**
     * 单伸位货叉左位
     */
    public Boolean forkSingleLeft;
    /**
     * 单伸位货叉右位
     */
    public Boolean forkSingleRight;
    /**
     * 双伸位货叉左位
     */
    public Boolean forkDoubleLeft;
    /**
     * 双伸位货叉右位
     */
    public Boolean forkDoubleRight;
    /**
     * 单伸位高位
     */
    public Boolean singleHigh;
    /**
     * 单伸位低位
     */
    public Boolean singleLow;
    /**
     * 双伸位高位
     */
    public Boolean doubleHigh;
    /**
     * 双伸位低位
     */
    public Boolean doubleLow;
    /**
     * 站台高位
     */
    public Boolean platformHigh;
    /**
     * 站台低位
     */
    public Boolean platformLow;
    /**
     * 当前货叉位置
@@ -81,50 +185,126 @@
     * 1 = 货叉在左侧
     * 2 = 货叉在右侧
     */
    public short forkPos;
    public Short forkPos = -1;
    private CrnForkPosType forkPosType;
    public CrnForkPosType forkPosType = CrnForkPosType.NONE;
    /**
     * 当前载货台位置
     * 0 = 下定位
     * 1 = 上定位
     */
    public short liftPos;
    public Short liftPos = -1;
    public CrnLiftPosType liftPosType;
    public CrnLiftPosType liftPosType = CrnLiftPosType.ERROR;
    /**
     * 走行在定位
     * 0 = 在定位
     * 1 = 不在定位
     */
    public short walkPos;
    public Short walkPos = 0;
    /**
     * 堆垛机任务完成
     * 拨指位置
     * 0 = 不在定位
     * 1 = 上定位
     * 2 = 下定位
     */
    public short taskFinish;
    public Short fingerPos;
    public CrnFingerPosType fingerPosType;
    /**
     * 载货台有物
     */
    public short loaded;
    public Short loaded;
    /**
     * 堆垛机累计走行距离
     * 堆垛机垂直故障代码(数值显示)
     */
    public int xDistance;
    private Integer alarm1 = 0;
    /**
     * 堆垛机累计升降距离
     * 堆垛机水平故障代码(数值显示)
     */
    public int yDistance;
    private Integer alarm2 = 0;;
    /**
     * 堆垛机累计运行时长
     * 堆垛机货叉故障代码(数值显示)
     */
    public int duration;
    private Integer alarm3 = 0;;
    /**
     * 堆垛机状态故障代码(数值显示)
     */
    private Integer alarm4 = 0;;
    /**
     * 异常1
     */
    private boolean[] error1;
    private CrnError1 crnError1;
    /**
     * 异常2
     */
    private boolean[] error2;
    private CrnError2 crnError2;
    /**
     * 异常3
     */
    private boolean[] error3;
    private CrnError3 crnError3;
    /**
     * 异常4
     */
    private boolean[] error4;
    private CrnError4 crnError4;
    /**
     * X行走线速度m/min
     */
    private Float xSpeed = 0F;
    /**
     * Y行走线速度m/min
     */
    private Float ySpeed = 0F;
    /**
     * Z行走线速度m/min
     */
    private Float zSpeed = 0F;
    /**
     * 堆垛机累计走行距离km
     */
    public Float xDistance = 0F;
    /**
     * 堆垛机累计升降距离km
     */
    public Float yDistance = 0F;
    /**
     * 堆垛机累计走行时长h
     */
    public Float xDuration = 0F;
    /**w
     * 堆垛机累计升降时长h
     */
    public Float yDuration = 0F;
    //指令ID
    private Integer commandId;
    public void setMode(Short mode) {
        this.mode = mode;
@@ -166,4 +346,94 @@
        this.status = CrnStatusType.get(type).id.shortValue();
    }
    public void setFingerPos(Short type) {
        this.fingerPos = type;
        this.fingerPosType = CrnFingerPosType.get(type);
    }
    public void setError1(boolean[] error1){
        this.error1 = error1;
        this.crnError1 = new CrnError1();
        this.crnError1.remoteStop = error1[0];
        this.crnError1.mainStop = error1[1];
        this.crnError1.controlStop = error1[2];
        this.crnError1.xCoverErr = error1[3];
        this.crnError1.yCoverErr = error1[4];
        this.crnError1.zCoverErr = error1[5];
        this.crnError1.laserErr = error1[6];
        this.crnError1.barcodeErr = error1[7];
        this.crnError1.xFrontLimitErr = error1[8];
        this.crnError1.xBackLimitErr = error1[9];
        this.crnError1.yUpLimitErr = error1[10];
        this.crnError1.yDownLimitErr = error1[11];
        this.crnError1.zLeftLimitErr = error1[12];
        this.crnError1.zRightLimitErr = error1[13];
        this.crnError1.leftOverWidthErr1 = error1[14];
        this.crnError1.leftOverWidthErr2 = error1[15];
    }
    public void setError2(boolean[] error2){
        this.error2 = error2;
        this.crnError2 = new CrnError2();
        this.crnError2.leftOverLenErr1 = error2[0];
        this.crnError2.leftOverLenErr2 = error2[1];
        this.crnError2.leftOverHighErr = error2[2];
        this.crnError2.rightOverWidthErr1 = error2[3];
        this.crnError2.rightOverWidthErr2 = error2[4];
        this.crnError2.rightOverLenErr1 = error2[5];
        this.crnError2.rightOverLenErr2 = error2[6];
        this.crnError2.rightOverHighErr = error2[7];
        this.crnError2.leftLooseRopeErr = error2[8];
        this.crnError2.rightLooseRopeErr = error2[9];
        this.crnError2.frontDoorErr = error2[10];
        this.crnError2.backDoorErr = error2[11];
        this.crnError2.startupErr = error2[12];
        this.crnError2.xFrontLocaUpErr = error2[13];
        this.crnError2.xFrontLocaDownErr = error2[14];
        this.crnError2.xBackLocaUpErr = error2[15];
    }
    public void setError3(boolean[] error3) {
        this.error3 = error3;
        this.crnError3 = new CrnError3();
        this.crnError3.xBackLocaDownErr = error3[0];
        this.crnError3.yUpLocaUpErr = error3[1];
        this.crnError3.yUpLocaDownErr = error3[2];
        this.crnError3.yDownLocaUpErr = error3[3];
        this.crnError3.yDownLocaDownErr = error3[4];
        this.crnError3.zLeftLocaUpErr = error3[5];
        this.crnError3.zLeftLocaDownErr = error3[6];
        this.crnError3.zRightLocaUpErr = error3[7];
        this.crnError3.zRightLocaDownErr = error3[8];
        this.crnError3.leftTakeNoneErr = error3[9];
        this.crnError3.rightTakeNoneErr = error3[10];
        this.crnError3.leftTakeThenLoadErr = error3[11];
        this.crnError3.rightTakeThenLoadErr = error3[12];
        this.crnError3.leftPutAndLoadErr = error3[13];
        this.crnError3.rightPutAndLoadErr = error3[14];
        this.crnError3.leftPutThenNoneErr = error3[15];
    }
    public void setError4(boolean[] error4) {
        this.error4 = error4;
        this.crnError4 = new CrnError4();
        this.crnError4.rightPutThenNoneErr = error4[0];
        this.crnError4.xLooseBrakeTimeout = error4[1];
        this.crnError4.yLooseBrakeTimeout = error4[2];
        this.crnError4.zLooseBrakeTimeout = error4[3];
    }
    /**
     * 最近一次入出库类型
     *       I:入库
     *       O:出库
     */
    private String lastIo = "I";
    public BasCrnp toSqlModel(BasCrnp basCrnp){
        basCrnp.setCrnErr(alarm1.longValue());
        basCrnp.setWrkNo(taskNo.intValue());
        return basCrnp;
    }
}