Browse Source

设备控制代码整理优化

prod_202403
mh 9 months ago
parent
commit
4f478a504d
  1. 54
      user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java
  2. 7
      user-service/src/main/java/com/mh/user/serialport/SerialTool.java
  3. 33
      user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java
  4. 8
      user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java
  5. 61
      user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java
  6. 79
      user-service/src/main/java/com/mh/user/utils/CacheTools.java
  7. 622
      user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java

54
user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java

@ -1,20 +1,20 @@
package com.mh.user.serialport; package com.mh.user.serialport;
import com.mh.common.utils.StringUtils; import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.service.BuildingService; import com.mh.user.service.BuildingService;
import com.mh.user.service.DeviceInstallService; import com.mh.user.service.DeviceInstallService;
import com.mh.user.service.NowDataService; import com.mh.user.service.NowDataService;
import com.mh.user.utils.AnalysisReceiveOrder485; import com.mh.user.utils.*;
import com.mh.user.utils.ExchangeStringUtil;
import com.mh.user.utils.SendOrderUtils;
import com.mh.user.utils.SpringBeanUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import java.io.IOException; import java.io.IOException;
import purejavacomm.SerialPort; import purejavacomm.SerialPort;
import purejavacomm.SerialPortEvent;
import purejavacomm.SerialPortEventListener;
/** /**
* @author nxr * @author nxr
@ -51,27 +51,46 @@ public class SerialPortSingle2 {
if (serialPort != null) { if (serialPort != null) {
String sendStr = SendOrderUtils.getSendStr(deviceCodeParamEntity); String sendStr = SendOrderUtils.getSendStr(deviceCodeParamEntity);
SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceCodeParamEntity.getDeviceType()); SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceCodeParamEntity.getDeviceType());
if (deviceCodeParamEntity.getDeviceType().equals("热泵")) { CacheTools.initReceiveMsg(serialPort.getName());
Thread.sleep(4000); SerialPort finalSerialPort = serialPort;
} else { SerialTool.addListener(serialPortEvent -> {
Thread.sleep(2000); try {
for (int i = 0; i < 5; i++) {
Thread.sleep(1000);
byte[] bytes = SerialTool.readFromPort(finalSerialPort);
if (bytes!= null && bytes.length > 0) {
if (Constant.WEB_FLAG) {
CacheTools.setReceiveMsg(finalSerialPort.getName(), ExchangeStringUtil.printHexString(bytes));
break;
}
} }
} }
} catch (Exception e) {
log.error("单抄串口" + finalSerialPort + "异常,关闭串口", e);
}
}, serialPort);
}
} catch (Exception e) { } catch (Exception e) {
SerialTool.closePort(serialPort); SerialTool.closePort(serialPort);
log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口", e); log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口", e);
return "fail"; return "fail";
} }
//对返回数据进行相关解析处理 // //对返回数据进行相关解析处理
byte[] bytes = SerialTool.readFromPort(serialPort); //读取串口数据 // byte[] bytes = SerialTool.readFromPort(serialPort); //读取串口数据
if (null == bytes) { // if (null == bytes) {
SerialTool.closePort(serialPort); // SerialTool.closePort(serialPort);
log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口"); // log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口");
// return "fail";
// }
// String receiveStr = null;
// receiveStr = ExchangeStringUtil.printHexString(bytes);
String receiveStr;
if (serialPort != null) {
receiveStr = CacheTools.waitReceiveMsg(serialPort.getName());
//去掉空格和null
if (StringUtils.isBlank(receiveStr)) {
return "fail"; return "fail";
} }
String receiveStr = null;
receiveStr = ExchangeStringUtil.printHexString(bytes);
//去掉空格和null
receiveStr = receiveStr.replace("null", "").replace(" ", ""); receiveStr = receiveStr.replace("null", "").replace(" ", "");
log.info("串口" + serialPort + "接收数据:" + receiveStr + ",大小: " + receiveStr.length()); log.info("串口" + serialPort + "接收数据:" + receiveStr + ",大小: " + receiveStr.length());
//返回值全部变成大写 //返回值全部变成大写
@ -120,6 +139,9 @@ public class SerialPortSingle2 {
SerialTool.closePort(serialPort); SerialTool.closePort(serialPort);
return "fail"; return "fail";
} }
} else {
return "fail";
}
SerialTool.closePort(serialPort); SerialTool.closePort(serialPort);
System.out.println("关闭" + serialPort); System.out.println("关闭" + serialPort);
Thread.sleep(200); Thread.sleep(200);

7
user-service/src/main/java/com/mh/user/serialport/SerialTool.java

@ -1,5 +1,8 @@
package com.mh.user.serialport; package com.mh.user.serialport;
import com.mh.user.constants.Constant;
import com.mh.user.utils.CacheTools;
import com.mh.user.utils.ExchangeStringUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import purejavacomm.*; import purejavacomm.*;
@ -206,6 +209,9 @@ public class SerialTool {
in.read(bytes); in.read(bytes);
bufflenth = in.available(); bufflenth = in.available();
} }
if (bytes == null) {
return null;
}
} catch (Exception e) { } catch (Exception e) {
throw e; throw e;
} finally { } finally {
@ -219,7 +225,6 @@ public class SerialTool {
} }
} }
return bytes; return bytes;
} }

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

@ -78,14 +78,13 @@ public class DeviceControlServiceImpl implements DeviceControlService {
deviceCodeParam.setParam(param); deviceCodeParam.setParam(param);
deviceCodeParam.setDataValue(serialPortModel.getDataValue());//传入相关参数值
ControlSetEntity controlData = new ControlSetEntity(); ControlSetEntity controlData = new ControlSetEntity();
controlData.setBuildingId(deviceInstallEntity.getBuildingId()); controlData.setBuildingId(deviceInstallEntity.getBuildingId());
// 根据设备类型和参数执行相应的操作 // 根据设备类型和参数执行相应的操作
switch (deviceType) { switch (deviceType) {
case "热泵":
rtData = handleHotPump(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle);
break;
case "时控": case "时控":
rtData = handleTimeControl(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle); rtData = handleTimeControl(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle);
break; break;
@ -105,6 +104,7 @@ public class DeviceControlServiceImpl implements DeviceControlService {
rtData = handleElectricMeter(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle); rtData = handleElectricMeter(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle);
break; break;
default: default:
// 热泵
rtData = handleHotPump(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle); rtData = handleHotPump(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle);
break; break;
} }
@ -250,17 +250,17 @@ public class DeviceControlServiceImpl implements DeviceControlService {
PumpSetEntity pumpData = new PumpSetEntity(); PumpSetEntity pumpData = new PumpSetEntity();
pumpData.setBuildingId(deviceCodeParam.getBuildingId()); pumpData.setBuildingId(deviceCodeParam.getBuildingId());
pumpData.setPumpId(deviceCodeParam.getDeviceAddr()); pumpData.setPumpId(deviceCodeParam.getDeviceAddr());
if (StringUtils.isBlank(deviceCodeParam.getParam()) || deviceCodeParam.getParam().equals("温度设定")) { if (StringUtils.isBlank(deviceCodeParam.getParam()) || deviceCodeParam.getParam().contains("温度设定")) {
//发送指令 //保存数据
if (Constant.READ.equals(type)) {
deviceCodeParam.setFunCode("03"); //功能码读数据
if (deviceCodeParam.getBrand().equals("美的")) { if (deviceCodeParam.getBrand().equals("美的")) {
deviceCodeParam.setRegisterAddr("0642"); //寄存器地址 deviceCodeParam.setRegisterAddr("0642"); //寄存器地址
deviceCodeParam.setFunCode("10"); //功能码写数据 } else if ("瑞星".equals(deviceCodeParam.getBrand())) {
deviceCodeParam.setRegisterAddr("000A"); //寄存器地址
} else { } else {
deviceCodeParam.setRegisterAddr("0003"); //寄存器地址 deviceCodeParam.setRegisterAddr("0003"); //寄存器地址
deviceCodeParam.setFunCode("06"); //功能码写数据
} }
//保存数据
if (Constant.READ.equals(type)) {
rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 rtData = serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
if (!rtData.equals("fail")) { if (!rtData.equals("fail")) {
pumpData.setTempSet(rtData); pumpData.setTempSet(rtData);
@ -268,6 +268,17 @@ public class DeviceControlServiceImpl implements DeviceControlService {
} }
return rtData; return rtData;
} }
//发送指令
if (deviceCodeParam.getBrand().equals("美的")) {
deviceCodeParam.setRegisterAddr("0642"); //寄存器地址
deviceCodeParam.setFunCode("10"); //功能码写数据
} else if (deviceCodeParam.getBrand().equals("瑞星")) {
deviceCodeParam.setRegisterAddr("000A"); //寄存器地址
deviceCodeParam.setFunCode("10"); //功能码写数据
} else {
deviceCodeParam.setRegisterAddr("0003"); //寄存器地址
deviceCodeParam.setFunCode("06"); //功能码写数据
}
pumpData.setTempSet(serialPortModel.getDataValue()); pumpData.setTempSet(serialPortModel.getDataValue());
pumpSetService.savePumpSet(pumpData);//热泵信息保存数据库 pumpSetService.savePumpSet(pumpData);//热泵信息保存数据库
@ -312,6 +323,8 @@ public class DeviceControlServiceImpl implements DeviceControlService {
deviceCodeParam.setFunCode("03"); //功能码读数据 deviceCodeParam.setFunCode("03"); //功能码读数据
if ("美的".equals(deviceCodeParam.getBrand())) { if ("美的".equals(deviceCodeParam.getBrand())) {
deviceCodeParam.setRegisterAddr("0007"); //寄存器地址 deviceCodeParam.setRegisterAddr("0007"); //寄存器地址
} else if ("瑞星".equals(deviceCodeParam.getBrand())) {
deviceCodeParam.setRegisterAddr("0046"); //寄存器地址
} else { } else {
deviceCodeParam.setRegisterAddr("0064"); //寄存器地址 deviceCodeParam.setRegisterAddr("0064"); //寄存器地址
} }
@ -325,6 +338,8 @@ public class DeviceControlServiceImpl implements DeviceControlService {
deviceCodeParam.setFunCode("03"); //功能码读数据 deviceCodeParam.setFunCode("03"); //功能码读数据
if ("美的".equals(deviceCodeParam.getBrand())) { if ("美的".equals(deviceCodeParam.getBrand())) {
deviceCodeParam.setRegisterAddr("0641"); //寄存器地址 deviceCodeParam.setRegisterAddr("0641"); //寄存器地址
} else if ("瑞星".equals(deviceCodeParam.getBrand())) {
deviceCodeParam.setRegisterAddr("0001");
} else { } else {
deviceCodeParam.setRegisterAddr("0BBD"); //寄存器地址 deviceCodeParam.setRegisterAddr("0BBD"); //寄存器地址
} }

8
user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java

@ -14,6 +14,8 @@ import com.mh.user.service.NowDataService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -263,8 +265,12 @@ public class NowDataServiceImpl implements NowDataService {
if (data1!=null){ if (data1!=null){
if (dataType.equals("tempSet")){ //温度设定 if (dataType.equals("tempSet")){ //温度设定
data1.setTempSet(strData); data1.setTempSet(strData);
}else if (dataType.equals("waterTemp")){ //水箱水温 } else if (dataType.equals("waterTemp")){ //水箱水温
BigDecimal bigDecimal = new BigDecimal(strData);
if (bigDecimal.compareTo(new BigDecimal(0)) >= 0
&& bigDecimal.compareTo(new BigDecimal(100)) <= 0) {
data1.setWaterTemp(strData); data1.setWaterTemp(strData);
}
}else if (dataType.equals("runState")){ //运行状态 }else if (dataType.equals("runState")){ //运行状态
data1.setRunState(strData); data1.setRunState(strData);
}else if (dataType.equals("isFault")){ //是否故障 }else if (dataType.equals("isFault")){ //是否故障

61
user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java

@ -589,6 +589,67 @@ public class AnalysisReceiveOrder485 {
} else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { } else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) {
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! ");
} }
} else if (brand.equals("瑞星")) {
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读
if (registerAddr.equalsIgnoreCase("0001")) { //运行状态
dataType = "runState";
data = checkStr.substring(8, 10);
if (data.equalsIgnoreCase("00")) {
sValue = "不运行"; //关机模式
} else if (data.equalsIgnoreCase("01")) {
sValue = "运行"; //制热模式
}
//计算热泵运行时间,按分钟
nowDataService.proPumpMinutes(buildingId, addr, sValue);
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue);
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName);
} else if (registerAddr.equalsIgnoreCase("000A") || registerAddr.equalsIgnoreCase("0046")) {
//000A设定温度,0046水箱水温
if (registerAddr.equalsIgnoreCase("000A")) {
dataType = "tempSet";
} else {
dataType = "waterTemp";
}
//读数
sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10));
if (dataType.equals("waterTemp")) {
sValue = String.valueOf(Double.parseDouble(sValue)/10);
NowPublicDataEntity publicData = new NowPublicDataEntity();
publicData.setBuildingId(buildingId);
publicData.setUseWaterTemp(sValue);
publicData.setBackWaterTemp(sValue);
nowPublicDataService.saveNowHistoryPublicData(publicData);
nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存楼栋时间点温度变化
} else if (dataType.equals("tempSet")) {
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度
}
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName);
} else if (registerAddr.equalsIgnoreCase("0050")) { //故障状态
dataType = "isFault";
String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10));
sData = ExchangeStringUtil.addZeroForNum(sData, 8);
if (sData.substring(7, 8).equalsIgnoreCase("0")) {
sValue = "无故障";
deviceInstallService.updateDeviceFault("0", addr, "热泵");
} else if (sData.substring(7, 8).equalsIgnoreCase("1")) {
sValue = "有故障";
deviceInstallService.updateDeviceFault("1", addr, "热泵");
}
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName);
} else if (registerAddr.equalsIgnoreCase("0028")
|| registerAddr.equalsIgnoreCase("002C")
|| registerAddr.equalsIgnoreCase("0030")) { //读定时设置值
String startTime = checkStr.substring(8, 10) + checkStr.substring(12, 14);
String closetTime = checkStr.substring(16, 18) + checkStr.substring(20, 22);
sValue = startTime + closetTime;
}
} else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) {
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! ");
}
rtData = sValue;
} }
} else { } else {
log.info("热泵报文检验失败: " + receiveData); log.info("热泵报文检验失败: " + receiveData);

79
user-service/src/main/java/com/mh/user/utils/CacheTools.java

@ -0,0 +1,79 @@
package com.mh.user.utils;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import io.micrometer.core.instrument.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
import java.util.Objects;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
/**
* @author LJF
* @version 1.0
* @project TAD_Server
* @description 缓存等待数据
* @date 2023/7/4 08:45:16
*/
@Slf4j
public class CacheTools {
/**
* 响应消息缓存
*/
private static final Cache<String, BlockingQueue<String>> responseMsgCache = CacheBuilder.newBuilder()
.maximumSize(500)
.expireAfterWrite(1000, TimeUnit.SECONDS)
.build();
/**
* 等待响应消息
*
* @param key 消息唯一标识
* @return ReceiveDdcMsgVo
*/
public static String waitReceiveMsg(String key) {
try {
//设置超时时间
String vo = Objects.requireNonNull(responseMsgCache.getIfPresent(key))
.poll(1000 * 5, TimeUnit.MILLISECONDS);
//删除key
responseMsgCache.invalidate(key);
return vo;
} catch (Exception e) {
log.error("获取数据异常,sn={},msg=null", key);
return "";
}
}
/**
* 初始化响应消息的队列
*
* @param key 消息唯一标识
*/
public static void initReceiveMsg(String key) {
responseMsgCache.put(key, new LinkedBlockingQueue<String>(1));
}
/**
* 设置响应消息
*
* @param key 消息唯一标识
*/
public static void setReceiveMsg(String key, String msg) {
if (!responseMsgCache.asMap().containsKey(key)) {
initReceiveMsg(key);
}
if (responseMsgCache.getIfPresent(key) != null) {
responseMsgCache.getIfPresent(key).add(msg);
return;
}
log.warn("sn {}不存在", key);
}
}

