whyclj
2020-09-23 aa8c04269a191e7c4b157b6442b7beb0e064a5b5
2kw添加实时和历史故障检测和存储
3个文件已添加
5个文件已修改
532 ■■■■■ 已修改文件
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/DeviceAlarm.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/DeviceAlarm_Thread.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/DeviceAlarm_Thread_SQL.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/Electric_2MW_alarm.java 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/Electric_inf_2kw.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/Electrical_2KWTask_SQL.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/Electrical_2KW_SocketClient_Thread.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/main/main_ElectricalSystem_MonitorServer_2KW.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/DeviceAlarm.java
New file
@@ -0,0 +1,24 @@
package com.electrical.TwoKW;
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_2KW/src/com/electrical/TwoKW/DeviceAlarm_Thread.java
New file
@@ -0,0 +1,71 @@
package com.electrical.TwoKW;
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_2kw> einfs;
    public List<Electric_2MW_alarm> last_alarms;            //上一次的告警对象
    public DeviceAlarm_Thread(MysqlConnPool pool,List<Electric_inf_2kw> einfs) {
        this.pool = pool;
        this.einfs = einfs;
        last_alarms = new ArrayList<>();
        init();
    }
    public void init() {
        for(int i = 0;i<einfs.size();i++) {
            Electric_2MW_alarm  alarm = new Electric_2MW_alarm(einfs.get(i).electric2KW_id);
            //加载之前的告警记录
            Electrical_2KWTask_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_2KW/src/com/electrical/TwoKW/DeviceAlarm_Thread_SQL.java
New file
@@ -0,0 +1,77 @@
package com.electrical.TwoKW;
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_2MW_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_2MW_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_2MW_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_2MW_alarm
                                    + "    WHERE electric_id = "+delalarm.dev_id+" AND alarm_id = "+delalarm.alarm_id
                                + " )";
            //删除实时告警记录
            String sql_str_del = "DELETE FROM "+Sql_Mysql.Tb_Electric_2MW_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();
        }
    }
}
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/Electric_2MW_alarm.java
@@ -2,6 +2,7 @@
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import com.modbus.data.MyModbusMaster;
import com.modbus.data.MyModbusUtils;
@@ -19,28 +20,130 @@
    public Date  alarm_confirmtime;
    public String  note;
    
    public int 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;
    public int case_transB_overcurr;
    public int case_transC_overcurr;
    public int case_cuurfeedback_lose;
    public int case_trip;
    public int high_vol_switch_off;
    public int emergency_button_pressed;
    public int cabinet_door_protection;
    public int tran_overtmp;
    public int tran_overhightmp_trip;
    public int synchro_cycle_fault;                //机箱同步周期故障
    public int main_cabinet_fault_one;            //机箱1号主柜快熔断
    public int main_cabinet_fault_two;            //机箱2号主柜快熔断
    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_trip;                        //机箱跳闸
    public int high_vol_switch_off;                //高压开关断开
    public int emergency_button_pressed;        //紧急按钮按下
    public int cabinet_door_protection;            //变压器柜门保护
    public int tran_overtmp;                    //变压器超温
    public int tran_overhightmp_trip;            //变压器超高温跳闸
    public boolean isReadOk = false;
    
    public Electric_2MW_alarm(int electric_id) {
        super();
        this.electric_id=electric_id;
    }
    public Electric_2MW_alarm clone() {
        Electric_2MW_alarm alarm = new Electric_2MW_alarm(this.electric_id);
        alarm.synchro_cycle_fault = this.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号主柜快熔断
        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_trip = this.case_trip;                        //机箱跳闸
        alarm.high_vol_switch_off = this.high_vol_switch_off;                //高压开关断开
        alarm.emergency_button_pressed = this.emergency_button_pressed;        //紧急按钮按下
        alarm.cabinet_door_protection = this.cabinet_door_protection;            //变压器柜门保护
        alarm.tran_overtmp = this.tran_overtmp;                    //变压器超温
        alarm.tran_overhightmp_trip = this.tran_overhightmp_trip;            //变压器超高温跳闸
        return alarm;
    }
    /**
     * 根据设备id获取当前
     * @param alarm_id
     * @return
     */
    public String getStrByAlarm_id(int alarm_id) {
        switch(alarm_id) {
            case 109001:return "synchro_cycle_fault";
            case 109002:return "main_cabinet_fault_one";
            case 109003:return "main_cabinet_fault_two";
            case 109004:return "dcover_curr";
            case 109005:return "synchro_lose";
            case 109006:return "dcover_vol";
            case 109007:return "case_pulse_block";
            case 109008:return "case_transA_overcurr";
            case 109009:return "case_transB_overcurr";
            case 109010:return "case_transC_overcurr";
            case 109011:return "case_cuurfeedback_lose";
            case 109012:return "case_trip";
            case 109013:return "high_vol_switch_off";
            case 109014:return "emergency_button_pressed";
            case 109015:return "cabinet_door_protection";
            case 109016:return "tran_overtmp";
            case 109017:return "tran_overhightmp_trip";
        }
        return "";
    }
    /**
     * 根据告警id设置告警状态
     * @param alarm_id
     */
    public void setAlarmStateByAlarm_id(int alarm_id) {
        switch(alarm_id) {
            case 109001:this.synchro_cycle_fault = 1;
            case 109002:this.main_cabinet_fault_one = 1;
            case 109003:this.main_cabinet_fault_two = 1;
            case 109004:this.dcover_curr = 1;
            case 109005:this.synchro_lose = 1;
            case 109006:this.dcover_vol = 1;
            case 109007:this.case_pulse_block = 1;
            case 109008:this.case_transA_overcurr = 1;
            case 109009:this.case_transB_overcurr = 1;
            case 109010:this.case_transC_overcurr = 1;
            case 109011:this.case_cuurfeedback_lose = 1;
            case 109012:this.case_trip = 1;
            case 109013:this.high_vol_switch_off = 1;
            case 109014:this.emergency_button_pressed = 1;
            case 109015:this.cabinet_door_protection = 1;
            case 109016:this.tran_overtmp = 1;
            case 109017:this.tran_overhightmp_trip = 1;
        }
    }
    public int getAlarmIdByStr(String str) {
        switch(str) {
            case "synchro_cycle_fault":return 109001;
            case "main_cabinet_fault_one":return 109002;
            case "main_cabinet_fault_two":return 109003;
            case "dcover_curr":return 109004;
            case "synchro_lose":return 109005;
            case "dcover_vol":return 109006;
            case "case_pulse_block":return 109007;
            case "case_transA_overcurr":return 109008;
            case "case_transB_overcurr":return 109009;
            case "case_transC_overcurr":return 109010;
            case "case_cuurfeedback_lose":return 109011;
            case "case_trip":return 109012;
            case "high_vol_switch_off":return 109013;
            case "emergency_button_pressed":return 109014;
            case "cabinet_door_protection":return 109015;
            case "tran_overtmp":return 109016;
            case "tran_overhightmp_trip":return 109017;
        }
        return 0;
    }
    public int getNum() {
        return num;
    }
