springboot整合modbus4J(二)
- maven依赖
<dependency><groupId>com.infiniteautomation</groupId><artifactId>modbus4j</artifactId><version>3.1.0</version>
</dependency>
<dependency><groupId>net.wimpi</groupId><artifactId>jamod</artifactId><version>1.2</version>
</dependency>
- 代码
import com.serotonin.modbus4j.ModbusFactory;
import com.serotonin.modbus4j.ModbusMaster;
import com.serotonin.modbus4j.code.DataType;
import com.serotonin.modbus4j.exception.ErrorResponseException;
import com.serotonin.modbus4j.exception.ModbusInitException;
import com.serotonin.modbus4j.exception.ModbusTransportException;
import com.serotonin.modbus4j.ip.IpParameters;
import com.serotonin.modbus4j.locator.BaseLocator;
import com.serotonin.modbus4j.msg.*;
import net.wimpi.modbus.io.ModbusTCPTransaction;
import net.wimpi.modbus.msg.ReadMultipleRegistersRequest;
import net.wimpi.modbus.msg.ReadMultipleRegistersResponse;
import net.wimpi.modbus.net.TCPMasterConnection;
import net.wimpi.modbus.procimg.Register;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;import java.net.InetAddress;
import java.util.Properties;
public class Modbus4jWriteUtils {static String host = "192.168.0.5";static int port = 4001;static ModbusFactory modbusFactory;static {if (modbusFactory == null) {modbusFactory = new ModbusFactory();}}public static ModbusMaster getMaster() throws ModbusInitException {IpParameters params = new IpParameters();params.setHost("127.0.0.1");params.setPort(4001);ModbusMaster tcpMaster = modbusFactory.createTcpMaster(params, false);tcpMaster.init();return tcpMaster;}public static boolean writeCoil(int slaveId, int writeOffset, boolean writeValue)throws ModbusTransportException, ModbusInitException {ModbusMaster tcpMaster = getMaster();WriteCoilRequest request = new WriteCoilRequest(slaveId, writeOffset, writeValue);WriteCoilResponse response = (WriteCoilResponse) tcpMaster.send(request);if (response.isException()) {return false;} else {return true;}}public static boolean writeCoils(int slaveId, int startOffset, boolean[] bdata)throws ModbusTransportException, ModbusInitException {ModbusMaster tcpMaster = getMaster();WriteCoilsRequest request = new WriteCoilsRequest(slaveId, startOffset, bdata);WriteCoilsResponse response = (WriteCoilsResponse) tcpMaster.send(request);if (response.isException()) {return false;} else {return true;}}public static boolean writeRegister(int slaveId, int writeOffset, int writeValue)throws ModbusTransportException, ModbusInitException {ModbusMaster tcpMaster = getMaster();WriteRegisterRequest request = new WriteRegisterRequest(slaveId, writeOffset, writeValue);WriteRegisterResponse response = null;try {response = (WriteRegisterResponse) tcpMaster.send(request);if (response.isException()) {System.out.println(response.getExceptionMessage());return false;}} catch (Exception e) {e.getMessage();System.err.println(e.getMessage());}return true;}public static boolean writeRegisters(int slaveId, int startOffset, short[] sdata)throws ModbusTransportException, ModbusInitException {ModbusMaster tcpMaster = getMaster();WriteRegistersRequest request = new WriteRegistersRequest(slaveId, startOffset, sdata);ModbusResponse response = tcpMaster.send(request);if (response.isException()) {System.out.println(response.getExceptionMessage());return false;} else {return true;}}public static void writeHoldingRegister(int slaveId, int offset, Number value, int dataType)throws ModbusTransportException, ErrorResponseException, ModbusInitException {ModbusMaster tcpMaster = getMaster();BaseLocator<Number> locator = BaseLocator.holdingRegister(slaveId, offset, dataType);tcpMaster.setValue(locator, value);}public static Object getCommonYml(Object key){Resource resource = new ClassPathResource("application.yml");Properties properties = null;try {YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();yamlFactory.setResources(resource);properties = yamlFactory.getObject();} catch (Exception e) {e.printStackTrace();return null;}return properties.get(key);}public static Number holdingRegister(int slaveId, int offset, int dataType) throws ModbusInitException, ModbusTransportException, ErrorResponseException {BaseLocator<Number> holdingRegister = BaseLocator.holdingRegister(slaveId, offset, dataType);Number value = getMaster().getValue(holdingRegister);return value;}public static void main(String[] args) {try {InetAddress ipAddress = InetAddress.getByName("127.0.0.1");int port = 4001; TCPMasterConnection connection = new TCPMasterConnection(ipAddress);connection.setPort(port);connection.connect();ReadMultipleRegistersRequest request = new ReadMultipleRegistersRequest(0, 2);request.setUnitID(1); ModbusTCPTransaction transaction = new ModbusTCPTransaction(connection);transaction.setRequest(request);transaction.execute();ReadMultipleRegistersResponse response = (ReadMultipleRegistersResponse) transaction.getResponse();if (response != null) {Register[] registers = response.getRegisters();for (Register value : registers) {System.out.println("value:" + value.getValue());}} else {System.out.println("Response is null.");}connection.close();} catch (Exception e) {e.printStackTrace();}}public static void main1(String[] args) throws ModbusInitException, ModbusTransportException, ErrorResponseException {
short v = -2;boolean t03 = writeRegister(1, 2, 100);System.out.println("T03:" + t03);Number number = holdingRegister(1,2,DataType.TWO_BYTE_INT_SIGNED);System.out.println(number);
}
}