gasWellWatch/src/test/java/com/isu/gaswellwatch/ModbusTest.java

65 lines
2.7 KiB
Java

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<String, Object> 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();
}
}