65 lines
2.7 KiB
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();
|
||
|
}
|
||
|
}
|