ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/Electrical_4KW_SocketClient_Thread.java
@@ -99,6 +99,10 @@ //System.err.println(einf.electric_id+"====="+((new Date()).getTime()-last.getTime())); last = new Date(); Electrical_Task_SQL.insertOrUpdateDeviceConnectState(conn_pool, einf.electric_id, master); //判断当前设备是否断开连接 if(master.getTotalerr() >3) { einf.lose_conn = true; ElectricalSystem_MonitorServer_4KW/src/com/electrical/FourKW/Electrical_Task_SQL.java
@@ -8,6 +8,7 @@ import java.util.List; import com.base.Com; import com.modbus.data.MyModbusMaster; import com.mysql.jdbc.EscapeTokenizer; import com.sql.MysqlConnPool; import com.sql.Sql_Mysql; @@ -893,4 +894,37 @@ sql.close_con(); } } /** * 插入或更新当前设备的连接状态 * @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_4KW/src/com/modbus/data/MyModbusMaster.java
@@ -7,9 +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; //总的错误计数 //用于判别设备是否掉线 private int totalerr = 31; //总的错误计数[默认失去连接] 用于判别设备是否掉线 private String target_ip; //目标ip private int slaveId; //设备ID @@ -27,7 +29,7 @@ reConnect(); } if(this.totalerr > 99999999) { this.totalerr = 5; this.totalerr = 30; } this.totalerr ++; } @@ -83,6 +85,13 @@ } public int getConnectState() { if(this.totalerr < LOSE_CONNECT_COUNT) { return 1; } return 0; } public int getTotalerr() { return totalerr; } ElectricalSystem_MonitorServer_4KW/src/com/modbus/data/MyModbusUtils.java
@@ -147,10 +147,18 @@ 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; } @@ -348,7 +356,7 @@ tcpMaster.setValue(locator, value); } catch (ModbusTransportException | ErrorResponseException e) { //e.printStackTrace(); isSuccess = true; isSuccess = false; } finally { if(isSuccess) { master.clearError(); ElectricalSystem_MonitorServer_4KW/src/com/sql/Sql_Mysql.java
@@ -35,6 +35,8 @@ final public static String DB_Motor_Realhistory = "`db_motor_realhistory`"; final public static String DB_ElectricSystem = "`db_electricsystem`"; final public static String DB_Electric2MWSystem = "`db_electric2mwsystem`"; //--------------------------------------------------------------------------------------------// public final static String TB_HardDevSmsState = "tb_hard_dev_sms_state"; //--------------------------------------------------------------------------------------------// @@ -185,6 +187,8 @@ public final static String Tb_Electric_Readhist_Data = DB_ElectricSystem + ".tb_electric_realhist_data_"; public final static String Tb_Device_ConnectState = DB_Electric2MWSystem+".tb_device_connectstate"; //设备通讯状态表 //--------------------------------------------------------------------------------------------// public Connection mysql_con; ElectricalSystem_MonitorServer_4KW/src/com/version_inf/version_inf.txt
@@ -5,4 +5,7 @@ 添加历史实时数据记录功能 V1.103 at 2020-08-25 lijun 读取实时节点是批量读取,并且注释控制节点的写入 读取实时节点是批量读取,并且注释控制节点的写入 V1.203 at 2020-09-19 lijun 添加设备连接状态记录更新