whyclj
2020-09-23 3ba028aecace528eb29b48cdbea4b2115a6e1532
4kw告警检测
3个文件已添加
4个文件已修改
439 ■■■■■ 已修改文件
ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/DeviceAlarm.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/DeviceAlarm_Thread.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/DeviceAlarm_Thread_SQL.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/Electric_alarm.java 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/Electric_inf.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/Electrical_4KW_SocketClient_Thread.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_4KW/src/main/main_ElectricalSystem_MonitorServer_4KW.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/DeviceAlarm.java
New file
@@ -0,0 +1,24 @@
package com.electrical.FourKW;
import java.util.Date;
public class DeviceAlarm {
    public int   dev_id;                    //设备id
    public int   alarm_id;                    //告警id
    public Date  alarm_starttime;            //告警开始时间
    public Date   alarm_endtime;            //告警结束时间
    public int    alarm_confirm;               //告警确认
    public Date  alarm_confirmtime;            //告警确认时间
    public String  note;
    public DeviceAlarm(int dev_id,int alarm_id) {
        Date time = new Date();
        this.dev_id = dev_id;
        this.alarm_id = alarm_id;
        this.alarm_starttime = time;
        this.alarm_endtime = time;
        this.alarm_confirmtime = time;
    }
}
ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/DeviceAlarm_Thread.java
New file
@@ -0,0 +1,71 @@
package com.electrical.FourKW;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.base.Com;
import com.sql.MysqlConnPool;
public class DeviceAlarm_Thread implements Runnable{
    public MysqlConnPool pool;
    public List<Electric_inf> einfs;
    public List<Electric_alarm> last_alarms;            //上一次的告警对象
    public DeviceAlarm_Thread(MysqlConnPool pool,List<Electric_inf> einfs) {
        this.pool = pool;
        this.einfs = einfs;
        last_alarms = new ArrayList<>();
        init();
    }
    public void init() {
        for(int i = 0;i<einfs.size();i++) {
            Electric_alarm  alarm = new Electric_alarm(einfs.get(i).electric_id);
            //加载之前的告警记录
            DeviceAlarm_Thread_SQL.searchLastDeviceAlarm(pool, alarm);
            last_alarms.add(alarm);
        }
    }
    @Override
    public void run() {
        System.out.println("DeviceAlarm_Thread Start at "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
        List<DeviceAlarm> addalarm = new ArrayList<DeviceAlarm>();            //新出现的告警
        List<DeviceAlarm> delalarm = new ArrayList<DeviceAlarm>();            //消失的告警
        while(true) {
            try {
                for(int i = 0;i < einfs.size();i ++) {
                    //读取过当前设备的告警才检测告警
                    if(einfs.get(i).alarm.isReadOk) {
                        einfs.get(i).alarm.checkAlarm(last_alarms.get(i),addalarm,delalarm);
                        last_alarms.set(i, einfs.get(i).alarm.clone());
                    }
                }
                if(addalarm.size() > 0) {
                    //新出现的告警记录
                    DeviceAlarm_Thread_SQL.insertNewAlarm(pool,addalarm);
                    addalarm.clear();
                }
                if(delalarm.size() > 0) {
                    //取消的告警记录
                    for(int k = 0;k<delalarm.size();k++) {
                        DeviceAlarm_Thread_SQL.makeRealToHistory(pool,delalarm.get(k));
                    }
                    delalarm.clear();
                }
                Thread.sleep(1000);
            } catch (Exception e) {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
                e.printStackTrace();
            }
        }
    }
}
ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/DeviceAlarm_Thread_SQL.java
New file
@@ -0,0 +1,105 @@
package com.electrical.FourKW;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.base.Com;
import com.sql.MysqlConnPool;
import com.sql.Sql_Mysql;
public class DeviceAlarm_Thread_SQL {
    /**
     * 插入新的告警记录
     * @param pool
     * @param addalarm
     */
    public static void insertNewAlarm(MysqlConnPool pool, List<DeviceAlarm> addalarm) {
        String sql_str = "INSERT INTO "+Sql_Mysql.Tb_Electric_alarm+"(electric_id,alarm_id,alarm_starttime,alarm_endtime,alarm_confirmtime) VALUES ";
        for(int i=0;i<addalarm.size();i++) {
            DeviceAlarm alarm = addalarm.get(i);
            if(i > 0) {
                sql_str += ",";
            }
            sql_str += "("
                    + alarm.dev_id +","
                    + alarm.alarm_id + ",'"
                    + Com.getDateTimeFormat(alarm.alarm_starttime, Com.DTF_YMDhms) +"','"
                    + Com.getDateTimeFormat(alarm.alarm_endtime, Com.DTF_YMDhms) +"','"
                    + Com.getDateTimeFormat(alarm.alarm_confirmtime, Com.DTF_YMDhms) +"'"
                    + ")";
        }
        Sql_Mysql sql = null;
        try {
            sql = new Sql_Mysql(pool.getConn());
            sql.sqlMysqlExecute(sql_str);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            sql.close_con();
        }
    }
    /**
     * 将实时告警变成历史告警记录
     * @param pool
     * @param delalarm
     */
    public static void makeRealToHistory(MysqlConnPool pool, DeviceAlarm delalarm) {
        String sql_str_upd = "UPDATE "+Sql_Mysql.Tb_Electric_alarm+" SET alarm_endtime = '"+Com.getDateTimeFormat(delalarm.alarm_endtime, Com.DTF_YMDhms)+"'" +
                " WHERE electric_id = "+delalarm.dev_id+" AND alarm_id = " +delalarm.alarm_id;            //更新当前告警的结束时间
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            sql.sqlMysqlExecute(sql_str_upd);
            //插入历史告警
            String sql_str_ins = "INSERT INTO "+Sql_Mysql.Tb_Electric_alarm_history+"(electric_id,alarm_id,alarm_starttime,alarm_endtime,alarm_confirm,alarm_confirmtime) "
                                + "    (SELECT electric_id,alarm_id,alarm_starttime,alarm_endtime,alarm_confirm,alarm_confirmtime "
                                    + "    FROM "+Sql_Mysql.Tb_Electric_alarm
                                    + "    WHERE electric_id = "+delalarm.dev_id+" AND alarm_id = "+delalarm.alarm_id
                                + " )";
            //删除实时告警记录
            String sql_str_del = "DELETE FROM "+Sql_Mysql.Tb_Electric_alarm+" WHERE electric_id = "+delalarm.dev_id+" AND alarm_id = "+delalarm.alarm_id;
            ArrayList<String> sql_strs = new ArrayList<String>();
            sql_strs.add(sql_str_ins);
            sql_strs.add(sql_str_del);
            sql.makeManualCommit(sql_strs);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            sql.close_con();
        }
    }
    /**
     *    查询当前设备上一次的历史告警记录表
     * @param pool
     * @param alarm
     */
    public static void searchLastDeviceAlarm(MysqlConnPool pool,Electric_alarm alarm) {
        String sql_str = "SELECT * FROM "+Sql_Mysql.Tb_Electric_alarm+" WHERE electric_id = " + alarm.electric_id;
        ResultSet res = null;
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            res = sql.sqlMysqlQuery(sql_str);
            while(res.next()) {
                //加载当前设备之前的实时告警记录
                alarm.setAlarmStateByAlarm_id(res.getInt("alarm_id"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if(res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            sql.close_con();
        }
    }
}
ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/Electric_alarm.java
@@ -1,13 +1,12 @@
package com.electrical.FourKW;
import java.util.Date;
import java.util.List;
import com.base.Com;
import com.modbus.data.MyModbusMaster;
import com.modbus.data.MyModbusUtils;
import com.serotonin.modbus4j.BatchRead;
import com.serotonin.modbus4j.BatchResults;
import com.serotonin.modbus4j.code.DataType;
public class Electric_alarm {
      public int num ;//'主键',
@@ -19,22 +18,41 @@
      public Date alarm_confirmtime ;//'告警确认时间',
      public String note ;// '',
      
      public int dcover_curr;
      public int synchro_lose;
      public int dcover_vol;
      public int case_pulse_block;
      public int case_transA_overcurr;
      public int case_transB_overcurr;
      public int case_transC_overcurr;
      public int case_cuurfeedback_lose;
      public int case_synchro_cycle_fault;
      public int main_cabinet_fault_one;
      public int main_cabinet_fault_two;
      public int dcover_curr;                    //直流过流
      public int synchro_lose;                    //同步丢失
      public int dcover_vol;                    //直流过压
      public int case_pulse_block;                //机箱脉冲封锁
      public int case_transA_overcurr;            //机箱变压器A相过流
      public int case_transB_overcurr;            //机箱变压器B相过流
      public int case_transC_overcurr;            //机箱变压器C相过流
      public int case_cuurfeedback_lose;        //机箱直流反馈丢失
      public int case_synchro_cycle_fault;        //机箱同步周期故障
      public int main_cabinet_fault_one;        //1号主柜快熔故障
      public int main_cabinet_fault_two;        //2号主柜快熔故障
      public boolean isReadOk = false;            //是否更新过告警状态
      
    public Electric_alarm(int electric_id) {
        super();
        this.electric_id=electric_id;
    }
    public Electric_alarm clone() {
        Electric_alarm alarm = new Electric_alarm(this.electric_id);
        alarm.dcover_curr = this.dcover_curr;                            //直流过流
        alarm.synchro_lose = this.synchro_lose;                            //同步丢失
        alarm.dcover_vol = this.dcover_vol;                                //直流过压
        alarm.case_pulse_block = this.case_pulse_block;                    //机箱脉冲封锁
        alarm.case_transA_overcurr = this.case_transA_overcurr;            //机箱变压器A相过流
        alarm.case_transB_overcurr = this.case_transB_overcurr;            //机箱变压器B相过流
        alarm.case_transC_overcurr = this.case_transC_overcurr;            //机箱变压器C相过流
        alarm.case_cuurfeedback_lose = this.case_cuurfeedback_lose;        //机箱直流反馈丢失
        alarm.case_synchro_cycle_fault = this.case_synchro_cycle_fault;    //机箱同步周期故障
        alarm.main_cabinet_fault_one = this.main_cabinet_fault_one;        //1号主柜快熔故障
        alarm.main_cabinet_fault_two = this.main_cabinet_fault_two;        //2号主柜快熔故障
        return alarm;
    }
    public int getNum() {
        return num;
    }
@@ -130,5 +148,164 @@
            this.main_cabinet_fault_one = MyModbusUtils.readBooleanToInt(res.getValue(9));        //1号主柜快熔故障            
            this.main_cabinet_fault_two = MyModbusUtils.readBooleanToInt(res.getValue(10));        //2号主柜快熔故障
        }
    }
    /**
     * 根据当前的设备id设置当前告警值
     * @param alarm_id
     */
    public void setAlarmStateByAlarm_id(int alarm_id) {
        switch(alarm_id) {
            case 119001:this.dcover_curr = 1;break;
            case 119002:this.synchro_lose = 1;break;
            case 119003:this.dcover_vol = 1;break;
            case 119004:this.case_pulse_block = 1;break;
            case 119005:this.case_transA_overcurr = 1;break;
            case 119006:this.case_transB_overcurr = 1;break;
            case 119007:this.case_transC_overcurr = 1;break;
            case 119008:this.case_cuurfeedback_lose = 1;break;
            case 119009:this.case_synchro_cycle_fault = 1;break;
            case 119010:this.main_cabinet_fault_one = 1;break;
            case 119011:this.main_cabinet_fault_two = 1;break;
        }
    }
    /**
     * 根据当前的设备id设置当前告警值
     * @param alarm_id
     */
    public int getAlarmIdByStr(String str) {
        switch(str) {
            case "dcover_curr":return 119001;
            case "synchro_lose":return 119002;
            case "dcover_vol":return 119003;
            case "case_pulse_block":return 119004;
            case "case_transA_overcurr":return 119005;
            case "case_transB_overcurr":return 119006;
            case "case_transC_overcurr":return 119007;
            case "case_cuurfeedback_lose":return 119008;
            case "case_synchro_cycle_fault":return 119009;
            case "main_cabinet_fault_one":return 119010;
            case "main_cabinet_fault_two":return 119011;
        }
        return 0;
    }
    /**
     * 检测告警触发和消失
     * @param electric_alarm
     * @param addalarm
     * @param delalarm
     */
    public void checkAlarm(Electric_alarm last_alarm, List<DeviceAlarm> addalarm, List<DeviceAlarm> delalarm) {
        if(this.dcover_curr > last_alarm.dcover_curr) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("dcover_curr"));
            addalarm.add(alarm);
        }else if(this.dcover_curr < last_alarm.dcover_curr) {
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("dcover_curr"));
            delalarm.add(alarm);
        }
        if(this.synchro_lose > last_alarm.synchro_lose) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("synchro_lose"));
            addalarm.add(alarm);
        }else if(this.synchro_lose < last_alarm.synchro_lose) {
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("synchro_lose"));
            delalarm.add(alarm);
        }
        if(this.dcover_vol > last_alarm.dcover_vol) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("dcover_vol"));
            addalarm.add(alarm);
        }else if(this.dcover_vol < last_alarm.dcover_vol) {
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("dcover_vol"));
            delalarm.add(alarm);
        }
        if(this.case_pulse_block > last_alarm.case_pulse_block) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_pulse_block"));
            addalarm.add(alarm);
        }else if(this.case_pulse_block < last_alarm.case_pulse_block) {
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_pulse_block"));
            delalarm.add(alarm);
        }
        if(this.case_transA_overcurr > last_alarm.case_transA_overcurr) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_transA_overcurr"));
            addalarm.add(alarm);
        }else if(this.case_transA_overcurr < last_alarm.case_transA_overcurr) {
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_transA_overcurr"));
            delalarm.add(alarm);
        }
        if(this.case_transB_overcurr > last_alarm.case_transB_overcurr) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_transB_overcurr"));
            addalarm.add(alarm);
        }else if(this.case_transB_overcurr < last_alarm.case_transB_overcurr) {
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_transB_overcurr"));
            delalarm.add(alarm);
        }
        if(this.case_transC_overcurr > last_alarm.case_transC_overcurr) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_transC_overcurr"));
            addalarm.add(alarm);
        }else if(this.case_transC_overcurr < last_alarm.case_transC_overcurr) {
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_transC_overcurr"));
            delalarm.add(alarm);
        }
        if(this.case_cuurfeedback_lose > last_alarm.case_cuurfeedback_lose) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_cuurfeedback_lose"));
            addalarm.add(alarm);
        }else if(this.case_cuurfeedback_lose < last_alarm.case_cuurfeedback_lose) {
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_cuurfeedback_lose"));
            delalarm.add(alarm);
        }
        if(this.case_synchro_cycle_fault > last_alarm.case_synchro_cycle_fault) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_synchro_cycle_fault"));
            addalarm.add(alarm);
        }else if(this.case_synchro_cycle_fault < last_alarm.case_synchro_cycle_fault) {
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_synchro_cycle_fault"));
            delalarm.add(alarm);
        }
        if(this.main_cabinet_fault_one > last_alarm.main_cabinet_fault_one) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("main_cabinet_fault_one"));
            addalarm.add(alarm);
        }else if(this.main_cabinet_fault_one < last_alarm.main_cabinet_fault_one) {
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("main_cabinet_fault_one"));
            delalarm.add(alarm);
        }
        if(this.main_cabinet_fault_two > last_alarm.main_cabinet_fault_two) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("main_cabinet_fault_two"));
            addalarm.add(alarm);
        }else if(this.main_cabinet_fault_two < last_alarm.main_cabinet_fault_two) {
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("main_cabinet_fault_two"));
            delalarm.add(alarm);
        }
    } 
}
ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/Electric_inf.java
@@ -13,6 +13,7 @@
    public Electric_State state;
    public Electric_Control_Single control;
    public Electric_Control_Single control_joint;        //联动控制
    public Electric_alarm alarm;
    
    public Electric_inf(int electric_id) {
        this.electric_id = electric_id;
@@ -20,6 +21,7 @@
        this.state = new Electric_State(electric_id);
        this.control = new Electric_Control_Single(electric_id);
        this.control_joint = new Electric_Control_Single(electric_id);
        this.alarm = new Electric_alarm(electric_id);
    }
    
    public int getElectric_id() {
ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/Electrical_4KW_SocketClient_Thread.java
@@ -35,13 +35,22 @@
        this.conn_pool = conn_pool;
        this.einf = einf;
        
        ert = new Electric_Rt(einf.getElectric_id());
        estate = new Electric_State(einf.getElectric_id());
        ecs = new Electric_Control_Single(einf.getElectric_id());
        eAlarm=new Electric_alarm(einf.getElectric_id());
        listAlarm=new ArrayList<Electric_alarm>();
        master = new MyModbusMaster(einf.getElectric_ip(), MyModbusMaster.SLAVEID_DEFAULT);
        ert = einf.rt;
        estate = einf.state;
        eAlarm = einf.alarm;
        /*
            ert = new Electric_Rt(einf.getElectric_id());
            estate = new Electric_State(einf.getElectric_id());
            eAlarm=new Electric_alarm(einf.getElectric_id());
         */
        econn=new Electric_control_conn(einf.electric_id);
        ecs = new Electric_Control_Single(einf.getElectric_id());
        listAlarm=new ArrayList<Electric_alarm>();
        master = new MyModbusMaster(einf.getElectric_ip(), MyModbusMaster.SLAVEID_DEFAULT);
    }
        
