Browse Source

1、添加液位计采集

dev_mz
25604 3 weeks ago
parent
commit
1be07e2157
  1. 128
      mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java
  2. 3
      mh-framework/src/main/java/com/mh/framework/netty/EchoServerHandler.java
  3. 9
      mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java

128
mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java

@ -21,8 +21,8 @@ import java.util.*;
public class AnalysisReceiveOrder485 { public class AnalysisReceiveOrder485 {
// 调用service // 调用service
private final SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // private final SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private final DecimalFormat df = new DecimalFormat("#.##"); // private final DecimalFormat df = new DecimalFormat("#.##");
//解析冷量表 //解析冷量表
public void analysisCloudOrder485(final String dataStr1, final CollectionParamsManage deviceCodeParam) { public void analysisCloudOrder485(final String dataStr1, final CollectionParamsManage deviceCodeParam) {
@ -37,9 +37,8 @@ public class AnalysisReceiveOrder485 {
if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) {
//创建SimpleDateFormat对象,指定样式 2019-05-13 22:39:30 //创建SimpleDateFormat对象,指定样式 2019-05-13 22:39:30
Date date = new Date(); // Date date = new Date();
String dateStr = sdf1.format(date); // String dateStr = sdf1.format(date);
;
//保留两位小数处理 //保留两位小数处理
DecimalFormat decimalFormat = new DecimalFormat("0.00"); DecimalFormat decimalFormat = new DecimalFormat("0.00");
// 表号 // 表号
@ -52,11 +51,11 @@ public class AnalysisReceiveOrder485 {
+ dataStr.substring(dataStr.length() - 10, dataStr.length() - 8); + dataStr.substring(dataStr.length() - 10, dataStr.length() - 8);
String registerAddr = deviceCodeParam.getRegisterAddr(); String registerAddr = deviceCodeParam.getRegisterAddr();
if (ExchangeStringUtil.isInDate(date, "00:00:00", "00:00:30")) { // if (ExchangeStringUtil.isInDate(date, "00:00:00", "00:00:30")) {
dateStr = dateStr.substring(0, 17) + "00"; // dateStr = dateStr.substring(0, 17) + "00";
} else if (ExchangeStringUtil.isInDate(date, "00:00:30", "00:00:59")) { // } else if (ExchangeStringUtil.isInDate(date, "00:00:30", "00:00:59")) {
dateStr = dateStr.substring(0, 17) + "30"; // dateStr = dateStr.substring(0, 17) + "30";
} // }
try { try {
if (registerAddr.equals("32") || registerAddr.equals("33") || registerAddr.equals("35") || registerAddr.equals("36")) { if (registerAddr.equals("32") || registerAddr.equals("33") || registerAddr.equals("35") || registerAddr.equals("36")) {
data = decimalFormat.format(Math.abs(ExchangeStringUtil.hexToSingle(data)));//十六进制字符串转IEEE754浮点型 data = decimalFormat.format(Math.abs(ExchangeStringUtil.hexToSingle(data)));//十六进制字符串转IEEE754浮点型
@ -90,9 +89,8 @@ public class AnalysisReceiveOrder485 {
if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) {
//创建SimpleDateFormat对象,指定样式 2019-05-13 22:39:30 //创建SimpleDateFormat对象,指定样式 2019-05-13 22:39:30
Date date = new Date(); // Date date = new Date();
String dateStr = sdf1.format(date); // String dateStr = sdf1.format(date);
;
//保留两位小数处理 //保留两位小数处理
DecimalFormat decimalFormat = new DecimalFormat("0.00"); DecimalFormat decimalFormat = new DecimalFormat("0.00");
// 表号 // 表号
@ -105,13 +103,13 @@ public class AnalysisReceiveOrder485 {
+ dataStr.substring(dataStr.length() - 10, dataStr.length() - 8); + dataStr.substring(dataStr.length() - 10, dataStr.length() - 8);
int dataType = deviceCodeParam.getDataType(); int dataType = deviceCodeParam.getDataType();
if (ExchangeStringUtil.isInDate(date, "00:00:00", "00:00:30")) { // if (ExchangeStringUtil.isInDate(date, "00:00:00", "00:00:30")) {
dateStr = dateStr.substring(0, 17) + "00"; // dateStr = dateStr.substring(0, 17) + "00";
System.out.println("插入时间00" + dateStr); // // System.out.println("插入时间00" + dateStr);
} else if (ExchangeStringUtil.isInDate(date, "00:00:30", "00:00:59")) { // } else if (ExchangeStringUtil.isInDate(date, "00:00:30", "00:00:59")) {
dateStr = dateStr.substring(0, 17) + "30"; // dateStr = dateStr.substring(0, 17) + "30";
System.out.println("插入时间30" + dateStr); // // System.out.println("插入时间30" + dateStr);
} // }
try { try {
if (dataType == 3) { if (dataType == 3) {
data = decimalFormat.format(Math.abs(ExchangeStringUtil.hexToSingle(data)));//十六进制字符串转IEEE754浮点型 data = decimalFormat.format(Math.abs(ExchangeStringUtil.hexToSingle(data)));//十六进制字符串转IEEE754浮点型
@ -160,8 +158,8 @@ public class AnalysisReceiveOrder485 {
if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) {
//创建SimpleDateFormat对象,指定样式 2019-05-13 22:39:30 //创建SimpleDateFormat对象,指定样式 2019-05-13 22:39:30
Date date = new Date(); // Date date = new Date();
String dateStr = sdf1.format(date); // String dateStr = sdf1.format(date);
; ;
//保留两位小数处理 //保留两位小数处理
DecimalFormat decimalFormat = new DecimalFormat("0.00"); DecimalFormat decimalFormat = new DecimalFormat("0.00");
@ -175,13 +173,13 @@ public class AnalysisReceiveOrder485 {
+ dataStr.substring(dataStr.length() - 10, dataStr.length() - 8); + dataStr.substring(dataStr.length() - 10, dataStr.length() - 8);
int dataType = deviceCodeParam.getDataType(); int dataType = deviceCodeParam.getDataType();
if (ExchangeStringUtil.isInDate(date, "00:00:00", "00:00:30")) { // if (ExchangeStringUtil.isInDate(date, "00:00:00", "00:00:30")) {
dateStr = dateStr.substring(0, 17) + "00"; // dateStr = dateStr.substring(0, 17) + "00";
System.out.println("插入时间00" + dateStr); // // System.out.println("插入时间00" + dateStr);
} else if (ExchangeStringUtil.isInDate(date, "00:00:30", "00:00:59")) { // } else if (ExchangeStringUtil.isInDate(date, "00:00:30", "00:00:59")) {
dateStr = dateStr.substring(0, 17) + "30"; // dateStr = dateStr.substring(0, 17) + "30";
System.out.println("插入时间30" + dateStr); // // System.out.println("插入时间30" + dateStr);
} // }
try { try {
if (dataType == 3) { if (dataType == 3) {
data = decimalFormat.format(Math.abs(ExchangeStringUtil.hexToSingle(data)));//十六进制字符串转IEEE754浮点型 data = decimalFormat.format(Math.abs(ExchangeStringUtil.hexToSingle(data)));//十六进制字符串转IEEE754浮点型
@ -212,7 +210,7 @@ public class AnalysisReceiveOrder485 {
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
long min1 = calendar.getTimeInMillis(); long min1 = calendar.getTimeInMillis();
long subtract = min1 - min; long subtract = min1 - min;
// System.out.println("相减值: " + subtract/(1000*60)); // // System.out.println("相减值: " + subtract/(1000*60));
return (int) subtract / (1000 * 60); return (int) subtract / (1000 * 60);
} }
@ -241,8 +239,8 @@ public class AnalysisReceiveOrder485 {
if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) {
//创建SimpleDateFormat对象,指定样式 2019-05-13 22:39:30 //创建SimpleDateFormat对象,指定样式 2019-05-13 22:39:30
Date date = new Date(); // Date date = new Date();
String dateStr = sdf1.format(date); // String dateStr = sdf1.format(date);
//保留两位小数处理 //保留两位小数处理
DecimalFormat decimalFormat = new DecimalFormat("0.00"); DecimalFormat decimalFormat = new DecimalFormat("0.00");
@ -254,13 +252,13 @@ public class AnalysisReceiveOrder485 {
+ dataStr.substring(dataStr.length() - 6, dataStr.length() - 4); + dataStr.substring(dataStr.length() - 6, dataStr.length() - 4);
int dataType = deviceCodeParam.getDataType(); int dataType = deviceCodeParam.getDataType();
if (ExchangeStringUtil.isInDate(date, "00:00:00", "00:00:30")) { // if (ExchangeStringUtil.isInDate(date, "00:00:00", "00:00:30")) {
dateStr = dateStr.substring(0, 17) + "00"; // dateStr = dateStr.substring(0, 17) + "00";
System.out.println("插入时间00" + dateStr); // // System.out.println("插入时间00" + dateStr);
} else if (ExchangeStringUtil.isInDate(date, "00:00:30", "00:00:59")) { // } else if (ExchangeStringUtil.isInDate(date, "00:00:30", "00:00:59")) {
dateStr = dateStr.substring(0, 17) + "30"; // dateStr = dateStr.substring(0, 17) + "30";
System.out.println("插入时间30" + dateStr); // // System.out.println("插入时间30" + dateStr);
} // }
try { try {
if (dataType == 3) { if (dataType == 3) {
data = decimalFormat.format(Math.abs(ExchangeStringUtil.hexToSingle(data)));//十六进制字符串转IEEE754浮点型 data = decimalFormat.format(Math.abs(ExchangeStringUtil.hexToSingle(data)));//十六进制字符串转IEEE754浮点型
@ -283,4 +281,56 @@ public class AnalysisReceiveOrder485 {
} }
return ""; return "";
} }
public String analysisLiquidOrder485(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))) {
//创建SimpleDateFormat对象,指定样式 2019-05-13 22:39:30
// Date date = new Date();
// String dateStr = sdf1.format(date);
// 表号
String cloudId = ExchangeStringUtil.hexToDec(dataStr.substring(0, 2));
// 读数
String data = "";
data = dataStr.substring(dataStr.length() - 8, dataStr.length() - 4);
int dataType = deviceCodeParam.getDataType();
// if (ExchangeStringUtil.isInDate(date, "00:00:00", "00:00:30")) {
// dateStr = dateStr.substring(0, 17) + "00";
// //// System.out.println("插入时间00" + dateStr);
// } else if (ExchangeStringUtil.isInDate(date, "00:00:30", "00:00:59")) {
// dateStr = dateStr.substring(0, 17) + "30";
// //.out.println("插入时间30" + dateStr);
// }
try {
if (dataType == 2 && (deviceCodeParam.getParamType().equals("11"))) {
data = ExchangeStringUtil.hexToDec(data);
BigDecimal bigDecimal = new BigDecimal(data);
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() > 100) {
return "";
}
return data;
} catch (Exception e) {
log.error("保存液位数据失败!", e);
}
} else {
log.info("液位===>{}", dataStr);
return "";
}
return "";
}
} }

3
mh-framework/src/main/java/com/mh/framework/netty/EchoServerHandler.java

@ -365,6 +365,9 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter {
case "48" -> case "48" ->
// 热泵读取电流 // 热泵读取电流
analysisData = analysisReceiveOrder485.analysisHeatPumpOrder485(receiveStr, deviceCodeParamEntity); analysisData = analysisReceiveOrder485.analysisHeatPumpOrder485(receiveStr, deviceCodeParamEntity);
case "11" ->
// 液位计
analysisData = analysisReceiveOrder485.analysisLiquidOrder485(receiveStr, deviceCodeParamEntity);
default -> { default -> {
log.info("设备类型错误"); log.info("设备类型错误");
return; return;

9
mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java

@ -357,6 +357,13 @@ public interface CollectionParamsManageMapper extends BaseMapper<CollectionParam
@Select("select * from collection_params_manage cpm " + @Select("select * from collection_params_manage cpm " +
" where cpm.system_type = '1' and is_use = 0 " + " where cpm.system_type = '1' and is_use = 0 " +
" and (param_type= '16' or param_type='18' or param_type = '5' or param_type = '2' or param_type = '12' or param_type = '14' or param_type = '48')") " and (param_type= '16' " +
" or param_type='18' " +
" or param_type = '5' " +
" or param_type = '2' " +
" or param_type = '12' " +
" or param_type = '14' " +
" or param_type = '11' " +
" or param_type = '48')")
List<CollectionParamsManage> createOrderList(); List<CollectionParamsManage> createOrderList();
} }

Loading…
Cancel
Save