whyclj
2020-09-30 522639d5b7f200bce2efa9df1fd83b244ca2dde0
添加电机历史数据记录软件
6个文件已修改
97 ■■■■ 已修改文件
Motor_MonitorServer/src/com/modbus/data/MyModbusUtils.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/modbus/historydata/Motor_HistoryData_Record_Thread.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/modbus/historydata/Motor_HistoryData_Record_Thread_SQL.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/motor/conn/Motor_SocketClient_Thread.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/motor/data/Motor_inf.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/main/main_MonitorServer_Motor.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Motor_MonitorServer/src/com/modbus/data/MyModbusUtils.java
@@ -151,7 +151,7 @@
        try {
            return master.getMaster().send(batch);
        } catch (ModbusTransportException | ErrorResponseException e) {
            e.printStackTrace();
            //e.printStackTrace();
            isSuccess = false;
        } finally {
            if(isSuccess) {
Motor_MonitorServer/src/com/modbus/historydata/Motor_HistoryData_Record_Thread.java
@@ -10,7 +10,8 @@
public class Motor_HistoryData_Record_Thread implements Runnable{
    //历史数据最大保留天数
    public static final int HISTORYDATA_MAXSAVE_TIMELONG = 180;            //历史数据最大保留天数
    public static final int HISTORYDATA_MAXSAVE_TIMELONG = 30;            //历史数据最大保留天数
    public static final int TESTDATA_RECORD_INTERVAL = 10;
    public MysqlConnPool pool;
    public List<Motor_inf> motors;
    
@@ -25,24 +26,33 @@
        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;
        Date last = new Date(0);
        Date now = null;
        while(true) {
            try {
                nowdate = Com.getDateTimeFormat(new Date(), Com.DTF_Y_M_D);
                now = new Date();
                nowdate = Com.getDateTimeFormat(now, 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(!Motor_HistoryData_Record_Thread_SQL.checkHistoryIfNotExistsTable(pool, motors.get(i).motor_id, now)) {
                        Motor_HistoryData_Record_Thread_SQL.createTb_Motor_ReaddataTable(pool, motors.get(i).motor_id, now);
                    }
                    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()));
                        if(!Motor_HistoryData_Record_Thread_SQL.checkHistoryIfNotExistsTable(pool, motors.get(i).motor_id, tomorrow(now))) {
                            Motor_HistoryData_Record_Thread_SQL.createTb_Motor_ReaddataTable(pool, motors.get(i).motor_id, tomorrow(now));
                        }
                        lastdate = nowdate; 
                    }
                    Motor_HistoryData_Record_Thread_SQL.insertTb_Motor_ReaddataTable(pool,motors.get(i),nowdate);
                    long timelong = (now.getTime()-last.getTime())/1000;
                    if(timelong >= TESTDATA_RECORD_INTERVAL && motors.get(i).conn_state >0) {
                        //判断当前通讯是否正常
                        Motor_HistoryData_Record_Thread_SQL.insertTb_Motor_ReaddataTable(pool,motors.get(i),nowdate);
                        last = now;
                    }
                    Date del_time = getDateBefore(now,HISTORYDATA_MAXSAVE_TIMELONG);
                    Motor_HistoryData_Record_Thread_SQL.deleteHistoryData(pool, del_time);
                }
                Thread.sleep(1000);
                Thread.sleep(200);
            } catch (Exception e) {
                try {
                    Thread.sleep(1000);
@@ -66,4 +76,17 @@
        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1);
        return calendar.getTime();
    }
    /**
     * 获取指定时间之前多少天的时间
     * @param d
     * @param day
     * @return
     */
    public static Date getDateBefore(Date d,int day){
        Calendar now =Calendar.getInstance();
        now.setTime(d);
        now.set(Calendar.DATE,now.get(Calendar.DATE)-day);
        return now.getTime();
    }
}
Motor_MonitorServer/src/com/modbus/historydata/Motor_HistoryData_Record_Thread_SQL.java
@@ -1,5 +1,6 @@
package com.modbus.historydata;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
@@ -97,4 +98,47 @@
            sql.close_con();
        }
    }
    /**
     * 删除创建时间超时的历史实时记录表
     * @param conn_pool
     * @param deldate
     */
    public static void deleteHistoryData(MysqlConnPool conn_pool,Date deldate) {
        String sql_select_strs = " select TABLE_NAME,UPDATE_TIME,CREATE_TIME " +
                                 " from information_schema.tables " +
                                 " where table_schema='db_motor_realhistory' " +
                                 " AND TABLE_NAME like 'tb_motor_readdata_%' " +
                                 " AND CREATE_TIME <= '"+Com.getDateTimeFormat(deldate, Com.DTF_YMDhms)+"';" ;
        String sql_delete_strs = " DROP TABLE IF EXISTS ";
        Sql_Mysql sql = new Sql_Mysql(conn_pool.getConn());
        ResultSet res = null;
        int count = 0;
        res = sql.sqlMysqlQuery(sql_select_strs);
        try {
            while(res.next()) {
                if(count > 0) {
                    sql_delete_strs += ",";
                }
                sql_delete_strs += "db_motor_realhistory." + res.getString("TABLE_NAME");
                System.out.println("删除:"+res.getString("TABLE_NAME")+"\t at "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
                count++;
            }
            if(count >0) {
                sql.sqlMysqlExecute(sql_delete_strs);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if(res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            sql.close_con();
        }
    }
}
Motor_MonitorServer/src/com/motor/conn/Motor_SocketClient_Thread.java
@@ -85,6 +85,8 @@
                //System.err.println(Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
                
                Motor_Task_SQL.insertOrUpdateDeviceConnectState(conn_pool, motor.motor_id, master);
                motor.conn_state = master.getConnectState();
                if(runCount%10 == 0) {
                    //更新当前设备ip
                    master.setTarget_ip(motor.motor_ip);
Motor_MonitorServer/src/com/motor/data/Motor_inf.java
@@ -20,6 +20,8 @@
    public String motor_ip;                            //电机ip
    public String note;                                //备用
    
    public int conn_state;                            //通讯状态 1:通讯正常    0:通讯故障
    public Load_motor_state load_state;                //加载电机状态
    public Subject_motor_state subject_state;        //受试电机状态
    
Motor_MonitorServer/src/main/main_MonitorServer_Motor.java
@@ -59,7 +59,7 @@
        /*********************************************************************************/
        Motor_Task_SQL.init(GB_MysqlConnPool);
        
        //Motor_HistoryData_Record_Thread_SQL.createDB_Motor_Realhistory(GB_MysqlConnPool);
        Motor_HistoryData_Record_Thread_SQL.createDB_Motor_Realhistory(GB_MysqlConnPool);
        
        motors = Motor_Task_SQL.queryAllMotor_inf(GB_MysqlConnPool);
        
@@ -67,8 +67,8 @@
        new Thread(alarmthread).start();
        
        
        //Motor_HistoryData_Record_Thread history = new Motor_HistoryData_Record_Thread(GB_MysqlConnPool, motors);
        //new Thread(history).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();