Administrator
2021-08-09 527f41d5317d22fbe7e56554fa05f1919e8fd696
V2.208 edit at date 2021-07-13 lijun
1.设备告警新增停电机房电流均衡告警
7个文件已修改
203 ■■■■ 已修改文件
BattMonitor_FBS9100S_Alarm/config.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Alarm/src/com/battalarm/BattAlarm_Thread_New2.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Alarm/src/com/battalarm/DeviceAlarm_Thread.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Alarm/src/com/battalarm/DeviceAlarm_Thread_New.java 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Alarm/src/com/battalarm/FBS9100_DevData.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Alarm/src/com/version_inf/version_inf.txt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Alarm/src/main/main_FBS9100S_Alarm.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BattMonitor_FBS9100S_Alarm/config.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="gbk"?>
<root>
  <mysql_server_ip>192.168.10.221</mysql_server_ip>
  <mysql_server_ip>127.0.0.1</mysql_server_ip>
  <!--SOURCE_BATTDATA_TYPE_FBSDEV = 0-->
  <!--SOURCE_BATTDATA_TYPE_SQLSERVER = 1-->
  <!--SOURCE_BATTDATA_TYPE_C_INTERFACE = 2-->
BattMonitor_FBS9100S_Alarm/src/com/battalarm/BattAlarm_Thread_New2.java
@@ -802,10 +802,10 @@
                    + m_AppCfg.getBattAlarmClearedDelay() + " Seconds To Start...");
            int delay_time_count = m_AppCfg.getBattAlarmFnStartDelay();
            
            for(int dt=0; dt<delay_time_count; dt++)
            {
                sleep(1000);
            }
//            for(int dt=0; dt<delay_time_count; dt++)
//            {
//                sleep(1000);
//            }
            //clearHistoryAlarm_BattNew(m_Conn_Pool);                                                //将之前的实时告警记录改为历史告警记录
        
            System.out.println(this.getName() + " - BattAlarm_Thread Started at " 
@@ -819,7 +819,9 @@
                }
                //设置告警参数
                //m_AL_Data.getItem(n).initAlarmParam(m_AppCfg.getBattAlarmClearedDelay(), m_AlarmParam_COE);
                m_AL_Data.getItem(n).initAlarmParam(m_AppCfg.getBattAlarmClearedDelay(), m_AL_Data.getItem(n).m_BattAlarmParam);
                //int cleared_delay = m_AppCfg.getBattAlarmClearedDelay();                    //超时30取消
                int cleared_delay = 30;                    //超时30取消
                m_AL_Data.getItem(n).initAlarmParam(cleared_delay, m_AL_Data.getItem(n).m_BattAlarmParam);
            
                searchLastHistoryBattAlarm(m_Conn_Pool,m_AL_Data.getItem(n));                //录入线程启动之前的告警数据
            }
