WaterSystem_MonitorServer/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,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 @@ -42,6 +41,7 @@ } public void reConnect() { System.out.println(target_ip); IpParameters params = new IpParameters(); params.setHost(target_ip); if(this.master != null) { @@ -85,6 +85,13 @@ } public int getConnectState() { if(this.totalerr < LOSE_CONNECT_COUNT) { return 1; } return 0; } public int getTotalerr() { return totalerr; } WaterSystem_MonitorServer/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; } WaterSystem_MonitorServer/src/com/sql/Sql_Mysql.java
@@ -38,6 +38,7 @@ final public static String DB_Watersystem = "`db_watersystem`"; final public static String DB_Electric2MWSystem = "`db_electric2mwsystem`"; //--------------------------------------------------------------------------------------------// public final static String TB_HardDevSmsState = "tb_hard_dev_sms_state"; //--------------------------------------------------------------------------------------------// @@ -190,6 +191,7 @@ public final static String Tb_water_state = DB_Watersystem + ".tb_water_state"; //水冷系统实时状态 public final static String Tb_water_alarm = DB_Watersystem + ".tb_water_alarm"; //水冷系统告警 public final static String Tb_Device_ConnectState = DB_Electric2MWSystem+".tb_device_connectstate"; //设备通讯状态表 //--------------------------------------------------------------------------------------------// public Connection mysql_con; WaterSystem_MonitorServer/src/com/watersystem/monitor/Water_Task_SQL.java
@@ -3,9 +3,11 @@ import java.security.interfaces.RSAKey; 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; @@ -336,4 +338,37 @@ } /** * 插入或更新当前设备的连接状态 * @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(); } } } } WaterSystem_MonitorServer/src/com/watersystem/monitor/Watersystem_SocketClient_Thread.java
@@ -73,6 +73,8 @@ //Water_Task_SQL.insertOrUpdateWater_alarmTable(conn_pool, listAlarm); } Water_Task_SQL.insertOrUpdateDeviceConnectState(conn_pool, winf.water_id, master); if(runCount%10 == 0) { //更新当前设备ip master.setTarget_ip(winf.water_ip); WaterSystem_MonitorServer/src/main/main_WaterSystem_MonitorServer.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_MonitorServer_Motor V" + m_VersionNum ; /**************************************************************************/