Browse Source

1、修改正帝热泵控制参数

dev
3067418132@qq.com 2 weeks ago
parent
commit
ab9cd2915f
  1. 2
      user-service/src/main/java/com/mh/user/entity/CollectionParamsManageEntity.java
  2. 1
      user-service/src/main/java/com/mh/user/mapper/CollectionParamsManageMapper.java
  3. 3
      user-service/src/main/java/com/mh/user/service/impl/CollectionParamsManageServiceImpl.java
  4. 30
      user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java
  5. 2
      user-service/src/main/java/com/mh/user/strategy/HeatPumpStrategy.java
  6. 26
      user-service/src/main/java/com/mh/user/utils/XK814ModbusParamWriteUtil.java

2
user-service/src/main/java/com/mh/user/entity/CollectionParamsManageEntity.java

@ -78,7 +78,7 @@ public class CollectionParamsManageEntity implements Serializable {
/** /**
* 参数组类型 * 参数组类型
*/ */
private Integer paramGroupTypeId; private Integer paramTypeGroupId;
/** 遥测、遥信数据类型 */ /** 遥测、遥信数据类型 */
private Integer collectionType; private Integer collectionType;
/** 上报质量 */ /** 上报质量 */

1
user-service/src/main/java/com/mh/user/mapper/CollectionParamsManageMapper.java

@ -266,6 +266,7 @@ public interface CollectionParamsManageMapper extends BaseMapper<CollectionParam
@Result(column = "other_name", property = "otherName"), @Result(column = "other_name", property = "otherName"),
@Result(column = "grade", property = "grade"), @Result(column = "grade", property = "grade"),
@Result(column = "param_type_id", property = "paramTypeId"), @Result(column = "param_type_id", property = "paramTypeId"),
@Result(column = "param_type_group_id", property = "paramTypeGroupId"),
@Result(column = "collection_type", property = "collectionType"), @Result(column = "collection_type", property = "collectionType"),
@Result(column = "quality", property = "quality") @Result(column = "quality", property = "quality")
}) })

3
user-service/src/main/java/com/mh/user/service/impl/CollectionParamsManageServiceImpl.java

@ -167,6 +167,9 @@ public class CollectionParamsManageServiceImpl implements CollectionParamsManage
categoryRules.put("开机界面", new int[]{1, 6}); categoryRules.put("开机界面", new int[]{1, 6});
categoryRules.put("水箱界面", new int[]{7, 8}); categoryRules.put("水箱界面", new int[]{7, 8});
categoryRules.put("未分组", new int[]{9, Integer.MAX_VALUE}); categoryRules.put("未分组", new int[]{9, Integer.MAX_VALUE});
} else if ("定时参数".equals(deviceType)) {
// 定时参数1分组规则
categoryRules.put("定时参数1", new int[]{1, 5});
} }
// 如果没有定义分组规则,直接返回原children包装成的DTO列表 // 如果没有定义分组规则,直接返回原children包装成的DTO列表

30
user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java

