Modbus
ModbusTCP
JLibModbus
Java中使用JLibModbus库使用ModbusTCP协议读取数据
项目地址
1.使用Modbus slave工具模拟Modbus数据站并添加一些数据

2.添加JLibModbus依赖
<dependency>
<groupId>com.intelligt.modbus</groupId>
<artifactId>jlibmodbus</artifactId>
<version>1.2.9.7</version>
</dependency>
3.读取代码
package org.modbus.jlibmodbus;
import com.intelligt.modbus.jlibmodbus.Modbus;
import com.intelligt.modbus.jlibmodbus.master.ModbusMaster;
import com.intelligt.modbus.jlibmodbus.master.ModbusMasterFactory;
import com.intelligt.modbus.jlibmodbus.tcp.TcpParameters;
import java.net.InetAddress;
/**
* @Author Jxx 让世界看到我
* @Create 2022/4/22 9:58
* @Note TODO
*/
public class JLibModbus {
public static void run(){
try {
//设置主机TCP参数
TcpParameters tcpParameters = new TcpParameters();
//设置TCP的IP地址
InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
//TCP参数设置IP地址
//tcpParameters.setHost(InetAddress.getLocalHost());
tcpParameters.setHost(inetAddress);
//TCP设置长连接
tcpParameters.setKeepAlive(true);
//tcp设置端口,这里使用Modbus的默认端口502
tcpParameters.setPort(Modbus.TCP_PORT);
//创建一个主机
ModbusMaster modbusMaster = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);
//设置自增的id
Modbus.setAutoIncrementTransactionId(true);
//从机地址
int slaveId = 1;
//寄存器读取开始地址
int offset = 0;
//读取寄存器数量
int quantity = 10;
if (modbusMaster.isConnected()){
System.out.println("Modbus主机没有连接,现在建立连接");
modbusMaster.connect();
}
//读取对应从机的数据
int[] registers = modbusMaster.readInputRegisters(slaveId, offset, quantity);
for (int register : registers) {
System.out.println("读取寄存器数据:"+offset++ +"-"+register);
}
} catch ( Exception e){
System.out.println("jlibmodbus运行异常");
e.printStackTrace();
}
}
}
4.输出结果
通过打印输出,能够正确读取到Modbus数据站中的数据

网友评论