使用Modbus4j+seroUtils读取风速风向仪数据,现有设备IP,端口号,从机地址,寄存器读取开始地址,读取的寄存器数量。没有上述jar包可以自行搜索,网上资源挺多
/*** @author chengy*/@Componentpublic class ModbusUtil {private static ModbusFactory modbusFactory;static {if (modbusFactory == null) {modbusFactory = new ModbusFactory();}}/*** @param ip 远程服务机地址* @param port端口号* @param slaveId 从机地址* @param offset 寄存器读取开始地址* @param quantity 读取的寄存器数量* @return*/public static short[] getValueByRTU(String ip, int port, int slaveId, int offset, int quantity){short[] result = new short[2];IpParameters params = new IpParameters();params.setHost(ip);params.setPort(port);//这个属性确定了协议帧是否是通过tcp封装的RTU结构,采用modbus tcp/ip时,要设为false, 采用modbus rtu over tcp/ip时,要设为trueparams.setEncapsulated(true);com.serotonin.modbus4j.ModbusMaster master = modbusFactory.createTcpMaster(params, true);// TCP 协议try {//设置超时时间master.setTimeout(1000);//设置重连次数master.setRetries(3);//初始化master.init();try {ReadHoldingRegistersRequest request = null;request = new ReadHoldingRegistersRequest(slaveId, offset, quantity);ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master.send(request);if (response.isException())System.out.println("读取风速设备数据失败," + response.getExceptionMessage());elseresult = response.getShortData();} catch (ModbusTransportException e) {throw new RuntimeException("读取风速设备数据失败");}} catch (ModbusInitException e) {throw new RuntimeException("建立风速设备连接失败");}return result;}}
相关文章:Java实现ModbusTCP通信