修复功能码验证问题

This commit is contained in:
wangshilong 2024-11-26 19:22:24 +08:00
parent feab0f55ed
commit 8fefdf5204
4 changed files with 25 additions and 7 deletions

View File

@ -46,7 +46,7 @@ public class ModbusSender {
if (modbusCommandBo.getIdentifier() == null) { if (modbusCommandBo.getIdentifier() == null) {
throw new NullPointerException("Invalid gateway identifier"); throw new NullPointerException("Invalid gateway identifier");
} }
if (!ModbusFunctionCodeEnums.isHandlerHexCode(StringUtils.substring(modbusCommandBo.getCommand(), 2, 2))) { if (!ModbusFunctionCodeEnums.isHandlerHexCode(StringUtils.substring(modbusCommandBo.getCommand(), 2, 4))) {
throw new RuntimeException("Not support command: " + modbusCommandBo.getCommand()); throw new RuntimeException("Not support command: " + modbusCommandBo.getCommand());
} }

View File

@ -56,7 +56,7 @@ public class SyncHandler extends ChannelInboundHandlerAdapter {
return; return;
} }
if (!ModbusFunctionCodeEnums.isHandlerHexCode(StringUtils.substring(msg.toString(), 2, 2))) { if (!ModbusFunctionCodeEnums.isHandlerHexCode(StringUtils.substring(msg.toString(), 2, 4))) {
log.warn("Gateway {} fails to send command {} to return data: {}", log.warn("Gateway {} fails to send command {} to return data: {}",
channel.getIdentifier(), message.getCommand(), msg); channel.getIdentifier(), message.getCommand(), msg);
// TODO 可在此处添加设备告警 // TODO 可在此处添加设备告警

View File

@ -2,6 +2,7 @@ package com.iot.modbus_rtcp.utils;
import com.iot.modbus_rtcp.dto.CommandTypeComparable; import com.iot.modbus_rtcp.dto.CommandTypeComparable;
import lombok.Getter; import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
@ -40,24 +41,24 @@ public enum ModbusFunctionCodeEnums {
this.description = description; this.description = description;
} }
public String getHexCode() { public String getFunctionCode() {
return Integer.toHexString(this.code); return StringUtils.leftPad(Integer.toHexString(this.code), 2, "0");
} }
public static Collection<ModbusFunctionCodeEnums> getAllControlCode() { public static Collection<ModbusFunctionCodeEnums> getAllControlFunctionCode() {
return Arrays.stream(values()) return Arrays.stream(values())
.filter(item -> Objects.equals(CommandTypeComparable.CommandType.CONTROL, item.getCommandType())) .filter(item -> Objects.equals(CommandTypeComparable.CommandType.CONTROL, item.getCommandType()))
.toList(); .toList();
} }
public static Collection<ModbusFunctionCodeEnums> getAllCollectionCode() { public static Collection<ModbusFunctionCodeEnums> getAllCollectionFunctionCode() {
return Arrays.stream(values()) return Arrays.stream(values())
.filter(item -> Objects.equals(CommandTypeComparable.CommandType.COLLECTION, item.getCommandType())) .filter(item -> Objects.equals(CommandTypeComparable.CommandType.COLLECTION, item.getCommandType()))
.toList(); .toList();
} }
public static boolean isHandlerHexCode(String hexCode) { public static boolean isHandlerHexCode(String hexCode) {
return Arrays.stream(values()).anyMatch(item -> Objects.equals(item.getHexCode(), hexCode)); return Arrays.stream(values()).anyMatch(item -> StringUtils.equalsIgnoreCase(item.getFunctionCode(), hexCode));
} }
} }

View File

@ -1,5 +1,7 @@
package com.iot.modbus_rtcp; package com.iot.modbus_rtcp;
import com.iot.modbus_rtcp.utils.ModbusFunctionCodeEnums;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
/** /**
@ -8,6 +10,21 @@ import org.junit.jupiter.api.Test;
*/ */
public class BinaryToDecimalTest { public class BinaryToDecimalTest {
@Test
public void testIsHandlerHexCode() throws Exception {
System.out.println(ModbusFunctionCodeEnums.isHandlerHexCode("01"));
System.out.println(ModbusFunctionCodeEnums.isHandlerHexCode("02"));
System.out.println(ModbusFunctionCodeEnums.isHandlerHexCode("03"));
System.out.println(ModbusFunctionCodeEnums.isHandlerHexCode("04"));
System.out.println(ModbusFunctionCodeEnums.isHandlerHexCode("05"));
System.out.println(ModbusFunctionCodeEnums.isHandlerHexCode("06"));
System.out.println(ModbusFunctionCodeEnums.isHandlerHexCode("0F"));
System.out.println(ModbusFunctionCodeEnums.isHandlerHexCode("10"));
System.out.println(ModbusFunctionCodeEnums.isHandlerHexCode(StringUtils.substring("010400000016", 2, 4)));
System.out.println(ModbusFunctionCodeEnums.isHandlerHexCode(StringUtils.substring("010300640052", 2, 4)));
System.out.println(ModbusFunctionCodeEnums.isHandlerHexCode(StringUtils.substring("010200140004 ", 2, 4)));
}
@Test @Test
public void binaryNegative() { public void binaryNegative() {
int number = 225; int number = 225;