package com.fgkj.bres;
|
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
import java.util.Arrays;
|
import java.util.Date;
|
|
import com.fgkj.data.Com;
|
import com.fgkj.data.ComBase;
|
import com.fgkj.data.ComFn;
|
|
public class RESData {
|
public static final int MONOMER_NUM_MAX = 300;
|
|
public static final int BYTE_LEN = 1812;
|
public static final int DATABYTE_LEN = 1808;
|
|
private int[] dataType = new int[4]; //固定值0xAA 0xAA 0xAA 0xAA
|
|
private Date data_Time; //记录时间/*Returns the datetime as the number of seconds that have passed since 1970-01-01T00:00:00, Coordinated Universal Time (Qt::UTC)*/
|
|
private int battSum; //固定值300
|
private float[] MonomerVol = new float[MONOMER_NUM_MAX]; //单体电压,分辨率0.001V
|
private float[] MonomerTemp = new float[MONOMER_NUM_MAX]; //温度,偏移100,分辨率0.1℃
|
private float[] MonomerRes = new float[MONOMER_NUM_MAX]; //内阻,分辨率0.001mΩ
|
private int CRC16;
|
|
public boolean setData(byte[] databuf) {
|
ByteBuffer bf = ByteBuffer.allocate(BYTE_LEN);
|
bf.order(ByteOrder.LITTLE_ENDIAN);
|
for(int i=0;i<dataType.length;i++) {
|
bf.put((byte)0xAA);
|
}
|
//System.out.println(databuf.length);
|
bf.put(databuf);
|
bf.position(0);
|
if(databuf.length < DATABYTE_LEN) {
|
//System.out.println("长度错误");
|
return false;
|
}
|
//System.err.println(ComFn.bytesToHexString(databuf, databuf.length));
|
int crc0 = bf.getShort(BYTE_LEN-2) & 0xFFFF;
|
bf.position(BYTE_LEN-2);
|
bf.putShort(ComBase.changeIntToShort(0));
|
int crc1 = RES_Crc16.CalCRC16(bf, bf.limit());
|
if(crc0 != crc1) {
|
//System.out.println(crc0+"==="+crc1);
|
return false;
|
}
|
|
bf.position(0);
|
for(int i=0;i<dataType.length;i++) {
|
dataType[i] = ComBase.changeByteToInt(bf.get()); //固定值0xAA 0xAA 0xAA 0xAA
|
}
|
long dateTime = bf.getInt();
|
//System.out.println(dateTime);
|
//System.out.println(new Date().getTime());
|
data_Time = new Date(dateTime*1000); //记录时间/*Returns the datetime as the number of seconds that have passed since 1970-01-01T00:00:00, Coordinated Universal Time (Qt::UTC)*/
|
|
//System.out.println(Com.getDateTimeFormat(data_Time, Com.DTF_YMDhms));
|
|
battSum = ComBase.changeShortToInt(bf.getShort()); //固定值300
|
for(int i=0;i<MonomerVol.length;i++) {
|
MonomerVol[i] = (float)(ComBase.changeShortToFloat(bf.getShort())*0.001); //单体电压,分辨率0.001V
|
}
|
for(int i=0;i<MonomerTemp.length;i++) {
|
MonomerTemp[i] = (float)(ComBase.changeShortToFloat(bf.getShort())*0.1 - 10); //温度,偏移100,分辨率0.1℃
|
}
|
for(int i=0;i<MonomerRes.length;i++) {
|
MonomerRes[i] = (float)(ComBase.changeShortToFloat(bf.getShort())*0.001); //内阻,分辨率0.001mΩ
|
}
|
return true;
|
}
|
|
public static int getMonomerNumMax() {
|
return MONOMER_NUM_MAX;
|
}
|
public int[] getDataType() {
|
return dataType;
|
}
|
public Date getData_Time() {
|
return data_Time;
|
}
|
public int getBattSum() {
|
return battSum;
|
}
|
public float[] getMonomerVol() {
|
return MonomerVol;
|
}
|
public float[] getMonomerTemp() {
|
return MonomerTemp;
|
}
|
public float[] getMonomerRes() {
|
return MonomerRes;
|
}
|
public int getCRC16() {
|
return CRC16;
|
}
|
public void setDataType(int[] dataType) {
|
this.dataType = dataType;
|
}
|
public void setData_Time(Date data_Time) {
|
this.data_Time = data_Time;
|
}
|
public void setBattSum(int battSum) {
|
this.battSum = battSum;
|
}
|
public void setMonomerVol(float[] monomerVol) {
|
MonomerVol = monomerVol;
|
}
|
public void setMonomerTemp(float[] monomerTemp) {
|
MonomerTemp = monomerTemp;
|
}
|
public void setMonomerRes(float[] monomerRes) {
|
MonomerRes = monomerRes;
|
}
|
public void setCRC16(int cRC16) {
|
CRC16 = cRC16;
|
}
|
|
@Override
|
public String toString() {
|
return "RESData [data_Time=" + data_Time + ", battSum=" + battSum + ", MonomerVol="
|
+ Arrays.toString(MonomerVol) + ", MonomerTemp=" + Arrays.toString(MonomerTemp) + ", MonomerRes="
|
+ Arrays.toString(MonomerRes) + "]";
|
}
|
|
|
}
|