package com.battdata_rt;
|
import java.sql.ResultSet;
|
import java.sql.SQLException;
|
import java.util.ArrayList;
|
|
import com.base.Com;
|
import com.base.ComBase;
|
import com.config.AppConfig;
|
import com.config.AppParam;
|
import com.dev.fbs9100.FBS9100_ComBase;
|
import com.dev.fbs9009.BattStateData;
|
import com.dev.fbs9009.MyModBusData;
|
import com.dev.fbs9100.FBS9100S_NT_DCDC_Data;
|
import com.dev.fbs9100.FBS9100_SysState;
|
import com.dev.idce8kw.IDCE_SystemState;
|
import com.sql.MysqlConnPool;
|
import com.sql.Sql_Mysql;
|
|
public class BattData_RT {
|
public static final int DEF_CommTimeOutMax = 7200;
|
private MysqlConnPool m_Conn_Pool;
|
|
private boolean MonDataFromCInterfaceOk = false;
|
|
private boolean MonDataIsUseForIdce8200 = false;
|
private boolean mIDCE8200_ConState = false;
|
private int mIDCE8200CommTimeout = 0;
|
|
public int StationId;
|
public String StationName;
|
public byte[] StationIp = new byte[4];
|
public int BattGroupId = 0;
|
public int BattCurrDeviceId = 0;
|
public int[] BattCurrValueId = new int[16];
|
|
public int FBSDeviceId = 0;
|
public String FBSDeviceIp = " ";
|
public String FBSDeviceName = " ";
|
public int GroupIndexInFBSDevice = 1;
|
|
public int BattGroupNum;
|
public int BattState;
|
public int MonCount = 1;
|
public float MonStdVol;
|
public float MonStdCap;
|
|
private boolean StoreBattRes_DataEn = false;
|
private boolean StoreDataBusy = false;
|
private boolean MysqlDataTable_Exist = false;
|
public boolean MysqlDataResInfTable_Exist = false;
|
public boolean MysqlRecordInf_Exist = false;
|
|
public FBS9100S_NT_DCDC_Data m_DCDC_Data = new FBS9100S_NT_DCDC_Data();
|
public InsertDataToMysql_Task mSqlTask = null;
|
|
public ArrayList<MonVolData> al_MonVol = new ArrayList<MonVolData>();
|
public ArrayList<MonVolData> al_MonVol_RtOld = new ArrayList<MonVolData>();
|
public ArrayList<MonVolData> al_MonVol_History = new ArrayList<MonVolData>();
|
public ArrayList<ArrayList<Integer>> al_MonVol_C_Id = new ArrayList<ArrayList<Integer>>();
|
|
public MyModBusData myModBusData;
|
|
public IDCE_SystemState idce_sysState;
|
|
//public int test_monnum = 0; //±»²âÊÔµÄµç³Ø×é±àºÅ
|
//public int record_num = 0; //±»²âÊÔµÄµç³Ø×é±àºÅ
|
//public double test_curr = 0.0; //µ±Ç°²âÊÔµ¥ÌåµÄµçÁ÷
|
|
public BattStateData ld9BattState; //ld9µç³Ø×éÐÅÏ¢
|
|
public BattStatData mTestData;
|
|
//public BattAlarmParam m_AlarmParam = new BattAlarmParam();
|
|
private int mCommTimeCoutCount = 0;
|
public int mMaxMonNum = 0;
|
public float mMaxMonVol = 0;
|
public int mMinMonNum = 0;
|
public float mMinMonVol = 0;
|
|
private AppParam mAppParam = new AppParam();
|
|
private float mBattFloatCurrLevel = (float) 15.0;
|
private float mBattFloatVolLevel = (float) (MonStdVol*MonCount*1.125);
|
|
private int mTestTimeLongMin = 30*60;
|
public int mSaveDataTimeInterval = 10;
|
private float mDataHistoryNewLevel = (float) 0.01;
|
private int mTestDataRecordCountMax = 10000;
|
|
/*********************************************************************************/
|
/*********************************************************************************/
|
public BattData_RT(AppParam param, MysqlConnPool pool)
|
{
|
mTestData = new BattStatData();
|
myModBusData = new MyModBusData();
|
mAppParam.copyAppParam(param);
|
idce_sysState = new IDCE_SystemState();
|
m_Conn_Pool = pool;
|
if(null != m_Conn_Pool)
|
{
|
mSqlTask = new InsertDataToMysql_Task();
|
}
|
}
|
/*********************************************************************************/
|
public void updata_BattRtSate_To_RamDb() {
|
BattData_RT_SQL.updateBattState_RT_RamDB_Table(m_Conn_Pool, this);
|
}
|
/*********************************************************************************/
|
public void updata_BattRtData_To_RamDb() {
|
BattData_RT_SQL.updateBattData_RT_RamDB_Table(m_Conn_Pool, this);
|
}
|
/*********************************************************************************/
|
/**
|
* ÉèÖà tmp_al_id Êý×éÖÐcInterfaceIdµÄÖµ
|
*/
|
public void make_al_MonVol_C_Id()
|
{
|
al_MonVol_C_Id.clear();
|
ArrayList<Integer> tmp_al_id = null;
|
|
int start_index = 0;
|
for(int m=0; m<al_MonVol.size(); m++)
|
{
|
int tmp_id = al_MonVol.get(m).cInterfaceId;
|
|
if((start_index < 1) || (start_index > 24)
|
|| ((tmp_id-2) > tmp_al_id.get(start_index - 1))
|
|| ((tmp_id+2) < tmp_al_id.get(start_index - 1)))
|
{
|
start_index = 0;
|
tmp_al_id = new ArrayList<Integer>();
|
al_MonVol_C_Id.add(tmp_al_id);
|
}
|
|
tmp_al_id.add(tmp_id);
|
start_index++;
|
}
|
}
|
|
/**
|
* ÉèÖÃal_MonVol_C_IdÖеÄcInterfaceId
|
*/
|
public void make_al_MonVol_Auto_C_Id()
|
{
|
al_MonVol_C_Id.clear();
|
ArrayList<Integer> tmp_al_id = null;
|
|
tmp_al_id = new ArrayList<Integer>();
|
for(int m=0; m<al_MonVol.size(); m++)
|
{
|
int tmp_id = al_MonVol.get(m).cInterfaceId;
|
tmp_al_id.add(tmp_id);
|
}
|
|
al_MonVol_C_Id.add(tmp_al_id);
|
}
|
|
public void setStoreBattRes_DataEnStat(boolean stat)
|
{
|
StoreBattRes_DataEn = stat;
|
}
|
public boolean getStoreBattRes_DataEnStat()
|
{
|
return StoreBattRes_DataEn;
|
}
|
|
void setMonitorParam(int test_type)
|
{
|
float det_vol = MonStdVol / 2;
|
if(det_vol < 1)
|
det_vol = 1;
|
|
if(BattStatData.BATTSTATE_DISCHARGE == test_type) {
|
mTestTimeLongMin = mAppParam.getTestTimeLongMinimum(AppParam.AppParam_Discharge);
|
mSaveDataTimeInterval = mAppParam.getSaveDataTimeInterval(AppParam.AppParam_Discharge);
|
mDataHistoryNewLevel = det_vol * mAppParam.getMonVolChangeLevel(AppParam.AppParam_Discharge);
|
mTestDataRecordCountMax = mAppParam.getTestDataRecordCountMax(AppParam.AppParam_Discharge);
|
} else {
|
mTestTimeLongMin = mAppParam.getTestTimeLongMinimum(AppParam.AppParam_Charge);
|
mSaveDataTimeInterval = mAppParam.getSaveDataTimeInterval(AppParam.AppParam_Charge);
|
mDataHistoryNewLevel = det_vol * mAppParam.getMonVolChangeLevel(AppParam.AppParam_Charge);
|
mTestDataRecordCountMax = mAppParam.getTestDataRecordCountMax(AppParam.AppParam_Charge);
|
}
|
}
|
|
|
|
public float getmBattFloatCurrLevel() {
|
return mBattFloatCurrLevel;
|
}
|
public float getmBattFloatVolLevel() {
|
return mBattFloatVolLevel;
|
}
|
public void setmBattFloatCurrLevel(float mBattFloatCurrLevel) {
|
this.mBattFloatCurrLevel = mBattFloatCurrLevel;
|
}
|
public void setmBattFloatVolLevel(float mBattFloatVolLevel) {
|
this.mBattFloatVolLevel = mBattFloatVolLevel;
|
}
|
|
public void updateMonCnt(int new_mon_cnt)
|
{
|
if((new_mon_cnt>0) && (new_mon_cnt<FBS9100_ComBase.MonomerCountMax)) {
|
int mon_cnt = this.al_MonVol.size();
|
if(new_mon_cnt > mon_cnt) {
|
while(new_mon_cnt > this.al_MonVol.size()) {
|
MonVolData data = new MonVolData(0, 0, this.BattGroupId*1000 + this.al_MonVol.size()+1);
|
this.al_MonVol.add(data);
|
this.al_MonVol_RtOld.add(data.clone());
|
this.al_MonVol_History.add(data.clone());
|
}
|
//----------- Ôö¼ÓµÄʱºò×îºóÉèÖõ¥ÌåÊýÁ¿ ----------------
|
this.MonCount = new_mon_cnt;
|
|
} else if(new_mon_cnt < mon_cnt) {
|
//----------- ¼õÉÙµÄʱºò×îÏÈÉèÖõ¥ÌåÊýÁ¿ ----------------
|
this.MonCount = new_mon_cnt;
|
|
while(new_mon_cnt < this.al_MonVol.size()) {
|
this.al_MonVol.remove(this.al_MonVol.size()-1);
|
this.al_MonVol_RtOld.remove(this.al_MonVol_RtOld.size()-1);
|
this.al_MonVol_History.remove(this.al_MonVol_History.size()-1);
|
}
|
}
|
}
|
}
|
|
public void setBattFloatVolCurrLevel(float vol_lev, float curr_level)
|
{
|
mBattFloatVolLevel = vol_lev;
|
mBattFloatCurrLevel = curr_level;
|
mTestData.setBattFloatCurrLevel(mBattFloatCurrLevel);
|
}
|
|
public boolean isMonDataFromCInterfaceOk()
|
{
|
return MonDataFromCInterfaceOk;
|
}
|
public void setMonDataFromCInterfaceOk(boolean stat)
|
{
|
MonDataFromCInterfaceOk = stat;
|
}
|
|
public boolean isMonDataUseForIdce8200()
|
{
|
return MonDataIsUseForIdce8200;
|
}
|
public void setMonDataUseForIdce8200(boolean stat)
|
{
|
MonDataIsUseForIdce8200 = stat;
|
}
|
|
/********************************************************************************/
|
public boolean checkIfIdce8200ComMTimeout()
|
{
|
boolean time_ount = false;
|
if(mIDCE8200CommTimeout >= 60)
|
{
|
time_ount = true;
|
mIDCE8200_ConState = false;
|
setMonDataUseForIdce8200(false);
|
}
|
if(mIDCE8200CommTimeout < 1000)
|
mIDCE8200CommTimeout++;
|
|
return time_ount;
|
}
|
|
public boolean getIdce8200ComState()
|
{
|
return mIDCE8200_ConState;
|
}
|
|
public void updateMonVolFromIDCE8200(int mon_index, float vol)
|
{
|
mIDCE8200_ConState = true;
|
mIDCE8200CommTimeout = 0;
|
setMonDataUseForIdce8200(true);
|
|
al_MonVol.get(mon_index).monVol = vol;
|
}
|
|
public void updateMonVolFromSQL_SERVER()
|
{
|
if(true == isMonDataFromCInterfaceOk())
|
{
|
return;
|
}
|
|
float sumvol = 0;
|
for(int bt_index=0; bt_index<al_MonVol.size(); bt_index++)
|
{
|
if(false == isMonDataUseForIdce8200())
|
{
|
al_MonVol.get(bt_index).monVol = al_MonVol.get(bt_index).monVol_TMP;
|
}
|
sumvol += al_MonVol.get(bt_index).monVol;
|
}
|
mTestData.groupVol = sumvol;
|
}
|
|
public void updateMonVolFrom_C_Interface(int mon_c_id, float mon_vol)
|
{
|
float sumvol = 0;
|
for(int var=0; var<al_MonVol.size(); var++)
|
{
|
MonVolData mvol = al_MonVol.get(var);
|
if(mon_c_id == mvol.cInterfaceId)
|
{
|
if(false == isMonDataUseForIdce8200())
|
{
|
mvol.monVol = mon_vol;
|
}
|
|
if((mon_vol > 0.1) && (false == isMonDataFromCInterfaceOk()))
|
{
|
setMonDataFromCInterfaceOk(true);
|
}
|
}
|
|
sumvol += al_MonVol.get(var).monVol;
|
}
|
mTestData.groupVol = sumvol;
|
}
|
/********************************************************************************/
|
|
public int getBattCount()
|
{
|
return MonCount;
|
}
|
public byte getBattState()
|
{
|
return mTestData.battState;
|
}
|
public byte getBattTestType()
|
{
|
return mTestData.battTestState;
|
}
|
public float getOnlineVol()
|
{
|
return mTestData.onlineVol;
|
}
|
public float getGroupVol()
|
{
|
return mTestData.groupVol;
|
}
|
public float getGroupTmp()
|
{
|
return mTestData.groupTmp;
|
}
|
public float getTestCurr()
|
{
|
return mTestData.testCurr;
|
}
|
public float getTestCap()
|
{
|
return mTestData.testCap;
|
}
|
public long getTestStartTime()
|
{
|
return mTestData.startTestTime.getTime();
|
}
|
public long getTestRecordTime()
|
{
|
return mTestData.recordTime.getTime();
|
}
|
public int getTestTimeLong()
|
{
|
return mTestData.testTimeLong;
|
}
|
public float getBattRealCap()
|
{
|
return mTestData.battRealCap;
|
}
|
public float getBattRestCap()
|
{
|
return mTestData.battRestCap;
|
}
|
public int getBattRestTime()
|
{
|
return mTestData.battRestTime;
|
}
|
|
/**
|
* ÉèÖÃµç³Ø×éµ¥ÌåµÄ×î´óµ¥ÌåµçѹºÍ×îСµ¥Ìåµçѹ£¬ÒÔ¼°¶ÔÓ¦µÄµ¥Ìå±àºÅ
|
* @param al_vol
|
*/
|
public void makeMaxMinMonVol(ArrayList<MonVolData> al_vol)
|
{
|
if(null != al_vol)
|
{
|
float maxvol = -80000;
|
float minvol = 80000;
|
for(int n=0; n<al_vol.size(); n++)
|
{
|
if(maxvol < al_vol.get(n).monVol)
|
{
|
maxvol = al_vol.get(n).monVol;
|
mMaxMonNum = n+1;
|
}
|
if(minvol > al_vol.get(n).monVol)
|
{
|
minvol = al_vol.get(n).monVol;
|
mMinMonNum = n+1;
|
}
|
}
|
mMaxMonVol = maxvol;
|
mMinMonVol = minvol;
|
}
|
}
|
|
|
public float getMaxMonVol()
|
{
|
float maxvol = -80000;
|
for(int n=0; n<al_MonVol.size(); n++)
|
{
|
if(maxvol < al_MonVol.get(n).monVol)
|
{
|
maxvol = al_MonVol.get(n).monVol;
|
mMaxMonNum = n+1;
|
}
|
}
|
return maxvol;
|
}
|
public float getMinMonVol()
|
{
|
float minvol = 80000;
|
for(int n=0; n<al_MonVol.size(); n++)
|
{
|
if(minvol > al_MonVol.get(n).monVol)
|
{
|
minvol = al_MonVol.get(n).monVol;
|
mMinMonNum = n+1;
|
}
|
}
|
return minvol;
|
}
|
public float getGroupVolFromMonVol()
|
{
|
float gvol = 0;
|
for(int n=0; n<al_MonVol.size(); n++)
|
{
|
gvol += al_MonVol.get(n).monVol;
|
}
|
return gvol;
|
}
|
//------------------------------------------------------------------------------------//
|
public void makeDataClearByCommTimeOut() {
|
if(this.mCommTimeCoutCount < (DEF_CommTimeOutMax+100)) {
|
this.mCommTimeCoutCount += 1;
|
}
|
if(this.mCommTimeCoutCount >= DEF_CommTimeOutMax) {
|
mTestData.TestCurr_RT = 0;
|
mTestData.testCurr = 0;
|
}
|
}
|
public void makeDataResetByCommTimeOut() {
|
this.mCommTimeCoutCount = 0;
|
}
|
//------------------------------------------------------------------------------------//
|
private boolean make_al_MonVol_History()
|
{
|
boolean data_new = false;
|
for(int n=0; n<al_MonVol_History.size(); n++)
|
{
|
float tmp_dt = al_MonVol.get(n).monVol;
|
if(Math.abs((al_MonVol_History.get(n).monVol - tmp_dt)) > mDataHistoryNewLevel)
|
{
|
al_MonVol_History.get(n).data_new = true;
|
al_MonVol_History.get(n).monVol = tmp_dt;
|
data_new = true;
|
}
|
}
|
|
return data_new;
|
}
|
public float get_al_MonVol_History(int index)
|
{
|
float vol = 0;
|
if((index>=0) && (index<al_MonVol_History.size()))
|
{
|
vol = al_MonVol_History.get(index).monVol;
|
}
|
return vol;
|
}
|
public boolean is_al_MonVol_History_New(int index)
|
{
|
boolean isnew = false;
|
if((index>=0) && (index<al_MonVol_History.size()))
|
{
|
isnew = al_MonVol_History.get(index).data_new;
|
}
|
return isnew;
|
}
|
private void clear_al_MonVol_History_New()
|
{
|
for(int n=0; n<al_MonVol_History.size(); n++)
|
al_MonVol_History.get(n).data_new = false;
|
}
|
private void set_al_MonVol_History_New()
|
{
|
for(int n=0; n<al_MonVol_History.size(); n++)
|
{
|
//if(al_MonVol_History.get(n).monVol != al_MonVol.get(n).monVol)
|
{
|
al_MonVol_History.get(n).data_new = true;
|
al_MonVol_History.get(n).monVol = al_MonVol.get(n).monVol;
|
}
|
}
|
}
|
//------------------------------------------------------------------------------------//
|
private void calBattRestCap(double b_curr, double b_testcap)
|
{
|
double curr = Math.abs(b_curr);
|
double testcap = Math.abs(b_testcap);
|
int HourRate = ComBase.GetHourRate(MonStdCap, curr);
|
|
mTestData.battRestCap = (float) Math.abs(ComBase.GetMonomerCap(MonStdCap,
|
HourRate,
|
testcap,
|
getMaxMonVol(),
|
getMinMonVol(),
|
MonStdVol,
|
ComBase.CapType_Rest));
|
mTestData.battRestTime = ComBase.GetRestTimeSecond(mTestData.battRestCap, curr);
|
mTestData.battRealCap = (float) (mTestData.battRestCap + testcap * ComBase.N_TO_10H(HourRate));
|
}
|
//==============================================================//
|
//==============================================================//
|
/*public void initAlarmParam(int dt_count_max, BattAlarmParam alm_param)
|
{
|
*//***********************************************************************************//*
|
float std_group_vol = MonStdVol * MonCount;
|
alm_param.setAlarmParamCellValue(std_group_vol, m_AlarmParam.alm_OnlineVol, alm_param.alm_OnlineVol);
|
alm_param.setAlarmParamCellValue(std_group_vol, m_AlarmParam.alm_GroupVol, alm_param.alm_GroupVol);
|
*//***********************************************************************************//*
|
float std_curr = MonStdCap / 10;
|
alm_param.setAlarmParamCellValue(std_curr, m_AlarmParam.alm_BattChargeCurr, alm_param.alm_BattChargeCurr);
|
alm_param.setAlarmParamCellValue(std_curr, m_AlarmParam.alm_BattDisChargeCurr, alm_param.alm_BattDisChargeCurr);
|
*//***********************************************************************************//*
|
float std_monvol = MonStdVol;
|
alm_param.setAlarmParamCellValue(std_monvol, m_AlarmParam.alm_MonVol, alm_param.alm_MonVol);
|
alm_param.setAlarmParamCellValue(std_monvol, m_AlarmParam.alm_DischargeMonVol, alm_param.alm_DischargeMonVol);
|
float std_montmp = 25;
|
alm_param.setAlarmParamCellValue(std_montmp, m_AlarmParam.alm_MonTmp, alm_param.alm_MonTmp);
|
float std_monres = (1*(MonStdVol/2)) / (MonStdCap/100);
|
alm_param.setAlarmParamCellValue(std_monres, m_AlarmParam.alm_MonRes, alm_param.alm_MonRes);
|
float std_connres = (float) 0.2;
|
alm_param.setAlarmParamCellValue(std_connres, m_AlarmParam.alm_ConnRes, alm_param.alm_ConnRes);
|
|
mTestData.initAlarmData(dt_count_max, BattGroupId, m_AlarmParam);
|
for(int n=0; n<al_MonVol.size(); n++)
|
{
|
al_MonVol.get(n).initAlarmData(dt_count_max, BattGroupId, n+1, m_AlarmParam);
|
}
|
}*/
|
|
/**
|
* ¼ì²éTestData¶ÔÏóÊÇ·ñÂú×ã¸æ¾¯Ìõ¼þ
|
* @return Âú×ã¸æ¾¯Ìõ¼þµÄBattAlarmData¶ÔÏ󼯺Ï
|
*/
|
/*public ArrayList<BattAlarmData> makeAlarmData()
|
{
|
ArrayList<BattAlarmData> al_alm_data = new ArrayList<BattAlarmData>();
|
|
mTestData.onlineVol_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_OnlineVol, mTestData.onlineVol);
|
mTestData.groupVol_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_GroupVol, mTestData.groupVol);
|
if(mTestData.testCurr >= 0)
|
{
|
mTestData.battCurr_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_BattChargeCurr, mTestData.testCurr);
|
}
|
else
|
{
|
mTestData.battCurr_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_BattDisChargeCurr, mTestData.testCurr);
|
}
|
|
for(int n=0; n<al_MonVol.size(); n++)
|
{
|
MonVolData vol_data = al_MonVol.get(n);
|
vol_data.monVol_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_MonVol, vol_data.monVol);
|
vol_data.dischargeMonVol_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_DischargeMonVol, vol_data.monVol);
|
vol_data.monTmp_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_MonTmp, vol_data.monTmp);
|
vol_data.monRes_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_MonRes, vol_data.monRes);
|
vol_data.connRes_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_ConnRes, vol_data.connRes);
|
}
|
|
return al_alm_data;
|
}*/
|
|
//ÅжÏal_MonVolÖеÄÖµÊÇ·ñÓеçѹֵµÍÓÚ0.001
|
public boolean checkIfHaveZeroMonVol()
|
{
|
boolean have_zero_vol = false;
|
|
for(int n=0; n<al_MonVol.size(); n++)
|
{
|
if(n >= 10000)
|
break;
|
|
if(al_MonVol.get(n).monVol <= 0.001)
|
{
|
have_zero_vol = true;
|
break;
|
}
|
}
|
|
return have_zero_vol;
|
}
|
|
private void initTestData(byte test_type)
|
{
|
int count = 1;
|
if(BattStatData.BATTSTATE_FLOAT != test_type)
|
{
|
Sql_Mysql sql = new Sql_Mysql(m_Conn_Pool.getConn());
|
count = sql.getBattTestRecordCountNew(BattGroupId, Sql_Mysql.BattTestDataInf_Table);
|
sql.close_con();
|
}
|
|
if(count <= 0)
|
return;
|
|
setMonitorParam(test_type);
|
|
mTestData.init(test_type, count);
|
if(FBS9100_SysState.SYS_STATE_STOPPED != mTestData.getDevFBS9100S_WorkState()) {
|
mTestData.setLoaderType(BattStatData.TEST_LOADER_FBS9100S);
|
} else {
|
if(true == mTestData.isCurrDataUseForIdceFbi()) {
|
if(false == mTestData.isCurrDataUseForIdceFbi_LaZha()) {
|
mTestData.setLoaderType(BattStatData.TEST_LOADER_FBI_IDCE);
|
}
|
}
|
}
|
|
MysqlDataTable_Exist = false;
|
MysqlDataResInfTable_Exist = false;
|
MysqlRecordInf_Exist = false;
|
}
|
|
public boolean check_If_Bpm7100_DataNeedStore()
|
{
|
boolean store_state = false;
|
/***********************************************************************/
|
if(false == getStoreDataBusyTag())
|
{
|
mTestData.testCurr = mTestData.TestCurr_RT;
|
|
if(true == mTestData.getBpm7100RunState()) {
|
if(BattStatData.BATTSTATE_MONITOR != mTestData.battTestState) {
|
initTestData(BattStatData.BATTSTATE_MONITOR);
|
store_state = true;
|
}
|
} else {
|
if(BattStatData.BATTSTATE_FLOAT != mTestData.battTestState) {
|
mTestData.battTestState = BattStatData.BATTSTATE_FLOAT;
|
mTestData.TestState_RT = mTestData.battTestState;
|
store_state = true;
|
}
|
}
|
|
if(Math.abs(mTestData.testCurr) < mBattFloatCurrLevel) {
|
if(BattStatData.BATTSTATE_FLOAT != mTestData.battState) {
|
mTestData.battState = BattStatData.BATTSTATE_FLOAT;
|
}
|
} else {
|
if(mTestData.testCurr >= (mBattFloatCurrLevel+2))
|
{
|
if(BattStatData.BATTSTATE_CHARGE != mTestData.battState) {
|
mTestData.bpm7100_init(BattStatData.BATTSTATE_CHARGE);
|
if(BattStatData.BATTSTATE_MONITOR == mTestData.battTestState) {
|
store_state = true;
|
}
|
}
|
} else if(mTestData.testCurr <= ((mBattFloatCurrLevel+2)*(-1))) {
|
if(BattStatData.BATTSTATE_DISCHARGE != mTestData.battState) {
|
mTestData.bpm7100_init(BattStatData.BATTSTATE_DISCHARGE);
|
if(BattStatData.BATTSTATE_MONITOR == mTestData.battTestState) {
|
store_state = true;
|
}
|
}
|
}
|
|
setMonitorParam(mTestData.battState);
|
}
|
}
|
|
if (BattStatData.BATTSTATE_MONITOR == mTestData.battTestState)
|
{
|
mTestData.calTestCap(1);
|
calBattRestCap(mTestData.testCurr, mTestData.testCap);
|
|
//boolean dt_new = make_al_MonVol_History();
|
if(mTestData.recordNum_BPM7100 < mTestDataRecordCountMax)
|
{
|
if((0==(mTestData.dataCalCount%mSaveDataTimeInterval)) || (1==mTestData.dataCalCount))
|
{
|
set_al_MonVol_History_New();
|
store_state = true;
|
}
|
}
|
}
|
|
if(true == getStoreDataBusyTag())
|
store_state = false;
|
else
|
{
|
if(true == store_state)
|
setStoreDataBusyTag();
|
}
|
/***********************************************************************/
|
|
return store_state;
|
}
|
|
public void printBattRtDataDebugInf_FBS9100S(int pos) {
|
if(BattStatData.TEST_LOADER_FBS9100S == mTestData.getLoaderType()) {
|
System.out.println(String.format("batt_stat_change at pos " + pos + ", "
|
+ " bg_id: %d,"
|
+ " battTestState: %d,"
|
+ " batt_stat: %d,"
|
+ " batt_curr: %1.1fA,"
|
+ " dcdc_Vout: %1.2fV,"
|
+ " dcdc_Iout: %1.2fA,"
|
+ " dcdc_Ibuck: %1.2fA,"
|
+ " dcdc_Workstate: %d,"
|
+ " dcdc_WorkMode: %d,"
|
+ " dcdc_VoutSet: %1.2fV,"
|
+ " dcdc_IoutSet: %1.2fA,"
|
+ " dcdc_IbuckSet: %1.2fA,"
|
+ " dcdc_alarm: %d,"
|
+ " dcdc_txcnt: %d,"
|
+ " dcdc_rxcnt: %d",
|
this.BattGroupId,
|
mTestData.battTestState,
|
mTestData.battState,
|
mTestData.testCurr,
|
m_DCDC_Data.Vout,
|
m_DCDC_Data.Iout,
|
m_DCDC_Data.Ibuck,
|
m_DCDC_Data.RunSetComm,
|
m_DCDC_Data.ModeSetComm,
|
m_DCDC_Data.SetDisVol,
|
m_DCDC_Data.SetDisCurr,
|
m_DCDC_Data.SetBuckI,
|
m_DCDC_Data.SMR_Alarm1,
|
m_DCDC_Data.CommTxCnt,
|
m_DCDC_Data.CommRxCnt)
|
+ Com.getNowTimeWithAt());
|
}
|
}
|
|
public boolean checkIfDataNeedStore()
|
{
|
boolean store_state = false;
|
/***********************************************************************/
|
if(false == getStoreDataBusyTag())
|
{
|
mTestData.testCurr = mTestData.TestCurr_RT;
|
if(Math.abs(mTestData.testCurr) < mBattFloatCurrLevel)
|
{
|
if(BattStatData.BATTSTATE_FLOAT != mTestData.battTestState)
|
{
|
printBattRtDataDebugInf_FBS9100S(1);
|
|
mTestData.battTestState = BattStatData.BATTSTATE_FLOAT;
|
mTestData.battState = BattStatData.BATTSTATE_FLOAT;
|
store_state = true;
|
}
|
}
|
|
if(false == store_state)
|
{
|
if(mTestData.testCurr >= (mBattFloatCurrLevel+2))
|
{
|
if(BattStatData.BATTSTATE_DISCHARGE == mTestData.battTestState)
|
{
|
printBattRtDataDebugInf_FBS9100S(2);
|
|
mTestData.battTestState = BattStatData.BATTSTATE_FLOAT;
|
mTestData.battState = BattStatData.BATTSTATE_FLOAT;
|
store_state = true;
|
}
|
else if(BattStatData.BATTSTATE_FLOAT == mTestData.battTestState)
|
{
|
initTestData(BattStatData.BATTSTATE_CHARGE);
|
printBattRtDataDebugInf_FBS9100S(3);
|
}
|
}
|
else if(mTestData.testCurr <= ((mBattFloatCurrLevel+2)*(-1)))
|
{
|
if(BattStatData.BATTSTATE_CHARGE == mTestData.battTestState)
|
{
|
printBattRtDataDebugInf_FBS9100S(4);
|
|
mTestData.battTestState = BattStatData.BATTSTATE_FLOAT;
|
mTestData.battState = BattStatData.BATTSTATE_FLOAT;
|
store_state = true;
|
}
|
else if(BattStatData.BATTSTATE_FLOAT == mTestData.battTestState)
|
{
|
initTestData(BattStatData.BATTSTATE_DISCHARGE);
|
printBattRtDataDebugInf_FBS9100S(5);
|
}
|
}
|
}
|
}
|
|
if((BattStatData.BATTSTATE_DISCHARGE == mTestData.battTestState)
|
|| (BattStatData.BATTSTATE_CHARGE == mTestData.battTestState))
|
{
|
mTestData.calTestCap(1);
|
calBattRestCap(mTestData.testCurr, mTestData.testCap);
|
|
boolean dt_new = make_al_MonVol_History();
|
if(mTestData.recordNum < mTestDataRecordCountMax)
|
{
|
if((true == dt_new) || ((mTestData.dataCalCount % mSaveDataTimeInterval)==0))
|
{
|
set_al_MonVol_History_New();
|
store_state = true;
|
}
|
}
|
}
|
else
|
{
|
if(mTestData.groupVol > mBattFloatVolLevel) {
|
mTestData.battState = BattStatData.BATTSTATE_JUNCHARGE;
|
} else {
|
mTestData.battState = BattStatData.BATTSTATE_FLOAT;
|
}
|
}
|
|
if(true == getStoreDataBusyTag())
|
store_state = false;
|
else
|
{
|
if(true == store_state)
|
setStoreDataBusyTag();
|
}
|
|
/***********************************************************************/
|
return store_state;
|
}
|
|
public void clearStoreDataBusyTag()
|
{
|
StoreDataBusy = false;
|
}
|
private boolean getStoreDataBusyTag()
|
{
|
return StoreDataBusy;
|
}
|
private void setStoreDataBusyTag()
|
{
|
StoreDataBusy = true;
|
}
|
|
public class InsertDataToMysql_Task implements Runnable {
|
|
private void inserTestDataToDB(Sql_Mysql sql_v, int test_stoptype_t) {
|
boolean result = true;
|
for(int c=0; c<3; c++) {
|
try {
|
sql_v.mysql_con.setAutoCommit(false);
|
//------------------------------------------------------------//
|
String sql_str = BattData_RT_SQL.getInsertBattTestDataStr(BattData_RT.this);
|
sql_v.sqlMysqlExecute(sql_str);
|
//------------------------------------------------------------//
|
ArrayList<String> al_sql_str = BattData_RT_SQL.getInsertOrUpdateBattTestDataStopStr(BattData_RT.this);
|
for(int n=0; n<al_sql_str.size(); n++)
|
{
|
sql_v.sqlMysqlExecute(al_sql_str.get(n));
|
}
|
//------------------------------------------------------------//
|
if(1 == BattData_RT.this.mTestData.testRecordCount) {
|
MysqlRecordInf_Exist = true;
|
}
|
//------------------------------------------------------------//
|
ResultSet rest_t = sql_v.sqlMysqlQuery("SELECT COUNT(*) FROM " + Sql_Mysql.BattTestDataInf_Table
|
+ " WHERE BattGroupId=" + BattData_RT.this.BattGroupId
|
+ " AND test_record_count=" + BattData_RT.this.mTestData.testRecordCount);
|
if(rest_t.next()) {
|
if(rest_t.getInt(1) < 1) {
|
MysqlRecordInf_Exist = false;
|
}
|
}
|
//------------------------------------------------------------//
|
sql_str = BattData_RT_SQL.getInsertOrUpdateBattTestDataInfStr(BattData_RT.this, test_stoptype_t);
|
sql_v.sqlMysqlExecute(sql_str);
|
//------------------------------------------------------------//
|
sql_v.mysql_con.commit();
|
|
mTestData.recordNum += 1;
|
mTestData.recordNum_BPM7100 += 1;
|
clear_al_MonVol_History_New();
|
|
MysqlDataResInfTable_Exist = true;
|
MysqlRecordInf_Exist = true;
|
} catch (SQLException e) {
|
try {
|
sql_v.mysql_con.rollback();
|
} catch (SQLException e1) {
|
// TODO Auto-generated catch block
|
e1.printStackTrace();
|
}
|
e.printStackTrace();
|
result = false;
|
} finally {
|
try {
|
sql_v.mysql_con.setAutoCommit(true);
|
} catch (SQLException e1) {
|
// TODO Auto-generated catch block
|
e1.printStackTrace();
|
}
|
if(true == result)
|
break;
|
else
|
{
|
try {
|
Thread.sleep(500);
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
}
|
}
|
|
@Override
|
public void run() {
|
Sql_Mysql sql = new Sql_Mysql(m_Conn_Pool.getConn());
|
String sql_str = null;
|
try {
|
sql.sqlMysqlUseDB(Sql_Mysql.DB_BATT_TESTDATA);
|
|
if(false == MysqlDataTable_Exist)
|
{
|
sql_str = BattData_RT_SQL.getCreateBattTestDataStr("`tb_BattTestDataStop_" + BattGroupId + "` ");
|
sql.sqlMysqlExecute(sql_str);
|
MysqlDataTable_Exist = sql.sqlMysqlCheckIfTableExist("tb_BattTestData_" + BattGroupId);
|
}
|
|
if(false == MysqlDataTable_Exist)
|
{
|
System.out.println("tb_BattTestData_" + BattGroupId + " is not exist, create it now...");
|
sql_str = BattData_RT_SQL.getCreateBattTestDataStr("`tb_BattTestData_" + BattGroupId + "` ");
|
sql.sqlMysqlExecute(sql_str);
|
}
|
|
if((BattStatData.BATTSTATE_FLOAT != mTestData.TestState_RT)
|
&& (BattStatData.BATTSTATE_FLOAT != mTestData.battTestState))
|
{
|
inserTestDataToDB(sql, -1);
|
} else {
|
if(BattStatData.TEST_LOADER_FBS9100S == mTestData.getLoaderType()) {
|
set_al_MonVol_History_New();
|
inserTestDataToDB(sql, mTestData.test_stoptype);
|
}
|
if(mTestData.testTimeLong < mTestTimeLongMin) { //Èç¹û²âÊÔʱ³¤Ð¡ÓÚÓÐЧµÄ²âÊÔʱ³¤Ôòɾ³ý¼Ç¼µÄÊý¾Ý
|
try {
|
sql.mysql_con.setAutoCommit(false);
|
ArrayList<String> al_str = BattData_RT_SQL.getDeleteBattTestDataStr(BattData_RT.this);
|
for(int n=0; n<al_str.size(); n++)
|
{
|
sql.sqlMysqlExecute(al_str.get(n));
|
System.out.println(Thread.currentThread().getName() + ": " + al_str.get(n));
|
}
|
sql.mysql_con.commit();
|
|
} catch (SQLException e) {
|
sql.mysql_con.rollback();
|
} finally {
|
sql.mysql_con.setAutoCommit(true);
|
}
|
}
|
}
|
} catch (SQLException e) {
|
System.out.println(e.getMessage());
|
}
|
finally
|
{
|
sql.close_con();
|
clearStoreDataBusyTag();
|
}
|
}
|
}
|
}
|