package com.fgkj.fbs5100;
|
|
import java.io.FileInputStream;
|
import java.io.IOException;
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
import java.util.Arrays;
|
|
import com.fgkj.data.ComFn;
|
|
public class FBS5100_FBSData {
|
public static final int BYTE_LEN = 10 + 20*FBS5100_ComBase.BattGroupCountMax;
|
|
private final int BATTGROUP_COUNT = FBS5100_ComBase.BattGroupCountMax;
|
private final int BASIC_LEN = 10 + 20*BATTGROUP_COUNT;
|
|
//public FBS9100_SysState m_SysState = new FBS9100_SysState();
|
|
public int dataType[] = {0xAA, 0xAA, 0xAA, 0xAA};
|
public int CRC = 0;
|
public FBS5100_TestTime testTime = new FBS5100_TestTime();
|
public int battGroup = 1;
|
public int battSum = 24;
|
public int battGroupNum = 1;
|
|
public float muxianvol_discharge; //放电母线电压 24Vd+
|
public float muxianvol_charge; //充电母线电压 24Vc+
|
public float boostDCDC_OutVol; //升压DCDC输出电压 48Vd+
|
public float muxianvol; //48V母线电压 48Vo+
|
|
|
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 float onlinevol[] = new float[FBS5100_ComBase.BattGroupCountMax]; //在线电压
|
public float groupvol[] = new float[FBS5100_ComBase.BattGroupCountMax]; //组端电压
|
public int battstate[] = new int[FBS5100_ComBase.BattGroupCountMax]; //充放电状态 3 5 9
|
public float battcurr[] = new float[FBS5100_ComBase.BattGroupCountMax]; //电池组电流
|
public float battcap[] = new float[FBS5100_ComBase.BattGroupCountMax]; //电池组容量
|
public float batttemp[] = new float[FBS5100_ComBase.BattGroupCountMax]; //电池组温度
|
public int monMAX_num[] = new int[FBS5100_ComBase.BattGroupCountMax]; //最大单体编号
|
public int monMIN_num[] = new int[FBS5100_ComBase.BattGroupCountMax]; //最低按单体编号
|
public double monvolMAX[] = new double[FBS5100_ComBase.BattGroupCountMax]; //最大单体电压
|
public double monvolMIN[] = new double[FBS5100_ComBase.BattGroupCountMax]; //最低单体电压
|
|
public float vol[] = new float[FBS5100_ComBase.MonomerCountMax]; //单体电压
|
|
public FBS5100_FBSData clone()
|
{
|
FBS5100_FBSData obj = new FBS5100_FBSData();
|
|
//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();
|
|
return obj;
|
}
|
|
public void copy(FBS5100_FBSData source) {
|
for(int i = 0 ; i < groupvol.length;i++) {
|
this.groupvol[i] = source.groupvol[i];
|
}
|
for(int i = 0 ; i < battcurr.length;i++) {
|
this.battcurr[i] = source.battcurr[i];
|
}
|
for(int i = 0 ; i < battstate.length;i++) {
|
this.battstate[i] = source.battstate[i];
|
}
|
this.muxianvol_discharge = source.muxianvol_discharge; //放电母线电压 24Vd+
|
this.muxianvol_charge = source.muxianvol_charge; //充电母线电压 24Vc+
|
this.boostDCDC_OutVol = source.boostDCDC_OutVol; //升压DCDC输出电压 48Vd+
|
this.muxianvol = source.muxianvol; //48V母线电压 48Vo+
|
|
}
|
|
/**
|
* 2021-05-11 911设备用于区分大功率假负载设备读取在线电压和组端电压数据修改
|
* @param bf
|
* @param dev_type
|
* @param soft_ver
|
* @param hard_ver
|
* @return
|
*/
|
public boolean putByteBuffer(byte[] data)
|
{
|
ByteBuffer bf = ByteBuffer.allocate(BASIC_LEN);
|
bf.order(ByteOrder.LITTLE_ENDIAN);
|
for(int i = 0 ;i<this.dataType.length;i++) {
|
bf.put(FBS5100_ComBase.changeIntToByte(this.dataType[i]));
|
}
|
bf.put(data);
|
bf.flip();
|
//System.out.println(ComFn.bytesToHexString(bf.array(), bf.array().length));
|
if(bf.limit() < BASIC_LEN) {
|
System.out.println(bf.limit() + "==" + BASIC_LEN);
|
return false;
|
}
|
int battcount = bf.getShort(10);
|
if(battcount > FBS5100_ComBase.MonomerCountMax) {
|
//System.out.println("单体数目"+battcount);
|
return false;
|
}
|
|
ByteBuffer tmpbuf = bf;
|
int crc0 = tmpbuf.getShort(4) & 0xFFFF;
|
tmpbuf.putShort(4, (short) 0);
|
int crc1 = FBS5100_Crc16.CalCRC16(tmpbuf, BASIC_LEN + 2*battcount);
|
if(crc0 != crc1) {
|
System.out.println(crc0 + "===" + crc1);
|
return false;
|
}
|
tmpbuf.position(0);
|
for(int n=0; n<4; n++)
|
dataType[n] = FBS5100_ComBase.changeByteToInt(tmpbuf.get());
|
|
CRC = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort());
|
testTime.hour = FBS5100_ComBase.changeByteToInt(tmpbuf.get());
|
testTime.minute = FBS5100_ComBase.changeByteToInt(tmpbuf.get());
|
testTime.second = FBS5100_ComBase.changeByteToInt(tmpbuf.get());
|
battGroup = FBS5100_ComBase.changeByteToInt(tmpbuf.get());
|
battSum = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort());
|
|
muxianvol_discharge = (float)FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/10; //放电母线电压 24Vd+
|
muxianvol_charge = (float)FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/10; //充电母线电压 24Vc+
|
boostDCDC_OutVol = (float)FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/10; //升压DCDC输出电压 48Vd+
|
|
|
muxianvol = (float)FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/10; //48V母线电压 48Vo+
|
/*** 2020-12-04 lijun 逆变版本的设备在线电压和组端电压不用/10 ****/
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
//float o_v = FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/100;
|
onlinevol[n] = muxianvol;
|
}
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
float g_v = FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/10;
|
groupvol[n] = g_v;
|
}
|
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
battcurr[n] = FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/10;
|
}
|
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
battstate[n] = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort());
|
if(FBS5100_ComBase.BattState_Discharge == battstate[n]) {
|
battcurr[n] *= -1;
|
}
|
}
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
float b_cap = FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort());
|
if(FBS5100_ComBase.BattState_Discharge == battstate[n]) {
|
b_cap *= -1;
|
}
|
battcap[n] = b_cap;
|
}
|
for(int n=0; n<(BATTGROUP_COUNT-1); n++)
|
/**
|
* 2021-10-27 @lijun 修复温度<10度时,温度显示bug
|
*/
|
//batttemp[n] = FBS5100_ComBase.changeShortToDouble((short)(tmpbuf.getShort()-(short)100))/10;
|
batttemp[n] = FBS5100_ComBase.changeShortToFloat((short)(tmpbuf.getShort()))/10 -10;
|
for(int n=0; n<BATTGROUP_COUNT; n++) {
|
monMAX_num[n] = FBS5100_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] = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort());
|
}
|
stationPowerOffCNT = monMIN_num[0];
|
|
for(int n=0; n<BATTGROUP_COUNT; n++)
|
monvolMAX[n] = ((double)FBS5100_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] = FBS5100_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
|
for(int n=0; n<battSum; n++) {
|
vol[n] = FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/1000;
|
}
|
|
tmpbuf.compact();
|
tmpbuf.flip();
|
System.out.println(this);
|
return true;
|
}
|
|
|
|
|
public int checkDataHead(FileInputStream fis)
|
{
|
boolean file_end = false;
|
byte type_tag = 0;
|
byte[] tag = new byte[1];
|
try {
|
while(true)
|
{
|
type_tag = 0;
|
int n = 0;
|
for(n=0; n<4; n++)
|
{
|
if(1 != fis.read(tag, 0, 1))
|
{
|
file_end = true;
|
break;
|
}
|
if((0xFD != (tag[0]&0xFF)) && (0xFC != (tag[0]&0xFF)) && (0xFB != (tag[0]&0xFF)))
|
{
|
break;
|
}
|
}
|
|
if(n >= 4)
|
{
|
type_tag = tag[0];
|
break;
|
}
|
if(true == file_end)
|
{
|
type_tag = 1;
|
break;
|
}
|
}
|
} catch (IOException e) {
|
//e.printStackTrace();
|
}
|
setType(type_tag&0xFF);
|
|
return (type_tag&0xFF);
|
}
|
|
|
private void setType(int type) {
|
for(int i = 0;i<dataType.length;i++) {
|
dataType[i] = type;
|
}
|
}
|
|
@Override
|
public String toString() {
|
return "FBS5100_FBSData [dataType=" + Arrays.toString(dataType) + ", testTime=" + testTime + ", battGroup="
|
+ battGroup + ", battSum=" + battSum + ", battGroupNum=" + battGroupNum + ", muxianvol_discharge="
|
+ muxianvol_discharge + ", muxianvol_charge=" + muxianvol_charge + ", boostDCDC_OutVol="
|
+ boostDCDC_OutVol + ", muxianvol=" + muxianvol + ", 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) + "]";
|
}
|
|
|
}
|