package com.isu.gaswellwatch; import com.serotonin.modbus4j.code.FunctionCode; import com.serotonin.modbus4j.msg.*; import com.serotonin.modbus4j.serial.rtu.RtuMessageParser; import com.serotonin.modbus4j.serial.rtu.RtuMessageResponse; import com.serotonin.modbus4j.sero.util.queue.ByteQueue; import org.apache.commons.lang3.StringUtils; import java.util.HashMap; import java.util.Map; public class ModbusTest { public static void main(String[] args) throws Exception { test(); } public static void test() throws Exception { // "01 03 40 0000 0960 0000 0258 0000 0258 0000 0064 000299A0 0000012C0000012C0000012C0000070800002A3000000E1000007E900000000A0000000A0000000A0000000044D0" String collectionMessage = "01034000000960000002580000025800000064000299A00000012C0000012C0000012C0000070800002A3000000E1000007E900000000A0000000A0000000A0000000044D0"; ByteQueue byteQueue = new ByteQueue(collectionMessage); RtuMessageParser masterParser = new RtuMessageParser(true); RtuMessageResponse response = (RtuMessageResponse) masterParser.parseMessage(byteQueue); ModbusResponse modbusResponse = response.getModbusResponse(); short[] values = null; switch (modbusResponse.getFunctionCode()) { case FunctionCode.READ_COILS -> { values = ((ReadCoilsResponse) modbusResponse).getShortData(); } case FunctionCode.READ_DISCRETE_INPUTS -> { values = ((ReadDiscreteInputsResponse) modbusResponse).getShortData(); } case FunctionCode.READ_INPUT_REGISTERS -> { values = ((ReadInputRegistersResponse) modbusResponse).getShortData(); } case FunctionCode.READ_HOLDING_REGISTERS -> { values = ((ReadHoldingRegistersResponse) modbusResponse).getShortData(); } case FunctionCode.READ_EXCEPTION_STATUS -> { values = new short[]{((ReadExceptionStatusResponse) modbusResponse).getExceptionStatus()}; } default -> { throw new RuntimeException("Funcetion code not supported: " + modbusResponse.getFunctionCode()); } } String address; int startAddress = 150, index = 0, stepSize = 0; Map messagePointMap = new HashMap<>(); for (short value : values) { stepSize = index * 4; address = StringUtils.leftPad(String.valueOf(startAddress), 4, '0'); System.out.println(address + ": " + StringUtils.substring(collectionMessage, 6 + stepSize, 10 + stepSize) + " -> " + String.valueOf(value)); startAddress++; index++; } System.out.println(); } }