@ -6,6 +6,7 @@ import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.*; import com.mh.user.entity.*;
import com.mh.user.mapper.CollectionParamsManageMapper; import com.mh.user.mapper.CollectionParamsManageMapper;
import com.mh.user.mapper.DeviceInstallMapper;
import com.mh.user.model.*; import com.mh.user.model.*;
import com.mh.user.serialport.SerialPortSingle2; import com.mh.user.serialport.SerialPortSingle2;
import com.mh.user.service.*; import com.mh.user.service.*;
@ -47,6 +48,9 @@ public class DeviceControlServiceImpl implements DeviceControlService {
@Resource @Resource
private CollectionParamsManageMapper collectionParamsManageMapper; private CollectionParamsManageMapper collectionParamsManageMapper;
@Resource
private DeviceInstallMapper deviceInstallMapper;
@Override @Override
public String getSn(SerialPortModel serialPortModel) { public String getSn(SerialPortModel serialPortModel) {
return collectionParamsManageMapper.selectSn(serialPortModel.getCpmId()); return collectionParamsManageMapper.selectSn(serialPortModel.getCpmId());
@ -125,6 +129,30 @@ public class DeviceControlServiceImpl implements DeviceControlService {
String param = serialPortModel.getParam(); String param = serialPortModel.getParam();
String deviceName = serialPortModel.getDeviceName(); String deviceName = serialPortModel.getDeviceName();
// TODO 因为增加了正帝热泵,collectionParamsManageEntity存储了对呀的地址,所以先判断cpmId是否有值
String cpmId = serialPortModel.getCpmId();
if (!StringUtils.isBlank(cpmId)) {
CollectionParamsManageEntity collectionParamsManageEntity = collectionParamsManageMapper.selectById(cpmId);
if (collectionParamsManageEntity == null) {
return Constant.FAIL;
}
// 判断如果是定时,直接更新
if (collectionParamsManageEntity.getParamTypeGroupId() == 3) {
// 更新定时
collectionParamsManageEntity.setCurTime(new Date());
collectionParamsManageEntity.setCurValue(new BigDecimal(serialPortModel.getDataValue()));
collectionParamsManageMapper.updateById(collectionParamsManageEntity);
return Constant.SUCCESS;
}
Long deviceInstallId = collectionParamsManageEntity.getDeviceInstallId();
DeviceInstallEntity deviceInstallEntity = deviceInstallMapper.selectDeviceById(deviceInstallId);
deviceAddr = deviceInstallEntity.getDeviceAddr();
deviceType = deviceInstallEntity.getDeviceType();
buildingId = deviceInstallEntity.getBuildingId();
deviceCodeParam.setFunCode(collectionParamsManageEntity.getFuncCode());
deviceCodeParam.setRegisterAddr(collectionParamsManageEntity.getRegisterAddr());
deviceCodeParam.setRegisterSize(collectionParamsManageEntity.getRegisterSize());
}
if (StringUtils.isBlank(deviceAddr)) { if (StringUtils.isBlank(deviceAddr)) {
List<DeviceModel> list = null; List<DeviceModel> list = null;
if (StringUtils.isBlank(deviceName)) { if (StringUtils.isBlank(deviceName)) {
@ -784,6 +812,8 @@ public class DeviceControlServiceImpl implements DeviceControlService {
} else if ("海尔2".equals(deviceCodeParam.getBrand())) { } else if ("海尔2".equals(deviceCodeParam.getBrand())) {
deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1302"), 4)); //寄存器地址 deviceCodeParam.setRegisterAddr(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("1302"), 4)); //寄存器地址
deviceCodeParam.setFunCode("06"); //功能码写数据 deviceCodeParam.setFunCode("06"); //功能码写数据
} else if (Constant.BRAND_ZHENG_DI.equals(deviceCodeParam.getBrand())) {
deviceCodeParam.setFunCode("06"); //功能码写数据
} else { } else {
deviceCodeParam.setRegisterAddr("0003"); //寄存器地址 deviceCodeParam.setRegisterAddr("0003"); //寄存器地址
deviceCodeParam.setFunCode("06"); //功能码写数据 deviceCodeParam.setFunCode("06"); //功能码写数据

2
user-service/src/main/java/com/mh/user/strategy/HeatPumpStrategy.java

@ -223,7 +223,7 @@ public class HeatPumpStrategy implements DeviceStrategy {
str = str + funCode + registerAddr + "0002"; str = str + funCode + registerAddr + "0002";
} else if ("06".equals(funCode)) { } else if ("06".equals(funCode)) {
str = XK814ModbusParamWriteUtil.buildWriteSingleRegisterMessage(Integer.parseInt(deviceAddr), registerAddr, dataValue); str = XK814ModbusParamWriteUtil.buildWriteSingleRegisterMessage(Integer.parseInt(deviceAddr), registerAddr, dataValue);
str = str.substring(0, str.length() - 4); return str.toUpperCase();
} }
} }

26
user-service/src/main/java/com/mh/user/utils/XK814ModbusParamWriteUtil.java

@ -31,15 +31,15 @@ public class XK814ModbusParamWriteUtil {
static { static {
// TEMP2 编码:温度 → raw = temp + 32 // TEMP2 编码:温度 → raw = temp + 32
Function<Object, Integer> temp2Encoder = val -> { Function<Object, Integer> temp2Encoder = val -> {
if (!(val instanceof Integer)) throw new IllegalArgumentException("温度值必须是 Integer 类型"); if (!(val instanceof String)) throw new IllegalArgumentException("温度值必须是 String 类型");
int temp = (Integer) val; int temp = Integer.parseInt((String) val);
return temp + 32; return temp + 32;
}; };
// 布尔值编码:true→1, false→0 // 布尔值编码:true→1, false→0
Function<Object, Integer> boolEncoder = val -> { Function<Object, Integer> boolEncoder = val -> {
if (!(val instanceof Boolean)) throw new IllegalArgumentException("开关值必须是 Boolean 类型"); if (!(val instanceof String)) throw new IllegalArgumentException("开关值必须是 String 类型");
return (Boolean) val ? 1 : 0; return Integer.valueOf((String) val);
}; };
// 模式编码:字符串映射到 0/1/2 // 模式编码:字符串映射到 0/1/2
@ -47,11 +47,11 @@ public class XK814ModbusParamWriteUtil {
if (!(val instanceof String)) throw new IllegalArgumentException("模式必须是 String 类型"); if (!(val instanceof String)) throw new IllegalArgumentException("模式必须是 String 类型");
String mode = (String) val; String mode = (String) val;
switch (mode) { switch (mode) {
case "制热": case "0":
return 0; return 0;
case "制冷": case "1":
return 1; return 1;
case "恒温": case "2":
return 2; return 2;
default: default:
throw new IllegalArgumentException("无效模式,必须为 制热/制冷/恒温"); throw new IllegalArgumentException("无效模式,必须为 制热/制冷/恒温");
@ -153,19 +153,23 @@ public class XK814ModbusParamWriteUtil {
// 示例 // 示例
public static void main(String[] args) { public static void main(String[] args) {
// 示例1:从机地址1,设置开机(B000H,true) // 示例1:从机地址1,设置开机(B000H,true)
String msg = buildWriteSingleRegisterMessage(1, ADDR_ON_OFF, true); String msg = buildWriteSingleRegisterMessage(1, ADDR_ON_OFF, "1");
System.out.println("开机报文: " + (msg)); System.out.println("开机报文: " + (msg));
// 示例2:设置制热温度45℃(B002H,45) // 示例2:设置制热温度45℃(B002H,45)
msg = buildWriteSingleRegisterMessage(1, ADDR_HEAT_SET_TEMP, 45); msg = buildWriteSingleRegisterMessage(1, ADDR_HEAT_SET_TEMP, "45");
System.out.println("设置制热温度45℃: " + (msg)); System.out.println("设置制热温度45℃: " + (msg));
// 示例3:设置模式为制冷(B003H,"制冷") // 示例3:设置模式为制冷(B003H,"制冷")
msg = buildWriteSingleRegisterMessage(1, ADDR_MODE, "制冷"); msg = buildWriteSingleRegisterMessage(1, ADDR_MODE, "1");
System.out.println("设置制冷模式: " + (msg)); System.out.println("设置制冷模式: " + (msg));
// 示例3:设置恒温温度25℃(B001H,25)
msg = buildWriteSingleRegisterMessage(1, ADDR_CONSTANT_TEMP_SET, "25");
System.out.println("设置恒温温度25℃: " + (msg));
// 示例4:使用整数地址 // 示例4:使用整数地址
msg = buildWriteSingleRegisterMessage(1, 0xB005, true); // 强制电加热开启 msg = buildWriteSingleRegisterMessage(1, 0xB005, "1"); // 强制电加热开启
System.out.println("强制电加热开启: " + (msg)); System.out.println("强制电加热开启: " + (msg));
} }

Loading…
Cancel
Save