package com.battdata_rt; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.base.AppConfig; import com.base.ComBase; import com.dec.fbs9100.AppParam; import com.dec.fbs9100.FBS9100_ComBase; import com.dec.fbs9100.FBS9100_SysState; import com.dec.fbs9100.MysqlConnPool; import com.dec.fbs9100.Sql_Mysql; public class BattData_RT { public static final int SIGN_TYPE_Default = 0; //标准1托1设备(含2台1托1) public static final int SIGN_TYPE_Stand = 1; //标准1托2设备 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 = " "; private String FBSRegCode = " "; public int GroupIndexInFBSDevice = 1; public String FBSDeviceIp_WG = " "; public String FBSDeviceIp_YM = " "; 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 InsertDataToMysql_Task mSqlTask = null; public ArrayList al_MonVol = new ArrayList(); public ArrayList al_MonVol_RtOld = new ArrayList(); public ArrayList al_MonVol_History = new ArrayList(); public ArrayList> al_MonVol_C_Id = new ArrayList>(); public BattStatData mTestData; 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 = 1*60; public int mSaveDataTimeInterval = 10; private float mDataHistoryNewLevel = (float) 0.01; private int mTestDataRecordCountMax = 10000; public int sign_type = SIGN_TYPE_Default; Logger logger = null; /*********************************************************************************/ /*********************************************************************************/ public BattData_RT(AppConfig cfg, AppParam param, MysqlConnPool pool) { logger = LogManager.getLogger(this.getClass()); mTestData = new BattStatData(cfg.getSourceBattDataType(), cfg.getSybSrvCurrChargeDirPos()); mAppParam.copyAppParam(param); //System.out.println("mAppParam.getTestTimeLongMinimum(AppParam.AppParam_Discharge):"+mAppParam.getTestTimeLongMinimum(AppParam.AppParam_Discharge)); 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); } /*********************************************************************************/ public void updata_BattRtAlARM_To_RamDb() { BattData_RT_SQL.updateBattAlarm_RT_RamDB_Table(m_Conn_Pool, this); } /*********************************************************************************/ public BattData_RT updata_SetIp() { return BattData_RT_SQL.selectRT_BttInf_Table(m_Conn_Pool, this); } /*********************************************************************************/ public void make_al_MonVol_C_Id() { al_MonVol_C_Id.clear(); ArrayList tmp_al_id = null; int start_index = 0; for(int m=0; m 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(); al_MonVol_C_Id.add(tmp_al_id); } tmp_al_id.add(tmp_id); start_index++; } } public void make_al_MonVol_Auto_C_Id() { al_MonVol_C_Id.clear(); ArrayList tmp_al_id = null; tmp_al_id = new ArrayList(); for(int m=0; m0) && (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()); /** * 2022-07-05 @lijun this.al_MonVol_RtOld添加默认值 */ setMonVol_RtOldDefaultVal(); 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; } public float getBattFloatVolLev() { return mBattFloatVolLevel; } public float getBattFloatCurrLev() { return mBattFloatCurrLevel; } public String getDevRegCode() { return FBSRegCode; } public void setDevRegCode(String reg_code) { FBSRegCode = reg_code; } 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 float MonStdVol() { return MonStdVol; } public float MonStdCap() { return MonStdCap; } 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 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; } public float getGroupCurr() { return mTestData.group_curr; } /** * �������������������������������������������������������������� * @param al_vol */ public void makeMaxMinMonVol(ArrayList al_vol) { if(null != al_vol) { float maxvol = -80000; float minvol = 80000; for(int n=0; n 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.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= 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 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=0) && (index= 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); count = sql.getBattTestRecordCountNew(BattGroupId, Sql_Mysql.BattTestDataInf_Table); sql.close_con(); } if(count <= 0) return; setMonitorParam(test_type); mTestData.init(mTestData.getDevFBS9100S_WorkState(), test_type, count); MysqlDataTable_Exist = false; MysqlDataResInfTable_Exist = false; MysqlRecordInf_Exist = false; } public boolean checkIfDataNeedStore() { boolean store_state = false; /***********************************************************************/ if(false == getStoreDataBusyTag()) { float tmp_curr = mTestData.TestCurr_RT; if((Math.abs(tmp_curr) < mBattFloatCurrLevel) && (FBS9100_SysState.IEC61850_SYS_STATE_DISCHARGING != mTestData.getDevFBS9100S_WorkState())) { if(BattStatData.BATTSTATE_FLOAT != mTestData.battTestState) { mTestData.battTestState = BattStatData.BATTSTATE_FLOAT; mTestData.battState = BattStatData.BATTSTATE_FLOAT; store_state = true; } } if(false == store_state) { if(tmp_curr >= (mBattFloatCurrLevel+2)) { if(BattStatData.BATTSTATE_DISCHARGE == mTestData.battTestState) { mTestData.battTestState = BattStatData.BATTSTATE_FLOAT; mTestData.battState = BattStatData.BATTSTATE_FLOAT; store_state = true; } else if(BattStatData.BATTSTATE_FLOAT == mTestData.battTestState) { initTestData(BattStatData.BATTSTATE_CHARGE); } } else if(tmp_curr <= ((mBattFloatCurrLevel+2)*(-1))) { if(BattStatData.BATTSTATE_CHARGE == mTestData.battTestState) { mTestData.battTestState = BattStatData.BATTSTATE_FLOAT; mTestData.battState = BattStatData.BATTSTATE_FLOAT; store_state = true; } else if(BattStatData.BATTSTATE_FLOAT == mTestData.battTestState) { initTestData(BattStatData.BATTSTATE_DISCHARGE); } } else {//edit by mxpopstar @2020.08.21 if(BattStatData.BATTSTATE_FLOAT == mTestData.battTestState) { if(FBS9100_SysState.IEC61850_SYS_STATE_DISCHARGING == mTestData.getDevFBS9100S_WorkState()) { initTestData(BattStatData.BATTSTATE_DISCHARGE); //printBattRtDataDebugInf_FBS9100S(6); } /*else if(FBS9100_SysState.IEC61850_SYS_STATE_CHARGING == mTestData.getDevFBS9100S_WorkState()) { initTestData(BattStatData.BATTSTATE_CHARGE); //printBattRtDataDebugInf_FBS9100S(7); }*/ } } } if(false == store_state) { mTestData.testCurr = tmp_curr; } } 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; } } /************************** edit by mxpopstar @ 2020-08-30 ****************************/ if(true == store_state) { mTestData.checkAndSetLoaderType(); } /*************************************************************************************/ 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; } /** * 2022-07-05 新增给al_MonVol_RtOld设置默认值 * @lijun */ public void setMonVol_RtOldDefaultVal() { if(null != al_MonVol_RtOld) { for(int n=0;n al_sql_str = BattData_RT_SQL.getInsertOrUpdateBattTestDataStopStr(BattData_RT.this); for(int n=0; n al_str = BattData_RT_SQL.getDeleteBattTestDataStr(BattData_RT.this); for(int n=0; n