package com.zy.core.model.protocol; import com.zy.asrs.entity.BasCrnErrorLog; import com.zy.asrs.entity.BasCrnp; 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 lombok.Data; /** * Created by vincent on 2020/8/7 */ @Data public class CrnProtocol { private Integer crnNo; /** * 1 = 手动模式 * 2 = 自动模式 * 3 = 电脑模式 */ public Short mode; public CrnModeType modeType; /** * 1 = 急停 */ public Short eStop; /** * 异常码 */ public Short alarm; /** * 任务号 */ public Short taskNo = 0; /** * 堆垛机当前状态 * 0:空闲,无任务 * 1:取货定位中 * 2:取货中 * 3:取货完成,放货定位中 * 4:放货中 * 5:回原点中 * 6:反原点 * 7:库位移位 * 90:任务完成等待WCS确认 * 99:报警 */ public Short status; /** * 状态枚举 */ public CrnStatusType statusType; /** * 堆垛机当前列号 */ public Short bay; /** * 堆垛机当前层号 */ public Short level; /** * 当前货叉位置 * 0 = 货叉原位 * 1 = 货叉在左侧 * 2 = 货叉在右侧 */ public Short forkPos; public CrnForkPosType forkPosType; /** * 当前载货台位置 * 0 = 下定位 * 1 = 上定位 */ public Short liftPos; public CrnLiftPosType liftPosType; /** * 走行在定位 * 0 = 在定位 * 1 = 不在定位 */ public Short walkPos; /** * 载货台有物 */ public Short loaded; private Short temp1; private CrnTemp1 crnTemp1; private Short temp2; private Short temp3; private Short temp4; /** * 异常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; /** * 异常5 */ private boolean[] error5; private CrnError5 crnError5; /** * 异常6 */ private boolean[] error6; private CrnError6 crnError6; /** * X行走线速度m/min */ private Float xSpeed; /** * Y行走线速度m/min */ private Float ySpeed; /** * Z行走线速度m/min */ private Float zSpeed; /** * 堆垛机累计走行距离km */ public Float xDistance; /** * 堆垛机累计升降距离km */ public Float yDistance; /** * 堆垛机累计走行时长h */ public Float xDuration; /** * 堆垛机累计升降时长h */ public Float yDuration; //堆垛机配置信号-------------------------------------------------------------- public java.util.List> getExceptions() { java.util.List> list = new java.util.ArrayList<>(); if (ibDriveFault) list.add(createException(0, "行走变频器故障")); if (ibSupplyFault) list.add(createException(1, "提供变频器故障")); if (ibForkDriveFault) list.add(createException(2, "货叉变频器故障")); if (ibDriveCircuitFault) list.add(createException(3, "行走断路器故障")); if (ibLiftCircuitFault) list.add(createException(4, "提升断路器故障")); if (ibForkCircuitFault) list.add(createException(5, "货叉断路器故障")); if (ibForwardLimit) list.add(createException(6, "前进限位")); if (ibReverseLimit) list.add(createException(7, "后退限位")); if (ibDriveStart) list.add(createException(8, "行走原点")); if (ibForwardBrakeSpeed) list.add(createException(9, "前进强制低速")); if (ibReverseBrakeSpeed) list.add(createException(10, "后退强制低速")); if (ibUpLimit) list.add(createException(11, "上升限位")); if (ibDownLimit) list.add(createException(12, "下限限位")); if (ibUpOrigin) list.add(createException(13, "提升原点")); if (ibUpBrakeSpeed) list.add(createException(14, "上升强制低速")); if (ibDownBrakeSpeed) list.add(createException(15, "下降强制低速")); if (ibPlatformSignal) list.add(createException(16, "载货台探货")); if (ibForkMidSignal) list.add(createException(17, "货叉中位信号")); if (ibForkLeftLimit) list.add(createException(18, "货叉左极限")); if (ibForkRightLimit) list.add(createException(19, "货叉右极限")); if (ibFrontOverLimit) list.add(createException(20, "前超限")); if (ibRearOverLimit) list.add(createException(21, "后超限")); if (ibLeftOverLimit) list.add(createException(22, "左超限")); if (ibRightOverLimit) list.add(createException(23, "右超限")); if (ibHighOverLimit1) list.add(createException(24, "高超限1")); if (ibHighOverLimit2) list.add(createException(25, "高超限2")); if (ibHighOverLimit3) list.add(createException(26, "高超限3")); if (ibOneExtendLeftLoad1) list.add(createException(27, "一伸左侧探货1")); if (ibOneExtendLeftLoad2) list.add(createException(28, "一伸左侧探货2")); if (ibOneExtendRightLoad1) list.add(createException(29, "一伸右侧探货1")); if (ibOneExtendRightLoad2) list.add(createException(30, "一伸右侧探货2")); if (ibTwoExtendLeftLoad1) list.add(createException(31, "二伸左侧探货1")); if (ibTwoExtendLeftLoad2) list.add(createException(32, "二伸左侧探货2")); if (ibTwoExtendRightLoad1) list.add(createException(33, "二伸右侧探货1")); if (ibTwoExtendRightLoad2) list.add(createException(34, "二伸右侧探货2")); if (ibSpeedSignal1) list.add(createException(35, "超速信号1")); if (ibSpeedSignal2) list.add(createException(36, "超速信号2")); if (ibOverweightSignal1) list.add(createException(37, "超重信号1")); if (ibOverweightSignal2) list.add(createException(38, "超重信号2")); if (ibRopeReleaseSignal1) list.add(createException(39, "松绳信号1")); if (ibRopeReleaseSignal2) list.add(createException(40, "松绳信号2")); if (ibSafetyClamp) list.add(createException(41, "安全钳")); if (ibTightener) list.add(createException(42, "张紧器")); if (ibSpeedLimiter) list.add(createException(43, "限速器")); if (ibSafetyDoorOpen) list.add(createException(44, "安全门打开")); return list; } private java.util.Map createException(int code, String msg) { java.util.Map map = new java.util.HashMap<>(); map.put("code", code); map.put("msg", msg); return map; } // 故障读取锁定标记 private boolean errorMk = false; //写入标记 private boolean writeMk = true; private Boolean ibDriveFault = false; // 行走变频器故障 private Boolean ibSupplyFault = false; // 提供变频器故障 private Boolean ibForkDriveFault = false; // 货叉变频器故障 private Boolean ibDriveCircuitFault = false; // 行走断路器故障 private Boolean ibLiftCircuitFault = false; // 提升断路器故障 private Boolean ibForkCircuitFault = false; // 货叉断路器故障 private Boolean ibForwardLimit = false; // 前进限位 private Boolean ibReverseLimit = false; // 后退限位 private Boolean ibDriveStart = false; // 行走原点 private Boolean ibForwardBrakeSpeed = false; // 前进强制低速 private Boolean ibReverseBrakeSpeed = false; // 后退强制低速 private Boolean ibUpLimit = false; // 上升限位 private Boolean ibDownLimit = false; // 下限限位 private Boolean ibUpOrigin = false; // 提升原点 private Boolean ibUpBrakeSpeed = false; // 上升强制低速 private Boolean ibDownBrakeSpeed = false; // 下降强制低速 private Boolean ibPlatformSignal = false; // 载货台探货 private Boolean ibForkMidSignal = false; // 货叉中位信号 private Boolean ibForkLeftLimit = false; // 货叉左极限 private Boolean ibForkRightLimit = false; // 货叉右极限 private Boolean ibFrontOverLimit = false; // 前超限 private Boolean ibRearOverLimit = false; // 后超限 private Boolean ibLeftOverLimit = false; // 左超限 private Boolean ibRightOverLimit = false; // 右超限 private Boolean ibHighOverLimit1 = false; // 高超限1 private Boolean ibHighOverLimit2 = false; // 高超限2 private Boolean ibHighOverLimit3 = false; // 高超限3 private Boolean ibOneExtendLeftLoad1 = false; // 一伸左侧探货1 private Boolean ibOneExtendLeftLoad2 = false; // 一伸左侧探货2 private Boolean ibOneExtendRightLoad1 = false; // 一伸右侧探货1 private Boolean ibOneExtendRightLoad2 = false; // 一伸右侧探货2 private Boolean ibTwoExtendLeftLoad1 = false; // 二伸左侧探货1 private Boolean ibTwoExtendLeftLoad2 = false; // 二伸左侧探货2 private Boolean ibTwoExtendRightLoad1 = false; // 二伸右侧探货1 private Boolean ibTwoExtendRightLoad2 = false; // 二伸右侧探货2 private Boolean ibSpeedSignal1 = false; // 超速信号1 private Boolean ibSpeedSignal2 = false; // 超速信号2 private Boolean ibOverweightSignal1 = false; // 超重信号1 private Boolean ibOverweightSignal2 = false; // 超重信号2 private Boolean ibRopeReleaseSignal1 = false; // 松绳信号1 private Boolean ibRopeReleaseSignal2 = false; // 松绳信号2 private Boolean ibSafetyClamp = false; // 安全钳 private Boolean ibTightener = false; // 张紧器 private Boolean ibSpeedLimiter = false; // 限速器 private Boolean ibSafetyDoorOpen = false; // 安全门打开 //------------------------------------------------------------------- public BasCrnErrorLog toSqlModelError() { BasCrnErrorLog basCrnErrorLog = new BasCrnErrorLog(); // 错误字段转换 basCrnErrorLog.setCrnNo(crnNo); basCrnErrorLog.setIbDriveFault(ibDriveFault ? "Y" : "N"); // 行走变频器故障 basCrnErrorLog.setIbSupplyFault(ibSupplyFault ? "Y" : "N"); // 提供变频器故障 basCrnErrorLog.setIbForkDriveFault(ibForkDriveFault ? "Y" : "N"); // 货叉变频器故障 basCrnErrorLog.setIbDriveCircuitFault(ibDriveCircuitFault ? "Y" : "N"); // 行走断路器故障 basCrnErrorLog.setIbLiftCircuitFault(ibLiftCircuitFault ? "Y" : "N"); // 提升断路器故障 basCrnErrorLog.setIbForkCircuitFault(ibForkCircuitFault ? "Y" : "N"); // 货叉断路器故障 basCrnErrorLog.setIbForwardLimit(ibForwardLimit ? "Y" : "N"); // 前进限位 basCrnErrorLog.setIbReverseLimit(ibReverseLimit ? "Y" : "N"); // 后退限位 basCrnErrorLog.setIbDriveStart(ibDriveStart ? "Y" : "N"); // 行走原点 basCrnErrorLog.setIbForwardBrakeSpeed(ibForwardBrakeSpeed ? "Y" : "N"); // 前进强制低速 basCrnErrorLog.setIbReverseBrakeSpeed(ibReverseBrakeSpeed ? "Y" : "N"); // 后退强制低速 basCrnErrorLog.setIbUpLimit(ibUpLimit ? "Y" : "N"); // 上升限位 basCrnErrorLog.setIbDownLimit(ibDownLimit ? "Y" : "N"); // 下限限位 basCrnErrorLog.setIbUpOrigin(ibUpOrigin ? "Y" : "N"); // 提升原点 basCrnErrorLog.setIbUpBrakeSpeed(ibUpBrakeSpeed ? "Y" : "N"); // 上升强制低速 basCrnErrorLog.setIbDownBrakeSpeed(ibDownBrakeSpeed ? "Y" : "N"); // 下降强制低速 basCrnErrorLog.setIbPlatformSignal(ibPlatformSignal ? "Y" : "N"); // 载货台探货 basCrnErrorLog.setIbForkMidSignal(ibForkMidSignal ? "Y" : "N"); // 货叉中位信号 basCrnErrorLog.setIbForkLeftLimit(ibForkLeftLimit ? "Y" : "N"); // 货叉左极限 basCrnErrorLog.setIbForkRightLimit(ibForkRightLimit ? "Y" : "N"); // 货叉右极限 basCrnErrorLog.setIbFrontOverLimit(ibFrontOverLimit ? "Y" : "N"); // 前超限 basCrnErrorLog.setIbRearOverLimit(ibRearOverLimit ? "Y" : "N"); // 后超限 basCrnErrorLog.setIbLeftOverLimit(ibLeftOverLimit ? "Y" : "N"); // 左超限 basCrnErrorLog.setIbRightOverLimit(ibRightOverLimit ? "Y" : "N"); // 右超限 basCrnErrorLog.setIbHighOverLimit1(ibHighOverLimit1 ? "Y" : "N"); // 高超限1 basCrnErrorLog.setIbHighOverLimit2(ibHighOverLimit2 ? "Y" : "N"); // 高超限2 basCrnErrorLog.setIbHighOverLimit3(ibHighOverLimit3 ? "Y" : "N"); // 高超限3 basCrnErrorLog.setIbOneExtendLeftLoad1(ibOneExtendLeftLoad1 ? "Y" : "N"); // 一伸左侧探货1 basCrnErrorLog.setIbOneExtendLeftLoad2(ibOneExtendLeftLoad2 ? "Y" : "N"); // 一伸左侧探货2 basCrnErrorLog.setIbOneExtendRightLoad1(ibOneExtendRightLoad1 ? "Y" : "N"); // 一伸右侧探货1 basCrnErrorLog.setIbOneExtendRightLoad2(ibOneExtendRightLoad2 ? "Y" : "N"); // 一伸右侧探货2 basCrnErrorLog.setIbTwoExtendLeftLoad1(ibTwoExtendLeftLoad1 ? "Y" : "N"); // 二伸左侧探货1 basCrnErrorLog.setIbTwoExtendLeftLoad2(ibTwoExtendLeftLoad2 ? "Y" : "N"); // 二伸左侧探货2 basCrnErrorLog.setIbTwoExtendRightLoad1(ibTwoExtendRightLoad1 ? "Y" : "N"); // 二伸右侧探货1 basCrnErrorLog.setIbTwoExtendRightLoad2(ibTwoExtendRightLoad2 ? "Y" : "N"); // 二伸右侧探货2 basCrnErrorLog.setIbSpeedSignal1(ibSpeedSignal1 ? "Y" : "N"); // 超速信号1 basCrnErrorLog.setIbSpeedSignal2(ibSpeedSignal2 ? "Y" : "N"); // 超速信号2 basCrnErrorLog.setIbOverweightSignal1(ibOverweightSignal1 ? "Y" : "N"); // 超重信号1 basCrnErrorLog.setIbOverweightSignal2(ibOverweightSignal2 ? "Y" : "N"); // 超重信号2 basCrnErrorLog.setIbRopeReleaseSignal1(ibRopeReleaseSignal1 ? "Y" : "N"); // 松绳信号1 basCrnErrorLog.setIbRopeReleaseSignal2(ibRopeReleaseSignal2 ? "Y" : "N"); // 松绳信号2 basCrnErrorLog.setIbSafetyClamp(ibSafetyClamp ? "Y" : "N"); // 安全钳 basCrnErrorLog.setIbTightener(ibTightener ? "Y" : "N"); // 张紧器 basCrnErrorLog.setIbSpeedLimiter(ibSpeedLimiter ? "Y" : "N"); // 限速器 basCrnErrorLog.setIbSafetyDoorOpen(ibSafetyDoorOpen ? "Y" : "N"); // 安全门打开 return basCrnErrorLog; } public void setMode(Short mode) { this.mode = mode; this.modeType = CrnModeType.get(mode); } public void setMode(CrnModeType type) { this.modeType = type; this.mode = CrnModeType.get(type).id.shortValue(); } public void setForkPos(Short forkPos) { this.forkPos = forkPos; this.forkPosType = CrnForkPosType.get(forkPos); } public void setForkPos(CrnForkPosType type) { this.forkPosType = type; this.forkPos = CrnForkPosType.get(type).id.shortValue(); } public void setLiftPos(Short liftPos) { this.liftPos = liftPos; this.liftPosType = CrnLiftPosType.get(liftPos); } public void setLiftPos(CrnLiftPosType type) { this.liftPosType = type; this.liftPos = CrnLiftPosType.get(type).id.shortValue(); } public void setStatus(Short status){ this.status = status; this.statusType = CrnStatusType.get(status); } public void setStatus(CrnStatusType type){ this.statusType = type; this.status = CrnStatusType.get(type).id.shortValue(); } public Short getTemp1() { return temp1; } public void setTemp1(Short temp1) { this.temp1 = temp1; } /** * 最近一次入出库类型 * I:入库 * O:出库 */ private String lastIo = "I"; public BasCrnp toSqlModel(BasCrnp basCrnp){ if (alarm!=null) { basCrnp.setCrnErr(alarm.longValue()); } basCrnp.setWrkNo(taskNo.intValue()); return basCrnp; } public void setxSpeed(float xSpeed) { this.xSpeed = xSpeed; } public void setySpeed(float ySpeed) { this.ySpeed = ySpeed; } public void setzSpeed(float zSpeed) { this.zSpeed = zSpeed; } public void setxDistance(float xDistance) { this.xDistance = xDistance; } public void setyDistance(float yDistance) { this.yDistance = yDistance; } public void setxDuration(float xDuration) { this.xDuration = xDuration; } public void setyDuration(float yDuration) { this.yDuration = yDuration; } }