|
|
|
|
@ -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)) { |
|
|
|
|
|