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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
package com.fbo2206;
 
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
 
import com.fbs9100.FBS_ComBase;
import com.fbs9100.FBS_Crc16;
import com.fbs9100.FBS_ParamDischarge;
 
public class FBO_ParamDischarge implements Cloneable{
 
    public final int BYTE_LEN = 55;
    public int test_mode;                //放电模式  0-离线放电             1在线放电
    public int acstop_op;                //停电处理    0-停止放电            1继续放电
    public int nominal_cap;                //标称容量
    public int hourly_rate;                //小时率
    public double preset_cur;            //预放电流        (0.1)
    public int preset_cap;                //预放容量
    public int preset_time;                //预放时间(分钟)
    public double mon_lower;            //单体下限        (0.01)
    public double group_lower;            //组端下限        (0.1)
    public int mon_number;                //单体数量
    public int group_number;            //电池组数
    public int lower_number;            //单体下限个数
    public int mon_vol;                    //标称单体电压
    public double booster_ceiling;        //升压上限
    public double charge_limit;            //充电电流        (0.1)
    public double onlinevol_lowlimit;    //在线阀值        (0.1)
    public int battNameByteLen;            //电池组名称中字节的个数
    public String battName;                //电池组名称
 
    private int CRC;
 
    public FBO_ParamDischarge clone() {
        FBO_ParamDischarge obj = null;
        try
        {
            obj = (FBO_ParamDischarge)super.clone();
        }
        catch(CloneNotSupportedException e)
        {
            e.printStackTrace();
        }
        return obj;
    }
 
