package com.zy.acs.common.domain.protocol; 
 | 
  
 | 
import com.zy.acs.framework.common.RadixTools; 
 | 
import com.zy.acs.common.constant.CommonConstant; 
 | 
import com.zy.acs.common.utils.Utils; 
 | 
import lombok.Data; 
 | 
  
 | 
import java.io.Serializable; 
 | 
import java.nio.ByteBuffer; 
 | 
  
 | 
/** 
 | 
 * 实时数据包1 
 | 
 * Created by vincent on 2023/3/16 
 | 
 */ 
 | 
@Data 
 | 
public class AGV_12_UP implements IMessageBody, Serializable { 
 | 
  
 | 
    private static final long serialVersionUID = 7485846034848121068L; 
 | 
  
 | 
    @Override 
 | 
    public byte[] writeToBytes() { 
 | 
        return new byte[0]; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void readFromBytes(byte[] bytes) { 
 | 
        //地面码ID 
 | 
        this.qrCode =  Utils.zeroFill(String.valueOf(RadixTools.bytesToInt(Utils.sliceWithReverse(bytes, 0, 4))), CommonConstant.QR_CODE_LEN);; 
 | 
        //地面码偏移x 
 | 
        this.offsetX = RadixTools.byteToShort(Utils.sliceWithReverse(bytes, 4 , 2)); 
 | 
        //地面码偏移y 
 | 
        this.offsetY = RadixTools.byteToShort(Utils.sliceWithReverse(bytes, 6, 2)); 
 | 
        //地面码偏移θ 
 | 
        this.groundCodeOffset0 = RadixTools.bytesToInt(Utils.sliceWithReverse(bytes, 8, 4)); 
 | 
        //当前状态 
 | 
        this.status = Utils.slice(bytes, 12, 1)[0]; 
 | 
        //直行方向坐标 
 | 
        this.straightDirectionPosition = RadixTools.bytesToInt(Utils.sliceWithReverse(bytes, 13, 4)); 
 | 
        //AGV当前角度 
 | 
//        this.AGVCurrentAngle = RadixTools.bytesToInt(Utils.sliceWithReverse(bytes, 17, 4)); 
 | 
        this.AGVCurrentAngle = ByteBuffer.wrap(Utils.sliceWithReverse(bytes, 17, 4)).getFloat(); 
 | 
        //陀螺仪角度 
 | 
        this.gyroAngle = RadixTools.bytesToInt(Utils.sliceWithReverse(bytes, 21, 4)); 
 | 
        //编码器角度 
 | 
        this.encoderAngle = RadixTools.bytesToInt(Utils.sliceWithReverse(bytes, 25, 4)); 
 | 
        //当前高度 
 | 
        this.currentAltitude = RadixTools.byteToShort(Utils.sliceWithReverse(bytes, 29, 2)); 
 | 
        //货叉伸出距离 
 | 
        this.forkLength = RadixTools.byteToShort(Utils.sliceWithReverse(bytes, 31, 2)); 
 | 
        //载货台旋转角度 
 | 
        this.loaderTheta = RadixTools.byteToShort(Utils.sliceWithReverse(bytes, 33, 2)); 
 | 
        //传感器状态标志 
 | 
//        this.sensorStatusFlags = RadixTools.bytesToInt(Utils.sliceWithReverse(bytes, 35, 4)); 
 | 
  
 | 
        byte[] sensorStatusBytes = Utils.slice(bytes, 35, 4); 
 | 
        parseSensorStatue(sensorStatusBytes); 
 | 
    } 
 | 
  
 | 
    //地面码ID 
 | 
    private String qrCode; 
 | 
  
 | 
    //地面码偏移x 
 | 
    private int offsetX; 
 | 
  
 | 
    //地面码偏移y 
 | 
    private int offsetY; 
 | 
  
 | 
    //地面码偏移θ 
 | 
    private int groundCodeOffset0; 
 | 
  
 | 
    //当前状态 
 | 
    private int status; 
 | 
  
 | 
    //直行方向坐标-单位:mm 
 | 
    private int straightDirectionPosition; 
 | 
  
 | 
    //AGV当前角度-单位:° 
 | 
    private float AGVCurrentAngle; 
 | 
  
 | 
    //陀螺仪角度-单位:° 
 | 
    private int gyroAngle; 
 | 
  
 | 
    //编码器角度-单位:° 
 | 
    private int encoderAngle; 
 | 
  
 | 
    //当前高度 
 | 
    private int currentAltitude; 
 | 
  
 | 
    // 货叉伸出距离 
 | 
    private int forkLength; 
 | 
  
 | 
    // 载货台旋转角度 
 | 
    private int loaderTheta; 
 | 
  
 | 
    //传感器状态标志 
 | 
    private int sensorStatusFlags; 
 | 
  
 | 
    // 取放货状态 
 | 
    private byte inOutFlag; 
 | 
  
 | 
    private void parseSensorStatue(byte[] bytes) { 
 | 
        this.tempLoc1 = Utils.getBit(bytes[0], 0); 
 | 
        this.tempLoc2 = Utils.getBit(bytes[0], 1); 
 | 
        this.tempLoc3 = Utils.getBit(bytes[0], 2); 
 | 
        this.tempLoc4 = Utils.getBit(bytes[0], 3); 
 | 
        this.tempLoc5 = Utils.getBit(bytes[0], 4); 
 | 
        this.tempLoc6 = Utils.getBit(bytes[0], 5); 
 | 
        this.tempLoc7 = Utils.getBit(bytes[0], 6); 
 | 
        this.tempLoc8 = Utils.getBit(bytes[0], 7); 
 | 
  
 | 
        this.inOutFlag = bytes[1]; 
 | 
  
 | 
//        this.tempLoc9 = Utils.getBit(bytes[1], 0); 
 | 
//        this.tempLoc10 = Utils.getBit(bytes[1], 1); 
 | 
//        this.tempLoc11 = Utils.getBit(bytes[1], 2); 
 | 
//        this.tempLoc12 = Utils.getBit(bytes[1], 3); 
 | 
//        this.tempLoc13 = Utils.getBit(bytes[1], 4); 
 | 
//        this.tempLoc14 = Utils.getBit(bytes[1], 5); 
 | 
//        this.tempLoc15 = Utils.getBit(bytes[1], 6); 
 | 
//        this.tempLoc16 = Utils.getBit(bytes[1], 7); 
 | 
  
 | 
        this.expandFront = Utils.getBit(bytes[2], 0); 
 | 
        this.expandBack = Utils.getBit(bytes[2], 1); 
 | 
        this.expandLeft = Utils.getBit(bytes[2], 2); 
 | 
        this.expandRight = Utils.getBit(bytes[2], 3); 
 | 
        this.finger1 = Utils.getBit(bytes[2], 4); 
 | 
        this.finger2 = Utils.getBit(bytes[2], 5); 
 | 
        this.finger3 = Utils.getBit(bytes[2], 6); 
 | 
        this.finger4 = Utils.getBit(bytes[2], 7); 
 | 
  
 | 
        this.rotaLeft = Utils.getBit(bytes[3], 0); 
 | 
        this.rotaRight = Utils.getBit(bytes[3], 1); 
 | 
        this.loaderFront = Utils.getBit(bytes[3], 2); 
 | 
        this.loaderBack = Utils.getBit(bytes[3], 3); 
 | 
        this.loaderMid = Utils.getBit(bytes[3], 4); 
 | 
        this.liftMid = Utils.getBit(bytes[3], 5); 
 | 
        this.liftUp = Utils.getBit(bytes[3], 6); 
 | 
        this.liftBottom = Utils.getBit(bytes[3], 7); 
 | 
    } 
 | 
  
 | 
  
 | 
    // 暂存货位1检测 
 | 
    private boolean tempLoc1; 
 | 
  
 | 
    // 暂存货位2检测 
 | 
    private boolean tempLoc2; 
 | 
  
 | 
    // 暂存货位3检测 
 | 
    private boolean tempLoc3; 
 | 
  
 | 
    // 暂存货位4检测 
 | 
    private boolean tempLoc4; 
 | 
  
 | 
    // 暂存货位5检测 
 | 
    private boolean tempLoc5; 
 | 
  
 | 
    // 暂存货位6检测 
 | 
    private boolean tempLoc6; 
 | 
  
 | 
    // 暂存货位7检测 
 | 
    private boolean tempLoc7; 
 | 
  
 | 
    // 暂存货位8检测 
 | 
    private boolean tempLoc8; 
 | 
  
 | 
    // 暂存货位9检测 
 | 
    private boolean tempLoc9; 
 | 
  
 | 
    // 暂存货位10检测 
 | 
    private boolean tempLoc10; 
 | 
  
 | 
    // 暂存货位11检测 
 | 
    private boolean tempLoc11; 
 | 
  
 | 
    // 暂存货位12检测 
 | 
    private boolean tempLoc12; 
 | 
  
 | 
    // 暂存货位13检测 
 | 
    private boolean tempLoc13; 
 | 
  
 | 
    // 暂存货位14检测 
 | 
    private boolean tempLoc14; 
 | 
  
 | 
    // 暂存货位15检测 
 | 
    private boolean tempLoc15; 
 | 
  
 | 
    // 暂存货位16检测 
 | 
    private boolean tempLoc16; 
 | 
  
 | 
    // 伸缩前限位 
 | 
    private boolean expandFront; 
 | 
  
 | 
    // 伸缩后限位 
 | 
    private boolean expandBack; 
 | 
  
 | 
    // 伸缩左零位 
 | 
    private boolean expandLeft; 
 | 
  
 | 
    // 伸缩右零位 
 | 
    private boolean expandRight; 
 | 
  
 | 
    // 拨指1位置 
 | 
    private boolean finger1; 
 | 
  
 | 
    // 拨指2位置 
 | 
    private boolean finger2; 
 | 
  
 | 
    // 拨指3位置 
 | 
    private boolean finger3; 
 | 
  
 | 
    // 拨指4位置 
 | 
    private boolean finger4; 
 | 
  
 | 
    // 回转左到位 
 | 
    private boolean rotaLeft; 
 | 
  
 | 
    // 回转右到位 
 | 
    private boolean rotaRight; 
 | 
  
 | 
    // 载货台前探货 
 | 
    private boolean loaderFront; 
 | 
  
 | 
    // 载货台后探货 
 | 
    private boolean loaderBack; 
 | 
  
 | 
    // 载货台货物检测 
 | 
    private boolean loaderMid; 
 | 
  
 | 
    // 升降零位 
 | 
    private boolean liftMid; 
 | 
  
 | 
    // 升降上限位 
 | 
    private boolean liftUp; 
 | 
  
 | 
    // 升降下限位 
 | 
    private boolean liftBottom; 
 | 
  
 | 
} 
 |