whyclj
2020-09-19 f50fd78fe34021c91f600c4f84447d1ff9386591
添加设备通讯状态记录
7个文件已修改
167 ■■■■■ 已修改文件
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/Electrical_2KWTask_SQL.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/Electrical_2KW_SocketClient_Thread.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/modbus/data/MyModbusMaster.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/modbus/data/MyModbusUtils.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/sql/Sql_Mysql.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/version_inf/version_inf.txt 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/main/main_ElectricalSystem_MonitorServer_2KW.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ElectricalSystem_MonitorServer_2KW/src/com/electrical/TwoKW/Electrical_2KWTask_SQL.java
@@ -2,8 +2,11 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import com.base.Com;
import com.modbus.data.MyModbusMaster;
import com.sql.MysqlConnPool;
import com.sql.Sql_Mysql;
@@ -27,8 +30,10 @@
        
        createTb_electric2MW_state(pool);
        
        createTb_Device_ConnectState(pool);
    }
    
    /**
     * 初始化负载信息表
     * @param pool
@@ -209,6 +214,30 @@
                "  consvol_distribution int(11) NOT NULL DEFAULT '0' COMMENT '四串恒压电压分配位'," + 
                "  PRIMARY KEY (num)," + 
                "  UNIQUE KEY electric2KW_id_key (electric2KW_id) USING BTREE" + 
                ") 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
     */
    private static void createTb_Device_ConnectState(MysqlConnPool pool) {
        String sql_str = " CREATE TABLE IF NOT EXISTS "+Sql_Mysql.Tb_Device_ConnectState+" (" +
                "  num bigint(20) NOT NULL AUTO_INCREMENT," +
                "  dev_id int(11) NOT NULL DEFAULT '0' COMMENT '设备id'," +
                "  connect_en int(11) NOT NULL DEFAULT '0' COMMENT '连接状态[0:通讯故障;1通讯正常]'," +
                "  record_time datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '记录时间'," +
                "  note varchar(255) NOT NULL DEFAULT '' COMMENT '备用字段'," +
                "  PRIMARY KEY (num)," +
                "  UNIQUE KEY index_dev_id (dev_id) USING BTREE" +
                ") ENGINE=InnoDB DEFAULT CHARSET=utf8;";
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        try {
@@ -529,7 +558,38 @@
        }
    }
    
    /**
     *     插入或更新当前设备的连接状态
     * @param pool
     * @param dev_id
     * @param master
     */
    public static void insertOrUpdateDeviceConnectState(MysqlConnPool pool,int dev_id,MyModbusMaster master) {
        String sql_str_sel = " SELECT * FROM "+Sql_Mysql.Tb_Device_ConnectState+" WHERE dev_id = " + dev_id;
        String sql_str_ins = " INSERT INTO "+Sql_Mysql.Tb_Device_ConnectState+"(dev_id,connect_en,record_time) values("+dev_id+","+master.getConnectState()+",'"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)+"');";
        String sql_str_upd = " UPDATE "+Sql_Mysql.Tb_Device_ConnectState+" SET connect_en = "+master.getConnectState()+",record_time='"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)+"' WHERE dev_id = " + dev_id;
        Sql_Mysql sql = new Sql_Mysql(pool.getConn());
        ResultSet res = null;
        try {
            res = sql.sqlMysqlQuery(sql_str_sel);
            if(res.next()) {
                sql.sqlMysqlExecute(sql_str_upd);
            }else {
                sql.sqlMysqlExecute(sql_str_ins);
            }
        } 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
@@ -200,6 +200,10 @@
                    Water_Task_SQL.insertOrUpdateWater_alarmTable(conn_pool, listAlarm);
                }*/
                
                //System.out.println(master.getTotalerr()+"##############"+master.getConnectState());
                //更新当前设备的连接状态
                Electrical_2KWTask_SQL.insertOrUpdateDeviceConnectState(conn_pool,einf.electric2KW_id,master);
                if(runCount%10 == 0) {
                    //更新当前设备ip
                    master.setTarget_ip(einf.electric2KW_ip);
ElectricalSystem_MonitorServer_2KW/src/com/modbus/data/MyModbusMaster.java
@@ -1,8 +1,5 @@
package com.modbus.data;
import java.text.NumberFormat;
import com.base.ComBase;
import com.serotonin.modbus4j.ModbusMaster;
import com.serotonin.modbus4j.ip.IpParameters;
@@ -10,8 +7,11 @@
    public final static int SLAVEID_DEFAULT = 2;
    
    public final static int MAX_ERROR_COUNT = 2;        //最大连续错误计数
    public final static int LOSE_CONNECT_COUNT = 20;    //通讯中断最大计数
    private ModbusMaster master;
    private int errcount;                                //错误计数    错误连续超过三个时重新获取master
    private int totalerr = 31;                            //总的错误计数[默认失去连接]    用于判别设备是否掉线
    private String target_ip;                            //目标ip
    private int slaveId;                                //设备ID
    
@@ -28,9 +28,20 @@
        if(this.errcount > MAX_ERROR_COUNT) {
            reConnect();
        }
        if(this.totalerr > 99999999) {
            this.totalerr = 5;
        }
        this.totalerr ++;
    }
    //清空错误计数
    public void clearError() {
        errcount = 0;
        totalerr = 0;
    }
    
    public void reConnect() {
        System.out.println(target_ip);
        IpParameters params = new IpParameters();
        params.setHost(target_ip);
        if(this.master != null) {
@@ -74,6 +85,21 @@
        
    }
    
    public int getConnectState() {
        if(this.totalerr < LOSE_CONNECT_COUNT) {
            return 1;
        }
        return 0;
    }
    public int getTotalerr() {
        return totalerr;
    }
    public void setTotalerr(int totalerr) {
        this.totalerr = totalerr;
    }
    public ModbusMaster getMaster() {
        return master;
    }
ElectricalSystem_MonitorServer_2KW/src/com/modbus/data/MyModbusUtils.java
@@ -30,12 +30,19 @@
    public static Boolean readCoilStatus(int offset,MyModbusMaster master){
        // 01 Coil Status
        BaseLocator<Boolean> loc = BaseLocator.coilStatus(master.getSlaveId(), offset);
        Boolean value = null;;
        Boolean value = null;
        boolean isSuccess = true;
        try {
            value = master.getMaster().getValue(loc);
        } catch (ModbusTransportException | ErrorResponseException e) {
            master.addErrorCount();
            isSuccess = false;
            //e.printStackTrace();
        } finally {
            if(isSuccess) {
                master.clearError();
            }else {
                master.addErrorCount();
            }
        }
        return value;
    }
@@ -50,12 +57,20 @@
    public static Boolean readInputStatus(int offset,MyModbusMaster master){
        // 02 Input Status
        BaseLocator<Boolean> loc = BaseLocator.inputStatus(master.getSlaveId(), offset);
        Boolean value = null;;
        Boolean value = null;
        boolean isSuccess = true;
        try {
            value = master.getMaster().getValue(loc);
        } catch (ModbusTransportException | ErrorResponseException e) {
            master.addErrorCount();
            isSuccess = false;
            //e.printStackTrace();
        }finally {
            if(isSuccess) {
                master.clearError();
            }else {
                master.addErrorCount();
            }
        }
        return value;
    }
@@ -75,11 +90,18 @@
        // 03 Holding Register类型数据读取
        BaseLocator<Number> loc = BaseLocator.holdingRegister(master.getSlaveId(), offset, dataType);
        Number value = null;
        boolean isSuccess = true;
        try {
            value = master.getMaster().getValue(loc);
        } catch (ModbusTransportException | ErrorResponseException e) {
            //e.printStackTrace();
            master.addErrorCount();
            isSuccess = false;
        } finally {
            if(isSuccess) {
                master.clearError();
            }else {
                master.addErrorCount();
            }
        }
        return value;
    }
