pom
<dependency> <groupId>com.intelligt.modbus</groupId> <artifactId>jlibmodbus</artifactId> <version>1.2.9.9</version> </dependency>
代码
public static void main(String[] args) throws ModbusProtocolException, ModbusNumberException, ModbusIOException {
TcpParameters tcpParameters = new TcpParameters();
try {
tcpParameters.setHost(InetAddress.getByName("127.0.0.1"));
} catch (UnknownHostException e) {
throw new RuntimeException(e);
}
tcpParameters.setKeepAlive(true);
tcpParameters.setPort(505);
ModbusMaster modbusMasterTCP = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);
Modbus.setAutoIncrementTransactionId(true);
boolean[] coils = modbusMasterTCP.readCoils(1, 0, 8);
for (boolean b : coils) {
System.out.println("线圈"+b);
}
boolean[] discreteInputs = modbusMasterTCP.readDiscreteInputs(1, 0, 8);
for (boolean b : discreteInputs) {
System.out.println("离散"+b);
}
int[] inputRegisters = modbusMasterTCP.readInputRegisters(1, 0, 2);//输入
for (int anInt : inputRegisters) {
System.out.println("输入"+anInt);
}
int[] holdingRegisters = modbusMasterTCP.readHoldingRegisters(1, 0, 2);//保持
for (int anInt : holdingRegisters) {
System.out.println("保持"+anInt);
}
}
线圈true
线圈false
线圈false
线圈false
线圈false
线圈false
线圈true
线圈false
离散false
离散true
离散false
离散false
离散false
离散false
离散true
离散false
输入1
输入2
保持0
保持17402
用这个需要注意 jlibmodbus 好像不能取值 device id = 0的 没深入研究
final static public int BROADCAST_ID = 0x00;
synchronized public ModbusResponse processRequest(ModbusRequest request) throws ModbusProtocolException, ModbusIOException {
try {
sendRequest(request);
if (request.getServerAddress() != Modbus.BROADCAST_ID) {
do {
try {
ModbusResponse msg = (ModbusResponse) readResponse(request);
request.validateResponse(msg);
/*
* if you have received an ACKNOWLEDGE,
* it means that operation is in processing and you should be waiting for the answer
*/
if (msg.getModbusExceptionCode() != ModbusExceptionCode.ACKNOWLEDGE) {
if (msg.isException())
throw new ModbusProtocolException(msg.getModbusExceptionCode());
return msg;
}
} catch (ModbusNumberException mne) {
Modbus.log().warning(mne.getLocalizedMessage());
}
} while (TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - requestTimeNs) < getConnection().getReadTimeout());
/*
* throw an exception if there is a response timeout
*/
throw new ModbusIOException("Response timeout.");
} else {
/*
return because slaves do not respond broadcast requests
返回无效的
*/
broadcastResponse.setFunction(request.getFunction());
return broadcastResponse;
}
} catch (ModbusIOException mioe) {
disconnect();
throw mioe;
}
}