whyclj
2020-10-17 e163b7b3e4d5acc63cfda2fec2dd9034864ccf7a
WaterSystem_MonitorServer/src/com/modbus/data/MyModbusMaster.java
@@ -1,111 +1,137 @@
package com.modbus.data;
import java.text.NumberFormat;
import com.base.ComBase;
import com.serotonin.modbus4j.ModbusMaster;
import com.serotonin.modbus4j.ip.IpParameters;
public class MyModbusMaster {
   public final static int SLAVEID_DEFAULT = 2;
   public final static int MAX_ERROR_COUNT = 2;      //最大连续错误计数
   private ModbusMaster master;
   private int errcount;                        //错误计数   错误连续超过三个时重新获取master
   private String target_ip;                     //目标ip
   private int slaveId;                        //设备ID
   public MyModbusMaster(String target_ip,int slaveId) {
      this.target_ip = target_ip;
      this.slaveId = slaveId;
      IpParameters params = new IpParameters();
      params.setHost(target_ip);
      this.master = MyModbusFactory.getMaster(params);
   }
   public void addErrorCount() {
      this.errcount++;
      if(this.errcount > MAX_ERROR_COUNT) {
         reConnect();
      }
   }
   public void reConnect() {
      IpParameters params = new IpParameters();
      params.setHost(target_ip);
      if(this.master != null) {
         //清空上一个master
         this.master.destroy();
      }
      this.errcount = 0;
      this.master = MyModbusFactory.getMaster(params);
   }
   /**
    *    判断获取到的值是否为空
    * @param target
    * @param source
    * @return
    */
   public static Object checkNullData(Object target,Object source) {
      if(null == target) {
         return source;
      }
      try {
         if(target instanceof Number) {
            if(source instanceof Integer) {
               return ((Number) target).intValue();
            }else if(source instanceof Float) {
               return ((Number) target).floatValue();
            }
         }
         if(target instanceof Boolean) {
            //判断Boolean类型数据
            if((Boolean)target) {
               target = 1;
            }else {
               target = 0;
            }
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
      return target;
   }
   public ModbusMaster getMaster() {
      return master;
   }
   public int getErrcount() {
      return errcount;
   }
   public void setMaster(ModbusMaster master) {
      this.master = master;
   }
   public void setErrcount(int errcount) {
      this.errcount = errcount;
   }
   public String getTarget_ip() {
      return target_ip;
   }
   public void setTarget_ip(String target_ip) {
      this.target_ip = target_ip;
   }
   public int getSlaveId() {
      return slaveId;
   }
   public void setSlaveId(int slaveId) {
      this.slaveId = slaveId;
   }
   @Override
   public String toString() {
      return "MyModbusMaster [SLAVEID_DEFAULT=" + SLAVEID_DEFAULT + ", master=" + master + ", errcount=" + errcount
            + ", target_ip=" + target_ip + ", slaveId=" + slaveId + "]";
   }
}
package com.modbus.data;
import com.serotonin.modbus4j.ModbusMaster;
import com.serotonin.modbus4j.ip.IpParameters;
public class MyModbusMaster {
   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
   public MyModbusMaster(String target_ip,int slaveId) {
      this.target_ip = target_ip;
      this.slaveId = slaveId;
      IpParameters params = new IpParameters();
      params.setHost(target_ip);
      this.master = MyModbusFactory.getMaster(params);
   }
   public void addErrorCount() {
      this.errcount++;
      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) {
         //清空上一个master
         this.master.destroy();
      }
      this.errcount = 0;
      this.master = MyModbusFactory.getMaster(params);
   }
   /**
    *    判断获取到的值是否为空
    * @param target
    * @param source
    * @return
    */
   public static Object checkNullData(Object target,Object source) {
      if(null == target) {
         return source;
      }
      try {
         if(target instanceof Number) {
            if(source instanceof Integer) {
               return ((Number) target).intValue();
            }else if(source instanceof Float) {
               return ((Number) target).floatValue();
            }
         }
         if(target instanceof Boolean) {
            //判断Boolean类型数据
            if((Boolean)target) {
               target = 1;
            }else {
               target = 0;
            }
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
      return target;
   }
   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;
   }
   public int getErrcount() {
      return errcount;
   }
   public void setMaster(ModbusMaster master) {
      this.master = master;
   }
   public void setErrcount(int errcount) {
      this.errcount = errcount;
   }
   public String getTarget_ip() {
      return target_ip;
   }
   public void setTarget_ip(String target_ip) {
      this.target_ip = target_ip;
   }
   public int getSlaveId() {
      return slaveId;
   }
   public void setSlaveId(int slaveId) {
      this.slaveId = slaveId;
   }
   @Override
   public String toString() {
      return "MyModbusMaster [SLAVEID_DEFAULT=" + SLAVEID_DEFAULT + ", master=" + master + ", errcount=" + errcount
            + ", target_ip=" + target_ip + ", slaveId=" + slaveId + "]";
   }
}