package com.zy.core.model.protocol; import com.core.common.Cools; import com.core.common.SpringUtils; import com.zy.asrs.entity.BasSte; import com.zy.asrs.service.BasSteService; import com.zy.core.News; import com.zy.core.enums.SteHisTaskStatusType; import com.zy.core.enums.SteLocaType; import com.zy.core.enums.SteStatusType; import lombok.Data; import lombok.extern.slf4j.Slf4j; /** * Created by vincent on 2020/8/7 */ @Slf4j @Data public class SteProtocol { /** * 设备号 */ private Short steNo; /** * 1 = 联机模式 * 0 = 脱机模式 */ public Short mode; /** IDLE(0, "空闲"), MOVING(1, "作业中"), SOS(2, "报警"), WAITING(3, "任务完成等待WCS确认"), */ public Short status; public SteStatusType statusType; /** * 任务号 */ public Short taskNo = 0; /** * 正在执行任务 */ public Boolean execute; /** * 任务完成,等待WCS确认 */ public Boolean waiting; /** * 异常码1 */ public Short alarm; /** * 异常码2 */ public Short alarm0; /** * 电池电量 */ public Float charge = 0.0F; public void setCharge(Float charge) { if (charge >= 0) { this.charge = charge; } } /** * 满电 */ public Boolean fullCharge; /** * 低电量 */ public Boolean lowCharge; /** * 电池馈电 0,欠电,1低电 2满电 */ public Short feed; /** * 当前位置 1,近点,2远点,3A点,4B点 */ public Short loca; public SteLocaType locaType; /** * 近点距离 */ public Double closer; /** * 当前速度 */ public Double speed = 0.0D; /** * 高低位 0,低位,1高位 */ public Short pos; /** * 有货 0,没货,1有货 */ public Short load; /** * 在轨道上 0不在,1在 */ public Short track; /** * 任务类型 */ public Short taskType; /** * 排 */ public Short row; /** * 列 */ public Short bay; /** * 层 */ public Short lev; /** * 过账指令任务号 */ public Integer hisTaskNo; /** * 过账指令状态 * 0初始 1执行完成 2删除 */ public Short hisTaskStatus; public SteHisTaskStatusType hisTaskStatusType; /** * 盘点数量 */ public Short checkQty; /** * 就绪状态 0未就绪 1就绪 */ public Short ready; /** * 打开充电桩号 */ public Short chargeNo; /** * 心跳指令 1-2每秒切换一次 */ public Short heart; /** * 堆垛机禁止运行 1运行,0禁止 */ public Short crnStopRun; /** * 堆垛机禁止伸叉 1运行,0禁止 */ public Short crnStopFork; /** * 堆垛机搬移允许 0不允许 1允许 */ public Short crnAllowRun; /** * 充电状态 1:在充电;0:不在充电 */ private Short chargeStatus; // 入库取空 private Boolean inEmpty; // 出库取空 private Boolean outEmpty; // 穿梭车异常 ------------------------------------------------------------------------ /** * 0.升降超时报警 */ private boolean liftErr; /** * 2.入库取空报警 */ private boolean inFetchErr; /** * 3.出库取空报警 */ private boolean outFetchErr; /** * 4.防撞保护 */ private boolean antiErr; /** * 5.升降接近开关故障 */ private boolean liftSwitchErr; /** * 6.轨道检测报警 */ private boolean trackErr; /** * 7.设备运行超时报警 */ private boolean timeoutErr; /** * 8.通信错误报警 */ private boolean connectErr; /** * 9.设备急停 */ private boolean emergencyErr; /** * 10.任务类型缺失 */ private boolean taskTypeErr; /** * 11.任务号缺失 */ private boolean taskNoErr; /** * 12.运行中有新任务 */ private boolean newTaskErr; /** * 13.故障中有任务 */ private boolean errTaskErr; /** * 14.运行中停止 */ private boolean stopErr; /** * 15.脱机模式下有任务 */ private boolean offlineTaskErr; /** * 16.条件未满足启动任务 */ private boolean startTaskErr; /** * 17.低电压时有任务 */ private boolean voltageTaskErr; /** * 63.设备故障标志位 */ private boolean devpErr; // 穿梭车异常 ------------------------------------------------------------------------ // 穿梭车提示信息 ------------------------------------------------------------------------ /** * 64.联机状态 */ private boolean online; /** * 65.不在轨道上 */ private boolean notOnTrack; /** * 66.低电量提醒 */ private boolean lowVoltage; /** * 67.亏电中 */ private boolean electricityLoss; /** * 68.强制行走启动 */ private boolean forcedTravel; /** * 69.演示模式开启 */ private boolean demoMode; /** * 70.充电刷已接通 */ private boolean brushConnect; /** * 71.任务中禁止手动 */ private boolean taskManualForbid; /** * 72.联机中禁止手动 */ private boolean onlineManualForbid; /** * 73.设备急停中 */ private boolean devpEmergency; /** * 74.任务中断中 */ private boolean taskInterrupt; /** * 75.任务已清除 */ private boolean taskClear; /** * 76.任务确认已超时 */ private boolean taskConfirmTimeout; /** * 77.充电中有任务 */ private boolean taskWithCharge; // 任务信息 --------------------------------------------------------- /** * 96.入库任务中 */ private boolean pakInTask; /** * 97. 出库任务中 */ private boolean pakOutTask; /** * 98. 移库任务中 */ private boolean pakMoveTask; /** * 99. 回原点任务中 */ private boolean goHpTask; /** * 100. 去反原点任务中 */ private boolean goOHpTask; /** * 101. 去原点避让位 */ private boolean goHpAvoid; /** * 102. 去反原点避让位 */ private boolean goOHpAvoid; /** * 104. 入库取空结束 */ private boolean pakInEmpty; /** * 105. 入库正常结束 */ private boolean pakInFinish; /** * 106. 出库取空结束 */ private boolean pakOutEmpty; /** * 107. 出库正常结束 */ private boolean pakOutFinish; /** * 108. 去原点避让完成 */ private boolean goHpAvoidFinish; /** * 109. 去反原点避让完成 */ private boolean goOHpAvoidFinish; /** * 110. 去原点避让完成 */ private boolean goHpAvoidErr; /** * 111. 去反原点避让完成 */ private boolean goOHpAvoidErr; // 状态信息 --------------------------------------------------------- /** * 112. 联机模式 */ private boolean autoMode; /** * 113. 电压过低 */ private boolean voltageLow; public void setStatus(Short status){ this.status = status; this.statusType = SteStatusType.get(status); } public void setStatus(SteStatusType type){ this.statusType = type; this.status = SteStatusType.get(type).id.shortValue(); } public void setLoca(Short loca){ this.loca = loca; this.locaType = SteLocaType.get(loca); } public void setLoca(SteLocaType type){ this.locaType = type; this.loca = SteLocaType.get(type).id.shortValue(); } public void setHisTaskStatus(Short hisTaskStatus){ this.hisTaskStatus = hisTaskStatus; this.hisTaskStatusType = SteHisTaskStatusType.get(hisTaskStatus); } public void setHisTaskStatus(SteHisTaskStatusType type){ this.hisTaskStatusType = type; this.hisTaskStatus = SteHisTaskStatusType.get(type).id.shortValue(); } /** * 最近一次入出库类型 * I:入库 * O:出库 */ private String lastIo = "I"; private String pakMk = "-"; public BasSte toSqlModel(BasSte basSte){ if (alarm!=null) { basSte.setSteErr(alarm.longValue()); } basSte.setWrkNo(taskNo.intValue()); // if (basSte.getPakMk().equals("N")) { // if (!Cools.isEmpty(row)) { // basSte.setRow(row.intValue()); // } // if (!Cools.isEmpty(bay)) { // basSte.setBay(bay.intValue()); // } // if (!Cools.isEmpty(lev)) { // basSte.setLev(lev.intValue()); // } // } return basSte; } // 是否处于空闲待命状态 public Boolean isIdle() { boolean res = this.statusType.equals(SteStatusType.IDLE) && this.mode == 1 && this.pakMk.equals("N") && !isAlarm() && this.chargeStatus == 0 && isEnable() ; if (!res) { return res; } else { // 电量 try { String chargeLine = SpringUtils.getBean(BasSteService.class).selectById(this.steNo).getChargeLine(); return charge > Float.parseFloat(chargeLine); } catch (Exception e) { News.error("fail", e); return false; } } } // 小车电量 public Float isIdle2() { return this.charge; } // 是否处于报警状态 public Boolean isAlarm() { return this.alarm > 1; } public Boolean isEnable() { if (Cools.isEmpty(row, bay, lev)) { return false; } return row > 0 && bay > 0 && lev > 0; } }