J2Mod是一个Java编写的Modbus通信库,可以用于实现Modbus RTU服务器。以下是一个简单的示例,演示如何使用J2Mod库创建一个Modbus RTU服务器:
- 添加J2Mod库依赖项: 首先,确保在项目中包含J2Mod库。你可以将J2Mod库添加到项目中,方法取决于你使用的构建工具(比如Maven或Gradle)。
如果使用Maven,可以在pom.xml文件中添加以下依赖项:
<dependency>
<groupId>com.ghgande.j2mod</groupId>
<artifactId>j2mod</artifactId>
<version>3.1.3</version> <!-- 使用最新版本 -->
</dependency>
如果使用Gradle,可以在build.gradle文件中添加以下依赖项:
implementation 'com.ghgande.j2mod:j2mod:3.1.3' // 使用最新版本
创建Modbus RTU服务器:
下面是一个简单的Modbus RTU服务器示例,监听在COM3串口上,地址为1:
import com.ghgande.j2mod.modbus.Modbus;
import com.ghgande.j2mod.modbus.procimg.SimpleDigitalIn;
import com.ghgande.j2mod.modbus.procimg.SimpleDigitalOut;
import com.ghgande.j2mod.modbus.procimg.SimpleProcessImage;
import com.ghgande.j2mod.modbus.serial.SerialParameters;
import com.ghgande.j2mod.modbus.serial.SerialPort;
import com.ghgande.j2mod.modbus.serial.SerialUtils;
import com.ghgande.j2mod.modbus.serial.SerialPortException;
import com.ghgande.j2mod.modbus.serial.SerialPortFactory;
import com.ghgande.j2mod.modbus.ModbusCoupler;
public class ModbusRTUServerExample {
public static void main(String[] args) {
try {
// Create a process image with a single coil at address 0
SimpleProcessImage spi = new SimpleProcessImage();
spi.addDigitalOut(new SimpleDigitalOut(true)); // Coil at address 0
spi.addDigitalIn(new SimpleDigitalIn(false)); // Input at address 1
// Set up the serial parameters
SerialParameters serialParameters = new SerialParameters();
serialParameters.setCommPortId("COM3");
serialParameters.setBaudRate(SerialPort.BAUD_9600);
serialParameters.setDatabits(8);
serialParameters.setParity(SerialPort.PARITY_NONE);
serialParameters.setStopbits(1);
serialParameters.setEncoding(Modbus.SERIAL_ENCODING_RTU);
serialParameters.setEcho(false);
// Create the Modbus RTU serial port
SerialPort serialPort = SerialPortFactory.create(serialParameters);
serialPort.open();
// Set the serial port for ModbusCoupler
ModbusCoupler.getReference().setMaster(false);
ModbusCoupler.getReference().setUnitID(1);
ModbusCoupler.getReference().setProcessImage(spi);
ModbusCoupler.getReference().setSerialPort(serialPort);
// Start the Modbus RTU server
ModbusCoupler.getReference().start();
System.out.println("Modbus RTU server is running...");
// Wait forever (you can add your own logic here)
while (true) {
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 请注意,此示例中使用的串口是"COM3",你可能需要根据你的系统配置更改串口。确保你有足够的权限访问该串口。