lxw
2023-02-07 ea1897f8fa24cc8c9313bee318b795b7815f0b88
第二次提交
4 文件已重命名
5个文件已添加
1个文件已修改
421 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/TestController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/fbo/FboData.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/fbo/FboDataHeadStart.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/fbo/FboDataHeadStop.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/fbo/FboDataInf.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/res/RESData.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/res/RESDataHead.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/res/RESDataInfo.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/res/RES_Crc16.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/util/ComFn.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/TestController.java
@@ -1,5 +1,9 @@
package com.whyc.controller;
import com.whyc.fbo.FboData;
import com.whyc.fbo.FboDataHeadStart;
import com.whyc.fbo.FboDataHeadStop;
import com.whyc.fbo.FboDataInf;
import com.whyc.pojo.Response;
import com.whyc.util.*;
import io.swagger.annotations.Api;
src/main/java/com/whyc/fbo/FboData.java
File was renamed from src/main/java/com/whyc/util/FboData.java
@@ -1,5 +1,6 @@
package com.whyc.util;
package com.whyc.fbo;
import com.whyc.util.ComBase;
import lombok.extern.slf4j.Slf4j;
import java.io.FileInputStream;
src/main/java/com/whyc/fbo/FboDataHeadStart.java
File was renamed from src/main/java/com/whyc/util/FboDataHeadStart.java
@@ -1,6 +1,7 @@
package com.whyc.util;
package com.whyc.fbo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.whyc.util.ComBase;
import lombok.extern.slf4j.Slf4j;
import java.nio.ByteBuffer;
src/main/java/com/whyc/fbo/FboDataHeadStop.java
File was renamed from src/main/java/com/whyc/util/FboDataHeadStop.java
@@ -1,4 +1,6 @@
package com.whyc.util;
package com.whyc.fbo;
import com.whyc.util.ComBase;
import java.nio.ByteBuffer;
import java.util.Arrays;
src/main/java/com/whyc/fbo/FboDataInf.java
File was renamed from src/main/java/com/whyc/util/FboDataInf.java
@@ -1,4 +1,4 @@
package com.whyc.util;
package com.whyc.fbo;
import lombok.extern.slf4j.Slf4j;
src/main/java/com/whyc/res/RESData.java
New file
@@ -0,0 +1,128 @@
package com.whyc.res;
import com.whyc.util.ComBase;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Arrays;
import java.util.Date;
public class RESData {
    public static final int MONOMER_NUM_MAX                     =   300;
    public static final int BYTE_LEN = 1812;
    public static final int DATABYTE_LEN = 1808;
    private int[] dataType = new int[4];                         //固定值0xAA 0xAA 0xAA 0xAA
    private Date data_Time;                                       //记录时间/*Returns the datetime as the number of seconds that have passed since 1970-01-01T00:00:00, Coordinated Universal Time (Qt::UTC)*/
    private int battSum;                                        //固定值300
    private float[] MonomerVol = new float[MONOMER_NUM_MAX];    //单体电压,分辨率0.001V
    private float[] MonomerTemp = new float[MONOMER_NUM_MAX];    //温度,偏移100,分辨率0.1℃
    private float[]  MonomerRes = new float[MONOMER_NUM_MAX];    //内阻,分辨率0.001mΩ
    private int CRC16;
    public boolean setData(byte[] databuf) {
        ByteBuffer bf = ByteBuffer.allocate(BYTE_LEN);
        bf.order(ByteOrder.LITTLE_ENDIAN);
        for(int i=0;i<dataType.length;i++) {
            bf.put((byte)0xAA);
        }
        //System.out.println(databuf.length);
        bf.put(databuf);
        bf.position(0);
        if(databuf.length < DATABYTE_LEN) {
            //System.out.println("长度错误");
            return false;
        }
        //System.err.println(ComFn.bytesToHexString(databuf, databuf.length));
        int crc0 = bf.getShort(BYTE_LEN-2) & 0xFFFF;
        bf.position(BYTE_LEN-2);
        bf.putShort(ComBase.changeIntToShort(0));
        int crc1 = RES_Crc16.CalCRC16(bf, bf.limit());
        if(crc0 != crc1) {
            //System.out.println(crc0+"==="+crc1);
            return false;
        }
        bf.position(0);
        for(int i=0;i<dataType.length;i++) {
            dataType[i] = ComBase.changeByteToInt(bf.get());                         //固定值0xAA 0xAA 0xAA 0xAA
        }
        long dateTime = bf.getInt();
        //System.out.println(dateTime);
        //System.out.println(new Date().getTime());
        data_Time = new Date(dateTime*1000);                                               //记录时间/*Returns the datetime as the number of seconds that have passed since 1970-01-01T00:00:00, Coordinated Universal Time (Qt::UTC)*/
        //System.out.println(Com.getDateTimeFormat(data_Time, Com.DTF_YMDhms));
        battSum = ComBase.changeShortToInt(bf.getShort());                            //固定值300
        for(int i=0;i<MonomerVol.length;i++) {
            MonomerVol[i] = ComBase.changeShortToFloat(bf.getShort())*0.001f;        //单体电压,分辨率0.001V
        }
        for(int i=0;i<MonomerTemp.length;i++) {
            MonomerTemp[i] = ComBase.changeShortToFloat(bf.getShort())*0.1f - 10;    //温度,偏移100,分辨率0.1℃
        }
        for(int i=0;i<MonomerRes.length;i++) {
            MonomerRes[i]  = ComBase.changeShortToFloat(bf.getShort())*0.001f;        //内阻,分辨率0.001mΩ
        }
        return true;
    }
    public static int getMonomerNumMax() {
        return MONOMER_NUM_MAX;
    }
    public int[] getDataType() {
        return dataType;
    }
    public Date getData_Time() {
        return data_Time;
    }
    public int getBattSum() {
        return battSum;
    }
    public float[] getMonomerVol() {
        return MonomerVol;
    }
    public float[] getMonomerTemp() {
        return MonomerTemp;
    }
    public float[] getMonomerRes() {
        return MonomerRes;
    }
    public int getCRC16() {
        return CRC16;
    }
    public void setDataType(int[] dataType) {
        this.dataType = dataType;
    }
    public void setData_Time(Date data_Time) {
        this.data_Time = data_Time;
    }
    public void setBattSum(int battSum) {
        this.battSum = battSum;
    }
    public void setMonomerVol(float[] monomerVol) {
        MonomerVol = monomerVol;
    }
    public void setMonomerTemp(float[] monomerTemp) {
        MonomerTemp = monomerTemp;
    }
    public void setMonomerRes(float[] monomerRes) {
        MonomerRes = monomerRes;
    }
    public void setCRC16(int cRC16) {
        CRC16 = cRC16;
    }
    @Override
    public String toString() {
        return "RESData [data_Time=" + data_Time + ", battSum=" + battSum + ", MonomerVol="
                + Arrays.toString(MonomerVol) + ", MonomerTemp=" + Arrays.toString(MonomerTemp) + ", MonomerRes="
                + Arrays.toString(MonomerRes) + "]";
    }
}
src/main/java/com/whyc/res/RESDataHead.java
New file
@@ -0,0 +1,91 @@
package com.whyc.res;
import com.whyc.util.ComBase;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
/**
 *     内阻数据头
 * @author LiJun
 *
 */