    public void clear() {
        test_mode = 0;                    //放电模式  0-离线放电             1在线放电
        acstop_op = 0;                    //停电处理    0-停止放电            1继续放电
        nominal_cap = 0;                //标称容量
        hourly_rate = 0;                //小时率
        preset_cur = 0;                    //预放电流        (0.1)
        preset_cap = 0;                    //预放容量
        preset_time = 0;                //预防时间(分钟)
        mon_lower = 0;                    //单体下限        (0.01)
        group_lower = 0;                //组端下限        (0.1)
        mon_number = 0;                    //单体数量
        group_number = 0;                //电池组数
        lower_number = 0;                //单体下限个数
        mon_vol = 0;                    //标称单体电压
        booster_ceiling = 0;            //升压上限
        charge_limit = 0;                //充电电流        (0.1)
        onlinevol_lowlimit = 0;            //在线阀值        (0.1)
    }
 
 
    public boolean putByteBuffer(final ByteBuffer bf)
    {
        if(bf.limit() < BYTE_LEN) {
            //System.out.println(bf.limit()+"&&&&&&&&&&&&&&&&&&&&&&");
            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);
        test_mode = FBS_ComBase.changeShortToInt(tmpbuf.getShort());                    //放电模式  0-离线放电             1在线放电
        acstop_op = FBS_ComBase.changeShortToInt(tmpbuf.getShort());                    //停电处理    0-停止放电            1继续放电
        nominal_cap = FBS_ComBase.changeShortToInt(tmpbuf.getShort());                    //标称容量
        hourly_rate = FBS_ComBase.changeShortToInt(tmpbuf.getShort());                    //小时率
        preset_cur = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;                //预放电流        (0.1)
        preset_cap = FBS_ComBase.changeShortToInt(tmpbuf.getShort());                    //预放容量
        preset_time = FBS_ComBase.changeShortToInt(tmpbuf.getShort());                    //预防时间(分钟)
        mon_lower = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/100;                //单体下限        (0.01)
        group_lower = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;            //组端下限        (0.1)
        mon_number = FBS_ComBase.changeShortToInt(tmpbuf.getShort());                    //单体数量
        group_number = FBS_ComBase.changeShortToInt(tmpbuf.getShort());                    //电池组数
        lower_number = FBS_ComBase.changeShortToInt(tmpbuf.getShort());                    //单体下限个数
        mon_vol = FBS_ComBase.changeShortToInt(tmpbuf.getShort());                        //标称单体电压
        booster_ceiling = FBS_ComBase.changeShortToDouble(tmpbuf.getShort());            //升压上限
        charge_limit = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;            //充电电流        (0.1)
        onlinevol_lowlimit = FBS_ComBase.changeShortToDouble(tmpbuf.getShort())/10;        //在线阀值        (0.1)
 
        battNameByteLen = FBS_ComBase.changeByteToInt(tmpbuf.get());                    //电池组名称中字节个数
        //System.out.println(battNameByteLen);
        byte[] b = new byte[battNameByteLen];
        tmpbuf.get(b,0,battNameByteLen);
        try {
            battName = new String(b,"gbk");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        tmpbuf.compact();
        tmpbuf.flip();
        return true;
    }
 
 
    public ByteBuffer getByteBuffer()
    {
        ByteBuffer bytebuffer = ByteBuffer.allocate(BYTE_LEN);
        bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
        bytebuffer.putShort(FBS_ComBase.changeIntToShort(test_mode));
        bytebuffer.putShort(FBS_ComBase.changeIntToShort(acstop_op));
        bytebuffer.putShort(FBS_ComBase.changeIntToShort(nominal_cap));
        bytebuffer.putShort(FBS_ComBase.changeIntToShort(hourly_rate));
        bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(preset_cur*10));
        bytebuffer.putShort(FBS_ComBase.changeIntToShort(preset_cap));
        bytebuffer.putShort(FBS_ComBase.changeIntToShort(preset_time));
        bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(mon_lower*100));
        bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(group_lower*10));
        bytebuffer.putShort(FBS_ComBase.changeIntToShort(mon_number));
        bytebuffer.putShort(FBS_ComBase.changeIntToShort(group_number));
        bytebuffer.putShort(FBS_ComBase.changeIntToShort(lower_number));
        bytebuffer.putShort(FBS_ComBase.changeIntToShort(mon_vol));
        bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(booster_ceiling));
        bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(charge_limit*10));
        bytebuffer.putShort(FBS_ComBase.changeDoubleToShort(onlinevol_lowlimit*10));
        byte[] b = null;
        try {
            b = battName.getBytes("gbk");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        if(b.length <= 20) {
            bytebuffer.put(FBS_ComBase.changeIntToByte(b.length));
            bytebuffer.put(b);
            for(int i = b.length;i<20;i++) {
                bytebuffer.put(FBS_ComBase.changeIntToByte(0));
            }
        }else {
            System.err.println("字数超过限制");
        }
 
        CRC = FBS_Crc16.CalCRC16(bytebuffer, bytebuffer.position());
        bytebuffer.putShort(FBS_ComBase.changeIntToShort(CRC));
 
        bytebuffer.flip();
 
        return bytebuffer;
    }
 
    @Override
    public String toString() {
        return "FBO_ParamDischarge [test_mode=" + test_mode + ", acstop_op=" + acstop_op + ", nominal_cap="
                + nominal_cap + ", hourly_rate=" + hourly_rate + ", preset_cur=" + preset_cur + ", preset_cap="
                + preset_cap + ", preset_time=" + preset_time + ", mon_lower=" + mon_lower + ", group_lower="
                + group_lower + ", mon_number=" + mon_number + ", group_number=" + group_number + ", lower_number="
                + lower_number + ", mon_vol=" + mon_vol + ", booster_ceiling=" + booster_ceiling + ", charge_limit="
                + charge_limit + ", onlinevol_lowlimit=" + onlinevol_lowlimit + ", battNameByteLen=" + battNameByteLen
                + ", battName=" + battName + "]";
    }
 
    public static void main(String[] args) {
        String str = "AA AA AA AA 37 00 28 FF 4F C6 01 00 01 00 C8 00 0A 00 C8 00 32 00 3C 00 38 04 C2 01 0C 00 04 00 05 00 0C 00 38 00 C8 00 E8 03 0A B2 E2 CA D4 B5 E7 B3 D8 D7 E9 00 00 00 00 00 00 00 00 00 00 1B 2A ";
        System.out.println(str.replaceAll(" ", ""));
    }
}