package com.fbs9100;
|
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
|
public class FBS_VCData
|
{
|
private final int BYTE_LEN = 1500;
|
private final int BATTGROUP_COUNT = FBS_ComBase.BattGroupCountMax;
|
private final int BASIC_LEN = 12 + 20 * BATTGROUP_COUNT;
|
|
public FBS_SysState m_SysState = new FBS_SysState();
|
|
public int dataType[] = {0xAA, 0xAA, 0xAA, 0xAA};
|
public int CRC = 0;
|
public FBS_TestTime testTime = new FBS_TestTime();
|
public int battGroup = 1;
|
public int battSum = 24;
|
public int battGroupNum = 1;
|
|
public double onlinevol[] = new double[FBS_ComBase.BattGroupCountMax]; //在线电压
|
public double groupvol[] = new double[FBS_ComBase.BattGroupCountMax]; //组端电压
|
public int battstate[] = new int[FBS_ComBase.BattGroupCountMax]; //充放电状态 3 5 9
|
public double battcurr[] = new double[FBS_ComBase.BattGroupCountMax]; //电池组电流
|
public double battcap[] = new double[FBS_ComBase.BattGroupCountMax]; //电池组容量
|
public double batttemp[] = new double[FBS_ComBase.BattGroupCountMax]; //电池组温度
|
public int monMAX_num[] = new int[FBS_ComBase.BattGroupCountMax]; //最大单体编号
|
public int monMIN_num[] = new int[FBS_ComBase.BattGroupCountMax]; //最低按单体编号
|
public double monvolMAX[] = new double[FBS_ComBase.BattGroupCountMax]; //最大单体电压
|
public double monvolMIN[] = new double[FBS_ComBase.BattGroupCountMax]; //最低单体电压
|
|
public double vol[] = new double[FBS_ComBase.MonomerCountMax]; //单体电压
|
|
public FBS_VCData clone()
|
{
|
FBS_VCData obj = new FBS_VCData();
|
|
obj.m_SysState = m_SysState.clone();
|
obj.dataType = dataType.clone();
|
obj.CRC = CRC;
|
obj.testTime = testTime;
|
obj.battGroup = battGroup;
|
obj.battSum = battSum;
|
|
obj.onlinevol = onlinevol.clone();
|
obj.groupvol = groupvol.clone();
|
obj.battstate = battstate.clone();
|
obj.battcurr = battcurr.clone();
|
|
obj.battcap = battcap.clone();
|
obj.batttemp = batttemp.clone();
|
obj.monMAX_num = monMAX_num.clone();
|
obj.monMIN_num = monMIN_num.clone();
|
obj.monvolMAX = monvolMAX.clone();
|
obj.monvolMIN = monvolMIN.clone();
|
obj.vol = vol.clone();
|
|
return obj;
|
}
|
|
public boolean putByteBuffer(final ByteBuffer bf)
|
{
|
if(bf.limit() < BASIC_LEN)
|
return false;
|
|
int battcount = bf.getShort(10);
|
|
if(battcount > FBS_ComBase.MonomerCountMax)
|
return false;
|
|
ByteBuffer tmpbuf = bf;
|
int crc0 = tmpbuf.getShort(4) & 0xFFFF;
|
tmpbuf.putShort(4, (short) 0);
|
int crc1 = FBS_Crc16.CalCRC16(tmpbuf, BASIC_LEN + 2*battcount);
|
if(crc0 != crc1)
|
return false;
|
|
tmpbuf.position(0);
|
for(int n=0; n<4; n++)
|
dataType[n] = FBS_ComBase.changeByteToInt(tmpbuf.get());
|
|
CRC = FBS_ComBase.changeShortToInt(tmpbuf.getShort());
|
testTime.hour = FBS_ComBase.changeByteToInt(tmpbuf.get());
|
testTime.minute = FBS_ComBase.changeByteToInt(tmpbuf.get());
|
testTime.second = FBS_ComBase.changeByteToInt(tmpbuf.get());
|
battGroup = FBS_ComBase.changeByteToInt(tmpbuf.get());
|
battSum = FBS_ComBase.changeShortToInt(tmpbuf.getShort());
|
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
onlinevol[n] = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/100;
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
groupvol[n] = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/100;
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
battstate[n] = FBS_ComBase.changeShortToInt(tmpbuf.getShort());
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
battcurr[n] = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
battcap[n] = FBS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
batttemp[n] = FBS_ComBase.changeShortToDouble((short)(tmpbuf.getShort()-(short)100))/10;
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
monMAX_num[n] = FBS_ComBase.changeShortToInt(tmpbuf.getShort());
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
monMIN_num[n] = FBS_ComBase.changeShortToInt(tmpbuf.getShort());
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
monvolMAX[n] = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
monvolMIN[n] = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
|
for(int n=0; n<battSum; n++)
|
vol[n] = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
|
tmpbuf.compact();
|
tmpbuf.flip();
|
|
return true;
|
}
|
|
public ByteBuffer getByteBuffer()
|
{
|
ByteBuffer bytebuffer = ByteBuffer.allocate(BYTE_LEN);
|
bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
|
|
for(int n=0; n<4; n++)
|
bytebuffer.put(FBS_ComBase.changeIntToByte(dataType[n]));
|
|
CRC = 0;
|
bytebuffer.putShort(FBS_ComBase.changeIntToShort(CRC));
|
bytebuffer.put(FBS_ComBase.changeIntToByte(testTime.hour));
|
bytebuffer.put(FBS_ComBase.changeIntToByte(testTime.minute));
|
bytebuffer.put(FBS_ComBase.changeIntToByte(testTime.second));
|
bytebuffer.put(FBS_ComBase.changeIntToByte(battGroup));
|
bytebuffer.putShort(FBS_ComBase.changeIntToShort(battSum));
|
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(onlinevol[n]*100));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(groupvol[n]*100));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS_ComBase.changeIntToShort(battstate[n]));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(battcurr[n]*10));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(battcap[n]));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(batttemp[n]*10));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS_ComBase.changeIntToShort(monMAX_num[n]));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS_ComBase.changeIntToShort(monMIN_num[n]));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(monvolMAX[n]*1000));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(monvolMIN[n]*1000));
|
|
for(int n=0; n<battSum; n++)
|
bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(vol[n]*1000));
|
|
CRC = FBS_Crc16.CalCRC16(bytebuffer, bytebuffer.position());
|
bytebuffer.putShort(4, FBS_ComBase.changeIntToShort(CRC));
|
|
bytebuffer.flip();
|
|
return bytebuffer;
|
}
|
}
|
/***************************************************************************************
|
****************************** end of file (FBS_VCData) ********************************
|
***************************************************************************************/
|