|
|
|
|
@ -343,4 +343,52 @@ public class AnalysisReceiveOrder485 {
|
|
|
|
|
} |
|
|
|
|
return ""; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public String analysisTempHumiditySensorOrder485(String receiveStr, CollectionParamsManage deviceCodeParam) { |
|
|
|
|
// 去掉空格
|
|
|
|
|
String dataStr = receiveStr.replace(" ", "").toUpperCase(); |
|
|
|
|
// 检验报文
|
|
|
|
|
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); |
|
|
|
|
|
|
|
|
|
if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { |
|
|
|
|
// 表号
|
|
|
|
|
String cloudId = ExchangeStringUtil.hexToDec(dataStr.substring(0, 2)); |
|
|
|
|
// 读数
|
|
|
|
|
String data = ""; |
|
|
|
|
data = dataStr.substring(dataStr.length() - 8, dataStr.length() - 4); |
|
|
|
|
|
|
|
|
|
int dataType = deviceCodeParam.getDataType(); |
|
|
|
|
try { |
|
|
|
|
if (dataType == 2) { |
|
|
|
|
data = ExchangeStringUtil.hexToDec(data); |
|
|
|
|
BigDecimal bigDecimal = new BigDecimal(data); |
|
|
|
|
if (deviceCodeParam.getParamType().equals("12")){ |
|
|
|
|
// 温度
|
|
|
|
|
bigDecimal = bigDecimal.multiply(new BigDecimal(550)).divide(new BigDecimal(1650)).subtract(new BigDecimal(40)); |
|
|
|
|
} else if (deviceCodeParam.getParamType().equals("35")) { |
|
|
|
|
// 湿度
|
|
|
|
|
bigDecimal = bigDecimal.multiply(new BigDecimal(100)); |
|
|
|
|
} |
|
|
|
|
bigDecimal = bigDecimal.divide(new BigDecimal((int) Math.pow(10, deviceCodeParam.getDigits()))).setScale(3, RoundingMode.HALF_UP); // 除以1000并保留整数
|
|
|
|
|
data = bigDecimal.toString(); |
|
|
|
|
// log.info("液位==>{},寄存器地址==>{},实时读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
|
|
|
|
|
} |
|
|
|
|
// // 判断data大于99999999,就返回空
|
|
|
|
|
// if (new BigDecimal(data).intValue() > 130) {
|
|
|
|
|
// return "";
|
|
|
|
|
// }
|
|
|
|
|
return data; |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("保存液位数据失败!", e); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
// log.info("液位===>{}", dataStr);
|
|
|
|
|
return ""; |
|
|
|
|
} |
|
|
|
|
return ""; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|