Administrator
2023-05-16 7a49155f41a11c93b692b120705432e04323cd1d
新增告警数据解析
10个文件已修改
6个文件已添加
397 ■■■■■ 已修改文件
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_Alarm.class 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_AlarmData.class 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_AlarmParam.class 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_ChargeData.class 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_ChargeParam.class 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_ChargeState.class 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_DateTime.class 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_Main.class 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_Alarm.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_AlarmData.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_AlarmParam.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_ChargeData.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_ChargeParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_ChargeState.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_DateTime.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/src/com/fgkj/fbs5100/FBS5100_Main.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_Alarm.class
Binary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_AlarmData.class
Binary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_AlarmParam.class
Binary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_ChargeData.class
Binary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_ChargeParam.class
Binary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_ChargeState.class
Binary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_DateTime.class
Binary files differ
FBS9600ForFBO_Parse/bin/com/fgkj/fbs5100/FBS5100_Main.class
Binary 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);
        
    }
}