一、环境准备
二、代码编写
2.1 modsim准备
1.点击 连接设置->连接->Modbus/TCP 服务器
2.文件->新建
3.配置从机相关数据
2.2编写Java代码
1.创建一个maven项目
2.添加jlibmodbus依赖
<dependency>
<groupId>com.intelligt.modbus</groupId>
<artifactId>jlibmodbus</artifactId>
<version>1.2.9.7</version>
</dependency>
3.编写Java代码
package com.beyondli;
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;
public class ModbusPollTCPTest {
public static void main(String[] args) {
try {
// 设置主机TCP参数
TcpParameters tcpParameters = new TcpParameters();
// 设置TCP的ip地址
InetAddress adress = InetAddress.getByName("127.0.0.1");
// TCP参数设置ip地址
// tcpParameters.setHost(InetAddress.getLocalHost());
tcpParameters.setHost(adress);
// TCP设置长连接
tcpParameters.setKeepAlive(true);
// TCP设置端口,这里设置是默认端口502
tcpParameters.setPort(Modbus.TCP_PORT);
// 创建一个主机
ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);
Modbus.setAutoIncrementTransactionId(true);
int slaveId = 1;//从机地址
int offset = 0;//寄存器读取开始地址
int quantity = 5;//读取的寄存器数量
while (true) {
try {
if (!master.isConnected()) {
master.connect();// 开启连接
}
// 读取对应从机的数据,readInputRegisters读取的写寄存器,功能码04
//int[] registerValues = master.readInputRegisters(slaveId, offset, quantity);
int[] registerValues = master.readHoldingRegisters(slaveId, offset, quantity);
// 控制台输出
for (int value : registerValues) {
System.out.println(" Value: " + value);
}
//修改3号位为7165
master.writeSingleRegister(slaveId, 2, 7165);
Thread.sleep(1000);
}catch (Exception e) {
e.printStackTrace();
Thread.sleep(1000);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}