| | |
| | | import java.nio.ByteBuffer;
|
| | | import java.nio.ByteOrder;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Arrays;
|
| | | import java.util.Date;
|
| | | import java.util.List;
|
| | |
|
| | |
| | | {
|
| | | AlarmData almData = new AlarmData();
|
| | | if(almData.setData(databuf)) {
|
| | | //System.out.println(resData);
|
| | | System.out.println(almData);
|
| | | almDatas.add(almData);
|
| | | }
|
| | | }
|
| | | }
|
| | | if(fis.available() <1) {
|
| | | //System.out.println("解析完成");
|
| | | System.out.println("解析完成");
|
| | | break;
|
| | |
|
| | | }
|
| | |
| | | sYNCode[i] = ComBase.changeByteToInt(bf.get());
|
| | | }
|
| | | record_line = ComBase.changeShortToInt(bf.getShort());
|
| | | //System.out.println("行数:"+record_line);
|
| | | System.out.println("行数:"+record_line);
|
| | | return true;
|
| | | }
|
| | |
|
| | |
| | | }
|
| | | return check_ok;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | | return "AlarmDataHead [sYNCode=" + Arrays.toString(sYNCode) + ", record_line=" + record_line + "]";
|
| | | }
|
| | | |
| | | |
| | | }
|
| | |
|
| | | //告警详情
|
| | |
| | | return true;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | | return "AlarmData [sYNCode=" + Arrays.toString(sYNCode) + ", alarmType=" + alarmType + ", groupIndex="
|
| | | + groupIndex + ", battIndex=" + battIndex + ", alarmValue=" + alarmValue + ", startTime="
|
| | | + startTime + ", endTime=" + endTime + "]";
|
| | | }
|
| | | }
|
| | |
|
| | | //时间
|
| | |
| | |
|
| | | }
|
| | |
|
| | | |
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | | return "AlarmDataInfo [almDataHead=" + almDataHead + ", almDatas=" + almDatas + ", parse_result=" + parse_result
|
| | | + ", file_type=" + file_type + "]";
|
| | | }
|
| | |
|
| | |
|
| | | public static void main(String[] args) {
|
| | | AlarmDataInfo info = new AlarmDataInfo();
|
| | | info.readFileData("D:\\桌面文件备份\\公司各种设备资料\\FBS存储文件解析/vcalarm.ALM");
|
| | | info.readFileData("D:\\桌面文件备份\\公司各种设备资料\\FBX存储文件解析/vcalarm.ALM");
|
| | | System.out.println(info);
|
| | | }
|
| | | }
|
New file |
| | |
| | | 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
|
| | | + "]";
|
| | | }
|
| | | }
|
New file |
| | |
| | | package com.fgkj.bts;
|
| | |
|
| | | import java.nio.ByteBuffer;
|
| | | import java.nio.ByteOrder;
|
| | | import java.util.Arrays;
|
| | |
|
| | |
|
| | | public class BTS_CapState implements Cloneable{
|
| | | private final int BYTE_LEN = 222; //原来
|
| | | //private final int BYTE_LEN = 126; |
| | | private final int BATTGROUP_COUNT = BTS_ComBase.BattGroupCountMax;
|
| | | |
| | | public BTS_DateTime StartDT = new BTS_DateTime(); //启动放电的日期时间
|
| | | public BTS_DateTime StopDT = new BTS_DateTime(); //终止放电的日期时间
|
| | | public BTS_TestTime Test_Time = new BTS_TestTime(); //已测试时间(HMS)
|
| | | |
| | | public int TestState; //测试状态(停止/暂停/放电)
|
| | | public int TestType; //测试类型(放电/充电)
|
| | | public int TestGroupNum; //被测试电池组编号(1~4)
|
| | | public int SaveDataEN; //保存数据标识
|
| | | public int BackUp; //备份
|
| | | public int MonomerLowCount[] = new int[BTS_ComBase.BattGroupCountMax]; //每组已到单体下限数量
|
| | | |
| | | public double TestCur[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public double GroupVol[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public double OnlineVol[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public double TestCapInt[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public double GroupCapInt[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public double GroupRestCapInt[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public int MonMaxNum[] = new int[BTS_ComBase.BattGroupCountMax];
|
| | | public int MonMinNum[] = new int[BTS_ComBase.BattGroupCountMax];
|
| | | public double MonMaxValue[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public double MonMinValue[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | |
| | | public int RestTest_Time[] = new int[BTS_ComBase.BattGroupCountMax]; //剩余容量可放电时间(HMS)
|
| | | |
| | | public int CRC;
|
| | | |
| | | public BTS_CapState clone()
|
| | | {
|
| | | BTS_CapState obj = null; |
| | | try
|
| | | {
|
| | | obj = (BTS_CapState)super.clone();
|
| | | }
|
| | | catch(CloneNotSupportedException e)
|
| | | {
|
| | | e.printStackTrace();
|
| | | }
|
| | | return obj;
|
| | | }
|
| | | |
| | | public boolean putByteBuffer(final ByteBuffer bf)
|
| | | {
|
| | | if(bf.limit() < BYTE_LEN) {
|
| | | 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("crc0:"+crc0+"===crc1"+crc1);
|
| | | // return false;
|
| | | //}
|
| | | tmpbuf.position(0);
|
| | | StartDT.year = BTS_ComBase.changeByteToInt( tmpbuf.get());
|
| | | StartDT.month = BTS_ComBase.changeByteToInt( tmpbuf.get());
|
| | | StartDT.day = BTS_ComBase.changeByteToInt( tmpbuf.get());
|
| | | StartDT.hour = BTS_ComBase.changeByteToInt( tmpbuf.get());
|
| | | StartDT.minute = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StartDT.second = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | |
| | | StopDT.year = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StopDT.month = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StopDT.day = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StopDT.hour = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StopDT.minute = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StopDT.second = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | |
| | | Test_Time.hour = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | Test_Time.minute = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | Test_Time.second = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | |
| | | TestState = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | TestType = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | TestGroupNum = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | SaveDataEN = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | BackUp = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | MonomerLowCount[n] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | TestCur[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()) / 10;
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | GroupVol[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()) / 10;
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | OnlineVol[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()) / 10;
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | TestCapInt[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | GroupCapInt[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | GroupRestCapInt[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | MonMaxNum[n] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | MonMinNum[n] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | MonMaxValue[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()) / 1000;
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | MonMinValue[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()) / 1000;
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | RestTest_Time[n] = tmpbuf.getInt();
|
| | | |
| | | |
| | | System.out.println(this);
|
| | | tmpbuf.compact();
|
| | | tmpbuf.flip();
|
| | | |
| | | return true;
|
| | | }
|
| | | |
| | | public ByteBuffer getByteBuffer()
|
| | | {
|
| | | ByteBuffer bytebuffer = ByteBuffer.allocate(BYTE_LEN);
|
| | | bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
|
| | | |
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StartDT.year));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StartDT.month));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StartDT.day));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StartDT.hour));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StartDT.minute));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StartDT.second));
|
| | | |
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StopDT.year));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StopDT.month));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StopDT.day));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StopDT.hour));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StopDT.minute));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StopDT.second));
|
| | | |
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(Test_Time.hour));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(Test_Time.minute));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(Test_Time.second));
|
| | | |
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(TestState));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(TestType));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(TestGroupNum));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(SaveDataEN));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(BackUp));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(MonomerLowCount[n]));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(TestCur[n]*10));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(GroupVol[n]*10));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(OnlineVol[n]*10));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(TestCapInt[n]));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(GroupCapInt[n]));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(GroupRestCapInt[n]));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(MonMaxNum[n]));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(MonMinNum[n]));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(MonMaxValue[n]*1000));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(MonMinValue[n]*1000));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putInt(RestTest_Time[n]);
|
| | | |
| | | CRC = BTS_Crc16.CalCRC16(bytebuffer, bytebuffer.capacity()-2);
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(CRC));
|
| | | bytebuffer.flip();
|
| | | //System.out.println(bytebuffer.limit()+"&&&&&&&&&&&&&&&&");
|
| | | return bytebuffer;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | | return "BTS_CapState [BYTE_LEN=" + BYTE_LEN + ", BATTGROUP_COUNT=" + BATTGROUP_COUNT + ", StartDT="
|
| | | + StartDT + ", StopDT=" + StopDT + ", Test_Time=" + Test_Time + ", TestState=" + TestState
|
| | | + ", TestType=" + TestType + ", TestGroupNum=" + TestGroupNum + ", SaveDataEN=" + SaveDataEN
|
| | | + ", BackUp=" + BackUp + ", MonomerLowCount=" + Arrays.toString(MonomerLowCount) + ", TestCur="
|
| | | + Arrays.toString(TestCur) + ", GroupVol=" + Arrays.toString(GroupVol) + ", OnlineVol="
|
| | | + Arrays.toString(OnlineVol) + ", TestCapInt=" + Arrays.toString(TestCapInt) + ", GroupCapInt="
|
| | | + Arrays.toString(GroupCapInt) + ", GroupRestCapInt=" + Arrays.toString(GroupRestCapInt)
|
| | | + ", MonMaxNum=" + Arrays.toString(MonMaxNum) + ", MonMinNum=" + Arrays.toString(MonMinNum)
|
| | | + ", MonMaxValue=" + Arrays.toString(MonMaxValue) + ", MonMinValue=" + Arrays.toString(MonMinValue)
|
| | | + ", RestTest_Time=" + Arrays.toString(RestTest_Time) + ", CRC=" + CRC + "]";
|
| | | }
|
| | | |
| | | public static void main(String[] args) {
|
| | | System.out.println(new BTS_CapState().putByteBuffer(new BTS_CapState().getByteBuffer()));
|
| | | }
|
| | | |
| | | } |
New file |
| | |
| | | package com.fgkj.bts;
|
| | |
|
| | | import java.io.File;
|
| | | import java.io.FileInputStream;
|
| | | import java.io.IOException;
|
| | | import java.nio.ByteBuffer;
|
| | | import java.nio.ByteOrder;
|
| | | import java.util.ArrayList;
|
| | | import java.util.List;
|
| | |
|
| | | import com.fgkj.data.ComFn;
|
| | | import com.fgkj.data.FboData;
|
| | | import com.fgkj.data.FboData.DataType;
|
| | |
|
| | | /**
|
| | | * 充电数据
|
| | | * @author DELL
|
| | | *
|
| | | */
|
| | | public class BTS_ChargeData {
|
| | | |
| | | public int parse_result = BTS_ComBase.PARSE_RESULT_NULL;
|
| | | |
| | | |
| | | public BTS_BattParam battParam; //电池参数
|
| | | public BTS_ChargeParam chargeParam; //充电参数
|
| | | public BTS_ChargeState charState; //充电状态
|
| | | |
| | | public List<BTS_FbsData> fbsDatas; //每次记录的单体数据
|
| | | |
| | | public BTS_ChargeData() {
|
| | | battParam = new BTS_BattParam();
|
| | | chargeParam = new BTS_ChargeParam();
|
| | | charState = new BTS_ChargeState();
|
| | | fbsDatas = new ArrayList<BTS_FbsData>();
|
| | | }
|
| | | |
| | | /**
|
| | | * 解析充电数据
|
| | | * @param filePath
|
| | | */
|
| | | public void readChrFile(String filePath)
|
| | | {
|
| | | FileInputStream fis = null;
|
| | | try {
|
| | | File f = new File(filePath);
|
| | | if(!filePath.endsWith(".CHR") || !filePath.toUpperCase().endsWith(".CHR")) {
|
| | | //文件格式错误
|
| | | parse_result = BTS_ComBase.PARSE_RESULT_FILETYPEERR;
|
| | | return;
|
| | | }
|
| | | if(!f.exists()) {
|
| | | //文件不存在
|
| | | parse_result = BTS_ComBase.PARSE_RESULT_NOTFOUNDFILE;
|
| | | return;
|
| | | //System.out.println("文件不存在..........");
|
| | | }
|
| | | fis = new FileInputStream(f);
|
| | | byte[] buf = new byte[2048];
|
| | | if(fis.read(buf, 0, buf.length) == 2048)
|
| | | {
|
| | | if(this.checkTestDataHead(buf)) {
|
| | | parse_result = BTS_ComBase.PARSE_RESULT_SUCCESS;
|
| | | }else {
|
| | | parse_result = BTS_ComBase.PARSE_RESULT_FILEERROR;
|
| | | }
|
| | | BTS_DataType dataType = new BTS_DataType();
|
| | | |
| | | while(true)
|
| | | { |
| | | int tag = dataType.checkDataHead(fis);
|
| | | if((0xFD == tag) || (0xFC == tag) || (0xFB == tag))
|
| | | {
|
| | | |
| | | System.out.println("#################");
|
| | | byte[] databuf = new byte[BTS_FbsData.BASIC_LEN + (battParam.EachGroupBattCount*battParam.BattGroupCount)*2 -4];
|
| | | if(fis.read(databuf) == databuf.length)
|
| | | {
|
| | | ByteBuffer bf = ByteBuffer.allocate(databuf.length + BTS_DataType.BYTE_LEN);
|
| | | bf.order(ByteOrder.LITTLE_ENDIAN);
|
| | | bf.put(dataType.getDataTypeByte());
|
| | | bf.put(databuf);
|
| | | bf.flip();
|
| | | bf.position(0);
|
| | | |
| | | System.out.println(ComFn.bytesToHexString(databuf, databuf.length));
|
| | | BTS_FbsData fbsData = new BTS_FbsData();
|
| | | if(fbsData.putByteBuffer(bf, 0, 0)) {
|
| | | fbsDatas.add(fbsData);
|
| | | }
|
| | | }
|
| | | }
|
| | | if(tag == 1)
|
| | | break;
|
| | | }
|
| | | }else {
|
| | | parse_result = BTS_ComBase.PARSE_RESULT_FILEERROR;
|
| | | }
|
| | | |
| | | } catch (IOException e) {
|
| | | e.printStackTrace();
|
| | | } finally {
|
| | | if(null != fis)
|
| | | {
|
| | | try {
|
| | | fis.close();
|
| | | } catch (IOException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | |
| | | /**
|
| | | * 解析文件头数据
|
| | | * @return
|
| | | */
|
| | | public boolean checkTestDataHead(byte[] buf) {
|
| | | boolean checkOk = true;
|
| | | ByteBuffer buffer = ByteBuffer.allocate(buf.length);
|
| | | buffer.order(ByteOrder.LITTLE_ENDIAN);
|
| | | buffer.put(buf);
|
| | | buffer.flip();
|
| | | buffer.position(0);
|
| | | checkOk = checkOk && battParam.putByteBuffer(buffer);
|
| | | System.out.println("checkTestDataHead:"+checkOk);
|
| | | |
| | | checkOk = checkOk && chargeParam.putByteBuffer(buffer);
|
| | | System.out.println("checkTestDataHead:"+checkOk);
|
| | | |
| | | charState.putByteBuffer(buffer);
|
| | | return checkOk;
|
| | | }
|
| | | |
| | | }
|
New file |
| | |
| | | package com.fgkj.bts;
|
| | |
|
| | | import java.nio.ByteBuffer;
|
| | | import java.nio.ByteOrder;
|
| | |
|
| | | import com.fgkj.data.ComFn;
|
| | |
|
| | |
|
| | | /**
|
| | | * 充电参数
|
| | | * @author DELL
|
| | | *
|
| | | */
|
| | | public class BTS_ChargeParam implements Cloneable{
|
| | | private final int BYTE_LEN = 44;
|
| | | |
| | | public int HourRate = 0; //小时率
|
| | | public double ChargeCurr = 0; //充电电流
|
| | | public double ChargeCap = 0; //充电容量
|
| | | public int ChargeTime = 0; //充电时间
|
| | | public double GroupVol_High = 0; //组端上限
|
| | | public double MonomerVol_High = 0; //单体上限
|
| | | public int MonomerHighCount = 0; //单体上限数量
|
| | | public int BattGroupNum = 0; |
| | | public int OnlineVolLowAction = 0;
|
| | | public int StaticTime = 0;
|
| | | public int ChargeTestCount = 0;
|
| | | |
| | | public int bakeup1 = 0;
|
| | | public int bakeup2 = 0;
|
| | | public int bakeup3 = 0;
|
| | | public int bakeup4 = 0;
|
| | | public int bakeup5 = 0;
|
| | | public int bakeup6 = 0;
|
| | | public int bakeup7 = 0;
|
| | | public int bakeup8 = 0;
|
| | | public int bakeup9 = 0;
|
| | | public int bakeup10 = 0;
|
| | | |
| | | public int CRC = 0;
|
| | | |
| | | public BTS_ChargeParam clone()
|
| | | {
|
| | | BTS_ChargeParam obj = null; |
| | | try
|
| | | {
|
| | | obj = (BTS_ChargeParam)super.clone();
|
| | | }
|
| | | catch(CloneNotSupportedException e)
|
| | | {
|
| | | e.printStackTrace();
|
| | | }
|
| | | return obj;
|
| | | }
|
| | | |
| | | public void clear()
|
| | | {
|
| | | HourRate = 0;
|
| | | ChargeCurr = 0;
|
| | | ChargeCap = 0;
|
| | | ChargeTime = 0;
|
| | | GroupVol_High = 0;
|
| | | MonomerVol_High = 0;
|
| | | MonomerHighCount = 0;
|
| | | BattGroupNum = 0;
|
| | | OnlineVolLowAction = 0;
|
| | | StaticTime = 0;
|
| | | ChargeTestCount = 0;
|
| | | |
| | | bakeup1 = 0;
|
| | | bakeup2 = 0;
|
| | | bakeup3 = 0;
|
| | | bakeup4 = 0;
|
| | | bakeup5 = 0;
|
| | | bakeup6 = 0;
|
| | | bakeup7 = 0;
|
| | | bakeup8 = 0;
|
| | | bakeup9 = 0;
|
| | | bakeup10 = 0;
|
| | | |
| | | CRC = 0;
|
| | | }
|
| | | |
| | | public boolean putByteBuffer(final ByteBuffer bf)
|
| | | {
|
| | | if(bf.limit() < BYTE_LEN) {
|
| | | //System.out.println("bf.limit():"+bf.limit());
|
| | | return false;
|
| | | }
|
| | | ByteBuffer tmpbuf = bf;
|
| | | //System.err.println(ComFn.bytesToHexString(bf.array(), bf.array().length));
|
| | | int crc0 = tmpbuf.getShort(BYTE_LEN-2) & 0xFFFF;
|
| | | |
| | | int crc1 = BTS_Crc16.CalCRC16(tmpbuf, BYTE_LEN-2);
|
| | | if(crc0 != crc1) {
|
| | | System.out.println("crc0:" + crc0 + "===crc1:" +crc1);
|
| | | return false;
|
| | | }
|
| | | |
| | | tmpbuf.position(0);
|
| | | HourRate = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | ChargeCurr = BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | | ChargeCap = BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | | ChargeTime = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | GroupVol_High = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
| | | MonomerVol_High = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
| | | MonomerHighCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | BattGroupNum = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | OnlineVolLowAction = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | StaticTime = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | ChargeTestCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | |
| | | bakeup1 = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | bakeup2 = 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());
|
| | | |
| | | CRC = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | |
| | | tmpbuf.compact();
|
| | | tmpbuf.flip();
|
| | | |
| | | return true;
|
| | | }
|
| | | |
| | | public ByteBuffer getByteBuffer()
|
| | | {
|
| | | ByteBuffer bytebuffer = ByteBuffer.allocate(BYTE_LEN);
|
| | | bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(HourRate));
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(ChargeCurr));
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(ChargeCap));
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(ChargeTime));
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(GroupVol_High*10));
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(MonomerVol_High*1000));
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(MonomerHighCount));
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(BattGroupNum));
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(OnlineVolLowAction));
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(StaticTime));
|
| | | |
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(ChargeTestCount));
|
| | | |
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup1));
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup2));
|
| | | 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;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | | return "FBS9100_ParamCharge [BYTE_LEN=" + BYTE_LEN + ", HourRate=" + HourRate + ", ChargeCurr=" + ChargeCurr
|
| | | + ", ChargeCap=" + ChargeCap + ", ChargeTime=" + ChargeTime + ", GroupVol_High=" + GroupVol_High
|
| | | + ", MonomerVol_High=" + MonomerVol_High + ", MonomerHighCount=" + MonomerHighCount + ", BattGroupNum="
|
| | | + BattGroupNum + ", OnlineVolLowAction=" + OnlineVolLowAction + ", StaticTime=" + StaticTime
|
| | | + ", ChargeTestCount=" + ChargeTestCount + ", bakeup1=" + bakeup1 + ", bakeup2=" + bakeup2
|
| | | + ", bakeup3=" + bakeup3 + ", bakeup4=" + bakeup4 + ", bakeup5=" + bakeup5 + ", bakeup6=" + bakeup6
|
| | | + ", bakeup7=" + bakeup7 + ", bakeup8=" + bakeup8 + ", bakeup9=" + bakeup9 + ", bakeup10=" + bakeup10
|
| | | + ", CRC=" + CRC + "]";
|
| | | }
|
| | | }
|
New file |
| | |
| | | package com.fgkj.bts;
|
| | |
|
| | | import java.nio.ByteBuffer;
|
| | | import java.nio.ByteOrder;
|
| | | import com.fgkj.data.ComFn;
|
| | |
|
| | |
|
| | | /**
|
| | | * 充电状态
|
| | | * @author DELL
|
| | | *
|
| | | */
|
| | | public class BTS_ChargeState implements Cloneable{
|
| | | private final int BYTE_LEN = 120 + 32;
|
| | | private final int BATTGROUP_COUNT = BTS_ComBase.BattGroupCountMax;
|
| | | |
| | | public BTS_DateTime StartDT = new BTS_DateTime(); //启动放电的日期时间
|
| | | public BTS_DateTime StopDT = new BTS_DateTime(); //终止放电的日期时间
|
| | | public BTS_TestTime Test_Time = new BTS_TestTime(); //已测试时间(HMS)
|
| | | |
| | | public int TestState; //测试状态(停止/暂停/放电)
|
| | | public int TestType; //测试类型(放电/充电)
|
| | | public int TestGroupNum; //被测试电池组编号(1~4)
|
| | | public int SaveDataEN; //保存数据标识
|
| | | public int ChargeEN; //开始充电标识
|
| | | public int ChargeOverTime; //充电过流超时
|
| | | public int LastCapTestAlarmRes; //上次容量放电测试结果
|
| | | |
| | | public double TestCur[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public double GroupVol[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public double OnlineVol[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public double TestCapInt[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public int MonMaxNum[] = new int[BTS_ComBase.BattGroupCountMax];
|
| | | public int MonMinNum[] = new int[BTS_ComBase.BattGroupCountMax];
|
| | | public double MonMaxValue[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public double MonMinValue[] = new double[BTS_ComBase.BattGroupCountMax];
|
| | | public double TestCap[] = new double[BTS_ComBase.BattGroupCountMax]; //每组已测试容量
|
| | | |
| | | public int CRC;
|
| | | |
| | | public BTS_ChargeState clone()
|
| | | {
|
| | | BTS_ChargeState obj = null; |
| | | try
|
| | | {
|
| | | obj = (BTS_ChargeState)super.clone();
|
| | | }
|
| | | catch(CloneNotSupportedException e)
|
| | | {
|
| | | e.printStackTrace();
|
| | | }
|
| | | return obj;
|
| | | }
|
| | | |
| | | public boolean putByteBuffer(final ByteBuffer bf)
|
| | | {
|
| | | if(bf.limit() < BYTE_LEN) {
|
| | | return false;
|
| | | }
|
| | | System.err.println(ComFn.bytesToHexString(bf.array(), bf.array().length));
|
| | | ByteBuffer tmpbuf = bf;
|
| | | int crc0 = tmpbuf.getShort(BYTE_LEN-2) & 0xFFFF;
|
| | | int crc1 = BTS_Crc16.CalCRC16(tmpbuf, BYTE_LEN-2);
|
| | | // if(crc0 != crc1) {
|
| | | // System.err.println("crc0:" + crc0 + "===crc1:" +crc1);
|
| | | // return false;
|
| | | // }
|
| | | tmpbuf.position(0);
|
| | | StartDT.year = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StartDT.month = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StartDT.day = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StartDT.hour = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StartDT.minute = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StartDT.second = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | |
| | | StopDT.year = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StopDT.month = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StopDT.day = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StopDT.hour = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StopDT.minute = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | StopDT.second = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | |
| | | Test_Time.hour = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | Test_Time.minute = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | Test_Time.second = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | |
| | | TestState = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | TestType = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | TestGroupNum = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | SaveDataEN = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | ChargeEN = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | ChargeOverTime = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | LastCapTestAlarmRes = BTS_ComBase.changeByteToInt(tmpbuf.get());
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | TestCur[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()) / 10;
|
| | | // System.out.println("TestCur:"+TestCur[n]);
|
| | | }
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | GroupVol[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()) / 10;
|
| | | // System.out.println("GroupVol:"+GroupVol[n]);
|
| | | }
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | OnlineVol[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()) / 10;
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | TestCapInt[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | |
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | MonMaxNum[n] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | MonMinNum[n] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | MonMaxValue[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()) / 1000;
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | MonMinValue[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort()) / 1000;
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | TestCap[n] = tmpbuf.getDouble();
|
| | | // System.out.println("TestCap:"+TestCap[n]);
|
| | | }
|
| | | |
| | | CRC = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | System.out.println("CRC:"+CRC);
|
| | | |
| | | tmpbuf.compact();
|
| | | tmpbuf.flip();
|
| | | |
| | | return true;
|
| | | }
|
| | | |
| | | public ByteBuffer getByteBuffer()
|
| | | {
|
| | | ByteBuffer bytebuffer = ByteBuffer.allocate(BYTE_LEN);
|
| | | bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
|
| | | |
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StartDT.year));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StartDT.month));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StartDT.day));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StartDT.hour));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StartDT.minute));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StartDT.second));
|
| | | |
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StopDT.year));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StopDT.month));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StopDT.day));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StopDT.hour));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StopDT.minute));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(StopDT.second));
|
| | | |
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(Test_Time.hour));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(Test_Time.minute));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(Test_Time.second));
|
| | | |
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(TestState));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(TestType));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(TestGroupNum));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(SaveDataEN));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(ChargeEN));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(ChargeOverTime));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(LastCapTestAlarmRes));
|
| | | |
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(TestCur[n]*10));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(GroupVol[n]*10));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(OnlineVol[n]*10));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(TestCapInt[n]));
|
| | |
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(MonMaxNum[n]));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(MonMinNum[n]));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(MonMaxValue[n]*1000));
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(MonMinValue[n]*1000));
|
| | | |
| | | CRC = BTS_Crc16.CalCRC16(bytebuffer, bytebuffer.capacity()-2);
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(CRC));
|
| | | |
| | | bytebuffer.flip();
|
| | | |
| | | System.out.println("bytebuffer limit:"+bytebuffer.limit());
|
| | | |
| | | return bytebuffer;
|
| | | }
|
| | | }
|
New file |
| | |
| | | package com.fgkj.bts;
|
| | |
|
| | | public class BTS_ComBase |
| | | {
|
| | | public static final int DataType_Dis = 0xFD; //放电
|
| | | public static final int DataType_Char = 0xFC; //充电
|
| | | public static final int DataType_Peac = 0xFB; //常规
|
| | | |
| | | public static final int PARSE_RESULT_NULL = 0; //未知
|
| | | public static final int PARSE_RESULT_SUCCESS = 1; //解析成功
|
| | | public static final int PARSE_RESULT_NOTFOUNDFILE = 2; //文件未找到
|
| | | public static final int PARSE_RESULT_FILETYPEERR = 3; //文件格式错误
|
| | | public static final int PARSE_RESULT_FILEERROR = 4; //文件异常
|
| | | //----------------------------------------------------------------------------
|
| | | public static final int BattGroupCountMax = 4;
|
| | | |
| | | public static final int BattGroupCountMax_Mutl = 9;
|
| | | /**
|
| | | * 2022-03-29 lijun 新疆锂电BTS扩展支持2组每组320节单体情况
|
| | | */
|
| | | public static final int MonomerCountMax = 640;
|
| | | //----------------------------------------------------------------------------
|
| | | public static final int BTS_DCDC_CountMax = 8;
|
| | | public static final int LIBTS_DCDC_CountMax = 4; //锂电BTS的最大DCDC模块信息
|
| | | //----------------------------------------------------------------------------
|
| | | public static final int CMD_NULL = 0x00;
|
| | | //----------------------------------------------------------------------------
|
| | | //------------ 重启FBS9100设备 ------------------------------------------------
|
| | | public static final int CMD_ResetSystemAck = 0x0F;
|
| | | public static final int CMD_ResetSystem = 0x10;
|
| | | //------------ 升级FBS9100软件 ------------------------------------------------
|
| | | public static final int CMD_SystemUpdate = 0x11;
|
| | | public static final int CMD_SystemUpdateAck = 0x12;
|
| | | //----------------------------------------------------------------------------
|
| | | //------------ 读取设备版本号、实时任务列表等 ----------------------------------
|
| | | public static final int CMD_GetDeviceInf = 0x15;
|
| | | public static final int CMD_GetDeviceTaskInfAck = 0x16;
|
| | | public static final int CMD_GetDeviceTaskInf = 0x17;
|
| | | public static final int CMD_GetSyslogFileLen = 0x18;
|
| | | public static final int CMD_GetSyslogFileStr = 0x19;
|
| | | public static final int CMD_ClearSyslogFile = 0x1A;
|
| | |
|
| | | public static final int CMD_Connect = 0x20;
|
| | | public static final int CMD_GetState = 0x22;
|
| | | |
| | | //public static final int CMD_GETDEVID = 0x23; //获取设备id
|
| | | |
| | | //----------------------------------------------------------------------------
|
| | | //------------ 启动放电测试和读取设置参数,读取放电测试状态----------------------
|
| | | public static final int CMD_StartDischarge = 0x25;
|
| | | public static final int CMD_StartDischargeAck = 0x26;
|
| | | public static final int CMD_SetDischargeParmAck = 0x27;
|
| | | public static final int CMD_SetDischargeParm = 0x28;
|
| | | public static final int CMD_GetDischargeParm = 0x29;
|
| | | public static final int CMD_GetDischargeParmAck = 0x30;
|
| | | public static final int CMD_GetDischargeState = 0x31;
|
| | | //----------------------------------------------------------------------------
|
| | | //------------ 启动内阻测试和读取内阻测试状态-----------------------------------
|
| | | public static final int CMD_StartResDischarge = 0x32;
|
| | | public static final int CMD_GetResTestState = 0x34;
|
| | | //-----------------------------------------------------------------------------
|
| | | //------------ 读取和设置电池参数-----------------------------------------------
|
| | | public static final int CMD_GetBattParam = 0x36;
|
| | | public static final int CMD_SetBattParam = 0x37;
|
| | | public static final int CMD_GetBattParamACK = 0x38;
|
| | | public static final int CMD_SetBattParamACK = 0x39;
|
| | | //----------------------------------------------------------------------------
|
| | | //------------ 启动充电测试和读取设置参数,读取充电测试状态-----------------------
|
| | | public static final int CMD_StartCharge = 0x40;
|
| | | public static final int CMD_SetChargeParm = 0x43;
|
| | | public static final int CMD_GetChargeParm = 0x44;
|
| | | public static final int CMD_GetChargeState = 0x46;
|
| | | |
| | | public static final int CMD_Set_BattOFFLine = 0x4A;
|
| | | public static final int CMD_Set_BattONLine = 0x4B;
|
| | | //-----------------------------------------------------------------------------
|
| | | //------------ 停止任何的测试 --------------------------------------------------
|
| | | public static final int CMD_Start = 0x51;
|
| | | public static final int CMD_StartAck = 0x52;
|
| | | public static final int CMD_Stop = 0x53;
|
| | | public static final int CMD_StopAck = 0x54;
|
| | | //----------------------------------------------------------------------------
|
| | | //------------ 读取电压电流、充放电测试、内阻测试数据 ---------------------------
|
| | | public static final int CMD_GetVIData = 0x60;
|
| | | public static final int CMD_GetMonomerData = 0x61;
|
| | | public static final int CMD_GetMonomerRES = 0x62;
|
| | | public static final int CMD_GetMonomerCAP = 0x63;
|
| | | public static final int CMD_GetMonomerChargeCAP = 0x64;
|
| | | public static final int CMD_GetMonomerTMP = 0x65;
|
| | | public static final int CMD_GetMonomerJHcurr = 0x66;
|
| | | public static final int CMD_Get_DCDC_Data = 0x67; //铁塔版本获取DCDC命令
|
| | | public static final int CMD_Get_K_D_TestData = 0x68;
|
| | | |
| | | /**
|
| | | * 2021-08-31 @lijun 假负载版本新增均衡电流和漏液电压读取
|
| | | */
|
| | | public static final int CMD_GetMonomerLYVolt = 0x78; //漏液电压
|
| | | public static final int CMD_GetMonomerJHCUR = 0x69; //增加均衡电流
|
| | | |
| | | |
| | | public static final int CMD_GetLiDCDCParam = 0x8B; //读取锂电DCDC参数
|
| | | public static final int CMD_SetLiDCDCParam = 0x8C; //设置锂电DCDC参数
|
| | | |
| | | public static final int CMD_GetPbDCDCParam = 0x8D; //读取铅酸DCDC参数
|
| | | public static final int CMD_SetPbDCDCParam = 0x8E; //设置铅酸DCDC参数
|
| | | |
| | | public static final int CMD_GetSXDCDCData = 0x8F; //读取双向DCDC内部数据
|
| | | |
| | | public static final int CMD_GetLiBMSData = 0x95; //读取锂电池BMS模拟量
|
| | | public static final int CMD_GetLiBMSState = 0x96; //读取锂电池BMS告警量
|
| | | |
| | | public static final int CMD_ReStartDCDC = 0x9A; //远程重启内部DCDC模块
|
| | | |
| | | |
| | | /**
|
| | | * 读取新疆锂电的组合BMS信心命令
|
| | | */
|
| | | public static final int CMD_ReadLiBTSData = 0x9B; //读取新疆锂电BMS组合信息
|
| | | |
| | | /**
|
| | | * 读取切换箱正负极开关状态
|
| | | */
|
| | | public static final int CMD_ReadQHZZFZCDState = 0xC3; //读取切换箱正负极开关状态
|
| | | |
| | | |
| | | /**
|
| | | * 2022-01-06 edit by lijun 逆变设备新增机柜头数据
|
| | | * |
| | | * 读取
|
| | | */
|
| | | public static final int CMD_GetSimData = 0x99; //读取逆变机柜头数据
|
| | | //------------ 平台锂电池命令 -----------------------------------------------------------------
|
| | | public static final int CMD_GetLiDCDCParam_Ack = 0x8D; //读取锂电BTS参数成功
|
| | | public static final int CMD_SetLiDCDCParam_Ack = 0x8E; //设置锂电BTS参数成功 |
| | | |
| | | public static final int CMD_GetSXDCDCData_Ack = 0x92; //读取双向DCDC内部数据成功
|
| | | public static final int CMD_GetLiBMSData_Ack = 0x93; //读取锂电池BMS模拟量
|
| | | public static final int CMD_GetLiBMSState_Ack = 0x94; //读取锂电池BMS告警量
|
| | | |
| | | public static final int CMD_ReStartDCDC_Ack = 0x9B; //远程重启内部DCDC模块成功
|
| | | |
| | | |
| | | //----------------------------------------------------------------------------------------
|
| | | |
| | | //-----------------------------------------------------------------------------
|
| | | //------------ 在线电压校准 ----------------------------------------------------
|
| | | public static final int CMD_GetOnlineVolAdjParam = 0x6A;
|
| | | public static final int CMD_SetOnlineVolAdjParam = 0x6B;
|
| | | //------------ 组端电压校准 ----------------------------------------------------
|
| | | public static final int CMD_GetBattGroupVolAdjParam = 0x6C;
|
| | | public static final int CMD_SetBattGroupVolAdjParam = 0x6D;
|
| | | //------------ 放电电流校准 ----------------------------------------------------
|
| | | public static final int CMD_GetDischargeCurrAdjParam = 0x6E;
|
| | | public static final int CMD_SetDischargeCurrAdjParam = 0x6F;
|
| | | //------------ 充电电流校准 ----------------------------------------------------
|
| | | public static final int CMD_GetChargeCurrAdjParam = 0x70;
|
| | | public static final int CMD_SetChargeCurrAdjParam = 0x71;
|
| | | //------------ 单体内阻校准 ----------------------------------------------------
|
| | | public static final int CMD_GetBattResAdjParam = 0x72;
|
| | | public static final int CMD_SetBattResAdjParam = 0x73;
|
| | | //------------ 单体电压偏移/斜率校准 --------------------------------------------
|
| | | public static final int CMD_GetMonVolAdjParam = 0x74;
|
| | | public static final int CMD_SetMonVolAdjOffset = 0x75;
|
| | | public static final int CMD_SetMonVolAdjSlope = 0x76;
|
| | | public static final int CMD_ResetMonVolAdjParam = 0x77;
|
| | | //-----------------------------------------------------------------------------
|
| | | //------------ 设置日期时间 ----------------------------------------------------
|
| | | public static final int CMD_SetDateTime = 0x7A;
|
| | | //------------ 读取设置系统参数和告警参数 ---------------------------------------
|
| | | public static final int CMD_GetSYSSetParamAck = 0x7E;
|
| | | public static final int CMD_SetSYSSetParamAck = 0x7F;
|
| | | public static final int CMD_GetSYSSetParam = 0x80;
|
| | | public static final int CMD_SetSYSSetParam = 0x81;
|
| | | |
| | | public static final int CMD_GetAlarmParam = 0x82;
|
| | | public static final int CMD_SetAlarmParam = 0x83;
|
| | | public static final int CMD_GetAlarmParamAck = 0x84;
|
| | | public static final int CMD_SetAlarmParamAck = 0x85;
|
| | | |
| | | public static final int CMD_GetJuHengParam = 0xC1; //读取均衡参数
|
| | | public static final int CMD_GetJuHengParamAck = 0xC2; //读取均衡参数成功
|
| | | public static final int CMD_SetJuHengParam = 0xC3; //设置均衡参数
|
| | | public static final int CMD_SetJuHengParamAck = 0xC4; //设置均衡参数成功
|
| | | |
| | | //-------------- 清除告警 --------------------------------------------------
|
| | | public static final int CMD_ClearSysAlarm = 0xB8; //清除告警 |
| | | public static final int CMD_ClearSysAlarm_ACK = 0xB9; //清除告警成功
|
| | | //------------------------------------------------------------------------------
|
| | | //------------ DFU 命令 ---------------------------------------------------------
|
| | | public static final int CMD_FBS9100_WriteDFU = 0x86;
|
| | | public static final int CMD_FBS9100_ReadDFU = 0x87;
|
| | | //------------------------------------------------------------------------------
|
| | | //读取cmcc的电压电流
|
| | | public static final int CMD_ReadCMCCVolCurr = 0x8A;
|
| | | |
| | | //读取GPRS模块的信号质量
|
| | | public static final int CMD_ReadGPRSCSQ = 0x91;
|
| | | public static final int CMD_ReadGPRSCSQAck = 0x92;
|
| | | |
| | | //读取干节点数据
|
| | | public static final int CMD_ReadStemNode = 0xC2;
|
| | | //清除告警 |
| | | public static final int CMD_ClearAlarm = 0x90;
|
| | |
|
| | | /**
|
| | | * @lijun 2021-11-13
|
| | | * 假负载BTS新增连接条阻抗信息以及温湿度信息读取
|
| | | */
|
| | | public static final int CMD_ReadConnRes = 0x97; //读取连接条阻抗信息
|
| | | public static final int CMD_ReadTmpHum = 0x98; //读取温湿度传感器信息
|
| | | |
| | | public static final int CMD_ReadBusCoupleState = 0x9D; //读取智能母联状态
|
| | | |
| | | public static final int CMD_GetJunHengState = 0xA8; //读取均衡供电模块信息
|
| | | |
| | | public static final int CMD_ReadJunHengParam = 0xB0; //读取均衡参数信息
|
| | | public static final int CMD_WriteJunHengParam = 0xB1; //设置均衡参数信息
|
| | | |
| | | |
| | | public static final int CMD_MutilMode_Control = 0xB3; //并联电源控制命令
|
| | | |
| | | public static final int CMD_ReadMutilMode_Control = 0xB4; //并联电源控制命令
|
| | | public static final int CMD_WriteMutilMode_Control = 0xB5; //并联电源控制命令
|
| | |
|
| | | |
| | | public static final int CMD_GetMutilMode_Param = 0xB4; //读取并联电源参数
|
| | | public static final int CMD_GetMutilMode_Param_Ack = 0xB2; //读取并联电源参数成功
|
| | | |
| | | public static final int CMD_SetMutilMode_Param = 0xB5; //设置并联电源参数
|
| | | public static final int CMD_SetMutilMode_Param_Ack = 0xB6; //设置并联电源参数成功
|
| | | |
| | | /**
|
| | | * @lijun 2022-08-23 |
| | | * 并联电源新增并联参数相关读取设置主机命令
|
| | | */
|
| | | public static final int CMD_ReadMultModeParam = 0x3A; //读取并联电源模块参数
|
| | | public static final int CMD_WriteMultModeParam = 0x3B; //设置并联电源模块参数
|
| | | |
| | | public static final int CMD_GetMultModeParam = 0x3A; //读取并联电源模块参数
|
| | | public static final int CMD_GetMultModeParam_Ack = 0x3C; //读取并联电源模块参数成功
|
| | | public static final int CMD_SetMultModeParam = 0x3B; //设置并联电源模块参数
|
| | | public static final int CMD_SetMultModeParam_Ack = 0x3D; //设置并联电源模块参数成功
|
| | | |
| | | |
| | | |
| | | public static final int CMD_ReadMutilTopology = 0xB6; //读取并联BTS拓扑状态信息
|
| | | |
| | | public static final int CMD_ReadMutilMode_Param = 0xB7; //读取并联BTS参数[9组]
|
| | | public static final int CMD_WriteMutilMode_Param = 0xB8; //设置并联BTS参数[9组]
|
| | | |
| | | //------------ 测试类型 ---------------------------------------------------------
|
| | | public static final int TestType_NULL = 0x00;
|
| | | public static final int TestType_VOL = 0xF9;
|
| | | public static final int TestType_MDISCHARGE = 0xFA;
|
| | | public static final int TestType_MCHARGE = 0xFB;
|
| | | public static final int TestType_Charge = 0xFC;
|
| | | public static final int TestType_CAP = 0xFD; //正常核容放电测试类型
|
| | | public static final int TestType_RES = 0xFE;
|
| | | public static final int TestType_Charge_HELUQI = 0xBC;
|
| | | public static final int TestType_CAP_HELUQI = 0xBD; //升压续航放电测试类型
|
| | | public static final int TestType_SwitchDiode = 0xD1; //KD测试
|
| | | //------------------------------------------------------------------------------
|
| | | //------------ 电池状态 ---------------------------------------------------------
|
| | | public static final int BattState_Float = 0x00;
|
| | | public static final int BattState_Discharge = 0x01;
|
| | | public static final int BattState_Charge = 0x02;
|
| | | //------------------------------------------------------------------------------
|
| | | //------------ 数据类型 ---------------------------------------------------------
|
| | | public static final int DataType_Null = 0x00;
|
| | | public static final int DataType_MonVol = 0x01;
|
| | | public static final int DataType_MonCap = 0x02; |
| | | public static final int DataType_MonRes = 0x03;
|
| | | public static final int DataType_Temp = 0x04;
|
| | | public static final int DataType_GrpVol = 0x05;
|
| | | public static final int DataType_Curr = 0x06;
|
| | | public static final int DataType_MonTmp = 0x07;
|
| | | public static final int DataType_MonJHcurr = 0x08; //均衡电流
|
| | | |
| | | public static final int DataType_MonLYvol = 0x09; //漏液电压
|
| | | public static final int DataType_MonConnRes = 0x10; //连接条阻抗
|
| | | //------------------------------------------------------------------------------
|
| | | //------------------------------------------------------------------------------
|
| | | public static final int BTSE_DevType_BTS = 0x02; //常规BTS
|
| | | public static final int BTSE_DevType_XJBTS = 0x09; //新疆锂电BTS
|
| | | public static final int BTSE_DevType_TieTa = 0x08; //铁塔版本的bt
|
| | | public static final int BTSE_DevType_NiBian = 0x06; //逆变版本的bts
|
| | | public static final int BTSE_DevType_LIBTS = 0x05; //锂电池版本的bts
|
| | | public static final int BTSE_DevType_MULBTS = 0x04; //并联BTS
|
| | | //------------------------------------------------------------------------------
|
| | | public static final int SYS_STATE_STOPPED = 0x00;
|
| | | public static final int SYS_STATE_DISCHARGING = 0x01;
|
| | | public static final int SYS_STATE_CHARGING = 0x02;
|
| | | public static final int SYS_STATE_HELUQI_DISCHARGING = 0x03;
|
| | | //------------------------------------------------------------------------------
|
| | | public static final int STOP_CommErr = 0; //核容中模块内部通信故障,核容失败
|
| | | public static final int STOP_Manual = 1; //手动停止核容,核容失败
|
| | | public static final int STOP_VolLow2Min = 2; //时长过短,核容失败
|
| | | public static final int STOP_TimeOut = 3; //达到最长核容时间,核容失败
|
| | | public static final int STOP_Success = 4; //电池电压低于核容终止电压,核容成功
|
| | | public static final int STOP_CurrLow = 5; //核容放电电流过小,核容失败
|
| | | public static final int STOP_User = 6; //手动停止
|
| | | public static final int STOP_TimeEnd = 7; //时间到停止
|
| | | public static final int STOP_MonVolL = 8; //单体下限停止
|
| | | public static final int STOP_BattVolL = 9; //电池电压下限到
|
| | | public static final int STOP_MonTmpH = 10; //单体温度上限到
|
| | | |
| | | //-------------------------------------------------------------------------------------------
|
| | | public static final int ALARM_NULL = 0; //无
|
| | | public static final int ALARM_PAUSED = 1; //暂停
|
| | | public static final int ALARM_DISCHARGING = 2; //正在放电测试
|
| | | public static final int ALARM_DISCHARGEWAIT = 3; //正在等待放电
|
| | | public static final int ALARM_LimitCHARGING = 4; //正在限流充电
|
| | | public static final int ALARM_LargeCHARGING = 5; //正在直连充电
|
| | | public static final int ALARM_CHARGEWAIT = 6; //正在等待充电
|
| | | public static final int ALARM_TIMESTOP = 7; //放电时间到停止
|
| | | public static final int ALARM_CAPSTOP = 8; //放电容量到停止
|
| | | public static final int ALARM_MVLLSTOP = 9; //单体电压下限到停止
|
| | | public static final int ALARM_SVLLSTOP = 10; //组端电压下限到停止
|
| | | public static final int ALARM_POWERBREAKSTOP = 11; //市电中断停止
|
| | | public static final int ALARM_FLASHUPSTOP = 12; //存储数据满停止
|
| | | public static final int ALARM_TEMPHIGHSTOP = 13; //机内温度异常停止
|
| | | public static final int ALARM_CURRSTOP = 14; //放电电流过流停止
|
| | | public static final int ALARM_PCCOMMBREAKSTOP = 15; //后台通信中断停止
|
| | | public static final int ALARM_LoaderCOMMBREAKSTOP = 16; //负载模块通信中断停止
|
| | | public static final int ALARM_Sel2TO1COMMBREAKSTOP = 17; //选择模块通信中断停止
|
| | | public static final int ALARM_LoaderPowerError = 18; //负载模块放电过功率停止
|
| | | public static final int ALARM_Malloc_ERROR = 19; //内部程序异常停止
|
| | | public static final int ALARM_POWERRESUMESTOP_HELUQI = 20; //合路器放电功能,市电恢复停止升压放电
|
| | | public static final int ALARM_POWERBREAKSTOP_HELUQI = 21; //合路器放电功能,充电过程中市电中断
|
| | | public static final int ALARM_SVLLSTOP_HELUQI = 22; //合路器放电功能组端电压下限
|
| | | public static final int ALARM_MOMTEMP_HL_STOP = 23; //单体温度上限到停止
|
| | | public static final int ALARM_ONLINEVOL_HL_STOP = 24; //在线电压异常高停止
|
| | | public static final int ALARM_XIEZHUANG_COMM_ERR_STOP = 25; //协转通信异常停止
|
| | | public static final int ALARM_MONOMER_COMM_ERR_STOP = 26; //单体通信异常停止
|
| | | public static final int ALARM_UNKOWN = 27; //未知
|
| | | //-------------------------------------------------------------------------------------------
|
| | | public static byte changeIntToByte(int data)
|
| | | {
|
| | | return (byte)(data & 0xFF);
|
| | | }
|
| | | //------------------------------------------------------------------------------
|
| | | public static short changeIntToShort(int data)
|
| | | {
|
| | | return (short)(data & 0xFFFF);
|
| | | }
|
| | | //------------------------------------------------------------------------------
|
| | | public static byte changeShortToByte(short data)
|
| | | {
|
| | | return (byte)(data & 0xFF);
|
| | | }
|
| | | //------------------------------------------------------------------------------
|
| | | public static int changeByteToInt(byte data)
|
| | | {
|
| | | int tmp = data;
|
| | | return (tmp & 0xFF);
|
| | | }
|
| | | //------------------------------------------------------------------------------
|
| | | public static int changeShortToInt(short data)
|
| | | {
|
| | | int tmp = data;
|
| | | return (tmp & 0xFFFF);
|
| | | }
|
| | | //------------------------------------------------------------------------------
|
| | | //------------------------------------------------------------------------------
|
| | | /**
|
| | | * 有符号数转成int
|
| | | * @param data
|
| | | * @return
|
| | | */
|
| | | public static int changeSingeShortToInt(short data)
|
| | | {
|
| | | int tmp = data;
|
| | | return (tmp);
|
| | | }
|
| | | //------------------------------------------------------------------------------
|
| | | public static double changeShortToDouble(short data)
|
| | | {
|
| | | int tmp = data & 0xFFFF;
|
| | | return (double)(tmp);
|
| | | }
|
| | | public static float changeShortToFloat(short data)
|
| | | {
|
| | | int tmp = data & 0xFFFF;
|
| | | return (float)(tmp);
|
| | | }
|
| | | //------------------------------------------------------------------------------
|
| | | public static short changeDoubleToShort(double data)
|
| | | {
|
| | | int tmp = (int)data;
|
| | | //System.out.println("tmp:"+tmp);
|
| | | return (short)(tmp & 0xFFFF);
|
| | | }
|
| | | public static short changeFloatToShort(float data)
|
| | | {
|
| | | int tmp = (int)data;
|
| | | return (short)(tmp & 0xFFFF);
|
| | | }
|
| | | //------------------------------------------------------------------------------
|
| | | //------------------------------------------------------------------------------
|
| | | public static double GetFDCurrent(double stdcap, int hourrate)
|
| | | {
|
| | | double res = 0.055;
|
| | | switch(hourrate)
|
| | | {
|
| | | case 1: res = 0.514; break;
|
| | | case 2: res = 0.306; break;
|
| | | case 3: res = 0.250; break;
|
| | | case 4: res = 0.200; break;
|
| | | case 5: res = 0.166; break;
|
| | | case 6: res = 0.146; break;
|
| | | case 7: res = 0.131; break;
|
| | | case 8: res = 0.118; break;
|
| | | case 9: res = 0.108; break;
|
| | | case 10: res = 0.100; break;
|
| | | case 20: res = 0.055; break;
|
| | | default: res = 0.055; break;
|
| | | }
|
| | | |
| | | return (stdcap * res);
|
| | | }
|
| | | //------------------------------------------------------------------------------
|
| | | //------------------------------------------------------------------------------
|
| | | public static int GetHourRate(int stdah, int current)
|
| | | {
|
| | | int index = 0;
|
| | | int value[]={514, 306, 250, 200, 166, 146, 131, 118, 108, 100, 55};
|
| | | int res;
|
| | | res = (current*100)/(stdah/10);
|
| | | if(res>=514) return 1;
|
| | | else if(res<=55) return 20;
|
| | | else
|
| | | {
|
| | | for(index=0; index<10; index++)
|
| | | {
|
| | | if((res<=value[index]) && (res>value[index+1])) break;
|
| | | else continue;
|
| | | }
|
| | | if((value[index]-res) < (res-value[index+1]))
|
| | | {
|
| | | return (index+1);
|
| | | }
|
| | | else
|
| | | {
|
| | | if(index+2 > 10) return (20);
|
| | | else return (index+2);
|
| | | }
|
| | | } |
| | | }
|
| | | //------------------------------------------------------------------------------
|
| | | //------------------------------------------------------------------------------
|
| | | public static double N_TO_10H(int n_H)
|
| | | {
|
| | | switch(n_H)
|
| | | {
|
| | | case 1 : return(1/0.55);
|
| | | case 2 : return(1/0.61);
|
| | | case 3 : return(1/0.75);
|
| | | case 4 : return(1/0.79);
|
| | | case 5 : return(1/0.833);
|
| | | case 6 : return(1/0.876);
|
| | | case 7 : return(1/0.917);
|
| | | case 8 : return(1/0.944);
|
| | | case 9 : return(1/0.974);
|
| | | case 10: return(1/1);
|
| | | case 20: return(1/1.1);
|
| | | }
|
| | | return 1.0;
|
| | | }
|
| | | //-------------------------------------------------------------------------------
|
| | | /*
|
| | | //-------------------------------------------------------------------------------
|
| | | double GetMonomerCap(double STDAH, int HourRate, double SumAH, double MaxMonomerVol,
|
| | | double MonomerVol, double MonomerVolType, int CapType)
|
| | | {
|
| | | if(MaxMonomerVol - MonomerVolType*0.9 == 0)
|
| | | return 0;
|
| | |
|
| | | if(SumAH < 0)
|
| | | SumAH *= (-1);
|
| | |
|
| | | double tmp_cap;
|
| | | tmp_cap = MonomerVol - MonomerVolType * 0.9;
|
| | | tmp_cap *= (STDAH - SumAH * N_TO_10H(HourRate));
|
| | | tmp_cap = tmp_cap/(MaxMonomerVol - MonomerVolType*0.9);
|
| | | if(tmp_cap < 0)
|
| | | tmp_cap = 0;
|
| | |
|
| | | if(CapType == CapType_Rest)
|
| | | return tmp_cap;
|
| | | else if(CapType == CapType_Sum)
|
| | | return (tmp_cap + SumAH * N_TO_10H(HourRate));
|
| | | else
|
| | | return ((tmp_cap + SumAH * N_TO_10H(HourRate))*100 / STDAH);
|
| | | }
|
| | | //----------------------------------------------------------------------------------
|
| | | */
|
| | | }
|
New file |
| | |
| | | package com.fgkj.bts;
|
| | |
|
| | | import java.nio.ByteBuffer;
|
| | |
|
| | | public class BTS_Crc16 {
|
| | | private final static int CRC16Table[] = |
| | | {
|
| | | 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
|
| | | 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
|
| | | 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
|
| | | 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
|
| | | 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
|
| | | 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
|
| | | 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
|
| | | 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
|
| | | 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
|
| | | 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
|
| | | 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
|
| | | 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
|
| | | 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
|
| | | 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
|
| | | 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
|
| | | 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
|
| | | 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
|
| | | 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
|
| | | 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
|
| | | 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
|
| | | 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
|
| | | 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
|
| | | 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
|
| | | 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
|
| | | 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
|
| | | 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
|
| | | 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
|
| | | 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
|
| | | 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
|
| | | 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
|
| | | 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
|
| | | 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
|
| | | };
|
| | | |
| | | public static int CalCRC16(final ByteBuffer buf, int count)
|
| | | {
|
| | | ByteBuffer tmpbuf = buf; |
| | | tmpbuf.position(0);
|
| | | |
| | | int crc = 0xFFFF; //关键性的初值...
|
| | | int tmp;
|
| | | for (int i=0; i<count; i++)
|
| | | {
|
| | | if(!buf.hasRemaining())
|
| | | break;
|
| | | |
| | | tmp = crc;
|
| | | crc = CRC16Table[(int)((((tmp&0xFFFF) >> 8) ^ (tmpbuf.get())) & 0xFF)];
|
| | | crc = crc ^ ((tmp&0xFFFF) << 8);
|
| | | }
|
| | | |
| | | return (crc & 0xFFFF);
|
| | | }
|
| | | }
|
New file |
| | |
| | | package com.fgkj.bts;
|
| | |
|
| | | import java.io.FileInputStream;
|
| | | import java.io.IOException;
|
| | |
|
| | | public class BTS_DataType {
|
| | | public static final int BYTE_LEN = 4;
|
| | | |
| | | public int typeTag0;
|
| | | public int typeTag1;
|
| | | public int typeTag2;
|
| | | public int typeTag3;
|
| | | |
| | | 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) {
|
| | | // TODO Auto-generated catch block
|
| | | //e.printStackTrace();
|
| | | } |
| | | setType(type_tag&0xFF);
|
| | | |
| | | return (typeTag0);
|
| | | }
|
| | | |
| | | public byte[] getDataTypeByte() {
|
| | | byte[] data = new byte[BYTE_LEN];
|
| | | data[0] = BTS_ComBase.changeIntToByte(typeTag0);
|
| | | data[1] = BTS_ComBase.changeIntToByte(typeTag1);
|
| | | data[2] = BTS_ComBase.changeIntToByte(typeTag2);
|
| | | data[3] = BTS_ComBase.changeIntToByte(typeTag3);
|
| | | return data;
|
| | | }
|
| | | |
| | | |
| | | public void setType(int type)
|
| | | {
|
| | | typeTag0 = type;
|
| | | typeTag1 = type;
|
| | | typeTag2 = type;
|
| | | typeTag3 = type;
|
| | | }
|
| | | }
|
New file |
| | |
| | | package com.fgkj.bts;
|
| | |
|
| | | import java.nio.ByteBuffer;
|
| | | import java.nio.ByteOrder;
|
| | | import java.util.Calendar;
|
| | |
|
| | |
|
| | | public class BTS_DateTime {
|
| | | public int year = 0;
|
| | | public int month = 1;
|
| | | public int day = 1;
|
| | | public int hour = 0;
|
| | | public int minute = 0;
|
| | | public int second = 0;
|
| | | |
| | | public BTS_DateTime clone()
|
| | | {
|
| | | BTS_DateTime obj = new BTS_DateTime();
|
| | | |
| | | obj.year = year;
|
| | | obj.month = month;
|
| | | obj.day = day;
|
| | | obj.hour = hour;
|
| | | obj.minute = minute;
|
| | | obj.second = second;
|
| | | |
| | | return obj;
|
| | | }
|
| | | |
| | | public void putByteBuffer(final ByteBuffer bf)
|
| | | {
|
| | | year = BTS_ComBase.changeByteToInt(bf.get());
|
| | | month = BTS_ComBase.changeByteToInt(bf.get());
|
| | | day = BTS_ComBase.changeByteToInt(bf.get());
|
| | | hour = BTS_ComBase.changeByteToInt(bf.get());
|
| | | minute = BTS_ComBase.changeByteToInt(bf.get());
|
| | | second = BTS_ComBase.changeByteToInt(bf.get());
|
| | | }
|
| | | |
| | | public ByteBuffer getPCDateTimeBytes()
|
| | | {
|
| | | ByteBuffer bytebuffer = ByteBuffer.allocate(12);
|
| | | bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
|
| | | Calendar cad = Calendar.getInstance();
|
| | | //cad.set(23, 5, 10);
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(cad.get(Calendar.YEAR)%100));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(cad.get(Calendar.MONTH)+1));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(cad.get(Calendar.DAY_OF_MONTH)));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(cad.get(Calendar.HOUR_OF_DAY)));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(cad.get(Calendar.MINUTE)));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(cad.get(Calendar.SECOND)));
|
| | | bytebuffer.flip();
|
| | | //System.out.println("设置时间:"+cad.get(Calendar.YEAR)+"-"+(cad.get(Calendar.MONTH)+1)+"-"+cad.get(Calendar.DAY_OF_MONTH)+" "+cad.get(Calendar.HOUR_OF_DAY)+":"+cad.get(Calendar.MINUTE)+":"+cad.get(Calendar.SECOND));
|
| | | return bytebuffer;
|
| | | }
|
| | | |
| | | public long getTimeInMillis() {
|
| | | Calendar ca = Calendar.getInstance();
|
| | | int month_t = month;
|
| | | if(month_t > 0) {
|
| | | month_t -= 1;
|
| | | }
|
| | | ca.set(year+2000, month_t, day, hour, minute, second);
|
| | | |
| | | return ca.getTimeInMillis();
|
| | | }
|
| | | |
| | | @Override
|
| | | public String toString() {
|
| | | return "FBS9100_DateTime [year=" + year + ", month=" + month + ", day=" + day + ", hour=" + hour + ", minute="
|
| | | + minute + ", second=" + second + "]";
|
| | | }
|
| | | } |
New file |
| | |
| | | package com.fgkj.bts;
|
| | |
|
| | | import java.io.File;
|
| | | import java.io.FileInputStream;
|
| | | import java.io.IOException;
|
| | | import java.nio.ByteBuffer;
|
| | | import java.nio.ByteOrder;
|
| | | import java.util.ArrayList;
|
| | | import java.util.List;
|
| | |
|
| | | import com.fgkj.data.ComFn;
|
| | |
|
| | | /**
|
| | | * 放电数据
|
| | | * @author DELL
|
| | | *
|
| | | */
|
| | | public class BTS_DisChargeData {
|
| | | |
| | | public int parse_result = BTS_ComBase.PARSE_RESULT_NULL; //解析结果
|
| | | |
| | | public BTS_BattParam battParam; //电池参数
|
| | | public BTS_DischargeParam dischargeParam; //核容参数
|
| | | public BTS_CapState capState; //容量参数
|
| | | |
| | | public List<BTS_FbsData> fbsDatas; //每次记录的单体数据
|
| | | |
| | | public BTS_DisChargeData() {
|
| | | battParam = new BTS_BattParam();
|
| | | dischargeParam = new BTS_DischargeParam();
|
| | | capState = new BTS_CapState();
|
| | | fbsDatas = new ArrayList<BTS_FbsData>();
|
| | | }
|
| | |
|
| | | |
| | | |
| | | |
| | | /**
|
| | | * 解析充电数据
|
| | | * @param filePath
|
| | | */
|
| | | public void readDisFile(String filePath)
|
| | | {
|
| | | FileInputStream fis = null;
|
| | | try {
|
| | | File f = new File(filePath);
|
| | | if(!filePath.endsWith(".BCP") || !filePath.toUpperCase().endsWith(".BCP")) {
|
| | | //文件格式错误
|
| | | parse_result = BTS_ComBase.PARSE_RESULT_FILETYPEERR;
|
| | | return;
|
| | | }
|
| | | if(!f.exists()) {
|
| | | //文件不存在
|
| | | parse_result = BTS_ComBase.PARSE_RESULT_NOTFOUNDFILE;
|
| | | return;
|
| | | //System.out.println("文件不存在..........");
|
| | | }
|
| | | fis = new FileInputStream(f);
|
| | | byte[] buf = new byte[2048];
|
| | | if(fis.read(buf, 0, buf.length) == 2048)
|
| | | {
|
| | | if(this.checkTestDataHead(buf)) {
|
| | | parse_result = BTS_ComBase.PARSE_RESULT_SUCCESS;
|
| | | }else {
|
| | | parse_result = BTS_ComBase.PARSE_RESULT_FILEERROR;
|
| | | }
|
| | | BTS_DataType dataType = new BTS_DataType();
|
| | | |
| | | while(true)
|
| | | { |
| | | int tag = dataType.checkDataHead(fis);
|
| | | if((0xFD == tag) || (0xFC == tag) || (0xFB == tag))
|
| | | {
|
| | | |
| | | System.out.println("#################");
|
| | | byte[] databuf = new byte[BTS_FbsData.BASIC_LEN + (battParam.EachGroupBattCount*battParam.BattGroupCount)*2 -4];
|
| | | if(fis.read(databuf) == databuf.length)
|
| | | {
|
| | | ByteBuffer bf = ByteBuffer.allocate(databuf.length + BTS_DataType.BYTE_LEN);
|
| | | bf.order(ByteOrder.LITTLE_ENDIAN);
|
| | | bf.put(dataType.getDataTypeByte());
|
| | | bf.put(databuf);
|
| | | bf.flip();
|
| | | bf.position(0);
|
| | | |
| | | System.out.println(ComFn.bytesToHexString(databuf, databuf.length));
|
| | | BTS_FbsData fbsData = new BTS_FbsData();
|
| | | if(fbsData.putByteBuffer(bf, 0, 0)) {
|
| | | fbsDatas.add(fbsData);
|
| | | }
|
| | | }
|
| | | }
|
| | | if(tag == 1)
|
| | | break;
|
| | | }
|
| | | }else {
|
| | | parse_result = BTS_ComBase.PARSE_RESULT_FILEERROR;
|
| | | }
|
| | | |
| | | } catch (IOException e) {
|
| | | e.printStackTrace();
|
| | | } finally {
|
| | | if(null != fis)
|
| | | {
|
| | | try {
|
| | | fis.close();
|
| | | } catch (IOException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | |
| | | /**
|
| | | * 解析文件头数据
|
| | | * @return
|
| | | */
|
| | | public boolean checkTestDataHead(byte[] buf) {
|
| | | boolean checkOk = true;
|
| | | ByteBuffer buffer = ByteBuffer.allocate(buf.length);
|
| | | buffer.order(ByteOrder.LITTLE_ENDIAN);
|
| | | buffer.put(buf);
|
| | | buffer.flip();
|
| | | buffer.position(0);
|
| | | checkOk = checkOk && battParam.putByteBuffer(buffer);
|
| | | System.out.println(battParam);
|
| | | System.out.println("checkTestDataHead:"+checkOk);
|
| | | |
| | | checkOk = checkOk && dischargeParam.putByteBuffer(buffer);
|
| | | System.out.println(dischargeParam);
|
| | | System.out.println("checkTestDataHead:"+checkOk);
|
| | | |
| | | capState.putByteBuffer(buffer);
|
| | | return checkOk;
|
| | | }
|
| | | }
|
| | |
|
| | |
|
New file |
| | |
| | | package com.fgkj.bts;
|
| | |
|
| | | import java.nio.ByteBuffer;
|
| | | import java.nio.ByteOrder;
|
| | |
|
| | |
|
| | | /**
|
| | | * 核容参数
|
| | | * @author DELL
|
| | | *
|
| | | */
|
| | | public class BTS_DischargeParam implements Cloneable{
|
| | | private final int BYTE_LEN = 44;
|
| | | //private final int BYTE_LEN = 45;
|
| | | |
| | | public int op_cmd = 0;
|
| | | public int test_cmd = 0;
|
| | | |
| | | public int HourRate = 0;
|
| | | public float DisCurr = 0;
|
| | | public float DisCap = 0;
|
| | | public int DisTime = 0;
|
| | | public float GroupVol_LOW = 0;
|
| | | public float MonomerVol_LOW = 0;
|
| | | public int MonomerLowCount = 0;
|
| | | public int BattGroupNum = 0;
|
| | | public int OnlineVolLowAction = 0;
|
| | | public int StaticTime = 0;
|
| | | public int DisTestCount = 0;
|
| | | |
| | | public float DCVolHighLimit = 0;
|
| | | |
| | | public float ChargeCurrSet = 0;
|
| | | public int bakeup3 = 0;
|
| | | public float MonomerTmp_High = 0; //温度上限
|
| | | |
| | | public float ChargeVolt = 0; //均充电压[0.1V](18~57.5)
|
| | | |
| | | public int bakeup6 = 0;
|
| | | public int bakeup7 = 0;
|
| | | public int bakeup8 = 0;
|
| | | public int bakeup9 = 0;
|
| | | public int bakeup10 = 0;
|
| | |
|
| | | public int CRC = 0;
|
| | | |
| | | public BTS_DischargeParam clone()
|
| | | {
|
| | | BTS_DischargeParam obj = null; |
| | | try
|
| | | {
|
| | | obj = (BTS_DischargeParam)super.clone();
|
| | | }
|
| | | catch(CloneNotSupportedException e)
|
| | | {
|
| | | e.printStackTrace();
|
| | | }
|
| | | return obj;
|
| | | }
|
| | | |
| | | public void clear()
|
| | | {
|
| | | HourRate = 0;
|
| | | DisCurr = 0;
|
| | | DisCap = 0;
|
| | | DisTime = 0;
|
| | | GroupVol_LOW = 0;
|
| | | MonomerVol_LOW = 0;
|
| | | MonomerLowCount = 0;
|
| | | BattGroupNum = 0;
|
| | | OnlineVolLowAction = 0;
|
| | | StaticTime = 0;
|
| | | DisTestCount = 0;
|
| | | |
| | | DCVolHighLimit = 0;
|
| | | |
| | | ChargeCurrSet = 0;
|
| | | bakeup3 = 0;
|
| | | MonomerTmp_High = 0;
|
| | | |
| | | ChargeVolt = 0;
|
| | | bakeup6 = 0;
|
| | | bakeup7 = 0;
|
| | | bakeup8 = 0;
|
| | | bakeup9 = 0;
|
| | | bakeup10 = 0;
|
| | |
|
| | | CRC = 0;
|
| | | }
|
| | | |
| | | public boolean putByteBuffer(final ByteBuffer bf)
|
| | | {
|
| | | if(bf.limit() < BYTE_LEN){
|
| | | 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("FBS9100_ParamDischarge:crc0:"+crc0+"===crc1:"+crc1);
|
| | | return false;
|
| | | }
|
| | | |
| | | tmpbuf.position(0);
|
| | | HourRate = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | DisCurr = (float)BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | | DisCap = (float)BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | | DisTime = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | GroupVol_LOW = (float)BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
| | | MonomerVol_LOW = (float)BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
| | | MonomerLowCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | BattGroupNum = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | OnlineVolLowAction = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | StaticTime = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | DisTestCount = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | DCVolHighLimit = (float)BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
| | | |
| | | ChargeCurrSet = (float)BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | | bakeup3 = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | |
| | | MonomerTmp_High = (float)BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
| | | ChargeVolt = (float)BTS_ComBase.changeShortToFloat(tmpbuf.getShort())/10;
|
| | | 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();
|
| | | return true;
|
| | | }
|
| | | |
| | | public ByteBuffer getByteBuffer()
|
| | | {
|
| | | System.out.println(this);
|
| | | |
| | | ByteBuffer bytebuffer = ByteBuffer.allocate(BYTE_LEN);
|
| | | bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(HourRate));
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(DisCurr));
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(DisCap));
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(DisTime));
|
| | | //bytebuffer.putShort(BTS_ComBase.changeDoubleToShort((GroupVol_LOW+0.000001)*10));
|
| | | bytebuffer.putShort(BTS_ComBase.changeFloatToShort((GroupVol_LOW)*10));
|
| | | bytebuffer.putShort(BTS_ComBase.changeFloatToShort((MonomerVol_LOW)*1000));
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(MonomerLowCount));
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(BattGroupNum));
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(OnlineVolLowAction));
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(StaticTime));
|
| | | |
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(DisTestCount));
|
| | | bytebuffer.putShort(BTS_ComBase.changeFloatToShort((DCVolHighLimit)*10));
|
| | | |
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(ChargeCurrSet));
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(bakeup3));
|
| | | bytebuffer.putShort(BTS_ComBase.changeFloatToShort((MonomerTmp_High)*10));
|
| | | bytebuffer.putShort(BTS_ComBase.changeFloatToShort((ChargeVolt)*10));
|
| | | 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));
|
| | | //System.out.println(this+"$$$$$$$$$$$$$$$$$$$$$$$$$");
|
| | | bytebuffer.flip();
|
| | | |
| | | return bytebuffer;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | | return "FBS9100_ParamDischarge [BYTE_LEN=" + BYTE_LEN + ", op_cmd=" + op_cmd + ", test_cmd=" + test_cmd
|
| | | + ", HourRate=" + HourRate + ", DisCurr=" + DisCurr + ", DisCap=" + DisCap + ", DisTime=" + DisTime
|
| | | + ", GroupVol_LOW=" + GroupVol_LOW + ", MonomerVol_LOW=" + MonomerVol_LOW + ", MonomerLowCount="
|
| | | + MonomerLowCount + ", BattGroupNum=" + BattGroupNum + ", OnlineVolLowAction=" + OnlineVolLowAction
|
| | | + ", StaticTime=" + StaticTime + ", DisTestCount=" + DisTestCount + ", DCVolHighLimit=" + DCVolHighLimit
|
| | | + ", ChargeCurrSet=" + ChargeCurrSet + ", bakeup3=" + bakeup3 + ", bakeup4=" + MonomerTmp_High + ", ChargeVolt=" + ChargeVolt
|
| | | + ", bakeup6=" + bakeup6 + ", bakeup7=" + bakeup7 + ", bakeup8=" + bakeup8 + ", bakeup9=" + bakeup9
|
| | | + ", bakeup10=" + bakeup10 + ", CRC=" + CRC + "]";
|
| | | }
|
| | | |
| | | |
| | | public static void main(String[] args) {
|
| | | double d = 56.6;
|
| | | float f = (float)d;
|
| | | |
| | | float ff = (56.6f)*10;
|
| | | |
| | | System.err.println(f);
|
| | | |
| | | double dd = 56.6;
|
| | | System.out.println("dd:"+dd);
|
| | | BTS_ComBase.changeDoubleToShort((dd)*10);
|
| | | System.out.println((int)ff);
|
| | | }
|
| | | } |
New file |
| | |
| | | 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<BATTGROUP_COUNT; n++) {
|
| | | double o_v = BTS_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 = BTS_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] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | double b_curr = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
| | | if(BTS_ComBase.BattState_Discharge == battstate[n]) {
|
| | | b_curr *= -1;
|
| | | }
|
| | | battcurr[n] = b_curr;
|
| | | }
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | double b_cap = BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | | if(BTS_ComBase.BattState_Discharge == battstate[n]) {
|
| | | b_cap *= -1;
|
| | | }
|
| | | battcap[n] = b_cap;
|
| | | }
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | batttemp[n] = BTS_ComBase.changeShortToDouble((short)(tmpbuf.getShort()-(short)100))/10;
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | monMAX_num[n] = BTS_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] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | }
|
| | | stationPowerOffCNT = monMIN_num[0];
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | monvolMAX[n] = ((double)BTS_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] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
| | | |
| | | for(int n=0; n<battSum; n++) {
|
| | | vol[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
| | | }
|
| | | System.out.println(this);
|
| | | tmpbuf.compact();
|
| | | tmpbuf.flip();
|
| | | |
| | | 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 > 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<BATTGROUP_COUNT; n++) {
|
| | | double o_v = BTS_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 = BTS_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] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | double b_curr = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
| | | if(BTS_ComBase.BattState_Discharge == battstate[n]) {
|
| | | b_curr *= -1;
|
| | | }
|
| | | battcurr[n] = b_curr;
|
| | | }
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | double b_cap = BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | | if(BTS_ComBase.BattState_Discharge == battstate[n]) {
|
| | | b_cap *= -1;
|
| | | }
|
| | | battcap[n] = b_cap;
|
| | | }
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | batttemp[n] = BTS_ComBase.changeShortToDouble((short)(tmpbuf.getShort()-(short)100))/10;
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | monMAX_num[n] = BTS_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] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | }
|
| | | stationPowerOffCNT = monMIN_num[0];
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | monvolMAX[n] = ((double)BTS_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] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
| | | |
| | | for(int n=0; n<battSum; n++) {
|
| | | vol[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
| | | }
|
| | | |
| | | System.out.println(this);
|
| | | 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(BTS_ComBase.BTSE_DevType_LIBTS != dev_type) {
|
| | | //System.out.println("单体数目:"+battcount +"===设备类型:"+dev_type);
|
| | | 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) {
|
| | | 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<BATTGROUP_COUNT; n++) {
|
| | | double o_v = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
| | | if(((0x08 == dev_type) ||(0x05 == dev_type)||(0x07 == 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 = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
| | | if(((0x08 == dev_type) ||(0x05 == dev_type)||(0x07 == 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] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | double b_curr = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
| | | if(BTS_ComBase.BattState_Discharge == battstate[n]) {
|
| | | b_curr *= -1;
|
| | | }
|
| | | battcurr[n] = b_curr;
|
| | | }
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | double b_cap = BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | | if(BTS_ComBase.BattState_Discharge == battstate[n]) {
|
| | | b_cap *= -1;
|
| | | }
|
| | | //battcap[n] = b_cap;
|
| | | battcap[n] = b_cap/100; //锂电BTS,消耗的电能
|
| | | }
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | /**
|
| | | * 2021-10-27 @lijun 修复温度<10度时,温度显示bug
|
| | | */
|
| | | //batttemp[n] = BTS_ComBase.changeShortToDouble((short)(tmpbuf.getShort()-(short)100))/10;
|
| | | batttemp[n] = BTS_ComBase.changeShortToDouble((short)(tmpbuf.getShort()))/10 -10;
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | monMAX_num[n] = BTS_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] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | }
|
| | | stationPowerOffCNT = monMIN_num[0];
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | monvolMAX[n] = ((double)BTS_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] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
| | | |
| | | //battSum = 48;
|
| | | //System.out.println("电池组单体数目:"+battSum);
|
| | | for(int n=0; n<battSum; n++) {
|
| | | vol[n] = BTS_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 putByteMutlBuffer(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(BTS_ComBase.BTSE_DevType_LIBTS != dev_type) {
|
| | | //System.out.println("单体数目:"+battcount +"===设备类型:"+dev_type);
|
| | | 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+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<BATTGROUP_COUNT; n++) {
|
| | | double o_v = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
| | | if(((0x08 == dev_type) ||(0x05 == dev_type)||(0x04 == 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 = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
| | | if(((0x08 == dev_type) ||(0x05 == dev_type)||(0x04 == 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] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | double b_curr = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
|
| | | if(BTS_ComBase.BattState_Discharge == battstate[n]) {
|
| | | b_curr *= -1;
|
| | | }
|
| | | battcurr[n] = b_curr;
|
| | | }
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | double b_cap = BTS_ComBase.changeShortToDouble(tmpbuf.getShort());
|
| | | if(BTS_ComBase.BattState_Discharge == battstate[n]) {
|
| | | b_cap *= -1;
|
| | | }
|
| | | battcap[n] = b_cap;
|
| | | }
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | /**
|
| | | * 2021-10-27 @lijun 修复温度<10度时,温度显示bug
|
| | | */
|
| | | //batttemp[n] = BTS_ComBase.changeShortToDouble((short)(tmpbuf.getShort()-(short)100))/10;
|
| | | batttemp[n] = BTS_ComBase.changeShortToDouble((short)(tmpbuf.getShort()))/10 -10;
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++) {
|
| | | monMAX_num[n] = BTS_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] = BTS_ComBase.changeShortToInt(tmpbuf.getShort());
|
| | | }
|
| | | stationPowerOffCNT = monMIN_num[0];
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | monvolMAX[n] = ((double)BTS_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] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
| | | |
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | onlinecurr[n] = BTS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;
|
| | | //battSum = 48;
|
| | | //System.out.println("电池组单体数目:"+battSum);
|
| | | for(int n=0; n<battSum; n++) {
|
| | | vol[n] = BTS_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(BTS_ComBase.changeIntToByte(dataType[n]));
|
| | | |
| | | CRC = 0;
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(CRC));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(testTime.hour));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(testTime.minute));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(testTime.second));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(battGroup));
|
| | | //System.err.println(bytebuffer.position()+"#########################");
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(battSum));
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(onlinevol[n]*10));
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(groupvol[n]*10));
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(battstate[n]));
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(battcurr[n]*10));
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(battcap[n]));
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(batttemp[n]*10));
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(monMAX_num[n]));
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeIntToShort(monMIN_num[n]));
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(monvolMAX[n]*1000));
|
| | | for(int n=0; n<BATTGROUP_COUNT; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(monvolMIN[n]*1000));
|
| | | |
| | | for(int n=0; n<battSum; n++)
|
| | | bytebuffer.putShort(BTS_ComBase.changeDoubleToShort(vol[n]*1000));
|
| | | |
| | | CRC = BTS_Crc16.CalCRC16(bytebuffer, bytebuffer.position());
|
| | | bytebuffer.putShort(4, BTS_ComBase.changeIntToShort(CRC));
|
| | | |
| | | bytebuffer.flip();
|
| | | //System.err.println("buffer limit:"+bytebuffer.limit());
|
| | | return bytebuffer;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | | return "BTS_FbsData [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) + ", onlinecurr="
|
| | | + Arrays.toString(onlinecurr) + ", vol=" + Arrays.toString(vol) + "]";
|
| | | }
|
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.fgkj.bts;
|
| | |
|
| | | import java.nio.ByteBuffer;
|
| | | import java.nio.ByteOrder;
|
| | |
|
| | |
|
| | | public class BTS_TestTime |
| | | {
|
| | | public int hour = 0;
|
| | | public int minute = 0;
|
| | | public int second = 0;
|
| | | |
| | | public void putByteBuffer(final ByteBuffer bf)
|
| | | {
|
| | | hour = BTS_ComBase.changeByteToInt(bf.get());
|
| | | minute = BTS_ComBase.changeByteToInt(bf.get());
|
| | | second = BTS_ComBase.changeByteToInt(bf.get());
|
| | | }
|
| | | |
| | | public ByteBuffer getBytes()
|
| | | {
|
| | | ByteBuffer bytebuffer = ByteBuffer.allocate(6);
|
| | | bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(hour));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(minute));
|
| | | bytebuffer.put(BTS_ComBase.changeIntToByte(second));
|
| | | bytebuffer.flip();
|
| | | |
| | | return bytebuffer;
|
| | | }
|
| | | |
| | | public int getSecondCount()
|
| | | {
|
| | | return (hour*3600 + minute*60 + second);
|
| | | }
|
| | | |
| | | public static int getMinutesCount(String str)
|
| | | {
|
| | | int mcount = 0;
|
| | | try
|
| | | {
|
| | | // 先找到字符串中:的位置
|
| | | int position = str.indexOf(":");
|
| | | // 将每个:之间的字符串转换成整型
|
| | | mcount = Integer.parseInt(str.substring(0, position))*60;
|
| | | mcount += Integer.parseInt(str.substring(position + 1));
|
| | | }
|
| | | catch(Exception e)
|
| | | {
|
| | | mcount = 0;
|
| | | }
|
| | | |
| | | return mcount;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | | return "FBS9100_TestTime [hour=" + hour + ", minute=" + minute + ", second=" + second + "]";
|
| | | }
|
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.fgkj.bts;
|
| | |
|
| | | public class BTS_Test_Main {
|
| | | public static void main(String[] args) {
|
| | | BTS_ChargeData data = new BTS_ChargeData();
|
| | | |
| | | //解析充电数据
|
| | | // data.readChrFile("C:\\Users\\DELL\\Documents\\WeChat Files\\wxid_wwepud71epso21\\FileStorage\\File\\2024-12\\sd导出的放电记录\\BATT_CHR\\CHR10001.CHR");
|
| | | |
| | | |
| | | BTS_DisChargeData disdata = new BTS_DisChargeData();
|
| | | //解析放电数据
|
| | | disdata.readDisFile("D:\\桌面文件备份\\公司各种设备资料\\BTS设备相关文件\\BTS历史数据文件解析\\sd导出的放电记录\\BATT_CAP\\CAPNEW_1.BCP");
|
| | | |
| | | }
|
| | | }
|
| | |
| | |
|
| | | //解析告警数据
|
| | | FBS5100_AlarmData almdata = new FBS5100_AlarmData();
|
| | | almdata.parseFileData("D:\\桌面文件备份\\公司各种设备资料\\配网电源相关\\通信协议相关\\数据解析(1)\\FPZALARM.ALM");
|
| | | System.out.println(almdata);
|
| | | //almdata.parseFileData("D:\\桌面文件备份\\公司各种设备资料\\配网电源相关\\通信协议相关\\数据解析(1)\\FPZALARM.ALM");
|
| | | //System.out.println(almdata);
|
| | |
|
| | | }
|
| | | }
|
| | |
| | | import com.fgkj.bres.FileDataParseInfo_Interface;
|
| | | import com.fgkj.bres.RES_Crc16;
|
| | | import com.fgkj.data.ComBase;
|
| | | import com.fgkj.data.ComFn;
|
| | |
|
| | | /**
|
| | | * FBS充放电数据解析
|