package com.modbus.data;
|
|
import java.net.Socket;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
|
import com.serotonin.modbus4j.ModbusMaster;
|
import com.serotonin.modbus4j.ip.IpParameters;
|
import com.serotonin.modbus4j.serial.SerialPortWrapper;
|
|
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 Logger logger = null;
|
private MyIpParameters params;
|
|
//TCP
|
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);
|
logger = LogManager.getLogger(this.getClass());
|
}
|
//RTU
|
public MyModbusMaster(Socket socket,int ModbusType,int slaveId) {
|
this.slaveId = slaveId;
|
SerialPortWrapper impl = new SerialPortWrapperImpl(socket);
|
this.params = new MyIpParameters(impl,ModbusType);
|
this.master = MyModbusFactory.getMaster(params,ModbusType);
|
}
|
|
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 + "]";
|
}
|
}
|