以下是代码:
读取寄存器数据:
public class readRegisters {
/**
* 工厂。
*/
static ModbusFactory modbusFactory;
static {
if (modbusFactory == null) {
modbusFactory = new ModbusFactory();
}
}
/**
* 获取master
*
* @return
* @throws ModbusInitException
*/
public static ModbusMaster getMaster() throws ModbusInitException {
IpParameters params = new IpParameters();
params.setHost("192.168.1.100");//测试的时候填写从机ip
params.setPort(502);//从机端口
// modbusFactory.createRtuMaster(wapper); //RTU 协议
// modbusFactory.createUdpMaster(params);//UDP 协议
// modbusFactory.createAsciiMaster(wrapper);//ASCII 协议
ModbusMaster master = modbusFactory.createTcpMaster(params, false);// TCP 协议
try {
//设置超时时间
master.setTimeout(30000);
//设置重连次数
master.setRetries(5);
//初始化
master.init();
} catch (ModbusInitException e) {
e.printStackTrace();
}
return master;
}
/**
* 读01功能码
*
* @param ip 从站IP
* @param port modbus端口
* @param start 起始地址偏移量
* @param readLenth 待读寄存器个数
* @return
* @throws ModbusInitException
*/
public static ByteQueue ReadCoilsRequest( int slaveId,int start, int readLenth) throws ModbusInitException {
ModbusRequest modbusRequest = null;
try {
modbusRequest = new ReadCoilsRequest(slaveId, start, readLenth);
} catch (ModbusTransportException e) {
e.printStackTrace();
}
ModbusResponse modbusResponse = null;
try {
modbusResponse = getMaster().send(modbusRequest);
} catch (ModbusTransportException e) {
e.printStackTrace();
}
ByteQueue byteQueue = new ByteQueue(1024);
modbusResponse.write(byteQueue);
System.out.println("功能码:" + modbusRequest.getFunctionCode());
System.out.println("从站地址:" + modbusRequest.getSlaveId());
System.out.println("收到的响应信息大小:" + byteQueue.size());
System.out.println("收到的响应信息值:" + byteQueue);
return byteQueue;
}
/**
<