BattMonitor_FBS9100S_Alarm/src/com/battalarm/DeviceAlarm_Thread.java
@@ -290,7 +290,7 @@
                if( list!=null && list.size()>0) {
                    for(int i=0; i<list.size(); i++) {
                        int dev_id = list.get(i).getDev_id();
                        Timestamp record_time = list.get(i).getRecord_time();
                        Date record_time = list.get(i).getRecord_time();
                        String dev_ip = list.get(i).getDev_ip();
                        long interval = Math.abs((new Date()).getTime()-record_time.getTime());
                        //System.out.println("time:  "+(new Date()).getTime()+"   "+record_time.getTime()+"   "+interval);
BattMonitor_FBS9100S_Alarm/src/com/battalarm/DeviceAlarm_Thread_New.java
@@ -3,6 +3,8 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -40,6 +42,9 @@
    
    public final static int ALM_TYPE_FBS9100_COLLECTERROR_ID        = 119033;            //采集线告警
    
    public final static int ALM_TYPE_FBS9100_CurrBalance_ID         = 119034;            //停电电流均衡告警
    public final static float ALM_BTS_Curr_SPACING = 1.0f;                                //停电电流均衡告警电流阀值
    
    public final static int ALM_TYPE_BTS61850_RELAY_Error_ID         = 618501;            //继电器告警
    public final static int ALM_TYPE_BTS61850_CONNCET_Error_ID         = 618502;            //通讯告警
@@ -54,7 +59,6 @@
    public final static float ALM_BTS_VOL_SPACING = 1.5f;                            //判断累计和电压和组端电压差距的值
    
    public final static float ALM_DEVICE_DEFAULT_VALUE= 0.0f;                        //设备告警默认告警值
    
    public final static int FIRST_ALM_LEVEL  = 1;                                    //一级告警
    public final static int SECOND_ALM_LEVEL = 2;                                    //二级告警
@@ -312,24 +316,29 @@
        List<FBS9100_DevData> list = new ArrayList<FBS9100_DevData>();
        try {
            sql.sqlMysqlUseDB(Sql_Mysql.DB_RamDB);
            String sql_str = "  SELECT dev_id,dev_ip,record_datetime,dev_temp,dev_61850alarms,dev_batt_xuhang_tlong,dev_station_poff_tlong,dev_station_poff_cnt,dev_last_captest_stop_type "
            String sql_str = "  SELECT DISTINCT(dev_id),dev_ip,record_datetime,dev_temp,dev_61850alarms,dev_batt_xuhang_tlong,dev_station_poff_tlong,dev_station_poff_cnt,dev_last_captest_stop_type,dev_workstate,dev_onlinevollow "
                            +"    FROM " + Sql_Mysql.FBS9100State_Table +"," + Sql_Mysql.BattInf_Table
                            +"  WHERE tb_fbs9100_state.dev_id = tb_battinf.FBSDeviceId ";
            //System.out.println("sql_str: "+sql_str);
            ResultSet rs = sql.sqlMysqlQuery(sql_str);
            SimpleDateFormat sdf = new SimpleDateFormat(Com.DTF_YMDhms);
            while(rs.next()) {
                FBS9100_DevData  fbs9100_devdata=new FBS9100_DevData();
                fbs9100_devdata.setDev_id(rs.getInt("dev_id"));
                fbs9100_devdata.setDev_ip(rs.getString("dev_ip"));
                fbs9100_devdata.setRecord_time(rs.getTimestamp("record_datetime"));
                fbs9100_devdata.setRecord_time(sdf.parse(rs.getString("record_datetime")));
                fbs9100_devdata.setAlarms(rs.getString("dev_61850alarms"));
                fbs9100_devdata.setContiPowerLong(rs.getFloat("dev_batt_xuhang_tlong"));
                fbs9100_devdata.setCutPowerLong(rs.getFloat("dev_station_poff_tlong"));    
                fbs9100_devdata.setDev_last_captest_stop_type(rs.getInt("dev_last_captest_stop_type"));
                fbs9100_devdata.setDev_temp(rs.getFloat("dev_temp"));
                fbs9100_devdata.setDev_workstate(rs.getInt("dev_workstate"));
                fbs9100_devdata.setDev_onlinevollow(rs.getInt("dev_onlinevollow"));
                //System.out.println(fbs9100_devdata);
                list.add(fbs9100_devdata);
            }
        } catch (SQLException e) {
        } catch (SQLException | ParseException e) {
            e.printStackTrace();
        } finally {
            sql.close_con();
@@ -502,7 +511,7 @@
                        
                        FBS9100_DevData dev = list.get(i);
                        int dev_id = list.get(i).getDev_id();
                        Timestamp record_time = list.get(i).getRecord_time();
                        Date record_time = list.get(i).getRecord_time();
                        String dev_ip = list.get(i).getDev_ip();
                        long interval = Math.abs((new Date()).getTime()- record_time.getTime());
                        //System.out.println("time:  "+(new Date()).getTime()+"   "+record_time.getTime()+"   "+interval);
@@ -529,7 +538,7 @@
                        //判断当前设备是否是61850设备
                        if(dev_id/10000 != 61850) {
                            //设备温度告警
                            /*FBS9100_DevData tmpalarm = DeviceAlarm_Thread_New.judgedevidInorNo(m_Conn_Pool, dev_id,DeviceAlarm_Thread_New.ALM_TYPE_FBS9100_TMPHIGHT_ID);
                            FBS9100_DevData tmpalarm = DeviceAlarm_Thread_New.judgedevidInorNo(m_Conn_Pool, dev_id,DeviceAlarm_Thread_New.ALM_TYPE_FBS9100_TMPHIGHT_ID);
                            if((tmpalarm == null || 1 == tmpalarm.alm_cleared_type) && dev.getDev_temp() > ALM_BTS_TMP_HIGHT_VALUE) {
                                long RecId = UUID.randomUUID().getLeastSignificantBits();
                                if(0 == RecId) {
@@ -542,11 +551,11 @@
                                if(tmpalarm != null && dev.getDev_temp() <= ALM_BTS_TMP_HIGHT_VALUE) {
                                    makeRealAlarmToHistoryAlarm(m_Conn_Pool,list.get(i),DeviceAlarm_Thread_New.ALM_TYPE_FBS9100_TMPHIGHT_ID);            //将实时告警记录变成历史告警记录
                                }
                            }*/
                            }
                            
                            
                            //设备SD卡告警
                            /*FBS9100_DevData SDlastalarm = DeviceAlarm_Thread_New.judgedevidInorNo(m_Conn_Pool, dev_id,DeviceAlarm_Thread_New.ALM_TYPE_FBS9100_SDERROR_ID);
                            FBS9100_DevData SDlastalarm = DeviceAlarm_Thread_New.judgedevidInorNo(m_Conn_Pool, dev_id,DeviceAlarm_Thread_New.ALM_TYPE_FBS9100_SDERROR_ID);
                            FBS9100_DevData SDalarm = searchDevSDError(m_Conn_Pool,dev);
                            if((SDlastalarm == null || 1 == SDlastalarm.alm_cleared_type) && SDalarm.isAlarm) {
                                long RecId = UUID.randomUUID().getLeastSignificantBits();
@@ -559,7 +568,7 @@
                                if(SDlastalarm != null && !SDalarm.isAlarm) {
                                    makeRealAlarmToHistoryAlarm(m_Conn_Pool,list.get(i),DeviceAlarm_Thread_New.ALM_TYPE_FBS9100_SDERROR_ID);            //将实时告警记录变成历史告警记录
                                }
                            }*/
                            }
                            
                            //采集线告警
                            FBS9100_DevData collectlastalarm = DeviceAlarm_Thread_New.judgedevidInorNo(m_Conn_Pool, dev_id,DeviceAlarm_Thread_New.ALM_TYPE_FBS9100_COLLECTERROR_ID);            //查询当前设备之前是否存在采集线告警
@@ -578,6 +587,22 @@
                            }
                            
                
                            //BTS设备停电电流均衡监测
                            if(dev.dev_onlinevollow > 0) {
                                //常规BTS停电放电判断
                                FBS9100_DevData stopcurrstalarm = DeviceAlarm_Thread_New.judgedevidInorNo(m_Conn_Pool, dev_id,DeviceAlarm_Thread_New.ALM_TYPE_FBS9100_CurrBalance_ID);            //查询当前设备之前是否存在停电电流均衡告警
                                FBS9100_DevData curralarm = DeviceAlarm_Thread_New.check61850DevicePowerOffCurr(m_Conn_Pool, dev, ALM_BTS_Curr_SPACING);
                                //System.out.println(dev.dev_id+":"+(stopcurrstalarm == null || 1 == stopcurrstalarm.alm_cleared_type)+"=="+(curralarm != null && curralarm.isAlarm));
                                if((stopcurrstalarm == null || 1 == stopcurrstalarm.alm_cleared_type) && (curralarm != null && curralarm.isAlarm)) {
                                    //System.out.println("设备id:"+dev.dev_id+"新增停电均衡监测告警"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
                                    long RecId = UUID.randomUUID().getLeastSignificantBits();
                                    if(0 == RecId) {
                                        RecId = UUID.randomUUID().getLeastSignificantBits();
                                    }
                                    DeviceAlarm_Thread_New.insertOrUpdateDevAlarmToTable(m_Conn_Pool, RecId, dev_id, dev_ip,
                                            DeviceAlarm_Thread_New.ALM_TYPE_FBS9100_CurrBalance_ID,FIRST_ALM_LEVEL,ALM_DEVICE_DEFAULT_VALUE, true);
                                }
                            }
                            
                        }else{
                            //61850设备告警[设备通讯告警,K告警,D告警,过温告警,干接点告警]
@@ -613,6 +638,22 @@
                                if((dev61850Data != null && dev61850Data.RecId != 0) && (dev.getDev_last_captest_stop_type() <= 13)){
                                    //System.out.println("dev_id:"+dev.dev_id+"\t alm_type:"+ALM_BTS61851_TYPEIDS[k]);
                                    makeRealAlarmToHistoryAlarm(m_Conn_Pool,list.get(i),ALM_TYPE_BTS61850_TEST_ERROR_ID);            //将实时告警记录变成历史告警记录
                                }
                            }
                            //61850BTS设备停电电流均衡监测
                            if(dev.dev_workstate == 3) {
                                //常规BTS停电放电判断
                                FBS9100_DevData stopcurrstalarm = DeviceAlarm_Thread_New.judgedevidInorNo(m_Conn_Pool, dev_id,DeviceAlarm_Thread_New.ALM_TYPE_FBS9100_CurrBalance_ID);            //查询当前设备之前是否存在停电电流均衡告警
                                FBS9100_DevData curralarm = DeviceAlarm_Thread_New.check61850DevicePowerOffCurr(m_Conn_Pool, dev, ALM_BTS_Curr_SPACING);
                                if((stopcurrstalarm == null || 1 == stopcurrstalarm.alm_cleared_type) && (curralarm != null && curralarm.isAlarm)) {
                                    System.out.println("设备id:"+dev.dev_id+"新增停电均衡监测告警"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
                                    long RecId = UUID.randomUUID().getLeastSignificantBits();
                                    if(0 == RecId) {
                                        RecId = UUID.randomUUID().getLeastSignificantBits();
                                    }
                                    DeviceAlarm_Thread_New.insertOrUpdateDevAlarmToTable(m_Conn_Pool, RecId, dev_id, dev_ip,
                                            DeviceAlarm_Thread_New.ALM_TYPE_FBS9100_CurrBalance_ID,FIRST_ALM_LEVEL,ALM_DEVICE_DEFAULT_VALUE, true);
                                }
                            }
                            
@@ -774,7 +815,7 @@
    public static FBS9100_DevData searchGatherAlarm(MysqlConnPool conn_pool,FBS9100_DevData dev) {
        FBS9100_DevData alarm = new FBS9100_DevData();
        String sql_str = 
                " SELECT sum(mon_vol) as sum_vol,tb_battinf.BattGroupId,FBSDeviceId,group_curr,group_vol,online_vol " +
                " SELECT sum(mon_vol) as sum_vol,tb_battinf.BattGroupId,FBSDeviceId,any_value(group_curr) as group_curr,any_value(group_vol) as group_vol,any_value(online_vol) as online_vol " +
                " FROM db_battinf.tb_battinf,db_ram_db.tb_batt_rtdata,db_ram_db.tb_batt_rtstate " + 
                " WHERE tb_battinf.BattGroupId = tb_batt_rtdata.BattGroupId " + 
                " AND tb_battinf.BattGroupId = tb_batt_rtstate.BattGroupId " + 
@@ -784,10 +825,11 @@
        boolean isEffective = false;                    //判别当前的告警是否有效
        ResultSet rs = null;
        Sql_Mysql sql = new Sql_Mysql(conn_pool.getConn());
        //System.out.println(sql_str);
        try {
        rs = sql.sqlMysqlQuery(sql_str);
        alarm.isAlarm = false;
        try {
            while(rs.next()) {
            while(null != rs && rs.next()) {
                float group_curr = rs.getFloat("group_curr");
                //if(group_curr < ALM_BTS_CURR_MAX_VALUE) {
                    alarm.dev_id = rs.getInt("FBSDeviceId");
@@ -815,6 +857,51 @@
        return isEffective?alarm:null;
    }
    
    public static FBS9100_DevData check61850DevicePowerOffCurr(MysqlConnPool pool,FBS9100_DevData dev,float currlimit) {
        FBS9100_DevData alarm = new FBS9100_DevData();
        String sql_str =
                " SELECT group_curr,FBSDeviceId,rec_datetime " +
                "FROM "+Sql_Mysql.BattInf_Table+","+Sql_Mysql.BattRtState_Table+"" +
                "WHERE tb_battinf.BattGroupId = tb_batt_rtstate.BattGroupId AND FBSDeviceId = " + dev.dev_id;
        boolean isEffective = false;                    //判别当前的告警是否有效
        ResultSet rs = null;
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        rs = sql.sqlMysqlQuery(sql_str);
        alarm.isAlarm = false;
        int battcount = 0;            //电池组组数
        float currdiff = 0;
        Date rec_datetime = new Date(0,0,0);
        try {
            while(rs.next()) {
                battcount ++;
                float battcurr = rs.getFloat("group_curr");
                currdiff = battcurr - currdiff;
                rec_datetime = rs.getTimestamp("rec_datetime");
            }
            //System.out.println(dev.dev_id+":"+(battcount == 2) +"==="+ (Math.abs(currdiff) > ALM_BTS_Curr_SPACING));
            if(battcount == 2 && Math.abs(currdiff) > ALM_BTS_Curr_SPACING) {
                alarm.isAlarm = true;
                alarm.dev_id = dev.dev_id;
            }
            if(Math.abs(new Date().getTime()-rec_datetime.getTime())/1000<=120) {
                //通讯中断不算有效告警
                isEffective = true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(rs != null) {
                    rs.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            sql.close_con();
        }
        return isEffective?alarm:null;
    }
    public static void main(String[] args) {
        //MysqlConnPool conn_pool = new MysqlConnPool("127.0.0.1", 3360, 100);
        //DeviceAlarm_Thread_New thread = new DeviceAlarm_Thread_New(new AppConfig(), conn_pool);
BattMonitor_FBS9100S_Alarm/src/com/battalarm/FBS9100_DevData.java
@@ -1,12 +1,12 @@
package com.battalarm;
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.Date;
public class FBS9100_DevData {
    public  int dev_id;
    public  String dev_ip;
    public  Timestamp  record_time;
    public  Date  record_time;
    public  long RecId;
    public  int alm_cleared_type;            //告警类型    0:实时告警         1:历史告警       2:取消告警
    
@@ -22,6 +22,9 @@
    public boolean isAlarm;                    //是否包含61850的设备告警
    public String[] alarms_Flag;            //告警状态
    public int dev_last_captest_stop_type;    //上一次核容终止原因
    public int dev_workstate;                //工作状态
    public int dev_onlinevollow;            //在线电压低
    
    public FBS9100_DevData() {
        super();
@@ -44,10 +47,10 @@
    public void setRecId(long recId) {
        RecId = recId;
    }
    public Timestamp getRecord_time() {
    public Date getRecord_time() {
        return record_time;
    }
    public void setRecord_time(Timestamp record_time) {
    public void setRecord_time(Date record_time) {
        this.record_time = record_time;
    }
    public String getAlarms() {
@@ -118,8 +121,18 @@
        this.contiPowerLong = contiPowerLong;
    }
    
    public int getDev_workstate() {
        return dev_workstate;
    }
    public int getDev_onlinevollow() {
        return dev_onlinevollow;
    }
    public void setDev_workstate(int dev_workstate) {
        this.dev_workstate = dev_workstate;
    }
    public void setDev_onlinevollow(int dev_onlinevollow) {
        this.dev_onlinevollow = dev_onlinevollow;
    }
    public int getAlm_cleared_type() {
        return alm_cleared_type;
    }
@@ -150,8 +163,11 @@
                + RecId + ", alm_cleared_type=" + alm_cleared_type + ", alm_vlaue=" + alm_vlaue + ", alm_level="
                + alm_level + ", xuhang_alm_level=" + xuhang_alm_level + ", cutPowerLong=" + cutPowerLong
                + ", contiPowerLong=" + contiPowerLong + ", dev_temp=" + dev_temp + ", alarms=" + alarms + ", isAlarm="
                + isAlarm + ", alarms_Flag=" + Arrays.toString(alarms_Flag) + "]";
                + isAlarm + ", alarms_Flag=" + Arrays.toString(alarms_Flag) + ", dev_last_captest_stop_type="
                + dev_last_captest_stop_type + ", dev_workstate=" + dev_workstate + ", dev_onlinevollow="
                + dev_onlinevollow + "]";
    }
    
    
}
BattMonitor_FBS9100S_Alarm/src/com/version_inf/version_inf.txt
@@ -158,4 +158,8 @@
V2.206 edit at date 2021-01-19 lijun
    1.电池告警中添加漏液电压告警
    
V2.207 edit at date 2021-06-21 lijun
    1.程序启动时取消固定时长等待以及修复告警取消时的超时判断
    
V2.208 edit at date 2021-07-13 lijun
    1.设备告警新增停电机房电流均衡告警
BattMonitor_FBS9100S_Alarm/src/main/main_FBS9100S_Alarm.java
@@ -1,4 +1,5 @@
package main;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;
import java.util.TimeZone;
@@ -28,7 +29,7 @@
    /**************************************************************************/
    /**************************************************************************/
    public final static boolean app_debug = false;
    public final static float m_VersionNum = (float) 2.206;
    public final static float m_VersionNum = (float) 2.208;
    public final static String m_Version = "Welcome To Use FBS9100S Alarm Mornitor V" + m_VersionNum + " RC_20170505";
    /**************************************************************************/
    /**************************************************************************/
@@ -129,7 +130,8 @@
            }
        }
        */        
        //检测数据库连接
        checkingMySQLServerStart();
        //MysqlServer_Port = 5306;
        System.out.println("IP:"+m_AppConfig.getMysqlServerIp()+"port"+MysqlServer_Port);
        
@@ -226,4 +228,40 @@
            }
        }
    }
    public static void checkingMySQLServerStart(){
        int MysqlServer_Port = 3360;
        System.out.println("IP:"+m_AppConfig.getMysqlServerIp()+"\t port:"+MysqlServer_Port);
        //初始化连接池中的各种参数信息        m_AppConfig.getMysqlServerIp()
        GB_MysqlConnPool = new MysqlConnPool(m_AppConfig.getMysqlServerIp(), MysqlServer_Port, 5);
        while(true){
            Connection conn = null;
            try {
                System.out.println(" 开始检测数据库连接 "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
                conn =  GB_MysqlConnPool.getConn();
                if(conn != null){
                    System.out.println("检测数据库连接成功");
                    break;
                }else {
                    //休息1秒重新检测
                    Thread.sleep(1000);
                }
            } catch (Exception e) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e1) {
                    System.err.println(e);
                }
                System.out.println(" MySQL_FBSDEV not Start ... ");
            } finally {
                if(conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        System.err.println(e);
                    }
                }
            }
        }
    }
}