J2Mod库的Modbus核心代码主要用于实现Modbus协议的通信功能。以下是Modbus核心代码的讲解和示例:
1. 创建Modbus连接
首先,您需要创建一个Modbus连接对象,指定要连接的Modbus设备的IP地址和端口号。
import com.ghgande.j2mod.modbus.ModbusConnection;
import com.ghgande.j2mod.modbus.ModbusFactory; public class ModbusExample { public static void main(String[] args) { try { // 创建Modbus连接对象 ModbusConnection connection = ModbusFactory.createModbusTCPConnection("192.168.1.100", 502); // 连接到Modbus设备 connection.connect(); // 执行Modbus操作... // 断开连接 connection.disconnect(); } catch (Exception e) { e.printStackTrace(); } }
}
2. 读取保持寄存器
使用readHoldingRegisters()
方法可以读取保持寄存器的值。您需要指定从站地址、寄存器地址和要读取的寄存器数量。
import com.ghgande.j2mod.modbus.ModbusConnection;
import com.ghgande.j2mod.modbus.ModbusFactory;
import com.ghgande.j2mod.modbus.procimg.Register;
import com.ghgande.j2mod.modbus.procimg.SimpleRegister;
import com.ghgande.j2mod.modbus.util.SerialParameters;
import java.util.Arrays;
import java.util.List; public class ModbusExample { public static void main(String[] args) { try { // 创建Modbus连接对象并连接到设备... // ...省略连接代码... // 读取保持寄存器示例:从站地址为1,起始寄存器地址为0,读取2个寄存器 int slaveId = 1; // 从站地址 int registerAddress = 0; // 寄存器地址 int numRegisters = 2; // 寄存器数量 List<Register> registers = connection.readHoldingRegisters(slaveId, registerAddress, numRegisters); // 处理读取到的寄存器值... for (Register register : registers) { System.out.println("Register Value: " + ((SimpleRegister) register).getValue()); } // 断开连接...省略代码... } catch (Exception e) { e.printStackTrace(); } }
}
3. 写入寄存器
使用writeSingleRegister()
或writeMultipleRegisters()
方法可以写入寄存器的值。您需要指定从站地址、寄存器地址和要写入的寄存器值。对于写入单个寄存器,您可以使用writeSingleRegister()
方法,对于写入多个寄存器,您可以使用writeMultipleRegisters()
方法。以下是示例代码:
写入单个寄存器:
import com.ghgande.j2mod.modbus.ModbusConnection;
import com.ghgande.j2mod.modbus.procimg.Register;
import com.ghgande.j2mod.modbus.procimg.SimpleRegister;
import java.util.Arrays;
import java.util.List; public class ModbusExample { public static void main(String[] args) { try { // 创建Modbus连接对象并连接到设备...省略代码... int slaveId = 1; // 从站地址 int registerAddress = 0; // 寄存器地址 int valueToWrite = 123; // 要写入的值 connection.writeSingleRegister(slaveId, registerAddress, new SimpleRegister(valueToWrite)); // 断开连接...省略代码... } catch (Exception e) { e.printStackTrace(); } }
}