whyclj
2020-08-05 343ce79c0364f84e15ee785ffdade8bc5e8f47f2
添加历史实时数据记录功能
2个文件已添加
6个文件已修改
219 ■■■■■ 已修改文件
Motor_MonitorServer/src/com/modbus/historydata/Motor_HistoryData_Record_Thread.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/modbus/historydata/Motor_HistoryData_Record_Thread_SQL.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/motor/conn/Motor_SocketClient_Thread.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/motor/conn/Motor_Task_SQL.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/motor/data/Motor_inf.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/sql/Sql_Mysql.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/version_inf/version_inf.txt 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/main/main_MonitorServer_Motor.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/modbus/historydata/Motor_HistoryData_Record_Thread.java
New file
@@ -0,0 +1,69 @@
package com.modbus.historydata;
import java.util.Calendar;
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_HistoryData_Record_Thread implements Runnable{
    //历史数据最大保留天数
    public static final int HISTORYDATA_MAXSAVE_TIMELONG = 180;            //历史数据最大保留天数
    public MysqlConnPool pool;
    public List<Motor_inf> motors;
    public Motor_HistoryData_Record_Thread(MysqlConnPool pool,List<Motor_inf> motors) {
        this.pool = pool;
        this.motors = motors;
    }
    @Override
    public void run() {
        System.out.println("Motor_HistoryData_Record_Thread Start at " + Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
        String lastdate = Com.getDateTimeFormat(new Date(2000,1,1),Com.DTF_Y_M_D);
        String nowdate = null;
        while(true) {
            try {
                nowdate = Com.getDateTimeFormat(new Date(), Com.DTF_Y_M_D);
                for(int i=0;i<motors.size();i++) {
                    if(!Motor_HistoryData_Record_Thread_SQL.checkHistoryIfNotExistsTable(pool, motors.get(i).motor_id, new Date())) {
                        Motor_HistoryData_Record_Thread_SQL.createTb_Motor_ReaddataTable(pool, motors.get(i).motor_id, new Date());
                    }
                    if(!lastdate.equals(nowdate)) {
                        //创建明天的历史数据表
                        if(!Motor_HistoryData_Record_Thread_SQL.checkHistoryIfNotExistsTable(pool, motors.get(i).motor_id, tomorrow(new Date()))) {
                            Motor_HistoryData_Record_Thread_SQL.createTb_Motor_ReaddataTable(pool, motors.get(i).motor_id, tomorrow(new Date()));
                        }
                        lastdate = nowdate;
                    }
                    Motor_HistoryData_Record_Thread_SQL.insertTb_Motor_ReaddataTable(pool,motors.get(i),nowdate);
                }
                Thread.sleep(1000);
            } catch (Exception e) {
                try {
                    Thread.sleep(1000);
                }catch(InterruptedException e1){
                    e1.printStackTrace();
                }
                e.printStackTrace();
            }
        }
    }
    /**
     *     返回明天日期
     * @param today
     * @return
     */
    public Date tomorrow(Date today) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(today);
        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1);
        return calendar.getTime();
    }
}
Motor_MonitorServer/src/com/modbus/historydata/Motor_HistoryData_Record_Thread_SQL.java
New file
@@ -0,0 +1,100 @@
package com.modbus.historydata;
import java.sql.SQLException;
import java.util.Date;
import com.base.Com;
import com.motor.data.Load_motor_state;
import com.motor.data.Motor_inf;
import com.sql.MysqlConnPool;
import com.sql.Sql_Mysql;
public class Motor_HistoryData_Record_Thread_SQL{
    /**
     *     创建电机历史实时数据表
     * @param pool
     */
    public static void createDB_Motor_Realhistory(MysqlConnPool pool) {
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            sql.sqlMysqlExecute("CREATE DATABASE IF NOT EXISTS " + Sql_Mysql.DB_Motor_Realhistory);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            sql.close_con();
        }
    }
    /**
     *    创建电机历史实时数据记录表
     * @param pool
     * @param motor_id
     * @param date_str
     */
    public static void createTb_Motor_ReaddataTable(MysqlConnPool pool,int motor_id,Date date) {
        String sql_str = " CREATE TABLE IF NOT EXISTS "+Sql_Mysql.Tb_Motor_Readdata + motor_id + "_" + Com.getDateTimeFormat(date, Com.DTF_Y_M_D) + "(" +
                "  num bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'," +
                "  motor_id int(11) NOT NULL DEFAULT '2001' COMMENT '电机id'," +
                "  record_time datetime NOT NULL DEFAULT '2000-01-01 00:00:00'," +
                "  load_motor_power float NOT NULL DEFAULT '0' COMMENT '加载电机功率'," +
                "  load_motor_speed float NOT NULL DEFAULT '0' COMMENT '加载电机转速'," +
                "  load_motor_torque float NOT NULL DEFAULT '0' COMMENT '加载电机转矩'," +
                "  load_motor_curr float NOT NULL DEFAULT '0' COMMENT '加载电机电流'," +
                "  load_motor_vol float NOT NULL DEFAULT '0' COMMENT '加载电机电压'," +
                "  note varchar(255) NOT NULL DEFAULT '' COMMENT '备用'," +
                "  PRIMARY KEY (num)" +
                ") ENGINE=InnoDB DEFAULT CHARSET=utf8;";
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            //System.out.println(sql_str);
            sql.sqlMysqlExecute(sql_str);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            sql.close_con();
        }
    }
    /**
     *     判断当前历史实时数据表是否存在
     * @param conn_pool
     * @param motor_id 电机id
     * @param date
     * @return    true:已存在    false:不存在
     */
    public static boolean checkHistoryIfNotExistsTable(MysqlConnPool conn_pool,int motor_id,Date date) {
        Sql_Mysql sql = new Sql_Mysql(conn_pool.getConn());
        String tname;
        try {
            sql.sqlMysqlUseDB(Sql_Mysql.DB_Motor_Realhistory);
            tname = Sql_Mysql.Tb_Motor_Readdata+"_"+motor_id +"_"+ Com.getDateTimeFormat(date, Com.DTF_Y_M_D);
            return sql.sqlMysqlCheckIfTableExist(tname);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            sql.close_con();
        }
        return false;
    }
    /**
     *     插入历史数据表
     * @param pool
     * @param motor_inf
     */
    public static void insertTb_Motor_ReaddataTable(MysqlConnPool pool, Motor_inf motor,String date_str) {
        Load_motor_state state = motor.load_state;
        String sql_str = " INSERT INTO " + Sql_Mysql.Tb_Motor_Readdata + motor.motor_id + "_" + date_str +
                         " (motor_id,record_time,load_motor_power,load_motor_speed,load_motor_torque,load_motor_curr,load_motor_vol) " +
                         " VALUES("+state.motor_id+",'"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)+"',"+state.load_motor_power+","+state.load_motor_speed+","+state.load_motor_torque+","+state.load_motor_curr+","+state.load_motor_vol+"); ";
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
            sql.sqlMysqlExecute(sql_str);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            sql.close_con();
        }
    }
}
Motor_MonitorServer/src/com/motor/conn/Motor_SocketClient_Thread.java
@@ -32,6 +32,9 @@
        subject_state = new Subject_motor_state(motor.motor_id);
        control = new Motor_control(motor.motor_id);
        
        motor.load_state = load_state;
        motor.subject_state = subject_state;
        master = new MyModbusMaster(motor.motor_ip, MyModbusMaster.SLAVEID_DEFAULT);
    }
        
