一、软件下载
1、modscan32软件下载,里面包含modscan32(主机),以及modsim32(从机),下载地址有很多大家可以直接到网上搜索下载modsacn32
二、modsim32从机配置准备
1.连接从机
2.设置端口号,这里默认端口号为502
3.设置参数
4.点击坐标例设置对应的值
这里设置值有两中方式,一种是设置固定值,第二种是点击自动模拟获取随机数
三、编写Java代码充当主机获取数据
1.添加jlibmodbus依赖
<dependency>
<groupId>com.intelligt.modbus</groupId>
<artifactId>jlibmodbus</artifactId>
<version>1.2.9.7</version>
</dependency>
2.这里用来演示的是功能码03
public static void main(String[] args) {
try {
// 设置主机TCP参数
TcpParameters tcpParameters = new TcpParameters();
// 设置TCP的ip地址-本地地址
InetAddress adress = InetAddress.getByName("127.0.0.1");
// tcpParameters.setHost(InetAddress.getLocalHost());
tcpParameters.setHost(adress);
// TCP设置长连接
tcpParameters.setKeepAlive(true);
// TCP设置端口,这里设置是默认端口502
tcpParameters.setPort(502);
// 创建一个主机
ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);
Modbus.setAutoIncrementTransactionId(true);
int slaveId = 1;//从机地址
int offset = 0;//寄存器读取开始地址
int quantity = 10;//读取的寄存器数量
System.out.println("准备执行开启连接");
try {
if (!master.isConnected()) {
master.connect();// 开启连接
}
System.out.println("读取对应从机的数据");
//读取对应从机的数据,这里演示的是功能码03
//功能码01 readCoils()
//功能码02 readDiscreteInputs()
//功能码03 readHoldingRegisters()
//功能码04 readInputRegisters()
int[] registerValues = master.readHoldingRegisters(slaveId, offset, quantity);
System.out.println("成功!");
// 控制台输出
for (int value : registerValues) {
System.out.println("Address: " + offset++ + ", Value: " + value);
}
} catch (ModbusProtocolException e) {
e.printStackTrace();
} catch (ModbusNumberException e) {
e.printStackTrace();
} catch (ModbusIOException e) {
e.printStackTrace();
} finally {
try {
master.disconnect();
} catch (ModbusIOException e) {
e.printStackTrace();
}
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
e.printStackTrace();
}
}
3.输出结果
准备执行开启连接
读取对应从机的数据
成功!
address: 0, value: 11
address: 1, value: 23
address: 2, value: 30
address: 3, value: 47
address: 4, value: 33
address: 5, value: 0
address: 6, value: 24
address: 7, value: 0
address: 8, value: 66
address: 9, value: 0