package com.battdata_rt;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.Date;
|
|
import com.base.Com;
|
import com.battalarm.BattAlarmData;
|
import com.battalarm.BattAlarmParam;
|
import com.battalarm.BattAlarm_Thread_SQL;
|
import com.config.AppConfig;
|
import com.config.AppParam;
|
import com.sql.MysqlConnPool;
|
|
public class BattData_RT {
|
|
public static final int MonomerCountMax = 400; //ÔÚÏ߸¡³ä
|
|
public static final byte IEC61850_SYS_STATE_STOPPED = 0; //ÔÚÏ߸¡³ä
|
public static final byte IEC61850_SYS_STATE_CHARGING = 1; //Ô¤³äµç/£¨ÏÞÁ÷³äµç£©
|
public static final byte IEC61850_SYS_STATE_DISCHARGING = 2; //ºËÈݲâÊÔ
|
public static final byte IEC61850_SYS_STATE_PD_DISCHARGING = 3; //Í£µç·Åµç
|
public static final byte IEC61850_SYS_STATE_RES_TEST = 4; //ÄÚ×è²âÊÔ
|
public static final byte IEC61850_SYS_STATE_KD_TEST = 5; //K1/D1²âÊÔ
|
|
private boolean MonDataFromCInterfaceOk = false;
|
|
private boolean MonDataIsUseForIdce8200 = false;
|
private boolean mIDCE8200_ConState = false;
|
public long 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;
|
public float MonStdRes; //±ê³ÆÄÚ×è
|
|
public int dev_workstate; //É豸¹¤×÷״̬
|
|
private boolean StoreBattRes_DataEn = false;
|
public boolean MysqlDataResInfTable_Exist = false;
|
public boolean MysqlRecordInf_Exist = false;
|
|
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 BattStatData TestData;
|
|
public BattAlarmParam m_AlarmParam = new BattAlarmParam(); //µ±Ç°¸æ¾¯²ÎÊýÖеÄϵÊýֵΪʵ¼ÊãÐÖµ
|
|
public BattAlarmParam m_BattAlarmParam = new BattAlarmParam(); //ÿ¸öµç³Ø×é¶ÔÓ¦Ò»¸ö¸æ¾¯µÄ²ÎÊý[мÓ]
|
|
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;
|
public int mSaveDataTimeInterval = 10;
|
private MysqlConnPool pool;
|
/*********************************************************************************/
|
/*********************************************************************************/
|
public BattData_RT(AppConfig cfg, AppParam param, MysqlConnPool pool)
|
{
|
TestData = new BattStatData(cfg.getSourceBattDataType(), cfg.getSybSrvCurrChargeDirPos());
|
|
mAppParam.copyAppParam(param);
|
|
this.pool = pool;
|
}
|
|
|
/**
|
* ÉèÖà 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;
|
}
|
|
public void setBattFloatVolCurrLevel(float vol_lev, float curr_level)
|
{
|
mBattFloatCurrLevel = curr_level;
|
TestData.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 getIdce8200ComState()
|
{
|
return mIDCE8200_ConState;
|
}
|
|
public void updateMonVolFromIDCE8200(int mon_index, float vol)
|
{
|
mIDCE8200_ConState = true;
|
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;
|
}
|
TestData.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;
|
}
|
TestData.groupVol = sumvol;
|
}
|
/********************************************************************************/
|
|
public int getBattCount()
|
{
|
return MonCount;
|
}
|
public byte getBattState()
|
{
|
return TestData.battState;
|
}
|
public byte getBattTestType()
|
{
|
return TestData.battTestState;
|
}
|
public float getOnlineVol()
|
{
|
return TestData.onlineVol;
|
}
|
public float getGroupVol()
|
{
|
return TestData.groupVol;
|
}
|
public float getGroupTmp()
|
{
|
return TestData.groupTmp;
|
}
|
public float getTestCurr()
|
{
|
return TestData.testCurr;
|
}
|
public float getTestCap()
|
{
|
return TestData.testCap;
|
}
|
public long getTestStartTime()
|
{
|
return TestData.startTestTime.getTime();
|
}
|
public long getTestRecordTime()
|
{
|
return TestData.recordTime.getTime();
|
}
|
public int getTestTimeLong()
|
{
|
return TestData.testTimeLong;
|
}
|
public float getBattRealCap()
|
{
|
return TestData.battRealCap;
|
}
|
public float getBattRestCap()
|
{
|
return TestData.battRestCap;
|
}
|
public int getBattRestTime()
|
{
|
return TestData.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 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;
|
}
|
//==============================================================//
|
//==============================================================//
|
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);
|
float std_monres = MonStdRes;
|
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);
|
|
float std_monlyvol = (float) 1;
|
alm_param.setAlarmParamCellValue(std_monlyvol, m_AlarmParam.alm_MonLYVol, alm_param.alm_MonLYVol);
|
|
float std_cap = MonStdCap;
|
alm_param.setAlarmParamCellValue(std_cap, m_AlarmParam.alm_MonREALCAP, alm_param.alm_MonREALCAP);
|
|
TestData.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>();
|
//Date timetime = new Date(100,0,1);
|
Calendar c = Calendar.getInstance();
|
c.set(2000, 0, 1, 0, 0, 0);
|
//System.out.println(this.BattGroupId+"=="+Com.getDateTimeFormat(TestData.recordTime, Com.DTF_YMDhms));
|
if(TestData.recordTime.before(c.getTime())){
|
//¹ýÂËÉÐδͨÐÅÉϹýµÄÉ豸µÄµç³Ø×é
|
//System.out.println(Com.getDateTimeFormat(TestData.recordTime, Com.DTF_YMDhms)+"<"+Com.getDateTimeFormat(timetime, Com.DTF_YMDhms));
|
return al_alm_data;
|
}
|
//System.out.println("2222222222222="+dev_workstate);
|
if((FBSDeviceId/1000000 == 618 && (!(dev_workstate == IEC61850_SYS_STATE_DISCHARGING || dev_workstate == IEC61850_SYS_STATE_CHARGING))) || (FBSDeviceId/1000000 != 618)) {
|
TestData.onlineVol_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_OnlineVol, TestData.onlineVol);
|
TestData.groupVol_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_GroupVol, TestData.groupVol);
|
//System.out.println("¼ì²â×é¶Ëµçѹ");
|
}
|
|
|
|
if(TestData.testCurr >= 0)
|
{
|
TestData.battCurr_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_BattChargeCurr, TestData.testCurr);
|
}
|
else
|
{
|
TestData.battDisCurr_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_BattDisChargeCurr, Math.abs(TestData.testCurr));
|
}
|
|
for(int n=0; n<al_MonVol.size(); n++)
|
{
|
MonVolData vol_data = al_MonVol.get(n);
|
|
if((FBSDeviceId/1000000 == 618 && (!(dev_workstate == IEC61850_SYS_STATE_DISCHARGING || dev_workstate == IEC61850_SYS_STATE_CHARGING))) || (FBSDeviceId/1000000 != 618)) {
|
vol_data.monVol_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_MonVol, vol_data.monVol);
|
|
//System.out.println("¼ì²âµ¥Ìåµçѹ");
|
}
|
if(TestData.testCurr < 0) {
|
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);
|
vol_data.monLYVol_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_MonLYVol, vol_data.monLYVol);
|
vol_data.monRealCap_AlarmData.makeAlarmData(al_alm_data, m_AlarmParam.alm_MonREALCAP, vol_data.monRealCap);
|
}
|
long outtimelong = Math.abs((new Date().getTime()) - TestData.recordTime.getTime())/1000;
|
// if(BattGroupId == 1000021) {
|
// System.out.println("TestData.groupVol_AlarmData.alm_signal_id:"+TestData.groupVol_AlarmData.alm_signal_id+"==" + this.TestData.groupVol_AlarmData.getAlarmState());
|
// }
|
|
//System.out.println("³¬Ê±Ê±¼ä£º" + outtimelong + " FBSDeviceId£º"+FBSDeviceId +"-"+(FBSDeviceId/100000 != 6185));
|
// if(outtimelong<60 && (FBSDeviceId/100000 != 6185)) {
|
//System.out.println("¸üÐÂÊý¾Ý¡£¡£¡£");
|
//61850É豸²»ÓøüР'db_ram_db.tb_batt_rtalarm'±í ºÍ'db_ram_db.tb_batt_rsalarm'
|
BattAlarm_Thread_SQL.updateBattRtState_Table(pool, this);
|
BattAlarm_Thread_SQL.updateBattAlarm_RT_RamDB_Table(pool, this);
|
// }
|
return al_alm_data;
|
}
|
|
public void clearStoreDataBusyTag()
|
{
|
}
|
|
|
public void updateMonCnt(int new_mon_cnt) {
|
if((new_mon_cnt>0) && (new_mon_cnt<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);
|
}
|
}
|
}
|
}
|
}
|