@@ -91,7 +100,7 @@
                    //*************************** 读取故障状态信息 ******************************//*
                    //Date start = new Date();                    
                    readMutilElectricalAlarmData(master,eAlarm);
                    Electrical_Task_SQL.insertOrUpdateElectrical_alarmTable(conn_pool, listAlarm);
                    //Electrical_Task_SQL.insertOrUpdateElectrical_alarmTable(conn_pool, listAlarm);
                    //Date end = new Date();
                    //System.out.println((end.getTime()-start.getTime())/1000);
                }
@@ -486,8 +495,9 @@
        BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
        eAlarm.putBatchResult(res);
        
        eAlarm.isReadOk = true;
        //筛选告警信息
        if(res != null) {
        /*if(res != null) {
            if(eAlarm.dcover_curr>0) {
                Electric_alarm alarm=new Electric_alarm(eAlarm.electric_id);
                alarm.setAlarm_id(119001);
@@ -589,7 +599,7 @@
                alarm.setAlarm_confirmtime(new Date());
                listAlarm.add(alarm);
            }    
        }
        }*/
    }
    
    /**
ElectricalSystem_MonitorServer_4KW/src/main/main_ElectricalSystem_MonitorServer_4KW.java
@@ -8,6 +8,7 @@
import com.base.Com;
import com.config.AppConfig;
import com.config.AppParam;
import com.electrical.FourKW.DeviceAlarm_Thread;
import com.electrical.FourKW.Electric_4KW_HistoryData_Thread;
import com.electrical.FourKW.Electric_4Kw_ServerSocket_Thread;
import com.electrical.FourKW.Electric_All_ServerSocket_Thread;
@@ -72,6 +73,11 @@
        }
        
        
        {
            DeviceAlarm_Thread alm_thread = new DeviceAlarm_Thread(GB_MysqlConnPool, einfs);
            new Thread(alm_thread).start();
        }
        //System.out.println("PLC_ip:"+PLC_ip);
        //读取4套电源总信息和开关信息//读取每套电源系统的信息
        /*Electric_All_ServerSocket_Thread serverALL = new Electric_All_ServerSocket_Thread(GB_MysqlConnPool,PLC_ip);