622
user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java

@ -23,15 +23,15 @@ public class GetReadOrder485 {
// 调用service // 调用service
ApplicationContext context = SpringBeanUtil.getApplicationContext(); ApplicationContext context = SpringBeanUtil.getApplicationContext();
DeviceDisplayServiceImpl.GatewayManageService gatewayManageService = context.getBean(DeviceDisplayServiceImpl.GatewayManageService.class); DeviceDisplayServiceImpl.GatewayManageService gatewayManageService = context.getBean(DeviceDisplayServiceImpl.GatewayManageService.class);
DeviceInstallService deviceInstallService=context.getBean(DeviceInstallService.class); DeviceInstallService deviceInstallService = context.getBean(DeviceInstallService.class);
DeviceCodeParamService deviceCodeParamService=context.getBean(DeviceCodeParamService.class); DeviceCodeParamService deviceCodeParamService = context.getBean(DeviceCodeParamService.class);
// 电表 // 电表
public static String createMeterOrder(DeviceCodeParamEntity orderParamModel){ public static String createMeterOrder(DeviceCodeParamEntity orderParamModel) {
String str=""; String str = "";
String deviceAddr=orderParamModel.getDeviceAddr(); String deviceAddr = orderParamModel.getDeviceAddr();
if (deviceAddr!=null && deviceAddr.length()>0){ if (deviceAddr != null && deviceAddr.length() > 0) {
try{ try {
//0代表前面补充0,12代表长度为12,d代表参数为正数型,基表通讯号 //0代表前面补充0,12代表长度为12,d代表参数为正数型,基表通讯号
str = String.format("%012d", Long.parseLong(deviceAddr)); str = String.format("%012d", Long.parseLong(deviceAddr));
//转换位置 //转换位置
@ -44,21 +44,21 @@ public class GetReadOrder485 {
//检验和 //检验和
String checkSum = ExchangeStringUtil.makeChecksum(str); String checkSum = ExchangeStringUtil.makeChecksum(str);
str = "FEFEFE" + str + checkSum + "16"; str = "FEFEFE" + str + checkSum + "16";
}catch (Exception e){ } catch (Exception e) {
log.error("生成采集电表指令错误==>",e); log.error("生成采集电表指令错误==>", e);
} }
} }
return str.toUpperCase(); return str.toUpperCase();
} }
// 水表 // 水表
public static String createWtMeterOrder(DeviceCodeParamEntity orderParamModel){ public static String createWtMeterOrder(DeviceCodeParamEntity orderParamModel) {
String deviceAddr=orderParamModel.getDeviceAddr(); String deviceAddr = orderParamModel.getDeviceAddr();
String brand=orderParamModel.getBrand(); String brand = orderParamModel.getBrand();
String str=""; String str = "";
if(deviceAddr!=null && deviceAddr.length()>0){ if (deviceAddr != null && deviceAddr.length() > 0) {
try{ try {
if (brand==null || brand.equals("") || brand.equals("艾美柯")){ if (brand == null || brand.equals("") || brand.equals("艾美柯")) {
// 0 代表前面补充0,14 代表长度为14,d 代表参数为正数型 // 0 代表前面补充0,14 代表长度为14,d 代表参数为正数型
str = String.format("%014d", Long.parseLong(deviceAddr));//基表通讯号 str = String.format("%014d", Long.parseLong(deviceAddr));//基表通讯号
// 转换位置 // 转换位置
@ -68,14 +68,14 @@ public class GetReadOrder485 {
// 检验和 // 检验和
String checkSum = ExchangeStringUtil.makeChecksum(str); String checkSum = ExchangeStringUtil.makeChecksum(str);
str = "FEFEFE" + str + checkSum + "16"; str = "FEFEFE" + str + checkSum + "16";
}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);
str=str+"0302020002";//读表累计值 str = str + "0302020002";//读表累计值
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
} }
}catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
log.error("生成水表采集指令异常>>>>", e); log.error("生成水表采集指令异常>>>>", e);
} }
@ -84,222 +84,257 @@ public class GetReadOrder485 {
} }
// 热泵,参数:功能码、品牌、数据、通讯表号、寄存器地址 // 热泵,参数:功能码、品牌、数据、通讯表号、寄存器地址
public static String createPumpOrder(DeviceCodeParamEntity orderParamModel){ public static String createPumpOrder(DeviceCodeParamEntity orderParamModel) {
String deviceAddr=orderParamModel.getDeviceAddr(); String deviceAddr = orderParamModel.getDeviceAddr();
String brand=orderParamModel.getBrand(); String brand = orderParamModel.getBrand();
String funCode=orderParamModel.getFunCode(); String funCode = orderParamModel.getFunCode();
String registerAddr=orderParamModel.getRegisterAddr(); String registerAddr = orderParamModel.getRegisterAddr();
String dataValue=orderParamModel.getDataValue(); String dataValue = orderParamModel.getDataValue();
String str=""; String str = "";
String param=""; String param = "";
if(deviceAddr!=null && deviceAddr.length()>0) { if (deviceAddr != null && deviceAddr.length() > 0) {
try{ try {
// 0代表前面补充0,2代表长度为2,d代表参数为正数型 // 0代表前面补充0,2代表长度为2,d代表参数为正数型
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str=ExchangeStringUtil.addZeroForNum(str,2); str = ExchangeStringUtil.addZeroForNum(str, 2);
if (brand==null || brand.equals("") || brand.equals("美的")){ if (brand == null || brand.equals("") || brand.equals("美的")) {
if (funCode==null || funCode.equals("") || funCode.equals("03")){ if (funCode == null || funCode.equals("") || funCode.equals("03")) {
if (registerAddr==null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0641")){ // 运行状态 if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0641")) { // 运行状态
str = str + "0306410001"; str = str + "0306410001";
param="运行状态"; param = "运行状态";
} else if (registerAddr.equalsIgnoreCase("0007")){ // 水温 } else if (registerAddr.equalsIgnoreCase("0007")) { // 水温
str = str + "0300070001"; str = str + "0300070001";
param="实际温度"; param = "实际温度";
} else if (registerAddr.equalsIgnoreCase("000B")){ // 故障状态,100*N+11 } else if (registerAddr.equalsIgnoreCase("000B")) { // 故障状态,100*N+11
str = str + "03000B0001"; str = str + "03000B0001";
param="故障状态"; param = "故障状态";
} else if (registerAddr.equalsIgnoreCase("0642")){ // 读温度设定 } else if (registerAddr.equalsIgnoreCase("0642")) { // 读温度设定
str = str + "0306420001"; str = str + "0306420001";
param="设定温度"; param = "设定温度";
} else if (registerAddr.equalsIgnoreCase("0656")){ //读时段1 } else if (registerAddr.equalsIgnoreCase("0656")) { //读时段1
str = str + "0306560004"; str = str + "0306560004";
param="时段1"; param = "时段1";
} else if (registerAddr.equalsIgnoreCase("065A")){ //读时段2 } else if (registerAddr.equalsIgnoreCase("065A")) { //读时段2
str = str + "03065A0004"; str = str + "03065A0004";
param="时段2"; param = "时段2";
} }
}else{//10 } else {//10
if (registerAddr==null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0642")){//温度设定,写 if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0642")) {//温度设定,写
str = str + "100642000102"+ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)),4); //写,待测试 str = str + "100642000102" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试
}else if(registerAddr.equalsIgnoreCase("0656")){//时段1 } else if (registerAddr.equalsIgnoreCase("0656")) {//时段1
if(dataValue.length()==8){ if (dataValue.length() == 8) {
String strData="00"+dataValue.substring(0,2)+"00"+dataValue.substring(2,4)+"00"+dataValue.substring(4,6)+"00"+dataValue.substring(6,8); String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8);
str = str + "100656000408"+strData; //写 str = str + "100656000408" + strData; //写
} }
}else if(registerAddr.equalsIgnoreCase("065A")){//时段2 } else if (registerAddr.equalsIgnoreCase("065A")) {//时段2
if(dataValue.length()==8){ if (dataValue.length() == 8) {
String strData="00"+dataValue.substring(0,2)+"00"+dataValue.substring(2,4)+"00"+dataValue.substring(4,6)+"00"+dataValue.substring(6,8); String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8);
str = str + "10065A000408"+strData; //写 str = str + "10065A000408" + strData; //写
} }
} }
} }
}else if(brand.equals("美的2")){ } else if (brand.equals("美的2")) {
if (funCode==null || funCode.equals("") || funCode.equals("03")){ if (funCode == null || funCode.equals("") || funCode.equals("03")) {
if (registerAddr==null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0BBD")){ // 运行状态 if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0BBD")) { // 运行状态
str = str + "030BBD0001"; str = str + "030BBD0001";
param="运行状态"; param = "运行状态";
} else if (registerAddr.equalsIgnoreCase("0064")){ // 水温 } else if (registerAddr.equalsIgnoreCase("0064")) { // 水温
str = str + "0300640001"; str = str + "0300640001";
param="实际温度"; param = "实际温度";
} else if (registerAddr.equalsIgnoreCase("0BBB")){ // 故障状态 } else if (registerAddr.equalsIgnoreCase("0BBB")) { // 故障状态
str = str + "030BBB0001"; str = str + "030BBB0001";
param="故障状态"; param = "故障状态";
} else if (registerAddr.equalsIgnoreCase("0003")){ // 读温度设定 } else if (registerAddr.equalsIgnoreCase("0003")) { // 读温度设定
str = str + "0300030001"; str = str + "0300030001";
param="设定温度"; param = "设定温度";
} }
}else{//06 } else {//06
if (registerAddr==null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0003")){//温度设定,写 if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0003")) {//温度设定,写
str = str + "060003"+ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)),4); //写,待测试 str = str + "060003" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试
}else if(registerAddr.equals("0000")) {//开关机 } else if (registerAddr.equals("0000")) {//开关机
if(dataValue.equals("0000")){ if (dataValue.equals("0000")) {
str = str + "0600000000"; //关机 str = str + "0600000000"; //关机
}else{ } else {
str = str + "0600000003"; //制热水,开机 str = str + "0600000003"; //制热水,开机
} }
} }
} }
} } else if (brand.equals("瑞星")) {
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验 if (funCode == null || funCode.equals("") || funCode.equals("03")) {
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0001")) { // 运行状态
str = str + "0300010001";
param = "运行状态";
} else if (registerAddr.equalsIgnoreCase("0046")) { // 水温
str = str + "0300460001";
param = "实际温度";
} else if (registerAddr.equalsIgnoreCase("0050")) { // 故障状态,100*N+11
str = str + "0300500001";
param = "故障状态";
} else if (registerAddr.equalsIgnoreCase("000A")) { // 读温度设定
str = str + "03000A0001";
param = "设定温度";
} else if (registerAddr.equalsIgnoreCase("0028")) { //读时段1
str = str + "0300280004";
param = "时段1";
} else if (registerAddr.equalsIgnoreCase("002C")) { //读时段2
str = str + "03002C0004";
param = "时段2";
}
} else {//10
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("000A")) {//温度设定,写
str = str + "10000A000102" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试
} else if (registerAddr.equalsIgnoreCase("0028")) {//时段1
if (dataValue.length() == 8) {
String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8);
str = str + "100028000408" + strData; //写
}
} else if (registerAddr.equalsIgnoreCase("002C")) {//时段2
if (dataValue.length() == 8) {
String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8);
str = str + "10002C000408" + strData; //写
}
}
}
}
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
}catch (Exception e){ } catch (Exception e) {
log.info("热泵"+param+"指令>>>>异常" + str, e); log.info("热泵" + param + "指令>>>>异常" + str, e);
} }
} }
log.info("热泵"+param+"指令>>>>" + str); log.info("热泵" + param + "指令>>>>" + str);
return str.toUpperCase(); return str.toUpperCase();
} }
// 水位开关(水位设定) // 水位开关(水位设定)
public static String createRelayOrder(DeviceCodeParamEntity orderParamModel){ public static String createRelayOrder(DeviceCodeParamEntity orderParamModel) {
String deviceAddr=orderParamModel.getDeviceAddr(); String deviceAddr = orderParamModel.getDeviceAddr();
String brand=orderParamModel.getBrand(); String brand = orderParamModel.getBrand();
String funCode=orderParamModel.getFunCode(); String funCode = orderParamModel.getFunCode();
String registerAddr=orderParamModel.getRegisterAddr(); String registerAddr = orderParamModel.getRegisterAddr();
String dataValue=orderParamModel.getDataValue(); String dataValue = orderParamModel.getDataValue();
String str=""; String str = "";
if(deviceAddr!=null && deviceAddr.length()>0){ if (deviceAddr != null && deviceAddr.length() > 0) {
try{ try {
if (brand==null || brand.equals("") || brand.equals("中凯")) if (brand == null || brand.equals("") || brand.equals("中凯")) {
{
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str=ExchangeStringUtil.addZeroForNum(str,2); str = ExchangeStringUtil.addZeroForNum(str, 2);
if (funCode==null || funCode.equals("") || funCode.equals("17")){ //读 if (funCode == null || funCode.equals("") || funCode.equals("17")) { //读
str ="33"+ str + "1700000000"; //旧版继电器 str = "33" + str + "1700000000"; //旧版继电器
}else if (funCode.equals("12")){//写 } else if (funCode.equals("12")) {//写
if (dataValue!=null && !dataValue.equals("")){ if (dataValue != null && !dataValue.equals("")) {
//0001(90%) 0002(80%) 0003(70%)... //0001(90%) 0002(80%) 0003(70%)...
if (dataValue.equals("100%")){ if (dataValue.equals("100%")) {
registerAddr="1300000000"; //全开 registerAddr = "1300000000"; //全开
}else if (dataValue.equals("90%")){ } else if (dataValue.equals("90%")) {
registerAddr="1200000001"; registerAddr = "1200000001";
}else if(dataValue.equals("80%")){ } else if (dataValue.equals("80%")) {
registerAddr="1200000002"; registerAddr = "1200000002";
}else if(dataValue.equals("70%")){ } else if (dataValue.equals("70%")) {
registerAddr="1200000003"; registerAddr = "1200000003";
}else if(dataValue.equals("60%")){ } else if (dataValue.equals("60%")) {
registerAddr="1200000004"; registerAddr = "1200000004";
}else if(dataValue.equals("50%")){ } else if (dataValue.equals("50%")) {
registerAddr="1200000005"; registerAddr = "1200000005";
}else if(dataValue.equals("40%")){ } else if (dataValue.equals("40%")) {
registerAddr="1200000006"; registerAddr = "1200000006";
} }
str ="33"+ str+registerAddr; //示例:33011200000001 str = "33" + str + registerAddr; //示例:33011200000001
} }
}else if (funCode.equals("13")) {//写 } else if (funCode.equals("13")) {//写
str ="33"+ str + "1300000000"; //全开 str = "33" + str + "1300000000"; //全开
}else { } else {
str ="33"+ str + "1400000000"; //全合 str = "33" + str + "1400000000"; //全合
} }
// 检验和 // 检验和
String checkSum = ExchangeStringUtil.makeChecksum(str); String checkSum = ExchangeStringUtil.makeChecksum(str);
str = str + checkSum ; str = str + checkSum;
} 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);
if (funCode==null || funCode.equals("") || funCode.equals("03")){//读 if (funCode == null || funCode.equals("") || funCode.equals("03")) {//读
if (registerAddr.equalsIgnoreCase("0018")){ //读全部位置 if (registerAddr.equalsIgnoreCase("0018")) { //读全部位置
str = str + "0300180008"; str = str + "0300180008";
} else if (registerAddr.equalsIgnoreCase("0010")){ //读全部DI } else if (registerAddr.equalsIgnoreCase("0010")) { //读全部DI
str = str + "0300100008"; str = str + "0300100008";
} }
}else if (funCode.equals("06")){ // 写 } else if (funCode.equals("06")) { // 写
if (dataValue!=null && !dataValue.equals("")){ if (dataValue != null && !dataValue.equals("")) {
if (dataValue.equals("100%")){ if (dataValue.equals("100%")) {
registerAddr="10001800081000000000000000000000000000000000"; //全开 registerAddr = "10001800081000000000000000000000000000000000"; //全开
}else if (dataValue.equals("90%")){ } else if (dataValue.equals("90%")) {
registerAddr="0600180001"; registerAddr = "0600180001";
}else if(dataValue.equals("80%")){ } else if (dataValue.equals("80%")) {
registerAddr="0600190001"; registerAddr = "0600190001";
}else if(dataValue.equals("70%")){ } else if (dataValue.equals("70%")) {
registerAddr="06001A0001"; registerAddr = "06001A0001";
}else if(dataValue.equals("60%")){ } else if (dataValue.equals("60%")) {
registerAddr="06001B0001"; registerAddr = "06001B0001";
}else if(dataValue.equals("50%")){ } else if (dataValue.equals("50%")) {
registerAddr="06001C0001"; registerAddr = "06001C0001";
}else if(dataValue.equals("40%")){ } else if (dataValue.equals("40%")) {
registerAddr="06001D0001"; registerAddr = "06001D0001";
} }
//0018(90%) 0019(80%) 001A(70%)... //0018(90%) 0019(80%) 001A(70%)...
str = str +registerAddr; //示例:010600180001 str = str + registerAddr; //示例:010600180001
} }
}else {//写 } else {//写
if (dataValue.equals("0000")){ if (dataValue.equals("0000")) {
str = str + "10001800081000000000000000000000000000000000"; //全开 str = str + "10001800081000000000000000000000000000000000"; //全开
}else{ } else {
str = str + "10001800081000010001000100010001000100010001"; //全合 str = str + "10001800081000010001000100010001000100010001"; //全合
} }
} }
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
}else if (brand.equals("顶威")){ } else if (brand.equals("顶威")) {
str = String.format("%012d", Long.parseLong(deviceAddr)); str = String.format("%012d", Long.parseLong(deviceAddr));
//转换位置 //转换位置
str = ExchangeStringUtil.changePosition(str); //表号 str = ExchangeStringUtil.changePosition(str); //表号
String strData=""; String strData = "";
if (funCode.equals("0407")){//写 if (funCode.equals("0407")) {//写
str ="68"+str+"680407"; str = "68" + str + "680407";
String mark="25C0"; //C025交换位置 String mark = "25C0"; //C025交换位置
String strData1="00000000"; //命令带密码4字节,权限密码默认为00000000 String strData1 = "00000000"; //命令带密码4字节,权限密码默认为00000000
String strData2=""; String strData2 = "";
if (dataValue.equals("100%")){ if (dataValue.equals("100%")) {
strData2=ExchangeStringUtil.parseByte2HexStr("00000000"); strData2 = ExchangeStringUtil.parseByte2HexStr("00000000");
}else if(dataValue.equals("90%")){ } else if (dataValue.equals("90%")) {
strData2=ExchangeStringUtil.parseByte2HexStr("00000001"); strData2 = ExchangeStringUtil.parseByte2HexStr("00000001");
}else if(dataValue.equals("85%")){ } else if (dataValue.equals("85%")) {
strData2=ExchangeStringUtil.parseByte2HexStr("00000011"); strData2 = ExchangeStringUtil.parseByte2HexStr("00000011");
}else if(dataValue.equals("80%")){ } else if (dataValue.equals("80%")) {
strData2=ExchangeStringUtil.parseByte2HexStr("00000111"); strData2 = ExchangeStringUtil.parseByte2HexStr("00000111");
}else if(dataValue.equals("75%")){ } else if (dataValue.equals("75%")) {
strData2=ExchangeStringUtil.parseByte2HexStr("00001111"); strData2 = ExchangeStringUtil.parseByte2HexStr("00001111");
}else if(dataValue.equals("70%")){ } else if (dataValue.equals("70%")) {
strData2=ExchangeStringUtil.parseByte2HexStr("00011111"); strData2 = ExchangeStringUtil.parseByte2HexStr("00011111");
}else if(dataValue.equals("65%")){ } else if (dataValue.equals("65%")) {
strData2=ExchangeStringUtil.parseByte2HexStr("00111111"); strData2 = ExchangeStringUtil.parseByte2HexStr("00111111");
}else if(dataValue.equals("60%")){ } else if (dataValue.equals("60%")) {
strData2=ExchangeStringUtil.parseByte2HexStr("01111111"); strData2 = ExchangeStringUtil.parseByte2HexStr("01111111");
}else if(dataValue.equals("50%")){ } else if (dataValue.equals("50%")) {
strData2=ExchangeStringUtil.parseByte2HexStr("11111111"); strData2 = ExchangeStringUtil.parseByte2HexStr("11111111");
}else if(dataValue.equals("自动")){ } else if (dataValue.equals("自动")) {
strData2=ExchangeStringUtil.parseByte2HexStr("00100110"); strData2 = ExchangeStringUtil.parseByte2HexStr("00100110");
} }
strData=mark+strData1+strData2; strData = mark + strData1 + strData2;
}else if (funCode.equals("0102")){ //读 } else if (funCode.equals("0102")) { //读
str ="68"+str+"680102"; str = "68" + str + "680102";
strData="25C0"; //标志 strData = "25C0"; //标志
} }
strData=ExchangeStringUtil.addThree(strData); //加33 strData = ExchangeStringUtil.addThree(strData); //加33
str=str+strData; str = str + strData;
//检验和 //检验和
String checkSum = ExchangeStringUtil.makeChecksum(str);//校验 String checkSum = ExchangeStringUtil.makeChecksum(str);//校验
str = "FEFEFE" + str + checkSum + "16"; str = "FEFEFE" + str + checkSum + "16";
} }
}catch (Exception e){ } catch (Exception e) {
// e.printStackTrace(); // e.printStackTrace();
if(registerAddr.equals("0010")){ if (registerAddr.equals("0010")) {
log.error("生成热泵状态指令出错!" + str); log.error("生成热泵状态指令出错!" + str);
}else{ } else {
log.error("生成水位开关指令出错!" + str); log.error("生成水位开关指令出错!" + str);
} }
} }
@ -314,27 +349,26 @@ public class GetReadOrder485 {
} }
// 热泵状态(8路开关) // 热泵状态(8路开关)
public static String createPumpStateOrder(DeviceCodeParamEntity orderParamModel){ public static String createPumpStateOrder(DeviceCodeParamEntity orderParamModel) {
String deviceAddr=orderParamModel.getDeviceAddr(); String deviceAddr = orderParamModel.getDeviceAddr();
String brand=orderParamModel.getBrand(); String brand = orderParamModel.getBrand();
String funCode=orderParamModel.getFunCode(); String funCode = orderParamModel.getFunCode();
String registerAddr=orderParamModel.getRegisterAddr(); String registerAddr = orderParamModel.getRegisterAddr();
String str=""; String str = "";
if(deviceAddr!=null && deviceAddr.length()>0){ if (deviceAddr != null && deviceAddr.length() > 0) {
try{ try {
if (brand==null || brand.equals("") || brand.equals("中凯")) if (brand == null || brand.equals("") || brand.equals("中凯")) {
{
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str=ExchangeStringUtil.addZeroForNum(str,2); str = ExchangeStringUtil.addZeroForNum(str, 2);
//if (funCode==null || funCode.equals("") || funCode.equals("17")){ //读 //if (funCode==null || funCode.equals("") || funCode.equals("17")){ //读
str ="33"+ str + "1700000000"; //旧版继电器 str = "33" + str + "1700000000"; //旧版继电器
//} //}
// 检验和 // 检验和
String checkSum = ExchangeStringUtil.makeChecksum(str); String checkSum = ExchangeStringUtil.makeChecksum(str);
str = str + checkSum ; str = str + checkSum;
} 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);
//if (funCode==null || funCode.equals("") || funCode.equals("03")){//读 //if (funCode==null || funCode.equals("") || funCode.equals("03")){//读
//if (registerAddr.equalsIgnoreCase("0018")){ //读全部DO //if (registerAddr.equalsIgnoreCase("0018")){ //读全部DO
// str = str + "0300180008"; // str = str + "0300180008";
@ -342,24 +376,24 @@ public class GetReadOrder485 {
str = str + "0300100008"; str = str + "0300100008";
//} //}
//} //}
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
}else if (brand.equals("顶威")){ } else if (brand.equals("顶威")) {
str = String.format("%012d", Long.parseLong(deviceAddr)); str = String.format("%012d", Long.parseLong(deviceAddr));
//转换位置 //转换位置
str = ExchangeStringUtil.changePosition(str); //表号 str = ExchangeStringUtil.changePosition(str); //表号
String strData=""; String strData = "";
// if (funCode.equals("0102")){ //读 // if (funCode.equals("0102")){ //读
str ="68"+str+"680102"; str = "68" + str + "680102";
strData="25C0"; //标志 strData = "25C0"; //标志
// } // }
strData=ExchangeStringUtil.addThree(strData); //加33 strData = ExchangeStringUtil.addThree(strData); //加33
str=str+strData; str = str + strData;
//检验和 //检验和
String checkSum = ExchangeStringUtil.makeChecksum(str);//校验 String checkSum = ExchangeStringUtil.makeChecksum(str);//校验
str = "FEFEFE" + str + checkSum + "16"; str = "FEFEFE" + str + checkSum + "16";
} }
}catch (Exception e){ } catch (Exception e) {
// e.printStackTrace(); // e.printStackTrace();
log.error("生成热泵状态指令出错!" + str, e); log.error("生成热泵状态指令出错!" + str, e);
} }
@ -369,12 +403,12 @@ public class GetReadOrder485 {
} }
//状态检测 //状态检测
public static String createStateOrder(DeviceCodeParamEntity orderParamModel){ public static String createStateOrder(DeviceCodeParamEntity orderParamModel) {
String deviceAddr=orderParamModel.getDeviceAddr(); String deviceAddr = orderParamModel.getDeviceAddr();
String brand=orderParamModel.getBrand(); String brand = orderParamModel.getBrand();
String str=""; String str = "";
if(deviceAddr!=null && deviceAddr.length()>0){ if (deviceAddr != null && deviceAddr.length() > 0) {
try{ try {
// 0代表前面补充0,12代表长度为12,d代表参数为正数型.12位通讯地址,以0补位 // 0代表前面补充0,12代表长度为12,d代表参数为正数型.12位通讯地址,以0补位
str = String.format("%012d", Long.parseLong(deviceAddr)); str = String.format("%012d", Long.parseLong(deviceAddr));
// 转换位置 // 转换位置
@ -388,33 +422,33 @@ public class GetReadOrder485 {
String checkSum = ExchangeStringUtil.makeChecksum(str); String checkSum = ExchangeStringUtil.makeChecksum(str);
str = "FEFEFE" + str + checkSum + "16"; str = "FEFEFE" + str + checkSum + "16";
}catch (Exception e){ } catch (Exception e) {
// e.printStackTrace(); // e.printStackTrace();
log.error("生成状态检测指令出错!" + str,e); log.error("生成状态检测指令出错!" + str, e);
} }
} }
return str.toUpperCase(); return str.toUpperCase();
} }
// 压变 // 压变
public static String createPressureOrder(DeviceCodeParamEntity orderParamModel){ public static String createPressureOrder(DeviceCodeParamEntity orderParamModel) {
String deviceAddr=orderParamModel.getDeviceAddr(); String deviceAddr = orderParamModel.getDeviceAddr();
String brand=orderParamModel.getBrand(); String brand = orderParamModel.getBrand();
String str=""; String str = "";
if(deviceAddr!=null && deviceAddr.length()>0){ if (deviceAddr != null && deviceAddr.length() > 0) {
try{ try {
str = ExchangeStringUtil.decToHex(deviceAddr); //十进制转为十六进制 str = ExchangeStringUtil.decToHex(deviceAddr); //十进制转为十六进制
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位 str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
if (brand==null || brand.equals("")){ if (brand == null || brand.equals("")) {
str = str + "0300000002"; // 压力变送器(新的协议) str = str + "0300000002"; // 压力变送器(新的协议)
}else if (brand.equals("澳升")){ } else if (brand.equals("澳升")) {
str = str + "0300040001"; // 新款压力变送器 str = str + "0300040001"; // 新款压力变送器
}else if (brand.equals("汝翊")){ } else if (brand.equals("汝翊")) {
str = str + "0300040001"; str = str + "0300040001";
} }
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
}catch (Exception e){ } catch (Exception e) {
log.info("生成压变指令出错!" + str, e); log.info("生成压变指令出错!" + str, e);
} }
} }
@ -422,12 +456,12 @@ public class GetReadOrder485 {
} }
// 温控 // 温控
public static String createTempOrder(DeviceCodeParamEntity orderParamModel){ public static String createTempOrder(DeviceCodeParamEntity orderParamModel) {
String deviceAddr=orderParamModel.getDeviceAddr(); String deviceAddr = orderParamModel.getDeviceAddr();
String registerAddr=orderParamModel.getRegisterAddr(); String registerAddr = orderParamModel.getRegisterAddr();
String str=""; String str = "";
if(deviceAddr!=null && deviceAddr.length()>0){ if (deviceAddr != null && deviceAddr.length() > 0) {
try{ try {
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位 str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
// if(registerAddr.equals("")){ // if(registerAddr.equals("")){
@ -435,10 +469,10 @@ public class GetReadOrder485 {
// }else if(registerAddr.equals("")){ // }else if(registerAddr.equals("")){
// str=str+"0300000002"; // str=str+"0300000002";
// } // }
str=str+"0300000002"; str = str + "0300000002";
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
}catch (Exception e){ } catch (Exception e) {
// e.printStackTrace(); // e.printStackTrace();
log.error("生成温控指令出错!" + str, e); log.error("生成温控指令出错!" + str, e);
} }
@ -447,18 +481,18 @@ public class GetReadOrder485 {
} }
// 温度变送器 // 温度变送器
public static String createMulTempOrder(DeviceCodeParamEntity orderParamModel){ public static String createMulTempOrder(DeviceCodeParamEntity orderParamModel) {
String deviceAddr=orderParamModel.getDeviceAddr(); String deviceAddr = orderParamModel.getDeviceAddr();
String registerAddr=orderParamModel.getRegisterAddr(); String registerAddr = orderParamModel.getRegisterAddr();
String str=""; String str = "";
if(deviceAddr!=null && deviceAddr.length()>0){ if (deviceAddr != null && deviceAddr.length() > 0) {
try{ try {
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位 str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
str=str+"0300280008"; //读8路温度 str = str + "0300280008"; //读8路温度
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
}catch (Exception e){ } catch (Exception e) {
log.info("生成多路温度变送器指令出错!" + str, e); log.info("生成多路温度变送器指令出错!" + str, e);
} }
} }
@ -466,34 +500,34 @@ public class GetReadOrder485 {
} }
//时控设置,registerAddr 0009(L1)、000D(L2)、0011(L3) 读:010300090004、写:01100009000408+dataValue //时控设置,registerAddr 0009(L1)、000D(L2)、0011(L3) 读:010300090004、写:01100009000408+dataValue
public static String createTimeSetOrder(DeviceCodeParamEntity orderParamModel){ public static String createTimeSetOrder(DeviceCodeParamEntity orderParamModel) {
String deviceAddr=orderParamModel.getDeviceAddr(); String deviceAddr = orderParamModel.getDeviceAddr();
String brand=orderParamModel.getBrand(); String brand = orderParamModel.getBrand();
String funCode=orderParamModel.getFunCode(); String funCode = orderParamModel.getFunCode();
String registerAddr=orderParamModel.getRegisterAddr(); String registerAddr = orderParamModel.getRegisterAddr();
String dataValue=orderParamModel.getDataValue(); String dataValue = orderParamModel.getDataValue();
String str=""; String str = "";
if(deviceAddr!=null && deviceAddr.length()>0){ if (deviceAddr != null && deviceAddr.length() > 0) {
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位 str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
try{ try {
// if (!brand.equals("")){ //品牌 // if (!brand.equals("")){ //品牌
if (!funCode.equals("") && !registerAddr.equals("")){ if (!funCode.equals("") && !registerAddr.equals("")) {
registerAddr=ExchangeStringUtil.addZeroForNum(registerAddr,4); //寄存器地址 registerAddr = ExchangeStringUtil.addZeroForNum(registerAddr, 4); //寄存器地址
funCode=ExchangeStringUtil.addZeroForNum(funCode,2); // 功能码 funCode = ExchangeStringUtil.addZeroForNum(funCode, 2); // 功能码
if (funCode.equals("03")){ //功能码,读 if (funCode.equals("03")) { //功能码,读
str = str + "03"+registerAddr +"0004"; str = str + "03" + registerAddr + "0004";
}else if (funCode.equals("10")){//写 } else if (funCode.equals("10")) {//写
if (!dataValue.equals("")){ if (!dataValue.equals("")) {
str = str + "10"+registerAddr +"000408"+dataValue; str = str + "10" + registerAddr + "000408" + dataValue;
} }
} }
} }
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
// } // }
}catch (Exception e){ } catch (Exception e) {
log.error("生成时控指令出错!" + str, e); log.error("生成时控指令出错!" + str, e);
} }
} }
@ -501,30 +535,30 @@ public class GetReadOrder485 {
} }
// 冷量计 // 冷量计
public static String createCloudOrder(String IP,String port, String dataCom,String cloudNum, String cloudType){ public static String createCloudOrder(String IP, String port, String dataCom, String cloudNum, String cloudType) {
IP = ExchangeStringUtil.ipToHex(IP); IP = ExchangeStringUtil.ipToHex(IP);
port = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(port),4); port = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(port), 4);
dataCom = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(ExchangeStringUtil.getNumFromString(dataCom)),2); dataCom = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(ExchangeStringUtil.getNumFromString(dataCom)), 2);
String str1 = IP + port + dataCom; String str1 = IP + port + dataCom;
// 0 代表前面补充0,2 代表长度为2,d 代表参数为正数型 // 0 代表前面补充0,2 代表长度为2,d 代表参数为正数型
String str = ExchangeStringUtil.decToHex(cloudNum); String str = ExchangeStringUtil.decToHex(cloudNum);
str = String.format("%02d", Long.parseLong(str)); str = String.format("%02d", Long.parseLong(str));
if (cloudType.equalsIgnoreCase("4")){ //温控设备,地址为十六进制 if (cloudType.equalsIgnoreCase("4")) { //温控设备,地址为十六进制
str = str + "0300000002"; str = str + "0300000002";
} else if (cloudType.equalsIgnoreCase("31")){ //流量计冷冻水量 } else if (cloudType.equalsIgnoreCase("31")) { //流量计冷冻水量
str = str + "0300080002"; str = str + "0300080002";
} else if (cloudType.equalsIgnoreCase("32")){ // 流量计出水温度 } else if (cloudType.equalsIgnoreCase("32")) { // 流量计出水温度
str = str + "0300490002"; str = str + "0300490002";
} else if (cloudType.equalsIgnoreCase("33")){ // 流量计回水温度 } else if (cloudType.equalsIgnoreCase("33")) { // 流量计回水温度
str = str + "03004B0002"; str = str + "03004B0002";
} else if (cloudType.equalsIgnoreCase("34")){ // 流量计冷量累积量 } else if (cloudType.equalsIgnoreCase("34")) { // 流量计冷量累积量
str = str + "0300500002"; str = str + "0300500002";
} }
byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(str); byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(str);
int checkNum = CRC16.CRC16_MODBUS(strOrder); int checkNum = CRC16.CRC16_MODBUS(strOrder);
String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum));
checkWord = ExchangeStringUtil.addZeroForNum(checkWord,4); checkWord = ExchangeStringUtil.addZeroForNum(checkWord, 4);
checkWord = checkWord.substring(2,4) + checkWord.substring(0,2); checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2);
str = str + checkWord; str = str + checkWord;
// 拼接字符 // 拼接字符
str = str1 + str; str = str1 + str;
@ -534,6 +568,7 @@ public class GetReadOrder485 {
/** /**
* // 冷水机组 指令:IP+端口+COM口+数据+modeBus校验 * // 冷水机组 指令:IP+端口+COM口+数据+modeBus校验
*
* @param chillersEntity * @param chillersEntity
* @return * @return
*/ */
@ -548,11 +583,11 @@ public class GetReadOrder485 {
// 获取端口号,转16进制 // 获取端口号,转16进制
int port = chillersEntity.getPort(); int port = chillersEntity.getPort();
String portStr = ExchangeStringUtil.decToHex(String.valueOf(port)); String portStr = ExchangeStringUtil.decToHex(String.valueOf(port));
portStr = ExchangeStringUtil.addZeroForNum(portStr,4); portStr = ExchangeStringUtil.addZeroForNum(portStr, 4);
str += portStr; str += portStr;
// 获取COM口 // 获取COM口
String com = ExchangeStringUtil.getNumFromString(chillersEntity.getDataCom()); String com = ExchangeStringUtil.getNumFromString(chillersEntity.getDataCom());
String dataCom = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(com),2); String dataCom = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(com), 2);
str += dataCom; str += dataCom;
// 获取冷水机组地址 // 获取冷水机组地址
String chillerAddr = chillersEntity.getCollectionNum(); String chillerAddr = chillersEntity.getCollectionNum();
@ -560,16 +595,16 @@ public class GetReadOrder485 {
String str1 = ExchangeStringUtil.addZeroForNum(chillerAddr, 2); String str1 = ExchangeStringUtil.addZeroForNum(chillerAddr, 2);
// 获取功能码 // 获取功能码
String funCode = chillersEntity.getFunCode(); String funCode = chillersEntity.getFunCode();
str1 = str1 + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(funCode),2); str1 = str1 + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(funCode), 2);
// 寄存器地址 // 寄存器地址
String registerAddr = chillersEntity.getRegisterAddress(); String registerAddr = chillersEntity.getRegisterAddress();
str1 = str1 + ExchangeStringUtil.addZeroForNum(registerAddr,4) + "0001"; str1 = str1 + ExchangeStringUtil.addZeroForNum(registerAddr, 4) + "0001";
log.info(str1); log.info(str1);
byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(str1); byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(str1);
int checkNum = CRC16.CRC16_MODBUS(strOrder); int checkNum = CRC16.CRC16_MODBUS(strOrder);
String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum));
checkWord = ExchangeStringUtil.addZeroForNum(checkWord,4); checkWord = ExchangeStringUtil.addZeroForNum(checkWord, 4);
checkWord = checkWord.substring(2,4) + checkWord.substring(0,2); checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2);
str1 = str1 + checkWord; str1 = str1 + checkWord;
// 拼接新的采集报文 // 拼接新的采集报文
str = str + str1; str = str + str1;
@ -599,17 +634,17 @@ public class GetReadOrder485 {
} }
// 生成对设备操作指令参数 // 生成对设备操作指令参数
public void createOrderParam(){ public void createOrderParam() {
List<DeviceInstallEntity> deviceList1; List<DeviceInstallEntity> deviceList1;
deviceCodeParamService.selectInsertDeviceCodeParam(); //查询插入设备采集参数,包括压变、温控、温度变送器、热泵状态 deviceCodeParamService.selectInsertDeviceCodeParam(); //查询插入设备采集参数,包括压变、温控、温度变送器、热泵状态
deviceList1=deviceInstallService.selectDeviceParams();//查找多个采集参数的设备,包括热泵 deviceList1 = deviceInstallService.selectDeviceParams();//查找多个采集参数的设备,包括热泵
System.out.println(deviceList1); System.out.println(deviceList1);
for (DeviceInstallEntity devices:deviceList1) { for (DeviceInstallEntity devices : deviceList1) {
List<DeviceCodeParamEntity> deviceCodeParamEntityList = new ArrayList<>(); List<DeviceCodeParamEntity> deviceCodeParamEntityList = new ArrayList<>();
if (devices.getDeviceType().equals("热泵")){ if (devices.getDeviceType().equals("热泵")) {
if (devices.getBrand().equals("美的")){ if (devices.getBrand().equals("美的")) {
DeviceCodeParamEntity deviceCodeParamEntity3 = new DeviceCodeParamEntity(); DeviceCodeParamEntity deviceCodeParamEntity3 = new DeviceCodeParamEntity();
deviceCodeParamEntity3.setRegisterAddr("0007");//水温 deviceCodeParamEntity3.setRegisterAddr("0007");//水温
@ -624,7 +659,7 @@ public class GetReadOrder485 {
deviceCodeParamEntity3.setParity(devices.getParity()); deviceCodeParamEntity3.setParity(devices.getParity());
deviceCodeParamEntityList.add(deviceCodeParamEntity3); deviceCodeParamEntityList.add(deviceCodeParamEntity3);
}else if (devices.getBrand().equals("美的2")){ } else if (devices.getBrand().equals("美的2")) {
DeviceCodeParamEntity deviceCodeParamEntity3 = new DeviceCodeParamEntity(); DeviceCodeParamEntity deviceCodeParamEntity3 = new DeviceCodeParamEntity();
deviceCodeParamEntity3.setRegisterAddr("0064");//水温 deviceCodeParamEntity3.setRegisterAddr("0064");//水温
@ -645,13 +680,13 @@ public class GetReadOrder485 {
} }
// 生成对设备操作指令参数 // 生成对设备操作指令参数
public void createOrderParam2(){ public void createOrderParam2() {
List<DeviceInstallEntity> deviceList1; List<DeviceInstallEntity> deviceList1;
deviceCodeParamService.selectInsertDeviceCodeParam2(); //查询插入设备采集参数,包括水、电表、状态检测 deviceCodeParamService.selectInsertDeviceCodeParam2(); //查询插入设备采集参数,包括水、电表、状态检测
deviceList1=deviceInstallService.selectDeviceParams(); //查找多个采集参数的设备,包括热泵 deviceList1 = deviceInstallService.selectDeviceParams(); //查找多个采集参数的设备,包括热泵
System.out.println(deviceList1); System.out.println(deviceList1);
for (DeviceInstallEntity devices:deviceList1) { for (DeviceInstallEntity devices : deviceList1) {
List<DeviceCodeParamEntity> deviceCodeParamEntityList = new ArrayList<>(); List<DeviceCodeParamEntity> deviceCodeParamEntityList = new ArrayList<>();
if (devices.getDeviceType().equals("热泵")) { if (devices.getDeviceType().equals("热泵")) {
if (devices.getBrand().equals("美的")) { if (devices.getBrand().equals("美的")) {
@ -687,16 +722,16 @@ public class GetReadOrder485 {
} }
// 生成对设备操作指令参数 // 生成对设备操作指令参数
public void createOrderParam3(){ public void createOrderParam3() {
List<DeviceInstallEntity> deviceList1; List<DeviceInstallEntity> deviceList1;
// deviceCodeParamService.selectInsertDeviceCodeParam3(); //查询插入设备采集参数-水位开关 // deviceCodeParamService.selectInsertDeviceCodeParam3(); //查询插入设备采集参数-水位开关
deviceList1=deviceInstallService.selectDeviceParams2(); //查找多个采集参数的设备,包括热泵、水位开关 deviceList1 = deviceInstallService.selectDeviceParams2(); //查找多个采集参数的设备,包括热泵、水位开关
System.out.println(deviceList1); System.out.println(deviceList1);
for (DeviceInstallEntity devices:deviceList1) { for (DeviceInstallEntity devices : deviceList1) {
List<DeviceCodeParamEntity> deviceCodeParamEntityList = new ArrayList<>(); List<DeviceCodeParamEntity> deviceCodeParamEntityList = new ArrayList<>();
if (devices.getDeviceType().equals("热泵")){ if (devices.getDeviceType().equals("热泵")) {
if (devices.getBrand().equals("美的")){ if (devices.getBrand().equals("美的")) {
DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity(); DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity();
deviceCodeParamEntity2.setRegisterAddr("0642");//设定温度 deviceCodeParamEntity2.setRegisterAddr("0642");//设定温度
deviceCodeParamEntity2.setFunCode("03"); deviceCodeParamEntity2.setFunCode("03");
@ -723,7 +758,7 @@ public class GetReadOrder485 {
deviceCodeParamEntity4.setParity(devices.getParity()); deviceCodeParamEntity4.setParity(devices.getParity());
deviceCodeParamEntityList.add(deviceCodeParamEntity4); deviceCodeParamEntityList.add(deviceCodeParamEntity4);
}else if (devices.getBrand().equals("美的2")){ } else if (devices.getBrand().equals("美的2")) {
DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity(); DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity();
deviceCodeParamEntity2.setRegisterAddr("0003");//设定温度 deviceCodeParamEntity2.setRegisterAddr("0003");//设定温度
@ -751,8 +786,9 @@ public class GetReadOrder485 {
deviceCodeParamEntity4.setParity(devices.getParity()); deviceCodeParamEntity4.setParity(devices.getParity());
deviceCodeParamEntityList.add(deviceCodeParamEntity4); deviceCodeParamEntityList.add(deviceCodeParamEntity4);
} }
} if (devices.getDeviceType().equals("水位开关")){ }
if (devices.getBrand().equals("远向")){ if (devices.getDeviceType().equals("水位开关")) {
if (devices.getBrand().equals("远向")) {
DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity(); DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity();
deviceCodeParamEntity2.setRegisterAddr("0018");//读水位设定 deviceCodeParamEntity2.setRegisterAddr("0018");//读水位设定
deviceCodeParamEntity2.setFunCode("03"); deviceCodeParamEntity2.setFunCode("03");
@ -778,7 +814,7 @@ public class GetReadOrder485 {
deviceCodeParamEntity4.setBuildingId(devices.getBuildingId()); deviceCodeParamEntity4.setBuildingId(devices.getBuildingId());
deviceCodeParamEntity4.setParity(devices.getParity()); deviceCodeParamEntity4.setParity(devices.getParity());
deviceCodeParamEntityList.add(deviceCodeParamEntity4); deviceCodeParamEntityList.add(deviceCodeParamEntity4);
}else if (devices.getBrand().equals("中凯")){ } else if (devices.getBrand().equals("中凯")) {
DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity(); DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity();
deviceCodeParamEntity2.setRegisterAddr("0017");//读水位设定 deviceCodeParamEntity2.setRegisterAddr("0017");//读水位设定
deviceCodeParamEntity2.setFunCode("03"); deviceCodeParamEntity2.setFunCode("03");

Loading…
Cancel
Save