package com.fgkj.bts; import java.nio.ByteBuffer; import java.nio.ByteOrder; /** * 电池参数 * @author DELL * */ public class BTS_BattParam implements Cloneable{ private final int BYTE_LEN = 44; //常规BTS长度 private final int BYTE_LEN_Li = 46; //锂电BTS长度 public double STD_CAP = 0.0; //标称容量 public double STD_RES = 0.0; //标称内阻 public int BattGroupCount = 0; //电池组数 public int EachGroupBattCount = 0; //每组单体数目 public double MonomerVol = 0.0; //单体电压 public double GroupVol = 0.0; //组端电压 public double BattTemp = 0.0; //电池温度 public double FloatChargeVol = 0.0; //浮充电压 public double FloatChargeCurr = 0.0; //浮充电压 public double OnlineVolLow = 0.0; //在线压低 public int GroupConnType = 0; /** * @lijun 2021-09-03 锂电BTS新增电池参数 */ public int BattGroupCountSum; //电池组总数(铅酸+锂电,只读) public int LiBattGroupCount; //锂电组数 public int LiEachGroupBattCount; //锂电节数 public double bakeup3 = 0; public double bakeup4 = 0; public double bakeup5 = 0; public double bakeup6 = 0; public double bakeup7 = 0; public double bakeup8 = 0; public double bakeup9 = 0; public double bakeup10 = 0; public int CRC = 0; /** * 复制一个当前对象(引用不同); */ public BTS_BattParam clone() { BTS_BattParam obj = null; try { obj = (BTS_BattParam)super.clone(); } catch(CloneNotSupportedException e) { e.printStackTrace(); } return obj; } /** * 清空当前对象 */ public void clear() { STD_CAP = 0.0; STD_RES = 0.0; BattGroupCount = 0; EachGroupBattCount = 0; MonomerVol = 0.0; GroupVol = 0.0; BattTemp = 0.0; FloatChargeVol = 0.0; FloatChargeCurr = 0.0; OnlineVolLow = 0.0; GroupConnType = 0; BattGroupCountSum = 0; //电池组总数(铅酸+锂电,只读) LiBattGroupCount = 0; //锂电组数 LiEachGroupBattCount = 0; //锂电节数 bakeup4 = 0; bakeup5 = 0; bakeup6 = 0; bakeup7 = 0; bakeup8 = 0; bakeup9 = 0; bakeup10 = 0; CRC = 0; } public boolean putByteBuffer(final ByteBuffer bf,int BTSE_DevType) { if(BTS_ComBase.BTSE_DevType_LIBTS == BTSE_DevType) { //锂电BTS return putLiBTSByteBuffer(bf); }else { return putBTSByteBuffer(bf); } } /** * 将bytebuffer中的数据取出放入该对象的属性中,并返回是否取出成功 * * @param bf * @return */ public boolean putBTSByteBuffer(final ByteBuffer bf) { if(bf.limit() < BYTE_LEN) { //System.out.println("长度错误"); return false; } ByteBuffer tmpbuf = bf; int crc0 = tmpbuf.getShort(BYTE_LEN-2) & 0xFFFF; int crc1 = BTS_Crc16.CalCRC16(tmpbuf, BYTE_LEN-2); if(crc0 != crc1) { //System.out.println("Crc 错误"); return false; } tmpbuf.position(0); STD_CAP = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()); STD_RES = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())*10;//uΩ BattGroupCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); EachGroupBattCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); MonomerVol = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; GroupVol = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()); BattTemp = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; FloatChargeVol = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; FloatChargeCurr = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; OnlineVolLow = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; GroupConnType = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); BattGroupCountSum = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); LiBattGroupCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); LiEachGroupBattCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup4 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup5 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup6 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup7 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup8 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup9 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup10 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); tmpbuf.compact(); tmpbuf.flip(); return true; } /** * 将bytebuffer中的数据取出放入该对象的属性中,并返回是否取出成功 * * @param bf * @return */ public boolean putLiBTSByteBuffer(final ByteBuffer bf) { if(bf.limit() < BYTE_LEN_Li) { System.out.println("长度错误"); return false; } ByteBuffer tmpbuf = bf; int crc0 = tmpbuf.getShort(BYTE_LEN_Li-2) & 0xFFFF; int crc1 = BTS_Crc16.CalCRC16(tmpbuf, BYTE_LEN_Li-2); if(crc0 != crc1) { //System.out.println("Crc 错误"); return false; } tmpbuf.position(0); STD_CAP = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()); STD_RES = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())*10;//uΩ BattGroupCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); EachGroupBattCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); MonomerVol = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; GroupVol = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()); BattTemp = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; FloatChargeVol = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; FloatChargeCurr = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; OnlineVolLow = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; GroupConnType = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); BattGroupCountSum = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); LiBattGroupCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); LiEachGroupBattCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup3 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup4 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup5 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup6 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup7 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup8 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup9 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup10 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); tmpbuf.compact(); tmpbuf.flip(); return true; } /** * 将bytebuffer中的数据取出放入该对象的属性中,并返回是否取出成功 * * @param bf * @return */ public boolean putByteBuffer(final ByteBuffer bf) { if(bf.limit() < BYTE_LEN) { System.out.println("长度错误"); return false; } ByteBuffer tmpbuf = bf; int crc0 = tmpbuf.getShort(BYTE_LEN-2) & 0xFFFF; int crc1 = BTS_Crc16.CalCRC16(tmpbuf, BYTE_LEN-2); if(crc0 != crc1) { System.out.println("Crc 错误"); return false; } System.out.println("crc0:"+crc0); tmpbuf.position(0); STD_CAP = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()); STD_RES = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())*10;//uΩ BattGroupCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); EachGroupBattCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); MonomerVol = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; GroupVol = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()); BattTemp = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; FloatChargeVol = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; FloatChargeCurr = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; OnlineVolLow = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10; GroupConnType = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); BattGroupCountSum = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); LiBattGroupCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); LiEachGroupBattCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup4 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup5 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup6 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup7 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup8 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup9 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup10 = BTS_ComBase.changeShortToInt(tmpbuf.getShort()); CRC= BTS_ComBase.changeShortToInt(tmpbuf.getShort()); tmpbuf.compact(); tmpbuf.flip(); //System.out.println(this); return true; } public ByteBuffer getByteBuffer(int BTSE_DevType) { if(BTS_ComBase.BTSE_DevType_LIBTS == BTSE_DevType) { //锂电BTS return getLiByteBuffer(); }else { return getByteBuffer(); } } /** * 将数据放入bytebuffer中并返回 * @return */ public ByteBuffer getLiByteBuffer() { ByteBuffer bytebuffer = ByteBuffer.allocate(BYTE_LEN_Li); bytebuffer.order(ByteOrder.LITTLE_ENDIAN); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(STD_CAP)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(STD_RES/10));//uΩ bytebuffer.putShort(BTS_ComBase.changeIntToShort(BattGroupCount)); bytebuffer.putShort(BTS_ComBase.changeIntToShort(EachGroupBattCount)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(MonomerVol*10)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(GroupVol)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(BattTemp*10)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(FloatChargeVol*10)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(FloatChargeCurr*10)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(OnlineVolLow*10)); bytebuffer.putShort(BTS_ComBase.changeIntToShort(GroupConnType)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(BattGroupCountSum)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(LiBattGroupCount)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(LiEachGroupBattCount)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup3)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup4)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup5)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup6)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup7)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup8)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup9)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup10)); CRC = BTS_Crc16.CalCRC16(bytebuffer, bytebuffer.position()); bytebuffer.putShort(BTS_ComBase.changeIntToShort(CRC)); bytebuffer.flip(); return bytebuffer; } /** * 将数据放入bytebuffer中并返回 * @return */ public ByteBuffer getByteBuffer() { ByteBuffer bytebuffer = ByteBuffer.allocate(BYTE_LEN); bytebuffer.order(ByteOrder.LITTLE_ENDIAN); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(STD_CAP)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(STD_RES/10));//uΩ bytebuffer.putShort(BTS_ComBase.changeIntToShort(BattGroupCount)); bytebuffer.putShort(BTS_ComBase.changeIntToShort(EachGroupBattCount)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(MonomerVol*10)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(GroupVol)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(BattTemp*10)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(FloatChargeVol*10)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(FloatChargeCurr*10)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(OnlineVolLow*10)); bytebuffer.putShort(BTS_ComBase.changeIntToShort(GroupConnType)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(BattGroupCountSum)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(LiBattGroupCount)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(LiEachGroupBattCount)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup4)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup5)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup6)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup7)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup8)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup9)); bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup10)); CRC = BTS_Crc16.CalCRC16(bytebuffer, bytebuffer.position()); bytebuffer.putShort(BTS_ComBase.changeIntToShort(CRC)); bytebuffer.flip(); return bytebuffer; } @Override public String toString() { return "FBS9100_ParamBatt [BYTE_LEN=" + BYTE_LEN + ", STD_CAP=" + STD_CAP + ", STD_RES=" + STD_RES + ", BattGroupCount=" + BattGroupCount + ", EachGroupBattCount=" + EachGroupBattCount + ", MonomerVol=" + MonomerVol + ", GroupVol=" + GroupVol + ", BattTemp=" + BattTemp + ", FloatChargeVol=" + FloatChargeVol + ", FloatChargeCurr=" + FloatChargeCurr + ", OnlineVolLow=" + OnlineVolLow + ", GroupConnType=" + GroupConnType + ", BattGroupCountSum=" + BattGroupCountSum + ", LiBattGroupCount=" + LiBattGroupCount + ", LiEachGroupBattCount=" + LiEachGroupBattCount + ", bakeup4=" + bakeup4 + ", bakeup5=" + bakeup5 + ", bakeup6=" + bakeup6 + ", bakeup7=" + bakeup7 + ", bakeup8=" + bakeup8 + ", bakeup9=" + bakeup9 + ", bakeup10=" + bakeup10 + ", CRC=" + CRC + "]"; } }