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 ; /**************************************************************************/