Browse Source

1、添加宁波时代水表modbus协议读取

dev
3067418132@qq.com 3 weeks ago
parent
commit
2d6539fdf9
  1. 24
      user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java

24
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); String checkSum = ExchangeStringUtil.makeChecksum(str);
str = "FEFEFE" + str + checkSum + "16"; 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("脉冲")) { } else if (brand.equals("脉冲")) {
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2); str = ExchangeStringUtil.addZeroForNum(str, 2);
@ -98,7 +104,7 @@ public class WtMeterStrategy implements DeviceStrategy {
} else { } else {
log.info("水表报文检验失败: " + dataStr); log.info("水表报文检验失败: " + dataStr);
} }
} else if (dataStr.length() == 18) { } else if (dataStr.length() == 18 && "脉冲".equals(brand)) {
String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文 String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文
byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr);
int checkNum = CRC16.CRC16_MODBUS(strOrder); int checkNum = CRC16.CRC16_MODBUS(strOrder);
@ -113,7 +119,23 @@ public class WtMeterStrategy implements DeviceStrategy {
} else { } else {
log.info("水表报文检验失败: " + dataStr); 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); log.info("水表表号: " + meterId + ",水表读数:" + data);
try { try {
if (!StringUtils.isBlank(data)) { if (!StringUtils.isBlank(data)) {

Loading…
Cancel
Save