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(" ", ""));
|
}
|
}
|