diff --git a/user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java b/user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java index 7722232..3a99abd 100644 --- a/user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java +++ b/user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java @@ -59,6 +59,12 @@ public class WtMeterStrategy implements DeviceStrategy { // 检验和 String checkSum = ExchangeStringUtil.makeChecksum(str); str = "FEFEFE" + str + checkSum + "16"; + } else if (brand.equals("宁波时代MODBUS")) { + // 这个是表后两位 + str = ExchangeStringUtil.addZeroForNum(deviceAddr, 2); + str = str + "0300000002";//读表累计值 + String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 + str = str + checkWord; } else if (brand.equals("脉冲")) { str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.addZeroForNum(str, 2); @@ -98,7 +104,7 @@ public class WtMeterStrategy implements DeviceStrategy { } else { log.info("水表报文检验失败: " + dataStr); } - } else if (dataStr.length() == 18) { + } else if (dataStr.length() == 18 && "脉冲".equals(brand)) { String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文 byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); int checkNum = CRC16.CRC16_MODBUS(strOrder); @@ -113,7 +119,23 @@ public class WtMeterStrategy implements DeviceStrategy { } else { log.info("水表报文检验失败: " + dataStr); } + } else if (dataStr.length() == 18 && "宁波时代MODBUS".equals(brand)) { + String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文 + byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); + int checkNum = CRC16.CRC16_MODBUS(strOrder); + String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); + checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); + String sValue = null; + if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { + meterId = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 + if (checkStr.substring(2, 4).equalsIgnoreCase("03")) { + data = String.valueOf(Integer.parseInt(ExchangeStringUtil.hexToDec(checkStr.substring(6, 14))) / 100); //读数 + } + } else { + log.info("水表报文检验失败: " + dataStr); + } } + log.info("水表表号: " + meterId + ",水表读数:" + data); try { if (!StringUtils.isBlank(data)) {