Motor_MonitorServer/src/com/motor/alarm/Motor_Alarm.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Motor_MonitorServer/src/com/motor/alarm/Motor_Alarm_Thread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Motor_MonitorServer/src/com/motor/alarm/Motor_Alarm_Thread_SQL.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Motor_MonitorServer/src/com/motor/conn/Motor_SocketClient_Thread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Motor_MonitorServer/src/com/motor/conn/Motor_Task_SQL.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Motor_MonitorServer/src/com/motor/data/Motor_inf.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Motor_MonitorServer/src/com/sql/Sql_Mysql.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Motor_MonitorServer/src/main/main_MonitorServer_Motor.java | ●●●●● 补丁 | 查看 | 原始文档 | 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();