package com.whyc.res;
|
|
import com.whyc.util.ComBase;
|
import com.whyc.util.ComFn;
|
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
import java.text.SimpleDateFormat;
|
import java.util.Arrays;
|
import java.util.Date;
|
|
|
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;
|
|
public static final int DATA_CHECK_BYTE_LEN = 6;
|
|
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 long dateTime; //时间毫秒数
|
|
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) {
|
int Data_Len = 3 * battSum * 2 + 12;
|
|
ByteBuffer bf = ByteBuffer.allocate(Data_Len);
|
bf.order(ByteOrder.LITTLE_ENDIAN);
|
for(int i=0;i<dataType.length;i++) {
|
bf.put((byte)0xAA);
|
}
|
//System.out.println(databuf.length);
|
bf.putInt((int)dateTime);
|
bf.putShort((short) battSum);
|
|
bf.put(databuf);
|
bf.flip();
|
bf.position(0);
|
if(databuf.length < (3 * battSum * 2 + 2)) {
|
//System.out.println("长度错误");
|
return false;
|
}
|
// System.err.println(ComFn.bytesToHexString(bf.array(), bf.array().length));
|
// int crc0 = bf.getShort(Data_Len-2) & 0xFFFF;
|
// bf.position(Data_Len-2);
|
// bf.putShort(ComBase.changeIntToShort(0));
|
// int crc1 = RES_Crc16.CalCRC16(bf, bf.limit());
|
// if(crc0 != crc1) {
|
// System.err.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 电操-500
|
if(battSum != MONOMER_NUM_MAX){
|
this.MonomerVol = new float[battSum]; //单体电压,分辨率0.001V
|
this.MonomerTemp = new float[battSum]; //温度,偏移100,分辨率0.1℃
|
this.MonomerRes = new float[battSum]; //内阻,分辨率0.001mΩ
|
}
|
|
for(int i=0;i<MonomerVol.length;i++) {
|
MonomerVol[i] = ComBase.changeShortToFloat(bf.getShort())*0.001f; //单体电压,分辨率0.001V
|
}
|
for(int i=0;i<MonomerTemp.length;i++) {
|
MonomerTemp[i] = ComBase.changeShortToFloat(bf.getShort())*0.1f - 10; //温度,偏移100,分辨率0.1℃
|
}
|
for(int i=0;i<MonomerRes.length;i++) {
|
MonomerRes[i] = ComBase.changeShortToFloat(bf.getShort())*0.001f; //内阻,分辨率0.001mΩ
|
}
|
return true;
|
}
|
|
public boolean readResMonCount(byte[] databuf) {
|
ByteBuffer bf = ByteBuffer.allocate(10); //读取时间以及单体数量,只能先读取单体数量才能确定后面读取结构体长度
|
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 < 6) {
|
//System.out.println("长度错误");
|
return false;
|
}
|
|
bf.position(0);
|
for(int i=0;i<dataType.length;i++) {
|
dataType[i] = ComBase.changeByteToInt(bf.get()); //固定值0xAA 0xAA 0xAA 0xAA
|
}
|
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)*/
|
|
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
|
//System.out.println("记录时间" + sdf.format(data_Time));
|
|
battSum = ComBase.changeShortToInt(bf.getShort()); //固定值300 电操-500
|
//System.out.println("battSum:"+battSum);
|
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) + "]";
|
}
|
|
|
}
|