Modbus初体验
package com.zz.modbus;
import com.intelligt.modbus.jlibmodbus.Modbus;
import com.intelligt.modbus.jlibmodbus.exception.ModbusIOException;
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;
import java.net.UnknownHostException;
/**
* @Projectname: modbusTest
* @Filename: ModusTest
* @Author: wyf
* @Data: 2022/12/7 13:56
* @Description: TODO
*/
public class ModbusTest {
public static void main(String[] args) throws UnknownHostException {
//设置主机参数
TcpParameters tcpParameters = new TcpParameters();
//设置Tcp的ip地址
InetAddress address = InetAddress.getByName("127.0.0.1");
//Tcp参数设置主机地址
tcpParameters.setHost(address);
//Tcp设置长连接
tcpParameters.setKeepAlive(true);
//Tcp设置端口
tcpParameters.setPort(502);
//创建一个主机
ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);
Modbus.setAutoIncrementTransactionId(true);
int slaveId = 1;
int offset = 0;
int quantity = 10;
try {
if (!master.isConnected()){
master.connect();
}
//04功能码,读取输入寄存器
int[] registersValues = master.readInputRegisters(slaveId, offset, quantity);
//03功能码,读取保持寄存器
int[] readHoldingRegistersValues = master.readHoldingRegisters(slaveId, offset, quantity);
//01功能码,读取线圈
boolean[] coilsValues = master.readCoils(slaveId, offset, quantity);
//02功能码,读取离散输入
boolean[] discreteInputsValues = master.readDiscreteInputs(slaveId, offset, quantity);
// 控制台输出
for (int value : registersValues) {
System.out.println("Address: " + offset++ + ", Value: " + value);
}
System.out.println("================================================");
for (int value : readHoldingRegistersValues) {
System.out.println("Address: " + offset++ + ", Value: " + value);
}
System.out.println("================================================");
for (boolean value : coilsValues){
System.out.println("Address: " + offset++ + ", Value: " + value);
}
System.out.println("================================================");
for (boolean value : discreteInputsValues){
System.out.println("Address: " + offset++ + ", Value: " + value);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
master.disconnect();
} catch (ModbusIOException e) {
e.printStackTrace();
}
}
}
}
04功能码,读取输入寄存器,只读
//04功能码
//编写请求
ModbusRequest inputRequest = ModbusRequestBuilder.getInstance().buildReadInputRegisters(slaveId, offset, quantity);
//发送请求
ReadInputRegistersResponse inputResponse = (ReadInputRegistersResponse) master.processRequest(inputRequest);
//获取值
int[] registers01 = inputResponse.getHoldingRegisters().getRegisters();
for (int value : registers01){
System.out.println(value);
}
03功能码,读取保持寄存器,读写
//03功能码,读取保持寄存器
//编写请求
ModbusRequest holdRequest = ModbusRequestBuilder.getInstance().buildReadHoldingRegisters(slaveId, offset, quantity);
//发送请求
ReadHoldingRegistersResponse holdResponse =(ReadHoldingRegistersResponse) master.processRequest(holdRequest);
//获取值
int[] registers02 = holdResponse.getHoldingRegisters().getRange(2, 3);
for (int value : registers02){
System.out.println(value);
}
写入寄存器
三个参数分别是:从机地址,写入位置,写入的值
ModbusRequest request = ModbusRequestBuilder.getInstance().buildWriteSingleRegister(slaveId, 1, 5);
WriteSingleRegisterResponse response = (WriteSingleRegisterResponse) master.processRequest(request);
02功能码,读取离散输入,只读
boolean[] discreteInputsValues = master.readDiscreteInputs(slaveId, offset, quantity);
01功能码,读取线圈,读写
boolean[] coilsValues = master.readCoils(slaveId, offset, quantity);