@@ -102,6 +205,9 @@
                + alarm_endtime + ", alarm_confirm=" + alarm_confirm + ", alarm_confirmtime=" + alarm_confirmtime
                + ", note=" + note + "]";
    }
    //读取2MW故障信息
    public BatchRead<Integer> createBatchRead(MyModbusMaster master) {
        BatchRead<Integer> batch = new BatchRead<Integer>();        
@@ -148,5 +254,180 @@
        }
    }
    
    public void checkAlarm(Electric_2MW_alarm last_alarms, List<DeviceAlarm> addalarm,
            List<DeviceAlarm> delalarm) {
        if(this.synchro_cycle_fault > last_alarms.synchro_cycle_fault) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("synchro_cycle_fault"));
            addalarm.add(alarm);
        }else if(this.synchro_cycle_fault < last_alarms.synchro_cycle_fault) {
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("synchro_cycle_fault"));
            delalarm.add(alarm);
        }
        if(this.main_cabinet_fault_one > last_alarms.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_alarms.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_alarms.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_alarms.main_cabinet_fault_two){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("main_cabinet_fault_two"));
            delalarm.add(alarm);
        }
        if(this.dcover_curr > last_alarms.dcover_curr) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("dcover_curr"));
            addalarm.add(alarm);
        }else if(this.dcover_curr < last_alarms.dcover_curr){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("dcover_curr"));
            delalarm.add(alarm);
        }
        if(this.synchro_lose > last_alarms.synchro_lose) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("synchro_lose"));
            addalarm.add(alarm);
        }else if(this.synchro_lose < last_alarms.synchro_lose){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("synchro_lose"));
            delalarm.add(alarm);
        }
        if(this.dcover_vol > last_alarms.dcover_vol) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("dcover_vol"));
            addalarm.add(alarm);
        }else if(this.dcover_vol < last_alarms.dcover_vol){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("dcover_vol"));
            delalarm.add(alarm);
        }
        if(this.case_pulse_block > last_alarms.case_pulse_block) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_pulse_block"));
            addalarm.add(alarm);
        }else if(this.case_pulse_block < last_alarms.case_pulse_block){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_pulse_block"));
            delalarm.add(alarm);
        }
        if(this.case_transA_overcurr > last_alarms.case_transA_overcurr) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_transA_overcurr"));
            addalarm.add(alarm);
        }else if(this.case_transA_overcurr < last_alarms.case_transA_overcurr){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_transA_overcurr"));
            delalarm.add(alarm);
        }
        if(this.case_transB_overcurr > last_alarms.case_transB_overcurr) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_transB_overcurr"));
            addalarm.add(alarm);
        }else if(this.case_transB_overcurr < last_alarms.case_transB_overcurr){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_transB_overcurr"));
            delalarm.add(alarm);
        }
        if(this.case_transC_overcurr > last_alarms.case_transC_overcurr) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_transC_overcurr"));
            addalarm.add(alarm);
        }else if(this.case_transC_overcurr < last_alarms.case_transC_overcurr){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_transC_overcurr"));
            delalarm.add(alarm);
        }
        if(this.case_cuurfeedback_lose > last_alarms.case_cuurfeedback_lose) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_cuurfeedback_lose"));
            addalarm.add(alarm);
        }else if(this.case_cuurfeedback_lose < last_alarms.case_cuurfeedback_lose){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_cuurfeedback_lose"));
            delalarm.add(alarm);
        }
        if(this.case_trip > last_alarms.case_trip) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_trip"));
            addalarm.add(alarm);
        }else if(this.case_trip < last_alarms.case_trip){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("case_trip"));
            delalarm.add(alarm);
        }
        if(this.high_vol_switch_off > last_alarms.high_vol_switch_off) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("high_vol_switch_off"));
            addalarm.add(alarm);
        }else if(this.high_vol_switch_off < last_alarms.high_vol_switch_off){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("high_vol_switch_off"));
            delalarm.add(alarm);
        }
        if(this.emergency_button_pressed > last_alarms.emergency_button_pressed) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("emergency_button_pressed"));
            addalarm.add(alarm);
        }else if(this.emergency_button_pressed < last_alarms.emergency_button_pressed){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("emergency_button_pressed"));
            delalarm.add(alarm);
        }
        if(this.cabinet_door_protection > last_alarms.cabinet_door_protection) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("cabinet_door_protection"));
            addalarm.add(alarm);
        }else if(this.cabinet_door_protection < last_alarms.cabinet_door_protection){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("cabinet_door_protection"));
            delalarm.add(alarm);
        }
        if(this.tran_overtmp > last_alarms.tran_overtmp) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("tran_overtmp"));
            addalarm.add(alarm);
        }else if(this.tran_overtmp < last_alarms.tran_overtmp){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("tran_overtmp"));
            delalarm.add(alarm);
        }
        if(this.tran_overhightmp_trip > last_alarms.tran_overhightmp_trip) {
            //出现新的告警记录
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("tran_overhightmp_trip"));
            addalarm.add(alarm);
        }else if(this.tran_overhightmp_trip < last_alarms.tran_overhightmp_trip){
            //告警消失
            DeviceAlarm alarm = new DeviceAlarm(this.electric_id, getAlarmIdByStr("tran_overhightmp_trip"));
            delalarm.add(alarm);
        }
    }
    
}
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/Electric_inf_2kw.java
@@ -13,6 +13,7 @@
    public Electric_State_2kw state;
    public Electric_Rt_2kw rt;
    public Electric_Control_Single_2kw control;
    public Electric_2MW_alarm alarm;
    
    public int getNum() {
        return num;
@@ -28,6 +29,7 @@
        state = new Electric_State_2kw(electric2kw_id);
        rt = new Electric_Rt_2kw(electric2kw_id);
        control = new Electric_Control_Single_2kw(electric2kw_id);
        alarm = new Electric_2MW_alarm(electric2kw_id);
    }
    public String getElectric2KW_ip() {
        return electric2KW_ip;
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/Electrical_2KWTask_SQL.java
@@ -793,6 +793,35 @@
            sql.close_con();
        }
    }
    /**
     *    查询当前设备上一次的历史告警记录表
     * @param pool
     * @param alarm
     */
    public static void searchLastDeviceAlarm(MysqlConnPool pool,Electric_2MW_alarm alarm) {
        String sql_str = "SELECT * FROM "+Sql_Mysql.Tb_Electric_2MW_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_2KW/src/com/electrical/TwoKW/Electrical_2KW_SocketClient_Thread.java
@@ -29,6 +29,7 @@
        state = einf.state;
        ert = einf.rt;
        econ = einf.control;
        eAlarm = einf.alarm;
        
        /*
        state = new Electric_State_2kw(einf.electric2KW_id);
@@ -37,7 +38,7 @@
        */
        master = new MyModbusMaster(einf.getElectric2KW_ip(), MyModbusMaster.SLAVEID_DEFAULT);
        listAlarm=new ArrayList<Electric_2MW_alarm>();
        eAlarm=new Electric_2MW_alarm(einf.electric2KW_id);
        //eAlarm=new Electric_2MW_alarm(einf.electric2KW_id);
    }
        
