package com.whyc.factory;
|
|
public class BattCapFactory {
|
public static int CapType_Rest = 0; //当查询剩余容量时传递
|
public static int CapType_Real = 1; //当查询实际容量时传递
|
|
public static int CapType_type=2; //容量
|
public static int CapType_name=1; //次低
|
public static int CapType_method=0; //标称
|
// 获取标纯电流
|
public static double GetFDCurrent(double stdcap, int hourrate)
|
{
|
double res = 0.055;
|
switch(hourrate)
|
{
|
case 1: res = 0.514; break;
|
case 2: res = 0.306; break;
|
case 3: res = 0.250; break;
|
case 4: res = 0.200; break;
|
case 5: res = 0.166; break;
|
case 6: res = 0.146; break;
|
case 7: res = 0.131; break;
|
case 8: res = 0.118; break;
|
case 9: res = 0.108; break;
|
case 10: res = 0.100; break;
|
case 20: res = 0.055; break;
|
default: res = 0.055; break;
|
}
|
|
return (stdcap * res);
|
}
|
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
// 获取放电小时率 stdah:标纯容量 current:当前电流
|
public static int GetHourRate(double stdah, double current)
|
{
|
int index = 0;
|
double value[]={5.14, 3.06, 2.50, 2.00, 1.66, 1.46, 1.31, 1.18, 1.08, 1.00, 0.55, 0.40};
|
double res;
|
current = Math.abs(current);
|
res = current/(stdah/10);
|
if(res >= 5.14) return 1;
|
else if(res <= 0.55) return 20;
|
else
|
{
|
for(index=0; index<10; index++)
|
{
|
if((res<=value[index]) && (res>value[index+1]))
|
break;
|
else continue;
|
}
|
if((value[index]-res) < (res-value[index+1]))
|
{
|
return (index+1);
|
}
|
else
|
{
|
if(index+2 > 10) return (20);
|
else return (index+2);
|
}
|
}
|
}
|
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
public static double N_TO_10H(int n_H)
|
{
|
switch(n_H)
|
{
|
case 1 : return(1/0.55);
|
case 2 : return(1/0.61);
|
case 3 : return(1/0.75);
|
case 4 : return(1/0.79);
|
case 5 : return(1/0.833);
|
case 6 : return(1/0.876);
|
case 7 : return(1/0.917);
|
case 8 : return(1/0.944);
|
case 9 : return(1/0.974);
|
case 10: return(1/1);
|
case 20: return(1/1.1);
|
}
|
return 1.0;
|
}
|
//-------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------
|
//获取剩余容量 STDAH:标称容量 HourRate:放电小时率 SumAH:测试容量 MaxMonomerVol:最大电池电压 MonomerVol:当前电池组的最低单体电压
|
//MonomerVolType:电池电压类型 电池标称电压 2v,6v,12v CapType:容量类型(定值是常量)
|
|
//小时率 已测试容量 最容量
|
public static double GetMonomerCap(double STDAH, int HourRate, double SumAH, double MaxMonomerVol,
|
|
double MonomerVol, double MonomerVolType, int CapType)
|
{
|
if((MaxMonomerVol - MonomerVolType*0.9) <= 0)
|
return 0;
|
|
if(SumAH < 0)
|
SumAH *= (-1);
|
|
double tmp_cap;
|
tmp_cap = MonomerVol - MonomerVolType * 0.9;
|
tmp_cap *= (STDAH - SumAH * N_TO_10H(HourRate));
|
double dt_vol = MaxMonomerVol - MonomerVolType*0.9;
|
if(dt_vol < 0.01)
|
dt_vol = 0.01;
|
tmp_cap = tmp_cap/dt_vol;
|
if(tmp_cap < 0)
|
tmp_cap = 0;
|
|
if(CapType == CapType_Rest)
|
return tmp_cap;
|
else if(CapType == CapType_Real)
|
return (tmp_cap + SumAH * N_TO_10H(HourRate));
|
else
|
return ((tmp_cap + SumAH * N_TO_10H(HourRate))*100 / STDAH);
|
}
|
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
//获取后备时间
|
public static int GetRestTimeSecond(double restcap, double curr)
|
{
|
double tmp_curr = Math.abs(curr);
|
if(tmp_curr < 0.1)
|
tmp_curr = 0.1;
|
|
int rest_time = (int)((restcap / tmp_curr) * 3600);
|
if(rest_time > (99*3600))
|
rest_time = (99*3600);
|
|
return rest_time;
|
}
|
/*//判断通过实际容量判断某次放电测试是否有效
|
*//*
|
* STDAH:标存容量
|
* param:容量有效参数*//*
|
public static int Judge(double realCap,float param,double STDAH){
|
int flag=0;
|
if(Math.abs(realCap)>(param*STDAH)){
|
flag=1;
|
}else{
|
flag=0;
|
}
|
return flag;
|
}
|
//判断通过实际容量判断某次放电测试是否有效
|
*//*
|
* STDAH:标存容量
|
* param:容量告警参数*//*
|
public static int JudgeAlarm(double realCap,float param,float Cparam,double STDAH){
|
int flag=0;
|
if(realCap>(param*STDAH)){
|
flag=1;
|
}else{
|
if(realCap<(Cparam*STDAH)){
|
flag=AlarmDaoFactory.Alarm_CapChange;
|
}else{
|
flag=AlarmDaoFactory.Alarm_CapAlarm;
|
}
|
|
}
|
return flag;
|
}*/
|
|
/**
|
* 电池组的续航时长计算,单位:分钟
|
*/
|
public static float getTheoryTime(float loadCurr, float battGroupCap, float battGroupCapStd){
|
double realCurr = 53*loadCurr/45;
|
double hourRate = N_TO_10H(GetHourRate((int) Math.floor(battGroupCapStd), realCurr));
|
float theoryTimeHour = realCurr == 0?0: (float) (battGroupCap / hourRate / realCurr);
|
return theoryTimeHour*60;
|
}
|
}
|