| | |
| | | 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 + "]"; |
| | | } |
| | | } |