package com.zy.core.model.protocol;
|
|
import com.zy.asrs.entity.BasRgv;
|
import com.zy.core.enums.RgvModeType;
|
import com.zy.core.enums.RgvStatusType;
|
import lombok.Data;
|
|
import javax.swing.*;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* Created by vincent on 2020/8/7
|
*/
|
@Data
|
public class RgvProtocol implements Cloneable{
|
|
private short RgvNo;
|
|
/**
|
* 1 = 手动模式
|
* 2 = 自动模式
|
* 3 = 电脑模式
|
*/
|
public Short mode;
|
|
public RgvModeType modeType;
|
|
private transient Long loadingStartTime;
|
|
/**
|
* 执行优先级
|
* 0:不判断
|
* 1:工位1先执行
|
* 2:工位2先执行
|
*/
|
public Short wrkTaskPri;
|
|
public Short wrkTaskMove1;
|
|
public Short wrkTaskMove2;
|
|
|
/**
|
* RGV当前状态工位1
|
* 0:空闲,无任务
|
* 1:作业中
|
* 2:报警
|
*/
|
public Short status;
|
|
|
/**
|
* 状态枚举
|
*/
|
public RgvStatusType statusType;
|
|
/**
|
* 工位1任务号
|
*/
|
public Integer taskNo1 = 0;
|
|
/**
|
* RGV工位1当前状态
|
* 0:空闲,无任务
|
* 11:取货中
|
* 12:放货中
|
* 10:任务完成等待WCS确认
|
*/
|
public Short status1;
|
|
/**
|
* 状态枚举
|
*/
|
public RgvStatusType statusType1;
|
|
/**
|
* 工位1有物
|
*/
|
public Boolean loaded1;
|
|
/**
|
* RGV当前位置
|
*/
|
public Integer RgvPos;
|
|
/**
|
* RGV当前目的位置
|
*/
|
public Integer RgvPosDestination;
|
|
|
/**
|
* 走行在定位
|
* 0 = 在定位
|
* 1 = 不在定位
|
*/
|
public Short walkPos;
|
|
/**
|
* 急停
|
*/
|
public Boolean err1;
|
|
/**
|
* 有物无资料
|
*/
|
public Boolean err2;
|
|
/**
|
* 有资料无物
|
*/
|
public Boolean err3;
|
|
/**
|
* 命令错误走行联调冲突
|
*/
|
public Boolean err4;
|
|
/**
|
* 目标为超过行走极限
|
*/
|
public Boolean err5;
|
|
/**
|
* 变频器异常
|
*/
|
public Boolean err6;
|
|
/**
|
* 光电异常
|
*/
|
public Boolean err7;
|
|
////////////////////// 工位2定义 //////////////////////////////////////////////////
|
/**
|
* 工位2任务号
|
*/
|
public Integer taskNo2 = 0;
|
|
/**
|
* RGV工位2当前状态
|
* 0:空闲,无任务
|
* 11:取货中
|
* 12:放货中
|
* 10:任务完成等待WCS确认
|
*/
|
public Short status2;
|
|
/**
|
* 状态枚举
|
*/
|
public RgvStatusType statusType2;
|
|
/**
|
* 工位2有物
|
*/
|
public Boolean loaded2;
|
|
// /**
|
// * 急停
|
// */
|
// public Boolean err21;
|
//
|
// /**
|
// * 有物无资料
|
// */
|
// public Boolean err22;
|
//
|
// /**
|
// * 有资料无物
|
// */
|
// public Boolean err23;
|
//
|
// /**
|
// * 命令错误走行联调冲突
|
// */
|
// public Boolean err24;
|
//
|
// /**
|
// * 目标为超过行走极限
|
// */
|
// public Boolean err25;
|
//
|
// /**
|
// * 变频器异常
|
// */
|
// public Boolean err26;
|
//
|
// /**
|
// * 光电异常
|
// */
|
// public Boolean err27;
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
/**
|
* 异常码
|
*/
|
public Short alarm;
|
|
/**
|
* 心跳指令 1-2每秒切换一次
|
*/
|
public Short heart;
|
|
private Short temp1;
|
|
private Short temp2;
|
|
private Short temp3;
|
|
private Short temp4;
|
|
private Short temp5;
|
|
/**
|
* X行走行速度m/min
|
*/
|
private Float xSpeed;
|
|
/**
|
* 堆垛机累计走行距离km
|
*/
|
public Float xDistance;
|
|
/**
|
* 堆垛机累计走行时长h
|
*/
|
public Float xDuration;
|
|
public void setMode(Short mode) {
|
this.mode = mode;
|
this.modeType = RgvModeType.get(mode);
|
}
|
|
public void setMode(RgvModeType type) {
|
this.modeType = type;
|
this.mode = RgvModeType.get(type).id.shortValue();
|
}
|
|
public void setStatus(Short status){
|
this.status = status;
|
this.statusType = RgvStatusType.get(status);
|
}
|
|
public void setStatus(RgvStatusType type){
|
this.statusType = type;
|
this.status = RgvStatusType.get(type).id.shortValue();
|
}
|
|
public void setStatus1(Short status1){
|
this.status1 = status1;
|
this.statusType1 = RgvStatusType.get(status1);
|
}
|
|
public void setStatus1(RgvStatusType type1){
|
this.statusType1 = type1;
|
this.status1 = RgvStatusType.get(type1).id.shortValue();
|
}
|
|
public void setStatus2(Short status2){
|
this.status2 = status2;
|
this.statusType2 = RgvStatusType.get(status2);
|
}
|
|
public void setStatus2(RgvStatusType type2){
|
this.statusType2 = type2;
|
this.status2 = RgvStatusType.get(type2).id.shortValue();
|
}
|
|
public boolean isLoaded1ing() {
|
return Boolean.TRUE.equals(this.loaded1);
|
}
|
|
public boolean isLoaded2ing() {
|
return Boolean.TRUE.equals(this.loaded2);
|
}
|
|
|
/**
|
* 最近一次入出库类型
|
* I:入库
|
* O:出库
|
*/
|
private String lastIo = "I";
|
|
|
public BasRgv toSqlModel(BasRgv basRgv){
|
if (alarm!=null) {
|
basRgv.setRgvErr(alarm.longValue());
|
}
|
basRgv.setWrkNo1(taskNo1.intValue());
|
basRgv.setWrkNo2(taskNo2.intValue());
|
return basRgv;
|
}
|
|
public void setxSpeed(Short xSpeed) {
|
this.xSpeed = Float.valueOf(xSpeed);
|
}
|
|
public void setxDistance(Short xDistance) {
|
this.xDistance = Float.valueOf(xDistance);
|
}
|
|
public void setxDuration(Short xDuration) {
|
this.xDuration = Float.valueOf(xDuration);
|
}
|
|
public Integer getRgvPosI(){
|
//需要根据现场改造 根据读到的值获取对应站点位置
|
Map<Short,Integer> map = new HashMap<>();
|
map.put((short) 1,1004);map.put((short) 2,1007);
|
map.put((short) 3,1010);map.put((short) 4,1014);
|
map.put((short) 5,1018);map.put((short) 6,1021);
|
map.put((short) 7,1024); map.put((short) 8,1028);
|
map.put((short) 9,1031);map.put((short) 10,1035);
|
map.put((short) 11,2003);map.put((short) 12,2006);
|
map.put((short) 13,2009);map.put((short) 14,2012);
|
map.put((short) 15,2015);map.put((short) 16,2018);
|
map.put((short) 17,2021);map.put((short) 18,2024);
|
map.put((short) 19,2027);map.put((short) 20,2030);
|
if (RgvPos==null) return 0;
|
|
return map.get(RgvPos);
|
}
|
|
public Integer getRgvPosI2() {
|
if (RgvPos == null) return 0;
|
|
// key: 站点号 value: 基准物理位置
|
Map<Integer, Integer> posMap = new HashMap<>();
|
posMap.put(1004, 6534);
|
posMap.put(1007, 33634);
|
posMap.put(1010, 75174);
|
posMap.put(1014, 102124);
|
posMap.put(1018, 138224);
|
posMap.put(1021, 178034);
|
posMap.put(1024, 219684);
|
posMap.put(1028, 246724);
|
posMap.put(1031, 288194);
|
posMap.put(1035, 315204);
|
int tolerance = 50; // 允许误差范围
|
|
for (Map.Entry<Integer, Integer> entry : posMap.entrySet()) {
|
int site = entry.getKey();
|
int basePos = entry.getValue();
|
if (Math.abs(RgvPos - basePos) <= tolerance) {
|
return site;
|
}
|
}
|
|
return 0; // 没匹配到站点
|
}
|
|
|
@Override
|
public RgvProtocol clone() {
|
try {
|
return (RgvProtocol) super.clone();
|
} catch (CloneNotSupportedException e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
}
|