whyclj
2019-07-16 26a2fb7c65f18d7d832b6eb7bf609b2118c1396c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.fbo2206;
 
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.util.Arrays;
 
import com.fbs9100.FBS_ComBase;
import com.fbs9100.FBS_Crc16;
import com.fbs9100.FBS_TestTime;
 
public class FBO_ReadData implements Cloneable{
    public static final int BYTE_LEN = 651;
 
 
    //quint8 NowFileName[MaxLength];                                                     //当前电池组名
    public int[] NowWorkType = new int[FBS_ComBase.BattGroupCountMax];                    //当前工作类型
    public int[] NowWorkState = new int[FBS_ComBase.BattGroupCountMax];                    //当前工作状态
    public int[] NowWarnState = new int[FBS_ComBase.BattGroupCountMax];                    //当前告警状态
    public FBS_TestTime m_TestTime = new FBS_TestTime();                                //测试时长
    public double[] NowOnlineVol = new double[FBS_ComBase.BattGroupCountMax];             //当前在线电压    0.1
    public double[] NowGroupVol = new double[FBS_ComBase.BattGroupCountMax];            //当前组端电压    0.1
    public int NowRLY_OK;                                                                  //当前ROK状态
    //quint16 NowVol;                                                                     //当前电压
    public double[] NowCur = new double[FBS_ComBase.BattGroupCountMax];                 //当前电流        0.1
    public double[] NowCap = new double[FBS_ComBase.BattGroupCountMax];                    //当前容量        1
    public double[] SingleVol = new double[FBS_ComBase.FBOMonomerCountMax];                //单体        0.001
    public int CRC;
 
    public FBO_ReadData clone() {
        FBO_ReadData obj = null;
        try
        {
            obj = (FBO_ReadData)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 = FBS_Crc16.CalCRC16(tmpbuf, BYTE_LEN-2);
 
        if(crc0 != crc1) {
            System.out.println(crc0+" == "+crc1);
            return false;
        }
        tmpbuf.position(0);
        for(int i = 0  ;i<FBS_ComBase.BattGroupCountMax;i++) {
            NowWorkType[i] = FBS_ComBase.changeShortToInt(tmpbuf.get());                //当前工作类型
        }
 
        for(int i = 0  ;i<FBS_ComBase.BattGroupCountMax;i++) {
            NowWorkState[i] = FBS_ComBase.changeShortToInt(tmpbuf.get());                //当前工作状态
        }
 
        for(int i = 0  ;i<FBS_ComBase.BattGroupCountMax;i++) {
            NowWarnState[i] = FBS_ComBase.changeShortToInt(tmpbuf.get());                //当前告警状态
        }
        m_TestTime.putByteBuffer(tmpbuf);            //测试时长
 
        for(int i = 0  ;i<FBS_ComBase.BattGroupCountMax;i++) {
            NowOnlineVol[i] = FBS_ComBase.changeShortToInt(tmpbuf.getShort())/10;            //当前在线电压
        }
 
        for(int i = 0  ;i<FBS_ComBase.BattGroupCountMax;i++) {
            NowGroupVol[i] = FBS_ComBase.changeShortToInt(tmpbuf.getShort())/10;            //当前组端电压
        }
 
        NowRLY_OK = FBS_ComBase.changeShortToInt(tmpbuf.getShort());;                          //当前ROK状态
        //quint16 NowVol;                         //当前电压
 
        for(int i = 0  ;i<FBS_ComBase.BattGroupCountMax;i++) {
            NowCur[i] = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;                //当前电流
        }
 
        for(int i = 0  ;i<FBS_ComBase.BattGroupCountMax;i++) {
            NowCap[i] = FBS_ComBase.changeShortToDouble(tmpbuf.getShort());                    //当前容量
        }
 
        for(int i = 0  ;i<FBS_ComBase.BattGroupCountMax;i++) {
            SingleVol[i] = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/1000;            //当前容量
        }
 
 
        tmpbuf.compact();
        tmpbuf.flip();
        return true;
    }
 
    @Override
    public String toString() {
        return "FBO_ReadData [NowWorkType=" + Arrays.toString(NowWorkType) + ", NowWorkState="
                + Arrays.toString(NowWorkState) + ", NowWarnState=" + Arrays.toString(NowWarnState) + ", m_TestTime="
                + m_TestTime + ", NowOnlineVol=" + Arrays.toString(NowOnlineVol) + ", NowGroupVol="
                + Arrays.toString(NowGroupVol) + ", NowRLY_OK=" + NowRLY_OK + ", NowCur=" + Arrays.toString(NowCur)
                + ", NowCap=" + Arrays.toString(NowCap) + ", SingleVol=" + Arrays.toString(SingleVol) + "]";
    }
 
 
 
 
}