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 Boolean isAlarm() {
|
return this.alarm > 1;
|
}
|
|
public Boolean isEnable() {
|
if (Cools.isEmpty(row, bay, lev)) {
|
return false;
|
}
|
return row > 0 && bay > 0 && lev > 0;
|
}
|
|
}
|