whyclj
2020-08-03 9b58283617d36b1a70c7ec94dc18028f6138d830
添加告警记录
3个文件已添加
5个文件已修改
415 ■■■■■ 已修改文件
Motor_MonitorServer/src/com/motor/alarm/Motor_Alarm.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/motor/alarm/Motor_Alarm_Thread.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/motor/alarm/Motor_Alarm_Thread_SQL.java 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/motor/conn/Motor_SocketClient_Thread.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/motor/conn/Motor_Task_SQL.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/motor/data/Motor_inf.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/sql/Sql_Mysql.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/main/main_MonitorServer_Motor.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/motor/alarm/Motor_Alarm.java
New file
@@ -0,0 +1,120 @@
package com.motor.alarm;
import java.util.Date;
public class Motor_Alarm {
    public static final int ALARM_TYPE_NULL = 0;        //不需要更新的告警
    public static final int ALARM_TYPE_ADD = 1;            //新添加的告警
    public static final int ALARM_TYPE_DEL = 2;            //告警消失的告警
    public int alarm_id;
    public int motor_id;                            //电机id
    public int alarm_state;                            //告警状态
    public Date alarm_starttime;                    //告警开始时间
    public Date alarm_endtime;                        //告警结束时间
    public int alarm_confirm;                        //告警是否确认0:无确认     1:已确认
    public Date alarm_confirmtime;                    //告警确认时间
    public int alarm_num;                            //告警编号
    public String note;
    public int alarm_type;            //告警类型  0:不需要更新的告警    1:需要新添加的告警    2:需要更新的历史告警
    public Motor_Alarm(int alarm_id,int motor_id,int alarm_num) {
        this.alarm_id = alarm_id;
        this.motor_id = motor_id;
        this.alarm_num = alarm_num;
        this.alarm_starttime = new Date();
        this.alarm_endtime = new Date();
        this.alarm_confirmtime = new Date();
    }
    public void clearAlarmType() {
        this.alarm_type = ALARM_TYPE_NULL;
    }
    /**
     *     检测当前告警
     * @param alarm_state
     */
    public void checkAlarm(int alarm_state) {
        int last_state = this.alarm_state;
        if(alarm_state > last_state) {
            //新增告警
            alarm_type = ALARM_TYPE_ADD;
            alarm_starttime = new Date();
            alarm_endtime = new Date();
        }else if(alarm_state < last_state) {
            //消失的告警记录
            alarm_type = ALARM_TYPE_DEL;
            alarm_endtime = new Date();
        }
        this.alarm_state = alarm_state;
    }
    public int getAlarm_id() {
        return alarm_id;
    }
    public Date getAlarm_starttime() {
        return alarm_starttime;
    }
    public Date getAlarm_endtime() {
        return alarm_endtime;
    }
    public int getAlarm_confirm() {
        return alarm_confirm;
    }
    public Date getAlarm_confirmtime() {
        return alarm_confirmtime;
    }
    public int getAlarm_num() {
        return alarm_num;
    }
    public String getNote() {
        return note;
    }
    public void setAlarm_id(int alarm_id) {
        this.alarm_id = alarm_id;
    }
    public void setAlarm_starttime(Date alarm_starttime) {
        this.alarm_starttime = alarm_starttime;
    }
    public void setAlarm_endtime(Date alarm_endtime) {
        this.alarm_endtime = alarm_endtime;
    }
    public void setAlarm_confirm(int alarm_confirm) {
        this.alarm_confirm = alarm_confirm;
    }
    public void setAlarm_confirmtime(Date alarm_confirmtime) {
        this.alarm_confirmtime = alarm_confirmtime;
    }
    public void setAlarm_num(int alarm_num) {
        this.alarm_num = alarm_num;
    }
    public void setNote(String note) {
        this.note = note;
    }
    public int getMotor_id() {
        return motor_id;
    }
    public int getAlarm_state() {
        return alarm_state;
    }
    public int getAlarm_type() {
        return alarm_type;
    }
    public void setMotor_id(int motor_id) {
        this.motor_id = motor_id;
    }
    public void setAlarm_state(int alarm_state) {
        this.alarm_state = alarm_state;
    }
    public void setAlarm_type(int alarm_type) {
        this.alarm_type = alarm_type;
    }
}
Motor_MonitorServer/src/com/motor/alarm/Motor_Alarm_Thread.java
New file
@@ -0,0 +1,68 @@
package com.motor.alarm;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.base.Com;
import com.motor.data.Motor_inf;
import com.sql.MysqlConnPool;
public class Motor_Alarm_Thread implements Runnable{
    public MysqlConnPool conn_pool;
    public List<Motor_inf> motors;
    public Motor_Alarm_Thread(MysqlConnPool conn_pool,List<Motor_inf> motors) {
        this.conn_pool = conn_pool;
        this.motors = motors;
    }
    @Override
    public void run() {
        System.out.println("Motor_Alarm_Thread Start at " + Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
        //初始化启动之前的告警记录
        Motor_Alarm_Thread_SQL.initLastDevAlarm(conn_pool, motors);
        List<Motor_Alarm> clearalm = new ArrayList<Motor_Alarm>();        //新增告警记录
        List<Motor_Alarm> addalm = new ArrayList<Motor_Alarm>();        //删除告警记录
        while(true) {
            try {
                for(int i=0;i<motors.size();i++) {
                    for(int k =0;k<motors.get(i).alarms.size();k++) {
                        checkAlarmData(motors.get(i).alarms.get(k),addalm,clearalm);
                    }
                }
                //添加新的告警记录
                Motor_Alarm_Thread_SQL.insertNewAlarm(conn_pool,addalm);
                addalm.clear();
                //删除已消失的实时告警
                Motor_Alarm_Thread_SQL.AlarmDisappear(conn_pool, clearalm);
                clearalm.clear();
                Thread.sleep(800);
            } catch (Exception e) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
                e.printStackTrace();
            }
        }
    }
    /**
     *     检测告警记录
     * @param motor_Alarm
     * @param addalm        新增告警
     * @param clearalm        删除告警
     */
    private void checkAlarmData(Motor_Alarm alarm, List<Motor_Alarm> addalm, List<Motor_Alarm> clearalm) {
        if(alarm.alarm_type == Motor_Alarm.ALARM_TYPE_ADD) {
            addalm.add(alarm);
        }else if(alarm.alarm_type == Motor_Alarm.ALARM_TYPE_DEL) {
            clearalm.add(alarm);
        }
    }
}
Motor_MonitorServer/src/com/motor/alarm/Motor_Alarm_Thread_SQL.java
New file
@@ -0,0 +1,172 @@
package com.motor.alarm;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import com.base.Com;
import com.motor.data.Motor_inf;
import com.sql.MysqlConnPool;
import com.sql.Sql_Mysql;
public class Motor_Alarm_Thread_SQL {
    public static void init(MysqlConnPool pool) {
        //创建设备实时告警表
        createDevalaram_RTTable(pool);
        //创建设备历史告警记录表
        createDevalaram_HistoryTable(pool);
    }
    /**
     *     创建实时告警记录表
     * @param pool
     */
    public static void createDevalaram_RTTable(MysqlConnPool pool) {
        String sql_str = "CREATE TABLE "+Sql_Mysql.Tb_Devalarm_Rt+" (" +
                "  num bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'," +
                "  motor_id int(11) NOT NULL DEFAULT '2001' COMMENT '设备id'," +
                "  alarm_id int(11) NOT NULL DEFAULT '10001' COMMENT '告警id'," +
                "  alarm_starttime datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '告警开始时间'," +
                "  alarm_endtime datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '告警结束时间'," +
                "  alarm_confirm int(11) NOT NULL DEFAULT '0' COMMENT '告警确认'," +
                "  alarm_confirmtime datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '告警确认时间'," +
                "  alarm_num int(11) NOT NULL DEFAULT '0' COMMENT '告警编号'," +
                "  note varchar(255) NOT NULL DEFAULT ''," +
                "  PRIMARY KEY (num)" +
                ") ENGINE=InnoDB DEFAULT CHARSET=utf8;";
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            sql.sqlMysqlExecute(sql_str);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            sql.close_con();
        }
    }
    /**
     *     创建设备历史告警记录表
     * @param pool
     */
    public static void createDevalaram_HistoryTable(MysqlConnPool pool) {
        String sql_str = " CREATE TABLE "+Sql_Mysql.Tb_Devalarm_History + " (" +
                "  num bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'," +
                "  motor_id int(11) NOT NULL DEFAULT '2001' COMMENT '设备id'," +
                "  alarm_id int(11) NOT NULL DEFAULT '10001' COMMENT '告警id'," +
                "  alarm_starttime datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '告警开始时间'," +
                "  alarm_endtime datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '告警结束时间'," +
                "  alarm_confirm int(11) NOT NULL DEFAULT '0' COMMENT '告警确认'," +
                "  alarm_confirmtime datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '告警确认时间'," +
                "  alarm_num int(11) NOT NULL DEFAULT '0' COMMENT '告警编号'," +
                "  note varchar(255) NOT NULL DEFAULT ''," +
                "  PRIMARY KEY (num)" +
                ") ENGINE=InnoDB DEFAULT CHARSET=utf8;";
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            sql.sqlMysqlExecute(sql_str);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            sql.close_con();
        }
    }
    /**
     *    初始化之前的实时告警记录
     */
    public static void initLastDevAlarm(MysqlConnPool pool,List<Motor_inf> motors) {
        String sql_str = " SELECT * FROM " + Sql_Mysql.Tb_Devalarm_Rt;
        ResultSet res = null;
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            res = sql.sqlMysqlQuery(sql_str);
            while(res.next()) {
                int motor_id = res.getInt("motor_id");
                int alarm_num = res.getInt("alarm_num");
                if(alarm_num <1 || alarm_num > 234) {
                    continue;
                }
                Motor_inf motor = Motor_inf.getNowMotor(motor_id, motors);
                if(null != motor) {
                    motor.alarms.get(alarm_num-1).alarm_state = 1;
                    motor.alarms.get(alarm_num-1).alarm_starttime = res.getTimestamp("alarm_starttime");
                    motor.alarms.get(alarm_num-1).alarm_confirm = res.getInt("alarm_confirm");
                    motor.alarms.get(alarm_num-1).alarm_confirmtime = res.getTimestamp("alarm_confirmtime");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sql.close_con();
        }
    }
    /**
     *    插入新的告警记录
     * @param conn_pool
     * @param addalm
     */
    public static void insertNewAlarm(MysqlConnPool conn_pool, List<Motor_Alarm> addalm) {
        String sql_str = " INSERT INTO " + Sql_Mysql.Tb_Devalarm_Rt + "(motor_id,alarm_id,alarm_starttime,alarm_endtime,alarm_num) VALUES";
        Motor_Alarm alarm = null;
        if(addalm.size()<1) {
            return;
        }
        for(int i=0;i<addalm.size();i++) {
            if(i > 0) {
                sql_str += ",";
            }
            alarm = addalm.get(i);
            sql_str += "("+alarm.getMotor_id()+","+alarm.getAlarm_id()+",'"+Com.getDateTimeFormat(alarm.getAlarm_starttime(), Com.DTF_YMDhms)+"','"+Com.getDateTimeFormat(alarm.getAlarm_endtime(), Com.DTF_YMDhms)+"',"+alarm.getAlarm_num()+")";
            alarm.clearAlarmType();                 //清除告警更新状态
        }
        Sql_Mysql sql = new Sql_Mysql(conn_pool.getConn());
        try {
            sql.sqlMysqlExecute(sql_str);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            sql.close_con();
        }
    }
    /**
     *     将实时告警变成历史告警记录
     * @param pool
     * @param delalarm
     */
    public static void AlarmDisappear(MysqlConnPool pool,List<Motor_Alarm> delalarm) {
        String sql_str_add_base = " INSERT INTO "+Sql_Mysql.Tb_Devalarm_History+"(motor_id,alarm_id,alarm_starttime,alarm_confirm,alarm_confirmtime,alarm_num,alarm_endtime) " +
                             " SELECT motor_id,alarm_id,alarm_starttime,alarm_confirm,alarm_confirmtime,alarm_num ";
        String sql_str_add_end = " FROM "+Sql_Mysql.Tb_Devalarm_Rt+" WHERE ";
        String sql_str_del_base = "DELETE FROM "+Sql_Mysql.Tb_Devalarm_Rt+" WHERE ";
        String sql_str_add = "";
        String sql_str_del = "";
        if(delalarm.size() < 1) {
            return;
        }
        for(int i = 0;i<delalarm.size();i++) {
            sql_str_add += (sql_str_add_base+",'"+Com.getDateTimeFormat(delalarm.get(i).alarm_endtime, Com.DTF_YMDhms)+"'"+sql_str_add_end + "alarm_id = "+delalarm.get(i).alarm_id+" AND motor_id = " + delalarm.get(i).getMotor_id() + " AND alarm_num = "+delalarm.get(i).getAlarm_num()+";");
            sql_str_del += (sql_str_del_base + "motor_id = "+delalarm.get(i).getMotor_id()+" AND alarm_id = " +delalarm.get(i).alarm_id+" AND alarm_num = "+delalarm.get(i).getAlarm_num()+";");
            delalarm.get(i).clearAlarmType();
        }
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            //System.out.println(sql_str_add);
            //System.out.println(sql_str_del);
            sql.sqlMysqlExecute(sql_str_add);
            sql.sqlMysqlExecute(sql_str_del);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            sql.close_con();
        }
    }
}
Motor_MonitorServer/src/com/motor/conn/Motor_SocketClient_Thread.java
@@ -55,6 +55,11 @@
                    Motor_Task_SQL.updateSubjectMotor_State(conn_pool, subject_state);
                }
                
                if(runCount %4 == 0) {
                    /*************************** 读取故障状态信息 ******************************/
                    readMotorAlarmData(master,motor);
                }
                if(runCount%10 == 0) {
                    //更新当前设备ip
                    master.setTarget_ip(motor.motor_ip);
@@ -76,6 +81,17 @@
    }
    /**
     *     读取设备报警信息
     * @param master2
     * @param motor2
     */
    private void readMotorAlarmData(MyModbusMaster master2, Motor_inf motor2) {
        for(int i=0 ; i< motor2.alarms.size();i++) {
            motor2.alarms.get(i).checkAlarm((int)master2.checkNullData(MyModbusUtils.readCoilStatus(12000+i*4, master2), motor2.alarms.get(i).alarm_state));
        }
    }
    /**
     * 读取受试电机信息
     * @param master2
     * @param subject_state2
Motor_MonitorServer/src/com/motor/conn/Motor_Task_SQL.java
@@ -7,6 +7,7 @@
import java.util.List;
import com.base.Com;
import com.motor.alarm.Motor_Alarm;
import com.motor.data.Load_motor_state;
import com.motor.data.Motor_control;
import com.motor.data.Motor_inf;
@@ -226,6 +227,11 @@
                motor.setMotor_ip(res.getString("motor_ip"));
                motor.setMotor_name(res.getString("motor_name"));
                motor.setMotor_type(res.getInt("motor_type"));
                for(int i = 0;i<234;i++) {
                    Motor_Alarm alarm = new Motor_Alarm(10001, motor.motor_id, i+1);
                    motor.alarms.add(alarm);
                }
                motors.add(motor);
            }
        } catch (SQLException e) {
Motor_MonitorServer/src/com/motor/data/Motor_inf.java
@@ -1,5 +1,10 @@
package com.motor.data;
import java.util.ArrayList;
import java.util.List;
import com.motor.alarm.Motor_Alarm;
public class Motor_inf {
    
    public int motor_id;            //电机id
@@ -7,6 +12,12 @@
    public int motor_type;            //电机类型
    public String motor_ip;            //电机ip
    public String note;                //备用
    public List<Motor_Alarm> alarms;
    public Motor_inf() {
        alarms = new ArrayList<Motor_Alarm>();
    }
    
    public int getMotor_id() {
        return motor_id;
@@ -38,6 +49,21 @@
    public void setNote(String note) {
        this.note = note;
    }
    /**
     *     获取当前电机对象
     * @return
     */
    public static Motor_inf getNowMotor(int motor_id,List<Motor_inf> motors) {
        Motor_inf motor = null;
        for(int i=0;i<motors.size();i++) {
            if(motor_id == motors.get(i).motor_id) {
                return motors.get(i);
            }
        }
        return motor;
    }
    @Override
    public String toString() {
        return "Motor_inf [motor_id=" + motor_id + ", motor_name=" + motor_name + ", motor_type=" + motor_type
Motor_MonitorServer/src/com/sql/Sql_Mysql.java
@@ -164,6 +164,8 @@
    public final static String Tb_Motor_control = DB_Elemachinery + ".tb_motor_control";                    //电机控制表
    public final static String Tb_Load_Motor_state = DB_Elemachinery + ".tb_load_motor_state";                //加载电机状态表
    public final static String Tb_Subject_Motor_state = DB_Elemachinery + ".tb_subject_motor_state";        //受试电机状态表
    public final static String Tb_Devalarm_Rt = DB_Elemachinery + ".tb_devalaram_rt";                        //电机实时告警记录表
    public final static String Tb_Devalarm_History = DB_Elemachinery + ".tb_devalaram_history";                //电机历史告警记录表
    //--------------------------------------------------------------------------------------------//
    public Connection mysql_con;
    
Motor_MonitorServer/src/main/main_MonitorServer_Motor.java
@@ -7,6 +7,7 @@
import com.base.Com;
import com.config.AppConfig;
import com.config.AppParam;
import com.motor.alarm.Motor_Alarm_Thread;
import com.motor.conn.Motor_ServerSocket_Thread;
import com.motor.conn.Motor_Task_SQL;
import com.motor.data.Motor_inf;
@@ -58,6 +59,10 @@
        
        motors = Motor_Task_SQL.queryAllMotor_inf(GB_MysqlConnPool);
        
        Motor_Alarm_Thread alarmthread = new Motor_Alarm_Thread(GB_MysqlConnPool,motors);
        new Thread(alarmthread).start();
        Motor_ServerSocket_Thread server = new Motor_ServerSocket_Thread(GB_MysqlConnPool,motors);
        new Thread(server).start();