public class RESDataHead {
    public static final int BYTE_LEN = 4;
    private int[] SYNCode = new int[2];            //固定值0xAA 0xAA
    private int record_times;                    //记录次数,记录有多少笔RES_DATA数据
    public boolean setHeadData(byte[] databuf) {
        if(databuf.length < BYTE_LEN) {
            return false;
        }
        ByteBuffer bf = ByteBuffer.allocate(databuf.length);
        bf.order(ByteOrder.LITTLE_ENDIAN);
        bf.put(databuf);
        bf.position(0);
        for(int i=0;i<SYNCode.length;i++) {
            SYNCode[i] = ComBase.changeByteToInt(bf.get());
        }
        record_times = ComBase.changeShortToInt(bf.getShort());
        //System.out.println("次数:"+record_times);
        return true;
    }
    public boolean checkDataHead(FileInputStream fis)
    {
        boolean check_ok = false;
        boolean file_end = false;
        byte[] tag = new byte[1];
        try {
            while(true)
            {
                int n = 0;
                for(n=0; n<4; n++)
                {
                    if(1 != fis.read(tag, 0, 1))
                    {
                        file_end = true;
                        break;
                    }
                    if((0xAA != (tag[0]&0xFF)))
                    {
                        break;
                    }
                }
                if(n >= 4)
                {
                    check_ok = true;
                    break;
                }
                if(true == file_end)
                {
                    break;
                }
            }
        } catch (IOException e) {
            //e.printStackTrace();
        }
        return check_ok;
    }
    public int[] getSYNCode() {
        return SYNCode;
    }
    public int getRecord_times() {
        return record_times;
    }
    public void setSYNCode(int[] sYNCode) {
        this.SYNCode = sYNCode;
    }
    public void setRecord_times(int record_times) {
        this.record_times = record_times;
    }
}
src/main/java/com/whyc/res/RESDataInfo.java
New file
@@ -0,0 +1,98 @@
package com.whyc.res;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
//FBS9600 内阻数据集
public class RESDataInfo {
    public RESDataHead resDataHead;            //内阻数据头
    public List<RESData> resDatas;            //内阻数据集
    public int parse_result = PARSE_RESULT_NULL;
    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 RESDataInfo() {
        resDataHead = new RESDataHead();            //内阻数据头
        resDatas = new ArrayList<>();            //内阻数据集
    }
    public void readResFile(String filePath)
    {
        FileInputStream fis = null;
        try {
            File f = new File(filePath);
            if(!filePath.endsWith(".BRES") && !filePath.endsWith(".bres")) {
                System.out.println("文件格式错误");
                parse_result = PARSE_RESULT_FILETYPEERR;
                return;
            }
            if(!f.exists()) {
                parse_result = PARSE_RESULT_NOTFOUNDFILE;
                System.out.println("文件不存在..........");
                return;
            }
            fis = new FileInputStream(f);
            byte[] buf = new byte[4];
            if(fis.read(buf, 0, buf.length) == RESDataHead.BYTE_LEN)
            {
                if(this.resDataHead.setHeadData(buf)) {
                    parse_result = PARSE_RESULT_SUCCESS;
                }else {
                    parse_result = PARSE_RESULT_FILEERROR;
                }
                while(true)
                {
                    if(resDataHead.checkDataHead(fis))
                    {
                        byte[] databuf = new byte[RESData.DATABYTE_LEN];
                        if(fis.read(databuf) == databuf.length)
                        {
                            RESData resData = new RESData();
                            if(resData.setData(databuf)) {
                                //System.out.println(resData);
                                resDatas.add(resData);
                            }
                        }
                    }
                    if(fis.available() <1) {
                        //System.out.println("解析完成");
                        break;
                    }
                }
            }else {
                parse_result = PARSE_RESULT_FILEERROR;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(null != fis)
            {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    public static void main(String[] args) {
        RESDataInfo info = new RESDataInfo();
        info.readResFile("D:\\桌面文件备份\\公司各种设备资料\\FBS存储文件解析/resdata.bres");
    }
}
src/main/java/com/whyc/res/RES_Crc16.java
New file
@@ -0,0 +1,69 @@
package com.whyc.res;
import java.nio.ByteBuffer;
public class RES_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 crc = 0x00;
        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);
            //crc = CRC16Table[(int)((tmp&0xFFFF)>>8) ^ tmpbuf.get()];
            //crc = crc ^ (tmp<<8);
        }
        return (crc & 0xFFFF);
    }
}
/***************************************************************************************
 ****************************** end of file (FBS_Crc16) *********************************
 ***************************************************************************************/
src/main/java/com/whyc/util/ComFn.java
New file
@@ -0,0 +1,19 @@
package com.whyc.util;
public class ComFn {
    public static String bytesToHexString(byte[] src, int len){
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || len <= 0) {
            return null;
        }
        for (int i = 0; i < len; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v).toUpperCase();
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv + " ");
        }
        return stringBuilder.toString();
    }
}