@@ -207,6 +208,7 @@
                if(runCount %4 == 0) {
                    //*************************** 读取2MW信息故障 ******************************//*
                    readMutilEleAlarmData(master, eAlarm);
                    eAlarm.isReadOk = true;
                    Electrical_2KWTask_SQL.insertOrUpdateEle_alarmTable(conn_pool, listAlarm);
                }
                
@@ -239,7 +241,7 @@
        BatchRead<Integer> batch = eAlarm.createBatchRead(master);        
        BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
        eAlarm.putBatchResult(res);
        if(res!=null) {
        /*if(res!=null) {
            if(eAlarm.synchro_cycle_fault>0) {
                Electric_2MW_alarm alarm=new Electric_2MW_alarm(eAlarm.electric_id);
                alarm.setAlarm_id(119001);
@@ -393,7 +395,7 @@
                alarm.setAlarm_confirmtime(new Date());
                listAlarm.add(alarm);
            }
        }
        }*/
    }
ElectricalSystem_MonitorServer_2KW/src/main/main_ElectricalSystem_MonitorServer_2KW.java
@@ -8,6 +8,7 @@
import com.base.Com;
import com.config.AppConfig;
import com.config.AppParam;
import com.electrical.TwoKW.DeviceAlarm_Thread;
import com.electrical.TwoKW.Electric_2Kw_ServerSocket_Thread;
import com.electrical.TwoKW.Electric_2Kw_TestData_Thread;
import com.electrical.TwoKW.Electric_inf_2kw;
@@ -71,6 +72,11 @@
            new Thread(record).start();
        }
        
        {
            DeviceAlarm_Thread alarms = new DeviceAlarm_Thread(GB_MysqlConnPool, einfs);
            new Thread(alarms).start();
        }
        while(true) {
            try {        
                Thread.sleep(5000);