@@ -105,11 +127,18 @@
        // 04 Input Registers类型数据读取
        BaseLocator<Number> loc = BaseLocator.inputRegister(master.getSlaveId(), offset, dataType);
        Number value = null;
        boolean isSuccess = true;
        try {
            value = master.getMaster().getValue(loc);
        } catch (ModbusTransportException | ErrorResponseException e) {
            //e.printStackTrace();
            master.addErrorCount();
            isSuccess = false;
        } finally {
            if(isSuccess) {
                master.clearError();
            }else {
                master.addErrorCount();
            }
        }
        return value;
    }
@@ -162,6 +191,7 @@
            master.addErrorCount();
            return false;
        } else {
            master.clearError();
            return true;
        }
    }
@@ -194,6 +224,7 @@
            master.addErrorCount();
            return false;
        } else {
            master.clearError();
            return true;
        }
 
@@ -223,6 +254,7 @@
            master.addErrorCount();
            return false;
        } else {
            master.clearError();
            return true;
        }
 
@@ -258,6 +290,7 @@
            master.addErrorCount();
            return false;
        } else {
            master.clearError();
            return true;
        }
    }
@@ -277,19 +310,35 @@
        ModbusMaster tcpMaster = master.getMaster();
        // 类型
        BaseLocator<Number> locator = BaseLocator.holdingRegister(master.getSlaveId(), offset, dataType);
        boolean isSuccess = true;
        try {
            tcpMaster.setValue(locator, value);
        } catch (ModbusTransportException | ErrorResponseException e) {
            e.printStackTrace();
            isSuccess = false;
        } finally {
            if(isSuccess) {
                master.clearError();
            }else {
                master.addErrorCount();
            }
        }
    }
    public static BatchResults<Integer> readMutilRegisters(BatchRead<Integer> batch,MyModbusMaster master){
        batch.setContiguousRequests(false);
        boolean isSuccess = true;
        try {
            return master.getMaster().send(batch);
        } catch (ModbusTransportException | ErrorResponseException e) {
            e.printStackTrace();
            isSuccess = false;
        } finally {
            if(isSuccess) {
                master.clearError();
            }else {
                master.addErrorCount();
            }
        }
        return null;
    }
ElectricalSystem_MonitorServer_2KW/src/com/sql/Sql_Mysql.java
@@ -188,6 +188,9 @@
    public final static String Tb_electric2MW_inf = DB_Electric2MWSystem + ".tb_electric2MW_inf";
    public final static String Tb_electric2MW_control = DB_Electric2MWSystem + ".tb_electric2MW_control";
    
    public final static String Tb_Device_ConnectState = DB_Electric2MWSystem+".tb_device_connectstate";                //设备通讯状态表
    //--------------------------------------------------------------------------------------------//
    public Connection mysql_con;
    
ElectricalSystem_MonitorServer_2KW/src/com/version_inf/version_inf.txt
@@ -2,4 +2,7 @@
    电机加载通讯程序
    
V1.102 at 2020-08-05 lijun
    添加历史实时数据记录功能
    添加历史实时数据记录功能
V1.202 at 2020-09-19 lijun
    添加设备连接状态表记录功能
ElectricalSystem_MonitorServer_2KW/src/main/main_ElectricalSystem_MonitorServer_2KW.java
@@ -21,7 +21,7 @@
    /**************************************************************************/
    public final static boolean app_debug = false;
    
    public final static double m_VersionNum = 1.102;
    public final static double m_VersionNum = 1.202;
    public final static String m_Version = "Welcome To Use main_ElectricalSystem_MonitorServer_2KW V" 
                                            + m_VersionNum ;
    /**************************************************************************/