package com.fgkj.bts; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Arrays; public class BTS_FbsData { private final int BYTE_LEN = 1500; private final static int BATTGROUP_COUNT = BTS_ComBase.BattGroupCountMax; public static 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 BTS_TestTime testTime = new BTS_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[BTS_ComBase.BattGroupCountMax_Mutl]; //在线电压 public double groupvol[] = new double[BTS_ComBase.BattGroupCountMax_Mutl]; //组端电压 public int battstate[] = new int[BTS_ComBase.BattGroupCountMax]; //充放电状态 3 5 9 public double battcurr[] = new double[BTS_ComBase.BattGroupCountMax_Mutl]; //电池组电流 public double battcap[] = new double[BTS_ComBase.BattGroupCountMax]; //电池组容量 public double batttemp[] = new double[BTS_ComBase.BattGroupCountMax_Mutl]; //电池组温度 public int monMAX_num[] = new int[BTS_ComBase.BattGroupCountMax]; //最大单体编号 public int monMIN_num[] = new int[BTS_ComBase.BattGroupCountMax]; //最低按单体编号 public double monvolMAX[] = new double[BTS_ComBase.BattGroupCountMax]; //最大单体电压 public double monvolMIN[] = new double[BTS_ComBase.BattGroupCountMax]; //最低单体电压 /** * @2022-06-15 lijun 并联BTS新增结构体 */ public double onlinecurr[] = new double[BTS_ComBase.BattGroupCountMax]; //并联BTS时读取的电流 public double vol[] = new double[BTS_ComBase.MonomerCountMax]; //单体电压 public BTS_FbsData clone() { BTS_FbsData obj = new BTS_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 boolean putByteBuffer(byte[] data, int dev_type, int soft_ver) { ByteBuffer bf = ByteBuffer.allocate(data.length); bf.order(ByteOrder.LITTLE_ENDIAN); bf.put(data); bf.flip(); bf.position(0); if(bf.limit() < BASIC_LEN) return false; int battcount = bf.getShort(10); if(battcount > BTS_ComBase.MonomerCountMax) { return false; } ByteBuffer tmpbuf = bf; int crc0 = tmpbuf.getShort(4) & 0xFFFF; tmpbuf.putShort(4, (short) 0); int crc1 = BTS_Crc16.CalCRC16(tmpbuf, BASIC_LEN + 2*battcount); if(crc0 != crc1) { return false; } tmpbuf.position(0); for(int n=0; n<4; n++) dataType[n] = BTS_ComBase.changeByteToInt(tmpbuf.get()); CRC = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); testTime.hour = BTS_ComBase.changeByteToInt(tmpbuf.get()); testTime.minute = BTS_ComBase.changeByteToInt(tmpbuf.get()); testTime.second = BTS_ComBase.changeByteToInt(tmpbuf.get()); battGroup = BTS_ComBase.changeByteToInt(tmpbuf.get()); battSum = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); /*** 2020-12-04 lijun 逆变版本的设备在线电压和组端电压不用/10 ****/ for(int n=0; n= 35)) && (0x06 != dev_type)) { o_v /= 10; } onlinevol[n] = o_v; } for(int n=0; n= 35)) && (0x06 != dev_type)) { g_v /= 10; } groupvol[n] = g_v; } for(int n=0; n BTS_ComBase.MonomerCountMax) { //System.out.println("battcount:"+battcount); return false; } ByteBuffer tmpbuf = bf; int crc0 = tmpbuf.getShort(4) & 0xFFFF; tmpbuf.putShort(4, (short) 0); int crc1 = BTS_Crc16.CalCRC16(tmpbuf, BASIC_LEN + 2*battcount); if(crc0 != crc1) { //System.out.println("crc0:"+crc0+"===crc1:"+crc1); return false; } tmpbuf.position(0); for(int n=0; n<4; n++) dataType[n] = BTS_ComBase.changeByteToInt(tmpbuf.get()); CRC = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); testTime.hour = BTS_ComBase.changeByteToInt(tmpbuf.get()); testTime.minute = BTS_ComBase.changeByteToInt(tmpbuf.get()); testTime.second = BTS_ComBase.changeByteToInt(tmpbuf.get()); battGroup = BTS_ComBase.changeByteToInt(tmpbuf.get()); battSum = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); /*** 2020-12-04 lijun 逆变版本的设备在线电压和组端电压不用/10 ****/ for(int n=0; n= 35)) && (0x06 != dev_type)) { o_v /= 10; // } onlinevol[n] = o_v; } for(int n=0; n= 35)) && (0x06 != dev_type)) { g_v /= 10; // } groupvol[n] = g_v; } for(int n=0; n BTS_ComBase.MonomerCountMax) { return false; } } ByteBuffer tmpbuf = bf; int crc0 = tmpbuf.getShort(4) & 0xFFFF; tmpbuf.putShort(4, (short) 0); int crc1 = BTS_Crc16.CalCRC16(tmpbuf, BASIC_LEN + 2*battcount); if(crc0 != crc1) { System.out.println("crc0:"+crc0+"=crc1"+crc1); return false; } tmpbuf.position(0); for(int n=0; n<4; n++) dataType[n] = BTS_ComBase.changeByteToInt(tmpbuf.get()); CRC = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); testTime.hour = BTS_ComBase.changeByteToInt(tmpbuf.get()); testTime.minute = BTS_ComBase.changeByteToInt(tmpbuf.get()); testTime.second = BTS_ComBase.changeByteToInt(tmpbuf.get()); battGroup = BTS_ComBase.changeByteToInt(tmpbuf.get()); battSum = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); /*** 2020-12-04 lijun 逆变版本的设备在线电压和组端电压不用/10 ****/ for(int n=0; n= 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= 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 BTS_ComBase.MonomerCountMax) { return false; } } ByteBuffer tmpbuf = bf; int crc0 = tmpbuf.getShort(4) & 0xFFFF; tmpbuf.putShort(4, (short) 0); //每组增添后备电流数据 int crc1 = BTS_Crc16.CalCRC16(tmpbuf, BASIC_LEN + 2*battcount+8); if(crc0 != crc1) { System.out.println("crc0:"+crc0+"=crc1"+crc1); return false; } tmpbuf.position(0); for(int n=0; n<4; n++) dataType[n] = BTS_ComBase.changeByteToInt(tmpbuf.get()); CRC = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); testTime.hour = BTS_ComBase.changeByteToInt(tmpbuf.get()); testTime.minute = BTS_ComBase.changeByteToInt(tmpbuf.get()); testTime.second = BTS_ComBase.changeByteToInt(tmpbuf.get()); battGroup = BTS_ComBase.changeByteToInt(tmpbuf.get()); battSum = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); /*** 2020-12-04 lijun 逆变版本的设备在线电压和组端电压不用/10 ****/ for(int n=0; n= 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= 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