package com.dev.fgcd.data;
|
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
import java.util.Arrays;
|
|
import com.dev.btse.data.FBS9100_ComBase;
|
import com.dev.btse.data.FBS9100_Crc16;
|
import com.dev.btse.data.FBS9100_TestTime;
|
import com.dev.fgcd.data.FGCD_ComBase;
|
|
public class FGCD_VCData
|
{
|
private final int BYTE_LEN = 1500;
|
private final int BATTGROUP_COUNT = FBS9100_ComBase.BattGroupCountMax;
|
private final int BASIC_LEN = 12 + 20*BATTGROUP_COUNT;
|
|
//public FBS9100_SysState m_SysState = new FBS9100_SysState();
|
|
public int dataType[] = {0xAA, 0xAA, 0xAA, 0xAA};
|
public int CRC = 0;
|
public FBS9100_TestTime testTime = new FBS9100_TestTime();
|
public int battGroup = 1;
|
public int battSum = 24;
|
public int battGroupNum = 1;
|
|
public int battXuHangTime = 0;
|
public int stationPowerOffTLong = 0;
|
public int stationPowerOffCNT = 0;
|
|
public double conresist = 0; //×é1½Ó´¥Æ÷µ¼Í¨×迹 (0.001mR)
|
public double conresist1 = 0; //×é2½Ó´¥Æ÷µ¼Í¨×迹 (0.001mR)
|
public double condvoldp = 0; //×é1¶þ¼«¹Üѹ½µ(0.01V)
|
public double condvoldp1 = 0; //×é2¶þ¼«¹Üѹ½µ(0.01V)
|
|
|
public double onlinevol[] = new double[FBS9100_ComBase.BattGroupCountMax]; //ÔÚÏßµçѹ
|
public double groupvol[] = new double[FBS9100_ComBase.BattGroupCountMax]; //×é¶Ëµçѹ
|
public int battstate[] = new int[FBS9100_ComBase.BattGroupCountMax]; //³ä·Åµç״̬ 3 5 9
|
public double battcurr[] = new double[FBS9100_ComBase.BattGroupCountMax]; //µç³Ø×éµçÁ÷
|
public double battcap[] = new double[FBS9100_ComBase.BattGroupCountMax]; //µç³Ø×éÈÝÁ¿
|
public double batttemp[] = new double[FBS9100_ComBase.BattGroupCountMax]; //µç³Ø×éζÈ
|
public int monMAX_num[] = new int[FBS9100_ComBase.BattGroupCountMax]; //×î´óµ¥Ìå±àºÅ
|
public int monMIN_num[] = new int[FBS9100_ComBase.BattGroupCountMax]; //×îµÍ°´µ¥Ìå±àºÅ
|
public double monvolMAX[] = new double[FBS9100_ComBase.BattGroupCountMax]; //×î´óµ¥Ìåµçѹ
|
public double monvolMIN[] = new double[FBS9100_ComBase.BattGroupCountMax]; //×îµÍµ¥Ìåµçѹ
|
|
public double vol[] = new double[FBS9100_ComBase.MonomerCountMax]; //µ¥Ìåµçѹ
|
public double tmp[] = new double[FBS9100_ComBase.MonomerCountMax];
|
public FGCD_VCData clone()
|
{
|
FGCD_VCData obj = new FGCD_VCData();
|
|
//obj.m_SysState = (FBS9100_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();
|
obj.tmp = tmp.clone();
|
return obj;
|
}
|
|
public boolean putByteBuffer(ByteBuffer bf,int BYTECOUNT) {
|
int monsum = (BYTECOUNT - 32)/2;
|
if(monsum <= 0) {
|
return false;
|
}
|
if(monsum > 480) {
|
monsum = 480;
|
}
|
|
ByteBuffer tmpbuf = bf;
|
tmpbuf.position(0);
|
for(int i=0;i<BATTGROUP_COUNT;i++) {
|
groupvol[i] = FGCD_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
}
|
for(int i=0;i<BATTGROUP_COUNT;i++) {
|
battcurr[i] = FGCD_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
}
|
for(int i=0;i<BATTGROUP_COUNT;i++) {
|
//µç³Ø×´Ì¬
|
battstate[i] = FGCD_ComBase.changeShortToInt(tmpbuf.getShort()) - 0x80;
|
//battstate[i] = FGCD_ComBase.BattState_Discharge;
|
if(battstate[i] == FGCD_ComBase.BattState_Discharge ||
|
battstate[i] == FGCD_ComBase.BattState_PauseDischarge) {
|
//·Åµç»òÕßÔÝÍ£·Åµçʱ
|
battcurr[i] = (-1) * Math.abs(battcurr[i]);
|
//battcurr[i] = (-1) * Math.abs(8+Math.random());
|
}
|
}
|
for(int i=0;i<BATTGROUP_COUNT;i++) {
|
//È¡³ö8¸ö×Ö½ÚÔ¤ÁôÊý¾Ý
|
FGCD_ComBase.changeShortToInt(tmpbuf.getShort());
|
}
|
for(int i=0;i<monsum;i++) {
|
vol[i] = FGCD_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
}
|
//System.err.println(Arrays.toString(battcurr));
|
return true;
|
}
|
|
public boolean putByteBuffer(final ByteBuffer bf, int dev_type, int soft_ver)
|
{
|
if(bf.limit() < BASIC_LEN)
|
return false;
|
|
int battcount = bf.getShort(10);
|
if(battcount > FBS9100_ComBase.MonomerCountMax) {
|
return false;
|
}
|
|
ByteBuffer tmpbuf = bf;
|
int crc0 = tmpbuf.getShort(4) & 0xFFFF;
|
tmpbuf.putShort(4, (short) 0);
|
int crc1 = FBS9100_Crc16.CalCRC16(tmpbuf, BASIC_LEN + 2*battcount);
|
if(crc0 != crc1) {
|
return false;
|
}
|
|
tmpbuf.position(0);
|
for(int n=0; n<4; n++)
|
dataType[n] = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
|
|
CRC = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
|
testTime.hour = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
|
testTime.minute = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
|
testTime.second = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
|
battGroup = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
|
battSum = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
|
/*** 2020-12-04 lijun Äæ±ä°æ±¾µÄÉ豸ÔÚÏßµçѹºÍ×é¶Ëµçѹ²»ÓÃ/10 ****/
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
double o_v = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
if(((0x08 == dev_type) || (soft_ver >= 35)) && (0x06 != dev_type)) {
|
o_v /= 10;
|
}
|
onlinevol[n] = o_v;
|
}
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
double g_v = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
if(((0x08 == dev_type) || (soft_ver >= 35)) && (0x06 != dev_type)) {
|
g_v /= 10;
|
}
|
groupvol[n] = g_v;
|
}
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
battstate[n] = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
double b_curr = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
if(FBS9100_ComBase.BattState_Discharge == battstate[n]) {
|
b_curr *= -1;
|
}
|
battcurr[n] = b_curr;
|
}
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
double b_cap = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort());
|
if(FBS9100_ComBase.BattState_Discharge == battstate[n]) {
|
b_cap *= -1;
|
}
|
battcap[n] = b_cap;
|
}
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
batttemp[n] = FBS9100_ComBase.changeShortToDouble((short)(tmpbuf.getShort()-(short)100))/10;
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
monMAX_num[n] = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
|
}
|
battXuHangTime = (monMAX_num[0]<<16) + monMAX_num[1];
|
stationPowerOffTLong = (monMAX_num[2]<<16) + monMAX_num[3];
|
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
monMIN_num[n] = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
|
}
|
stationPowerOffCNT = monMIN_num[0];
|
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
monvolMAX[n] = ((double)FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort()))/100;
|
conresist = monvolMAX[0]/10;
|
conresist1 = monvolMAX[1]/10;
|
condvoldp = monvolMAX[2];
|
condvoldp1 = monvolMAX[3];
|
//System.out.println(conresist+"=="+conresist1+"=="+condvoldp+"=="+condvoldp1);
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
monvolMIN[n] = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
|
for(int n=0; n<battSum; n++) {
|
vol[n] = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
}
|
|
tmpbuf.compact();
|
tmpbuf.flip();
|
|
return true;
|
}
|
|
/**
|
* 2021-05-11 911É豸ÓÃÓÚÇø·Ö´ó¹¦ÂʼٸºÔØÉ豸¶ÁÈ¡ÔÚÏßµçѹºÍ×é¶ËµçѹÊý¾ÝÐÞ¸Ä
|
* @param bf
|
* @param dev_type
|
* @param soft_ver
|
* @param hard_ver
|
* @return
|
*/
|
public boolean putByteBuffer(final ByteBuffer bf, int dev_type, int soft_ver,int hard_ver)
|
{
|
if(bf.limit() < BASIC_LEN)
|
return false;
|
|
int battcount = bf.getShort(10);
|
if(battcount > FBS9100_ComBase.MonomerCountMax) {
|
return false;
|
}
|
|
ByteBuffer tmpbuf = bf;
|
int crc0 = tmpbuf.getShort(4) & 0xFFFF;
|
tmpbuf.putShort(4, (short) 0);
|
int crc1 = FBS9100_Crc16.CalCRC16(tmpbuf, BASIC_LEN + 2*battcount);
|
if(crc0 != crc1) {
|
return false;
|
}
|
|
tmpbuf.position(0);
|
for(int n=0; n<4; n++)
|
dataType[n] = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
|
|
CRC = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
|
testTime.hour = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
|
testTime.minute = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
|
testTime.second = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
|
battGroup = FBS9100_ComBase.changeByteToInt(tmpbuf.get());
|
battSum = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
|
/*** 2020-12-04 lijun Äæ±ä°æ±¾µÄÉ豸ÔÚÏßµçѹºÍ×é¶Ëµçѹ²»ÓÃ/10 ****/
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
double o_v = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
if(((0x08 == dev_type) || (soft_ver >= 35)) && ((0x06 != dev_type) || (0x06 == dev_type && hard_ver >70 && hard_ver < 80))) {
|
o_v /= 10;
|
}
|
onlinevol[n] = o_v;
|
}
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
double g_v = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
if(((0x08 == dev_type) || (soft_ver >= 35)) && ((0x06 != dev_type) || (0x06 == dev_type && hard_ver >70 && hard_ver < 80))) {
|
g_v /= 10;
|
}
|
groupvol[n] = g_v;
|
}
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
battstate[n] = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
double b_curr = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
if(FBS9100_ComBase.BattState_Discharge == battstate[n]) {
|
b_curr *= -1;
|
}
|
battcurr[n] = b_curr;
|
}
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
double b_cap = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort());
|
if(FBS9100_ComBase.BattState_Discharge == battstate[n]) {
|
b_cap *= -1;
|
}
|
battcap[n] = b_cap;
|
}
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
batttemp[n] = FBS9100_ComBase.changeShortToDouble((short)(tmpbuf.getShort()-(short)100))/10;
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
monMAX_num[n] = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
|
}
|
battXuHangTime = (monMAX_num[0]<<16) + monMAX_num[1];
|
stationPowerOffTLong = (monMAX_num[2]<<16) + monMAX_num[3];
|
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
monMIN_num[n] = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
|
}
|
stationPowerOffCNT = monMIN_num[0];
|
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
monvolMAX[n] = ((double)FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort()))/100;
|
conresist = monvolMAX[0]/10;
|
conresist1 = monvolMAX[1]/10;
|
condvoldp = monvolMAX[2];
|
condvoldp1 = monvolMAX[3];
|
//System.out.println(conresist+"=="+conresist1+"=="+condvoldp+"=="+condvoldp1);
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
monvolMIN[n] = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
|
for(int n=0; n<battSum; n++) {
|
vol[n] = FBS9100_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(FBS9100_ComBase.changeIntToByte(dataType[n]));
|
|
CRC = 0;
|
bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(CRC));
|
bytebuffer.put(FBS9100_ComBase.changeIntToByte(testTime.hour));
|
bytebuffer.put(FBS9100_ComBase.changeIntToByte(testTime.minute));
|
bytebuffer.put(FBS9100_ComBase.changeIntToByte(testTime.second));
|
bytebuffer.put(FBS9100_ComBase.changeIntToByte(battGroup));
|
//System.err.println(bytebuffer.position()+"#########################");
|
bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(battSum));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(onlinevol[n]*10));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(groupvol[n]*10));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(battstate[n]));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(battcurr[n]*10));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(battcap[n]));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(batttemp[n]*10));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(monMAX_num[n]));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(monMIN_num[n]));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(monvolMAX[n]*1000));
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(monvolMIN[n]*1000));
|
|
for(int n=0; n<battSum; n++)
|
bytebuffer.putShort(FBS9100_ComBase.changeDoubleToShort(vol[n]*1000));
|
|
CRC = FBS9100_Crc16.CalCRC16(bytebuffer, bytebuffer.position());
|
bytebuffer.putShort(4, FBS9100_ComBase.changeIntToShort(CRC));
|
|
bytebuffer.flip();
|
//System.err.println("buffer limit:"+bytebuffer.limit());
|
return bytebuffer;
|
}
|
|
@Override
|
public String toString() {
|
return "FGCD_VCData [BYTE_LEN=" + BYTE_LEN + ", BATTGROUP_COUNT=" + BATTGROUP_COUNT + ", BASIC_LEN=" + BASIC_LEN
|
+ ", dataType=" + Arrays.toString(dataType) + ", CRC=" + CRC + ", testTime=" + testTime + ", battGroup="
|
+ battGroup + ", battSum=" + battSum + ", battGroupNum=" + battGroupNum + ", battXuHangTime="
|
+ battXuHangTime + ", stationPowerOffTLong=" + stationPowerOffTLong + ", stationPowerOffCNT="
|
+ stationPowerOffCNT + ", conresist=" + conresist + ", conresist1=" + conresist1 + ", condvoldp="
|
+ condvoldp + ", condvoldp1=" + condvoldp1 + ", onlinevol=" + Arrays.toString(onlinevol) + ", groupvol="
|
+ Arrays.toString(groupvol) + ", battstate=" + Arrays.toString(battstate) + ", battcurr="
|
+ Arrays.toString(battcurr) + ", battcap=" + Arrays.toString(battcap) + ", batttemp="
|
+ Arrays.toString(batttemp) + ", monMAX_num=" + Arrays.toString(monMAX_num) + ", monMIN_num="
|
+ Arrays.toString(monMIN_num) + ", monvolMAX=" + Arrays.toString(monvolMAX) + ", monvolMIN="
|
+ Arrays.toString(monvolMIN) + ", vol=" + Arrays.toString(vol) + "]";
|
}
|
}
|
/***************************************************************************************
|
****************************** end of file (FBS_VCData) ********************************
|
***************************************************************************************/
|