FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_Alarm.classBinary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_AlarmData.classBinary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_AlarmParam.classBinary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_ChargeData.classBinary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_ChargeParam.classBinary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_ChargeState.classBinary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_DateTime.classBinary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_Main.classBinary files differ
FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_Alarm.java
New file @@ -0,0 +1,128 @@ package com.fgkj.fbs5100; import java.io.FileInputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Arrays; public class FBS5100_Alarm { public static final int ALMITEM_CAP1 = 0; //组1容量告警 public static final int ALMITEM_CAP2 = 1; //组2容量告警 public static final int ALMITEM_CAP3 = 2; //组3容量告警 public static final int ALMITEM_CAP4 = 3; //组4容量告警 public static final int ALMITEM_INPUTVOL = 4; //输入电压告警 public static final int ALMITEM_AC_DOWM = 5; //交流失电 public static final int ALMITEM_GROUPVOL1 = 6; //组1电压告警 public static final int ALMITEM_GROUPVOL2 = 7; //组2电压告警 public static final int ALMITEM_GROUPVOL3 = 8; //组3电压告警 public static final int ALMITEM_GROUPVOL4 = 9; //组4电压告警 public static final int ALMITEM_BOOST_FAULT = 10; //升压模块故障 public static final int ALMITEM_BUCK_FAULT = 11; //降压模块故障 public static final int ALMITEM_NBCOMM_FAULT = 12; //逆变通信故障 public static final int ALMITEM_ACDC_FAULT = 13; //电源故障 public static final int ALMITEM_COOLER_TEMP = 14; //散热器温度 public static final int ALMITEM_INNER_TEMP = 15; //内部温度 public static final int BYTE_LEN = 16; public int SYNCode[] = new int[2]; //AA AA public int AlarmItem; //告警类型 public int AlarmType; //1-超出上限 或 产生告警 2-超出下限 public float AlarmValue; //告警值 public FBS5100_DateTime StartTime; //告警开始时间 public FBS5100_DateTime EndTime; //暂未启用,不要显示 public FBS5100_Alarm() { StartTime = new FBS5100_DateTime(); EndTime = new FBS5100_DateTime(); } public boolean putByteBuffer(final byte[] buf) { ByteBuffer bf = ByteBuffer.allocate(buf.length); bf.order(ByteOrder.LITTLE_ENDIAN); bf.put(buf); if(bf.limit() != BYTE_LEN){ return false; } ByteBuffer tmpbuf = bf; tmpbuf.position(0); AlarmItem = FBS5100_ComBase.changeByteToInt(tmpbuf.get()); //告警类型 AlarmType = FBS5100_ComBase.changeByteToInt(tmpbuf.get()); //1-超出上限 或 产生告警 2-超出下限 AlarmValue = (float)FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/10; //告警值 StartTime.putByteBuffer(tmpbuf); //告警开始时间 EndTime.putByteBuffer(tmpbuf); //暂未启用,不要显示 tmpbuf.compact(); tmpbuf.flip(); return true; } public int checkDataHead(FileInputStream fis) { boolean file_end = false; byte type_tag = 0; byte[] tag = new byte[1]; try { while(true) { type_tag = 0; int n = 0; for(n=0; n<2; n++) { if(1 != fis.read(tag, 0, 1)) { file_end = true; break; } if((0xAA != (tag[0]&0xFF))) { break; } } if(n >= 2) { type_tag = tag[0]; break; } if(true == file_end) { type_tag = 1; break; } } } catch (IOException e) { //e.printStackTrace(); } setType(type_tag&0xFF); return (type_tag&0xFF); } private void setType(int synCode) { for(int i = 0 ; i < SYNCode.length ; i++) { SYNCode[i] = synCode; } } @Override public String toString() { return "FBS5100_Alarm [SYNCode=" + Arrays.toString(SYNCode) + ", AlarmItem=" + AlarmItem + ", AlarmType=" + AlarmType + ", AlarmValue=" + AlarmValue + ", StartTime=" + StartTime + ", EndTime=" + EndTime + "]"; } } FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_AlarmData.java
New file @@ -0,0 +1,117 @@ package com.fgkj.fbs5100; 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; public class FBS5100_AlarmData { public FBS5100_AlarmParam alarmParam; //告警参数 public List<FBS5100_Alarm> alarms; public int parse_result = FBS5100_ComBase.PARSE_RESULT_NULL; public FBS5100_AlarmData() { alarmParam = new FBS5100_AlarmParam(); alarms = new ArrayList<FBS5100_Alarm>(); } public void parseFileData(String filePath) { FileInputStream fis = null; try { File f = new File(filePath); //既不是核容放电也不是监测放电 if(!filePath.endsWith(".ALM")) { parse_result = FBS5100_ComBase.PARSE_RESULT_FILETYPEERR; return; } if(!f.exists()) { parse_result = FBS5100_ComBase.PARSE_RESULT_NOTFOUNDFILE; return; //System.out.println("文件不存在.........."); } fis = new FileInputStream(f); byte[] buf = new byte[1024]; if(fis.read(buf, 0, buf.length) == 1024) { if(this.readDataHead(buf)) { parse_result = FBS5100_ComBase.PARSE_RESULT_SUCCESS; }else { parse_result = FBS5100_ComBase.PARSE_RESULT_FILEERROR; } while(true) { FBS5100_Alarm alm = new FBS5100_Alarm(); int tag = alm.checkDataHead(fis); if((0xAA == tag)) { byte[] databuf = new byte[FBS5100_Alarm.BYTE_LEN]; if(fis.read(databuf) == databuf.length) { //System.out.println(ComFn.bytesToHexString(databuf, databuf.length)); if(alm.putByteBuffer(databuf)){ alarms.add(alm); } } } if(tag == 1) break; } }else { parse_result = FBS5100_ComBase.PARSE_RESULT_FILEERROR; } } catch (IOException e) { e.printStackTrace(); } finally { if(null != fis) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } //解析数据头 public boolean readDataHead(byte[] buf) { System.out.println(ComFn.bytesToHexString(buf, buf.length)); boolean flag = false; if(buf.length < (FBS5100_BattParam.BYTE_LEN)) { System.out.println("头部数据长度异常"); return flag; } ByteBuffer bf = ByteBuffer.allocate(buf.length); bf.order(ByteOrder.LITTLE_ENDIAN); bf.put(buf); bf.position(0); flag = this.alarmParam.putByteBuffer(bf); System.out.println("alarmParam:"+flag); return flag; } @Override public String toString() { return "FBS5100_AlarmData [alarmParam=" + alarmParam + ", alarms=" + alarms + ", parse_result=" + parse_result + "]"; } } FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_AlarmParam.java
New file @@ -0,0 +1,126 @@ package com.fgkj.fbs5100; import java.nio.ByteBuffer; import java.nio.ByteOrder; public class FBS5100_AlarmParam { private final int BYTE_LEN = 32; public float Batt_CAP = 0; public float GroupVol_H = 0; public float GroupVol_L = 0; public float AC_VOL_H = 0; public float AC_VOL_L = 0; public float bakeup1 = 0; public float bakeup2 = 0; public float bakeup3 = 0; public float bakeup4 = 0; public float bakeup5 = 0; public float bakeup6 = 0; public float bakeup7 = 0; public float bakeup8 = 0; public float bakeup9 = 0; public float bakeup10 = 0; public int CRC = 0; public FBS5100_AlarmParam clone() { FBS5100_AlarmParam obj = null; try { obj = (FBS5100_AlarmParam)super.clone(); } catch(CloneNotSupportedException e) { e.printStackTrace(); } return obj; } public void clear() { GroupVol_H = 0; GroupVol_L = 0; AC_VOL_H = 0; AC_VOL_L = 0; Batt_CAP = 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 = FBS5100_Crc16.CalCRC16(tmpbuf, BYTE_LEN-2); if(crc0 != crc1) { System.err.println("FBS5100_AlarmParam:"+crc0+"=="+crc1); return false; } tmpbuf.position(0); Batt_CAP = FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort()); GroupVol_H = FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/10; GroupVol_L = FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/10; AC_VOL_H = FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/10; AC_VOL_L = FBS5100_ComBase.changeShortToFloat(tmpbuf.getShort())/10; bakeup1 = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup2 = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup3 = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup4 = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup5 = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup6 = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup7 = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup8 = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup9 = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort()); bakeup10 = FBS5100_ComBase.changeShortToInt(tmpbuf.getShort()); CRC = FBS5100_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(FBS5100_ComBase.changeDoubleToShort(Batt_CAP)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(GroupVol_H*10)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(GroupVol_L*10)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(AC_VOL_H*10)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(AC_VOL_L*10)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(bakeup1)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(bakeup2)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(bakeup3)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(bakeup4)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(bakeup5)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(bakeup6)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(bakeup7)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(bakeup8)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(bakeup9)); bytebuffer.putShort(FBS5100_ComBase.changeDoubleToShort(bakeup10)); CRC = FBS5100_Crc16.CalCRC16(bytebuffer, bytebuffer.position()); bytebuffer.putShort(FBS5100_ComBase.changeIntToShort(CRC)); bytebuffer.flip(); return bytebuffer; } @Override public String toString() { return "FBS5100_AlarmParam [BYTE_LEN=" + BYTE_LEN + ", Batt_CAP=" + Batt_CAP + ", GroupVol_H=" + GroupVol_H + ", GroupVol_L=" + GroupVol_L + ", AC_VOL_H=" + AC_VOL_H + ", AC_VOL_L=" + AC_VOL_L + "]"; } } FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_ChargeData.java
@@ -98,7 +98,7 @@ public boolean readDataHead(byte[] buf) { System.out.println(ComFn.bytesToHexString(buf, buf.length)); boolean flag = false; if(buf.length < (FBS5100_BattParam.BYTE_LEN + FBS5100_TestParam.BYTE_LEN + FBS5100_CapState.BYTE_LEN)) { if(buf.length < (FBS5100_BattParam.BYTE_LEN + FBS5100_ChargeParam.BYTE_LEN + FBS5100_ChargeState.BYTE_LEN)) { System.out.println("头部数据长度异常"); return flag; } @@ -111,7 +111,7 @@ flag &= this.chargeParam.putByteBuffer(bf); //System.out.println("chargeParam:"+flag); flag &= this.chargeState.putByteBuffer(bf); System.out.println("chargeState:"+flag); //System.out.println("chargeState:"+flag); return flag; } FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_ChargeParam.java
@@ -11,7 +11,7 @@ */ public class FBS5100_ChargeParam { private final int BYTE_LEN = 44; public static final int BYTE_LEN = 44; public int HourRate = 0; //小时率 public double ChargeCurr = 0; //充电电流 FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_ChargeState.java
@@ -6,7 +6,7 @@ public class FBS5100_ChargeState { private final int BYTE_LEN = 120; public static final int BYTE_LEN = 120; private final int BATTGROUP_COUNT = FBS5100_ComBase.BattGroupCountMax; public FBS5100_DateTime StartDT = new FBS5100_DateTime(); //启动放电的日期时间 FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_DateTime.java
@@ -3,6 +3,7 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Calendar; import java.util.Date; public class FBS5100_DateTime @@ -13,6 +14,8 @@ public int hour = 0; public int minute = 0; public int second = 0; public Date time = new Date(0); public FBS5100_DateTime clone() { @@ -36,6 +39,8 @@ hour = FBS5100_ComBase.changeByteToInt(bf.get()); minute = FBS5100_ComBase.changeByteToInt(bf.get()); second = FBS5100_ComBase.changeByteToInt(bf.get()); time.setTime(getTimeInMillis()); } public ByteBuffer getPCDateTimeBytes() @@ -69,7 +74,9 @@ @Override public String toString() { return "FBS5100_DateTime [year=" + year + ", month=" + month + ", day=" + day + ", hour=" + hour + ", minute=" + minute + ", second=" + second + "]"; + ", minute=" + minute + ", second=" + second + ", time=" + time + "]"; } } FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_Main.java
@@ -14,8 +14,13 @@ //解析充电数据 FBS5100_ChargeData chardata = new FBS5100_ChargeData(); chardata.parseFileData("D:\\桌面文件备份\\公司各种设备资料\\配网电源相关\\通信协议相关\\数据解析(1)\\BATT_CHR\\CHR0021.CHR"); System.out.println(chardata); //chardata.parseFileData("D:\\桌面文件备份\\公司各种设备资料\\配网电源相关\\通信协议相关\\数据解析(1)\\BATT_CHR\\CHR0021.CHR"); //System.out.println(chardata); //解析告警数据 FBS5100_AlarmData almdata = new FBS5100_AlarmData(); almdata.parseFileData("D:\\桌面文件备份\\公司各种设备资料\\配网电源相关\\通信协议相关\\数据解析(1)\\FPZALARM.ALM"); System.out.println(almdata); } }