package com.modbus.data;
|
|
import com.serotonin.modbus4j.BatchRead;
|
import com.serotonin.modbus4j.BatchResults;
|
import com.serotonin.modbus4j.ModbusMaster;
|
import com.serotonin.modbus4j.code.DataType;
|
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 int totalerr; //×ܵĴíÎó¼ÆÊý //ÓÃÓÚÅбðÉ豸ÊÇ·ñµôÏß
|
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 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 + "]";
|
}
|
|
|
public static void main(String[] args) {
|
MyModbusMaster master = new MyModbusMaster("192.168.2.22", 2);
|
//float t1 = MyModbusUtils.readShortToFloat(MyModbusUtils.readHoldingRegister(1119, DataType.TWO_BYTE_INT_SIGNED, master));
|
BatchRead<Integer> batch = new BatchRead<Integer>();
|
batch.addLocator(0,MyModbusUtils.createBaseLocator(58, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØ¹¦Âʸø¶¨ 58
|
batch.addLocator(1,MyModbusUtils.createBaseLocator(364, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØ×ª¾Ø¸ø¶¨ 364
|
batch.addLocator(2,MyModbusUtils.createBaseLocator(366, DataType.TWO_BYTE_INT_UNSIGNED_SWAPPED, master)); //¼ÓÔØµç»úתËÙÏÞÖÆ 366
|
batch.addLocator(3,MyModbusUtils.createBaseLocator(367, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»úת¾ØÏÞÖÆ 367
|
batch.addLocator(4,MyModbusUtils.createBaseLocator(505, DataType.TWO_BYTE_INT_UNSIGNED, master)); //¼ÓÔØ²½³¤ 505
|
batch.addLocator(5,MyModbusUtils.createBaseLocator(1006, DataType.TWO_BYTE_INT_UNSIGNED, master)); //¼ÓÔØµç»úË®Àä½øË®·çÎÂ1006
|
batch.addLocator(6,MyModbusUtils.createBaseLocator(1008, DataType.TWO_BYTE_INT_UNSIGNED, master)); //¼ÓÔØµç»úË®Àä³öË®·çÎÂ1008
|
batch.addLocator(7,MyModbusUtils.createBaseLocator(1096, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»úµçÁ÷ 1096
|
batch.addLocator(8,MyModbusUtils.createBaseLocator(1099, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»ú¹¦ÂÊ 1099
|
batch.addLocator(9,MyModbusUtils.createBaseLocator(1101, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»úתËÙ 1101
|
batch.addLocator(10,MyModbusUtils.createBaseLocator(1103, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»úµçѹ 1103
|
// batch.addLocator(11,MyModbusUtils.createBaseLocator(1119, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»úÈÆ×éζÈ1 1119
|
// batch.addLocator(12,MyModbusUtils.createBaseLocator(1120, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»úÈÆ×éζÈ2 1120
|
// batch.addLocator(13,MyModbusUtils.createBaseLocator(1121, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»úÈÆ×éζÈ3 1121
|
// batch.addLocator(14,MyModbusUtils.createBaseLocator(1122, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»úÖá³ÐζÈ1 1122
|
// batch.addLocator(15,MyModbusUtils.createBaseLocator(1123, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»úÖá³ÐζÈ2 1123
|
// batch.addLocator(16,MyModbusUtils.createBaseLocator(1250, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»ú³ö¿ÚÎÂ¶È 1250
|
// batch.addLocator(17,MyModbusUtils.createBaseLocator(1124, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»ú½ø¿ÚÎÂ¶È 1124
|
batch.addLocator(18,MyModbusUtils.createBaseLocator(1251, DataType.TWO_BYTE_INT_SIGNED, master)); //¼ÓÔØµç»úת¾Ø 1251
|
batch.addLocator(19,MyModbusUtils.createBaseLocator(5680, master)); //¼ÓÔØµç»úÆô¶¯ 5680
|
batch.addLocator(20,MyModbusUtils.createBaseLocator(5681, master)); //¼ÓÔØµç»úÍ£»ú 5681
|
batch.addLocator(21,MyModbusUtils.createBaseLocator(8000, master)); //¼ÓÔØ 8000
|
batch.addLocator(22,MyModbusUtils.createBaseLocator(8001, master)); //¼õÔØ 8001
|
batch.addLocator(23,MyModbusUtils.createBaseLocator(8040, master)); //ÊÖ¶¯¼ÓÔØ 8040
|
batch.addLocator(24,MyModbusUtils.createBaseLocator(16005, master)); //¼ÓÔØµç»ú½ôÍ£ 16005
|
batch.addLocator(25,MyModbusUtils.createBaseLocator(17082, master)); //¼ÓÔØµç»ú·ç»ú״̬ 17082
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
|
System.out.println(res.getValue(0));
|
}
|
}
|