Motor_MonitorServer/src/com/motor/conn/Motor_Task_SQL.java
@@ -7,6 +7,7 @@
import java.util.List;
import com.base.Com;
import com.modbus.historydata.Motor_HistoryData_Record_Thread_SQL;
import com.motor.alarm.Motor_Alarm;
import com.motor.data.Load_motor_state;
import com.motor.data.Motor_control;
@@ -21,6 +22,9 @@
    public static void init(MysqlConnPool conn) {
        
        createDB_Elemachinery(conn);
        //创建电机历史实时数据库
        Motor_HistoryData_Record_Thread_SQL.createDB_Motor_Realhistory(conn);
        
        //创建电机信息表
        createTb_Motor_InfTable(conn);
@@ -222,8 +226,7 @@
        try {
            res = sql.sqlMysqlQuery(sql_str);
            if(res.next()) {
                Motor_inf motor = new Motor_inf();
                motor.setMotor_id(res.getInt("motor_id"));
                Motor_inf motor = new Motor_inf(res.getInt("motor_id"));
                motor.setMotor_ip(res.getString("motor_ip"));
                motor.setMotor_name(res.getString("motor_name"));
                motor.setMotor_type(res.getInt("motor_type"));
Motor_MonitorServer/src/com/motor/data/Motor_inf.java
@@ -3,20 +3,27 @@
import java.util.ArrayList;
import java.util.List;
import com.mchange.v1.util.Sublist;
import com.motor.alarm.Motor_Alarm;
public class Motor_inf {
    
    public int motor_id;            //电机id
    public String motor_name;        //电机名称
    public int motor_type;            //电机类型
    public String motor_ip;            //电机ip
    public String note;                //备用
    public int motor_id;                            //电机id
    public String motor_name;                        //电机名称
    public int motor_type;                            //电机类型
    public String motor_ip;                            //电机ip
    public String note;                                //备用
    public Load_motor_state load_state;                //加载电机状态
    public Subject_motor_state subject_state;        //受试电机状态
    
    public List<Motor_Alarm> alarms;
    
    public Motor_inf() {
    public Motor_inf(int motor_id) {
        this.motor_id = motor_id;
        alarms = new ArrayList<Motor_Alarm>();
        load_state = new Load_motor_state(motor_id);
        subject_state = new Subject_motor_state(motor_id);
    }
    
    public int getMotor_id() {
Motor_MonitorServer/src/com/sql/Sql_Mysql.java
@@ -32,6 +32,7 @@
    
    final public static String DB_DynamicSystem = "`db_dynamicsystem`";
    final public static String DB_Elemachinery = "`db_elemachinery`";
    final public static String DB_Motor_Realhistory = "`db_motor_realhistory`";
    //--------------------------------------------------------------------------------------------//
    public final static String TB_HardDevSmsState = "tb_hard_dev_sms_state";
    //--------------------------------------------------------------------------------------------//
@@ -166,6 +167,9 @@
    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 final static String Tb_Motor_Readdata = DB_Motor_Realhistory + ".tb_motor_readdata_";            //电机历史实时记录表
    //--------------------------------------------------------------------------------------------//
    //--------------------------------------------------------------------------------------------//
    public Connection mysql_con;
    
Motor_MonitorServer/src/com/version_inf/version_inf.txt
@@ -1,2 +1,5 @@
V1.101
    电机加载通讯程序
    电机加载通讯程序
V1.102 at 2020-08-05 lijun
    添加历史实时数据记录功能
Motor_MonitorServer/src/main/main_MonitorServer_Motor.java
@@ -7,6 +7,8 @@
import com.base.Com;
import com.config.AppConfig;
import com.config.AppParam;
import com.modbus.historydata.Motor_HistoryData_Record_Thread;
import com.modbus.historydata.Motor_HistoryData_Record_Thread_SQL;
import com.motor.alarm.Motor_Alarm_Thread;
import com.motor.conn.Motor_ServerSocket_Thread;
import com.motor.conn.Motor_Task_SQL;
@@ -20,7 +22,7 @@
    /**************************************************************************/
    /**************************************************************************/
    public final static boolean app_debug = false;
    public final static double m_VersionNum = 1.101;
    public final static double m_VersionNum = 1.102;
    public final static String m_Version = "Welcome To Use main_MonitorServer_Motor V" 
                                            + m_VersionNum ;
    /**************************************************************************/
@@ -57,18 +59,22 @@
        /*********************************************************************************/
        Motor_Task_SQL.init(GB_MysqlConnPool);
        
        Motor_HistoryData_Record_Thread_SQL.createDB_Motor_Realhistory(GB_MysqlConnPool);
        motors = Motor_Task_SQL.queryAllMotor_inf(GB_MysqlConnPool);
        
        Motor_Alarm_Thread alarmthread = new Motor_Alarm_Thread(GB_MysqlConnPool,motors);
        new Thread(alarmthread).start();
        
        
        Motor_HistoryData_Record_Thread history = new Motor_HistoryData_Record_Thread(GB_MysqlConnPool, motors);
        new Thread(history).start();
        Motor_ServerSocket_Thread server = new Motor_ServerSocket_Thread(GB_MysqlConnPool,motors);
        new Thread(server).start();
        
        while(true) {
            try {
            try {
                Thread.sleep(5000);
            } catch (Exception e) {
                e.printStackTrace();