|  |  | 
 |  |  | 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 com.zy.core.enums.RgvWalkPosType; | 
 |  |  | import lombok.Data; | 
 |  |  |  | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.Map; | 
 |  |  |  | 
 |  |  | @Data | 
 |  |  | public class RgvProtocol { | 
 |  |  | public class RgvProtocol implements Cloneable{ | 
 |  |  |  | 
 |  |  |     //RGV编号 | 
 |  |  |     private Integer rgvNo; | 
 |  |  |     private Integer RgvNo; | 
 |  |  |  | 
 |  |  |     //模式 | 
 |  |  |     private Short mode; | 
 |  |  |     /** | 
 |  |  |      * 1 = 手动模式 | 
 |  |  |      * 2 = 自动模式 | 
 |  |  |      * 3 = 电脑模式 | 
 |  |  |      */ | 
 |  |  |     public Short mode; | 
 |  |  |  | 
 |  |  |     //RGV模式枚举 | 
 |  |  |     private RgvModeType modeType; | 
 |  |  |     public RgvModeType modeType; | 
 |  |  |  | 
 |  |  |     //RGV状态 | 
 |  |  |     private Short status; | 
 |  |  |     /** | 
 |  |  |      * 工位1任务号 | 
 |  |  |      */ | 
 |  |  |     public Integer taskNo1 = 0; | 
 |  |  |     /** | 
 |  |  |      * 工位2任务号 | 
 |  |  |      */ | 
 |  |  |     public Integer taskNo2 = 0; | 
 |  |  |  | 
 |  |  |     //RGV状态枚举 | 
 |  |  |     private RgvStatusType statusType; | 
 |  |  |     /** | 
 |  |  |      * RGV当前状态 | 
 |  |  |      * 0:空闲,无任务 | 
 |  |  |      * 1:作业中 | 
 |  |  |      * 2:报警 | 
 |  |  |      */ | 
 |  |  |     public Short status; | 
 |  |  |  | 
 |  |  |     //工位1工作号 | 
 |  |  |     private Integer taskNo1; | 
 |  |  |     /** | 
 |  |  |      * 状态枚举 | 
 |  |  |      */ | 
 |  |  |     public RgvStatusType statusType; | 
 |  |  |     /** | 
 |  |  |      * 当前列号 | 
 |  |  |      */ | 
 |  |  |     public Short columnNumber; | 
 |  |  |  | 
 |  |  |     //工位1有物信号 | 
 |  |  |     private Short loaded1; | 
 |  |  |     /** | 
 |  |  |      * RGV当前位置 | 
 |  |  |      */ | 
 |  |  |     public Integer RgvPos; | 
 |  |  |  | 
 |  |  |     //RGV当前位置 | 
 |  |  |     private Short rgvPos; | 
 |  |  |     /** | 
 |  |  |      * 工位1有物 | 
 |  |  |      */ | 
 |  |  |     public Short loaded1; | 
 |  |  |  | 
 |  |  |     //走行在定位 0:在定位,1:不在定位 | 
 |  |  |     private Short walkPos; | 
 |  |  |  | 
 |  |  |     //RGV走行枚举 | 
 |  |  |     private RgvWalkPosType walkPosType; | 
 |  |  |     /** | 
 |  |  |      * 异常码 | 
 |  |  |      */ | 
 |  |  |     public Short alarm; | 
 |  |  |  | 
 |  |  |     //工位2工作号 | 
 |  |  |     private Short taskNo2; | 
 |  |  |     /** | 
 |  |  |      * X行走行速度m/min | 
 |  |  |      */ | 
 |  |  |     private Float xSpeed; | 
 |  |  |  | 
 |  |  |     //工位2有物信号 | 
 |  |  |     private Short loaded2; | 
 |  |  |     /** | 
 |  |  |      * 堆垛机累计走行距离km | 
 |  |  |      */ | 
 |  |  |     public Float xDistance; | 
 |  |  |  | 
 |  |  |     //工位1任务完成信号 | 
 |  |  |     private Short taskFinish1; | 
 |  |  |     /** | 
 |  |  |      * 堆垛机累计走行时长h | 
 |  |  |      */ | 
 |  |  |     public Float xDuration; | 
 |  |  |  | 
 |  |  |     //工位2任务完成信号 | 
 |  |  |     private Short taskFinish2; | 
 |  |  |  | 
 |  |  |     //异常码 | 
 |  |  |     private Short alarm; | 
 |  |  |  | 
 |  |  |     //心跳 | 
 |  |  |     private Short heart; | 
 |  |  |  | 
 |  |  |     //备用1 | 
 |  |  |     private Integer temp1; | 
 |  |  |  | 
 |  |  |     //备用2 | 
 |  |  |     /** | 
 |  |  |      * RGV工位1当前状态 | 
 |  |  |      * 0:空闲,无任务 | 
 |  |  |      * 11:取货中 | 
 |  |  |      * 12:放货中 | 
 |  |  |      * 10:任务完成等待WCS确认 | 
 |  |  |      */ | 
 |  |  |     public Short status1; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 状态枚举 | 
 |  |  |      */ | 
 |  |  |     public RgvStatusType statusType1; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 走行在定位 | 
 |  |  |      * 0 = 在定位 | 
 |  |  |      * 1 = 不在定位 | 
 |  |  |      */ | 
 |  |  |     public Short walkPos; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * RGV工位2当前状态 | 
 |  |  |      * 0:空闲,无任务 | 
 |  |  |      * 11:取货中 | 
 |  |  |      * 12:放货中 | 
 |  |  |      * 10:任务完成等待WCS确认 | 
 |  |  |      */ | 
 |  |  |     public Short status2; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 状态枚举 | 
 |  |  |      */ | 
 |  |  |     public RgvStatusType statusType2; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 工位2有物 | 
 |  |  |      */ | 
 |  |  |     public Short loaded2; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 心跳指令 1-2每秒切换一次 | 
 |  |  |      */ | 
 |  |  |     public Short heart; | 
 |  |  |  | 
 |  |  |     private Short temp1; | 
 |  |  |  | 
 |  |  |     private Short temp2; | 
 |  |  |  | 
 |  |  |     //备用3 | 
 |  |  |     private Short temp3; | 
 |  |  |  | 
 |  |  |     //备用4 | 
 |  |  |     private Short temp4; | 
 |  |  |  | 
 |  |  |     //备用5 | 
 |  |  |     private Short temp5; | 
 |  |  |  | 
 |  |  |     //工位1任务模式 | 
 |  |  |     private Short taskMode1; | 
 |  |  |  | 
 |  |  |     //工位1源站 | 
 |  |  |     private Short sourceStn1; | 
 |  |  |  | 
 |  |  |     //工位1目标站 | 
 |  |  |     private Short destinationPos1; | 
 |  |  |     public void setMode(Short mode) { | 
 |  |  |         this.mode = mode; | 
 |  |  |         this.modeType = RgvModeType.get(mode); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //工位2任务模式 | 
 |  |  |     private Short taskMode2; | 
 |  |  |     public void setMode(RgvModeType type) { | 
 |  |  |         this.modeType = type; | 
 |  |  |         this.mode = RgvModeType.get(type).id.shortValue(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //工位2源站 | 
 |  |  |     private Short sourceStn2; | 
 |  |  |     public void setStatus(Short status){ | 
 |  |  |         this.status = status; | 
 |  |  |         this.statusType = RgvStatusType.get(status); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //工位2目标站 | 
 |  |  |     private Short destinationPos2; | 
 |  |  |     public void setStatus(RgvStatusType type){ | 
 |  |  |         this.statusType = type; | 
 |  |  |         this.status = RgvStatusType.get(type).id.shortValue(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //工位1下发时间 | 
 |  |  |     private Long task1SendTime; | 
 |  |  |     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(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 最近一次入出库类型 | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     private String lastIo = "I"; | 
 |  |  |  | 
 |  |  |     public void setMode(Short mode) { | 
 |  |  |         this.mode = mode; | 
 |  |  |         this.modeType = RgvModeType.get(mode); | 
 |  |  |  | 
 |  |  |     public BasRgv toSqlModel(BasRgv basRgv){ | 
 |  |  |         if (alarm!=null) { | 
 |  |  |             basRgv.setRgvErr(alarm.longValue()); | 
 |  |  |         } | 
 |  |  |         basRgv.setWrkNo1(taskNo1.intValue()); | 
 |  |  | //        basRgv.setWrkNo2(taskNo2.intValue()); | 
 |  |  |         return basRgv; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setMode(RgvModeType type) { | 
 |  |  |         this.mode = type.id; | 
 |  |  |         this.modeType = type; | 
 |  |  |     public void setxSpeed(float xSpeed) { | 
 |  |  |         this.xSpeed = xSpeed; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setStatus(Short status) { | 
 |  |  |         this.status = status; | 
 |  |  |         this.statusType = RgvStatusType.get(status); | 
 |  |  |     public void setxDistance(float xDistance) { | 
 |  |  |         this.xDistance = xDistance; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setStatus(RgvStatusType type) { | 
 |  |  |         this.status = type.id; | 
 |  |  |         this.statusType = type; | 
 |  |  |     public void setxDuration(float xDuration) { | 
 |  |  |         this.xDuration = xDuration; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setWalkPos(Short walkPos) { | 
 |  |  |         this.walkPos = walkPos; | 
 |  |  |         this.walkPosType = RgvWalkPosType.get(walkPos); | 
 |  |  |     public Integer getRgvPosI(){ | 
 |  |  |         //需要根据现场改造  根据读到的值获取对应站点位置 | 
 |  |  |         Map<Short,Integer> map = new HashMap<>(); | 
 |  |  |         map.put((short) 1,100);map.put((short) 2,101); | 
 |  |  |         map.put((short) 3,106);map.put((short) 4,107); | 
 |  |  |         map.put((short) 5,112);map.put((short) 6,113); | 
 |  |  |         map.put((short) 7,119);map.put((short) 8,124); | 
 |  |  |         map.put((short) 9,149);map.put((short) 10,153); | 
 |  |  |         map.put((short) 11,157);map.put((short) 12,161); | 
 |  |  |         if (RgvPos==null) return 0; | 
 |  |  |  | 
 |  |  |         return map.get(RgvPos); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setWalkPos(RgvWalkPosType type) { | 
 |  |  |         this.walkPos = type.id; | 
 |  |  |         this.walkPosType = type; | 
 |  |  |     @Override | 
 |  |  |     public RgvProtocol clone() { | 
 |  |  |         try { | 
 |  |  |             return (RgvProtocol) super.clone(); | 
 |  |  |         } catch (CloneNotSupportedException e) { | 
 |  |  |             e.printStackTrace(); | 
 |  |  |         } | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |