| | |
| | | <batt_alarm_fn_config> |
| | | <batt_alarm_fn_en>true</batt_alarm_fn_en> |
| | | <batt_alarm_fn_start_delay>10</batt_alarm_fn_start_delay> |
| | | <batt_alarm_cleared_delay>600</batt_alarm_cleared_delay> |
| | | <batt_alarm_cleared_delay>10</batt_alarm_cleared_delay> |
| | | <batt_alarm_data_daycount_max>400</batt_alarm_data_daycount_max> |
| | | </batt_alarm_fn_config> |
| | | <batt_res_store_fn_config> |
| | |
| | | ALM_level_low = alm_level_low_t;
|
| | | }
|
| | |
|
| | | public BattAlarmData(int dt_count_max, |
| | | int bg_id_t, int mon_num_t, int alm_id_t,int alm_signal_id_t ,
|
| | | int alm_signal_id_high_t, int alm_signal_id_low_t, |
| | | int alm_level_high_t, int alm_level_low_t)
|
| | | {
|
| | | ALM_TAG_DELAY_COUNT_MAX = dt_count_max;
|
| | | battgroup_id = bg_id_t;
|
| | | mon_num = mon_num_t;
|
| | | |
| | | alm_id = alm_id_t;
|
| | | alm_signal_id = alm_signal_id_t;
|
| | | ALM_signal_id_high = alm_signal_id_high_t;
|
| | | ALM_signal_id_low = alm_signal_id_low_t;
|
| | | ALM_level_high = alm_level_high_t;
|
| | | ALM_level_low = alm_level_low_t;
|
| | | }
|
| | | |
| | | public BattAlarmData() {
|
| | |
|
| | | }
|
| | |
| | | {
|
| | | if(true == param.alm_High_EN)
|
| | | {
|
| | | |
| | | //System.out.println("alm_High:"+param.alm_High+"\t alm_Low:"+param.alm_Low);
|
| | | if(data_value > param.alm_High)
|
| | | {
|
| | | //System.out.println("mon_num:"+mon_num+"\t alm_signal_id:"+alm_signal_id);
|
| | | if(ALM_signal_id_high != alm_signal_id && ALM_signal_id_low != alm_signal_id)
|
| | | {
|
| | |
|
| | |
| | | AL_alarmdata.add(cloneBattAlarmData());
|
| | | }
|
| | | } else {
|
| | | //System.out.println("mon_num:"+mon_num+"\t alm_signal_id:"+alm_signal_id);
|
| | | if(ALM_signal_id_high == alm_signal_id)
|
| | | {
|
| | | //System.out.println("isOld:"+ALM_signal_id_high+"\t"+alarm_high_delay_count);
|
| | |
|
| | | if(alarm_high_delay_count < (ALM_TAG_DELAY_COUNT_MAX+2))
|
| | | if(alarm_high_delay_count < (ALM_TAG_DELAY_COUNT_MAX+2)) {
|
| | | alarm_high_delay_count += 1;
|
| | | |
| | | //System.out.println(mon_num+"高告警取消"+alarm_low_delay_count+"---"+ALM_TAG_DELAY_COUNT_MAX);
|
| | | }
|
| | | if(alarm_high_delay_count >= ALM_TAG_DELAY_COUNT_MAX)
|
| | | {
|
| | | alm_cleared_type = ALM_CLEARED_TYPE_AUTO;
|
| | |
| | | } else {
|
| | | if(ALM_signal_id_low == alm_signal_id)
|
| | | {
|
| | | if(alarm_low_delay_count < (ALM_TAG_DELAY_COUNT_MAX+2))
|
| | | if(alarm_low_delay_count < (ALM_TAG_DELAY_COUNT_MAX+2)) {
|
| | | alarm_low_delay_count += 1;
|
| | | |
| | | //System.out.println(mon_num+"低告警取消"+alarm_low_delay_count+"---"+ALM_TAG_DELAY_COUNT_MAX);
|
| | | }
|
| | | if(alarm_low_delay_count >= ALM_TAG_DELAY_COUNT_MAX)
|
| | | {
|
| | | alm_cleared_type = ALM_CLEARED_TYPE_AUTO;
|
| | |
| | | alm_High_EN = high_en;
|
| | | alm_Low_EN = low_en;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | | return "AlarmParamCell [alm_Id=" + alm_Id + ", alm_Name=" + alm_Name + ", alm_High=" + alm_High
|
| | | + ", alm_Low=" + alm_Low + ", alm_High_Level=" + alm_High_Level + ", alm_Low_Level=" + alm_Low_Level
|
| | | + ", alm_High_EN=" + alm_High_EN + ", alm_Low_EN=" + alm_Low_EN + "]";
|
| | | }
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | | return "BattAlarmParam [alm_MonVol=" + alm_MonVol + ", alm_MonTmp=" + alm_MonTmp + ", alm_MonRes=" + alm_MonRes
|
| | | + ", update_en=" + update_en + "]";
|
| | | }
|
| | | |
| | | |
| | | }
|
| | |
| | |
|
| | | initTestDataSaveRunable();
|
| | | }
|
| | | public void initAlarmParam(int dt_count_max, BattAlarmParam alm_param)
|
| | | public void initAlarmParam(int dt_count_max, BattAlarmParam alm_param,boolean reload)
|
| | | {
|
| | | /***********************************************************************************/
|
| | | // float std_group_vol = MonStdVol * MonCount;
|
| | |
| | | // alm_param.setAlarmParamCellValue(std_connres, m_AlarmParam.alm_ConnRes, alm_param.alm_ConnRes);
|
| | |
|
| | | //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);
|
| | | if(reload) {
|
| | | //System.out.println("重新加载告警参数");
|
| | | for(int n=0; n<al_MonVol.size(); n++)
|
| | | {
|
| | | al_MonVol.get(n).reloadAlarmData(dt_count_max, BattGroupId, n+1, m_AlarmParam);
|
| | | }
|
| | | }else { |
| | | for(int n=0; n<al_MonVol.size(); n++)
|
| | | {
|
| | | al_MonVol.get(n).initAlarmData(dt_count_max, BattGroupId, n+1, m_AlarmParam);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | String sql_str_vol = " ";
|
| | | for(int n=0; n<bd_rt.MonCount; n++) {
|
| | | tmp_dt = bd_rt.al_MonVol.get(n).monVol;
|
| | | if(bd_rt.al_MonVol_RtOld.get(n).monVol != tmp_dt) {
|
| | | //if(bd_rt.al_MonVol_RtOld.get(n).monVol != tmp_dt) {
|
| | | bd_rt.al_MonVol_RtOld.get(n).monVol = tmp_dt;
|
| | | sql_str_vol += " WHEN " + (n+1) + " THEN " + String.format("%1.3f", tmp_dt);
|
| | | }
|
| | | //}
|
| | | }
|
| | | if(sql_str_vol.trim().length() > 1) {
|
| | | sql_str_vol = ", mon_vol = CASE mon_num " + sql_str_vol + " ELSE mon_vol END ";
|
| | |
| | | String sql_str_tmp = " ";
|
| | | for(int n=0; n<bd_rt.MonCount; n++) {
|
| | | tmp_dt = bd_rt.al_MonVol.get(n).monTmp;
|
| | | if(bd_rt.al_MonVol_RtOld.get(n).monTmp != tmp_dt) {
|
| | | //if(bd_rt.al_MonVol_RtOld.get(n).monTmp != tmp_dt) {
|
| | | bd_rt.al_MonVol_RtOld.get(n).monTmp = tmp_dt;
|
| | | sql_str_tmp += " WHEN " + (n+1) + " THEN " + String.format("%1.3f", tmp_dt);
|
| | | }
|
| | | //}
|
| | | }
|
| | | if(sql_str_tmp.trim().length() > 1) {
|
| | | sql_str_tmp = ", mon_tmp = CASE mon_num " + sql_str_tmp + " ELSE mon_tmp END ";
|
| | |
| | | String sql_str_res = " ";
|
| | | for(int n=0; n<bd_rt.MonCount; n++) {
|
| | | tmp_dt = bd_rt.al_MonVol.get(n).monRes;
|
| | | if(bd_rt.al_MonVol_RtOld.get(n).monRes != tmp_dt) {
|
| | | //if(bd_rt.al_MonVol_RtOld.get(n).monRes != tmp_dt) {
|
| | | bd_rt.al_MonVol_RtOld.get(n).monRes = tmp_dt;
|
| | | sql_str_res += " WHEN " + (n+1) + " THEN " + String.format("%1.3f", tmp_dt);
|
| | | }
|
| | | //}
|
| | | }
|
| | | if(sql_str_res.trim().length() > 1) {
|
| | | sql_str_res = ", mon_res = CASE mon_num " + sql_str_res + " ELSE mon_res END ";
|
| | |
| | | String sql_str_ser = " ";
|
| | | for(int n=0; n<bd_rt.MonCount; n++) {
|
| | | tmp_dt = bd_rt.al_MonVol.get(n).monSer;
|
| | | if(bd_rt.al_MonVol_RtOld.get(n).monSer != tmp_dt) {
|
| | | //if(bd_rt.al_MonVol_RtOld.get(n).monSer != tmp_dt) {
|
| | | bd_rt.al_MonVol_RtOld.get(n).monSer = tmp_dt;
|
| | | sql_str_ser += " WHEN " + (n+1) + " THEN " + String.format("%1.3f", tmp_dt);
|
| | | }
|
| | | //}
|
| | | }
|
| | | if(sql_str_ser.trim().length() > 1) {
|
| | | sql_str_ser = ", mon_ser = CASE mon_num " + sql_str_ser + " ELSE mon_ser END ";
|
| | |
| | | String sql_str_jh_curr = " ";
|
| | | for(int n=0; n<bd_rt.MonCount; n++) {
|
| | | tmp_dt = bd_rt.al_MonVol.get(n).monJHcurr;
|
| | | if(bd_rt.al_MonVol_RtOld.get(n).monJHcurr != tmp_dt) {
|
| | | //if(bd_rt.al_MonVol_RtOld.get(n).monJHcurr != tmp_dt) {
|
| | | bd_rt.al_MonVol_RtOld.get(n).monJHcurr = tmp_dt;
|
| | | sql_str_jh_curr += " WHEN " + (n+1) + " THEN " + String.format("%1.3f", tmp_dt);
|
| | | }
|
| | | //}
|
| | | }
|
| | | if(sql_str_jh_curr.trim().length() > 1) {
|
| | | sql_str_jh_curr = ", mon_JH_curr = CASE mon_num " + sql_str_jh_curr + " ELSE mon_JH_curr END ";
|
| | |
| | | }
|
| | |
|
| | | /**
|
| | | * 重载各类告警对象
|
| | | * @param dt_count_max
|
| | | * @param battgroup_id
|
| | | * @param mon_num
|
| | | * @param param
|
| | | */
|
| | | public void reloadAlarmData(int dt_count_max, int battgroup_id, int mon_num, BattAlarmParam param)
|
| | | {
|
| | | |
| | | |
| | | monVol_AlarmData = new BattAlarmData(dt_count_max, |
| | | battgroup_id, mon_num, monVol_AlarmData.alm_id,monVol_AlarmData.alm_signal_id,
|
| | | BattAlarmData.ALM_SIGNAL_ID_MonVolHigh, BattAlarmData.ALM_SIGNAL_ID_MonVolLow,
|
| | | param.alm_MonVol.alm_High_Level, param.alm_MonVol.alm_Low_Level);
|
| | | monVol_AlarmData.alm_signal_id = monVol_AlarmData.alm_signal_id;
|
| | | |
| | | monTmp_AlarmData = new BattAlarmData(dt_count_max, |
| | | battgroup_id, mon_num, monTmp_AlarmData.alm_id,monTmp_AlarmData.alm_signal_id,
|
| | | BattAlarmData.ALM_SIGNAL_ID_MonTmpHigh, BattAlarmData.ALM_SIGNAL_ID_MonTmpLow,
|
| | | param.alm_MonTmp.alm_High_Level, param.alm_MonTmp.alm_Low_Level);
|
| | | |
| | | monRes_AlarmData = new BattAlarmData(dt_count_max, |
| | | battgroup_id, mon_num, monRes_AlarmData.alm_id,monRes_AlarmData.alm_signal_id,
|
| | | BattAlarmData.ALM_SIGNAL_ID_MonResHigh, BattAlarmData.ALM_SIGNAL_ID_MonResLow,
|
| | | param.alm_MonRes.alm_High_Level, param.alm_MonRes.alm_Low_Level);
|
| | | |
| | | }
|
| | | |
| | | /**
|
| | | * 克隆当前对象并返回
|
| | | */
|
| | | public MonVolData clone()
|
| | |
| | | import com.battmonitor.sql.MysqlConnPool;
|
| | |
|
| | | public class FBS9600S_BattAlarm_Thread implements Runnable{
|
| | | public final static int BattAlarmClearedDelay = 30;
|
| | | public final static int BattAlarmClearedDelay = 10;
|
| | |
|
| | | public final static int ALM_TYPE_MonVol_High_ID = 139001; //单体电压高
|
| | | public final static int ALM_TYPE_MonVol_Low_ID = 139002; //单体电压低
|
| | | public final static int ALM_TYPE_MonVol_Low_ID = 139002; //单体电压低
|
| | | public final static int ALM_TYPE_MonTmp_High_ID = 139003; //单体温度高
|
| | | public final static int ALM_TYPE_MonTmp_Low_ID = 139004; //单体温度低
|
| | | public final static int ALM_TYPE_MonTmp_Low_ID = 139004; //单体温度低
|
| | | public final static int ALM_TYPE_MonRes_High_ID = 139005; //单体内阻高
|
| | | public final static int ALM_TYPE_MonRes_Low_ID = 139006; //单体内阻低
|
| | | public final static int ALM_TYPE_MonRes_Low_ID = 139006; //单体内阻低
|
| | |
|
| | | public BattData_RT_Array batts;
|
| | | public MysqlConnPool pool;
|
| | |
| | | @Override
|
| | | public void run() {
|
| | | System.out.println("FBS9600S_BattAlarm_Thread Start at " + Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
| | | |
| | | try {
|
| | | for(int dt=0; dt<30; dt++)
|
| | | {
|
| | | //等待30秒设备通讯后启动
|
| | | Thread.sleep(1000);
|
| | | }
|
| | | } catch (InterruptedException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | FBS9600S_BattAlarm_Thread_SQL.queryBattAlarmParam(pool,param);
|
| | | for(int n=0; n<batts.getItemCount(); n++)
|
| | | {
|
| | | //设置告警参数
|
| | | //m_AL_Data.getItem(n).initAlarmParam(m_AppCfg.getBattAlarmClearedDelay(), m_AlarmParam_COE);
|
| | | //设置各个告警参数
|
| | | batts.getItem(n).initAlarmParam(BattAlarmClearedDelay, param);
|
| | | batts.getItem(n).initAlarmParam(BattAlarmClearedDelay, param,false);
|
| | |
|
| | | //查询历史实时告警记录,并设值
|
| | | FBS9600S_BattAlarm_Thread_SQL.searchLastHistoryBattAlarm(pool,batts.getItem(n)); //录入线程启动之前的告警数据
|
| | |
| | | for(int i=0;i<batts.getItemCount();i++) {
|
| | | if(param.update_en) {
|
| | | //当电池组的告警参数变化时需要更新所有的告警对象
|
| | | batts.getItem(i).initAlarmParam(BattAlarmClearedDelay, param);
|
| | | batts.getItem(i).initAlarmParam(BattAlarmClearedDelay, param,true);
|
| | | //System.out.println(param);
|
| | | }
|
| | | BattData_RT rt_data = batts.getItem(i);
|
| | | al_alm = rt_data.makeAlarmData();
|
| | |
| | | param.update_en = true;
|
| | | }
|
| | | val_pam = param.alm_MonTmp.alm_High;
|
| | | param.alm_MonTmp.alm_High = res.getFloat("mon_vol_high");
|
| | | param.alm_MonTmp.alm_High = res.getFloat("mon_tmp_high");
|
| | | if(val_pam != param.alm_MonTmp.alm_High) {
|
| | | param.update_en = true;
|
| | | }
|
| | | val_pam = param.alm_MonTmp.alm_Low;
|
| | | param.alm_MonTmp.alm_Low = res.getFloat("mon_vol_low");
|
| | | param.alm_MonTmp.alm_Low = res.getFloat("mon_tmp_low");
|
| | | if(val_pam != param.alm_MonTmp.alm_Low) {
|
| | | param.update_en = true;
|
| | | }
|
| | | val_pam = param.alm_MonRes.alm_High;
|
| | | param.alm_MonRes.alm_High = res.getFloat("mon_vol_high");
|
| | | param.alm_MonRes.alm_High = res.getFloat("mon_res_high");
|
| | | if(val_pam != param.alm_MonRes.alm_High) {
|
| | | param.update_en = true;
|
| | | }
|
| | | val_pam = param.alm_MonRes.alm_Low;
|
| | | param.alm_MonRes.alm_Low = res.getFloat("mon_vol_low");
|
| | | param.alm_MonRes.alm_Low = res.getFloat("mon_res_low");
|
| | | if(val_pam != param.alm_MonRes.alm_Low) {
|
| | | param.update_en = true;
|
| | | }
|
| | |
| | | if(alarm.mon_num > battdata.al_MonVol.size()) {
|
| | | continue;
|
| | | }
|
| | | battdata.al_MonVol.get(alarm.mon_num-1).monVol_AlarmData.alm_id = alarm.alm_id;
|
| | | battdata.al_MonVol.get(alarm.mon_num-1).monTmp_AlarmData.alm_id = alarm.alm_id;
|
| | | battdata.al_MonVol.get(alarm.mon_num-1).monTmp_AlarmData.alm_cleared_type = alarm.alm_cleared_type;
|
| | | battdata.al_MonVol.get(alarm.mon_num-1).monTmp_AlarmData.alm_signal_id = alarm.alm_signal_id;
|
| | | }break;
|
| | |
| | | if(alarm.mon_num > battdata.al_MonVol.size()) {
|
| | | continue;
|
| | | }
|
| | | battdata.al_MonVol.get(alarm.mon_num-1).monVol_AlarmData.alm_id = alarm.alm_id;
|
| | | battdata.al_MonVol.get(alarm.mon_num-1).monRes_AlarmData.alm_id = alarm.alm_id;
|
| | | battdata.al_MonVol.get(alarm.mon_num-1).monRes_AlarmData.alm_cleared_type = alarm.alm_cleared_type;
|
| | | battdata.al_MonVol.get(alarm.mon_num-1).monRes_AlarmData.alm_signal_id = alarm.alm_signal_id;
|
| | | }break;
|