|
|
|
@ -1,23 +1,24 @@
|
|
|
|
|
package com.mh.user.serialport; |
|
|
|
|
|
|
|
|
|
import com.mh.common.utils.StringUtils; |
|
|
|
|
import com.mh.user.constants.Constant; |
|
|
|
|
import com.mh.user.entity.DeviceCodeParamEntity; |
|
|
|
|
import com.mh.user.service.BuildingService; |
|
|
|
|
import com.mh.user.service.DeviceCodeParamService; |
|
|
|
|
import com.mh.user.service.DeviceInstallService; |
|
|
|
|
import com.mh.user.service.NowDataService; |
|
|
|
|
import com.mh.user.utils.AnalysisReceiveOrder485; |
|
|
|
|
import com.mh.user.utils.ExchangeStringUtil; |
|
|
|
|
import com.mh.user.utils.SendOrderUtils; |
|
|
|
|
import com.mh.user.utils.SpringBeanUtil; |
|
|
|
|
import com.mh.user.utils.*; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.springframework.context.ApplicationContext; |
|
|
|
|
import purejavacomm.SerialPort; |
|
|
|
|
|
|
|
|
|
import java.nio.ByteBuffer; |
|
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
|
import java.util.Comparator; |
|
|
|
|
import java.util.Date; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @author nxr |
|
|
|
@ -30,10 +31,10 @@ import java.util.List;
|
|
|
|
|
public class SerialPortSendReceive2 { |
|
|
|
|
|
|
|
|
|
private String receiveStr = null; |
|
|
|
|
// public SerialPort serialPort = null;
|
|
|
|
|
// public SerialPort serialPort = null;
|
|
|
|
|
private int size = 0; |
|
|
|
|
private int baudrate=9600; |
|
|
|
|
private String parity=null; |
|
|
|
|
private int baudrate = 9600; |
|
|
|
|
private String parity = null; |
|
|
|
|
List<DeviceCodeParamEntity> deviceManageEntityList; |
|
|
|
|
// 调用service
|
|
|
|
|
ApplicationContext context = SpringBeanUtil.getApplicationContext(); |
|
|
|
@ -43,199 +44,222 @@ public class SerialPortSendReceive2 {
|
|
|
|
|
BuildingService buildingService = context.getBean(BuildingService.class); |
|
|
|
|
AnalysisReceiveOrder485 analysisReceiveOrder485 = new AnalysisReceiveOrder485(); |
|
|
|
|
|
|
|
|
|
public void serialPortSend(String sort,String thread) { |
|
|
|
|
public void serialPortSend(String sort, String thread) { |
|
|
|
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
|
|
|
|
Date date = new Date(); |
|
|
|
|
String dateStr = df.format(date); |
|
|
|
|
SerialPort serialPort = null; |
|
|
|
|
|
|
|
|
|
CacheUtil cacheUtil = CacheUtil.getInstance(); |
|
|
|
|
// if (port.contains(comName)){
|
|
|
|
|
try{ |
|
|
|
|
try { |
|
|
|
|
//生成对应的采集指令
|
|
|
|
|
if (sort.equals("1")){ //水温、水位
|
|
|
|
|
deviceManageEntityList = deviceCodeParamService.queryCodeParam3(thread); |
|
|
|
|
}else if (sort.equals("2")){ //采集水、电、运行状态!
|
|
|
|
|
deviceManageEntityList = deviceCodeParamService.queryCodeParam4(thread); |
|
|
|
|
}else if (sort.equals("3")){ //采集设定温度、设定水位、故障状态!
|
|
|
|
|
deviceManageEntityList = deviceCodeParamService.queryCodeParam5(thread); |
|
|
|
|
}else{ |
|
|
|
|
deviceManageEntityList = deviceCodeParamService.queryCodeParam3(thread); |
|
|
|
|
} |
|
|
|
|
// switch (sort) {
|
|
|
|
|
// case "2": //采集水、电、运行状态!
|
|
|
|
|
// deviceManageEntityList = deviceCodeParamService.queryCodeParam4(thread);
|
|
|
|
|
// break;
|
|
|
|
|
// case "3": //采集设定温度、设定水位、故障状态!
|
|
|
|
|
// deviceManageEntityList = deviceCodeParamService.queryCodeParam5(thread);
|
|
|
|
|
// break;
|
|
|
|
|
// default:
|
|
|
|
|
// deviceManageEntityList = deviceCodeParamService.queryCodeParam3(thread);
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
List<DeviceCodeParamEntity> deviceParamsByType = cacheUtil.getDeviceParamsByType(sort); |
|
|
|
|
deviceManageEntityList = deviceParamsByType |
|
|
|
|
.parallelStream() |
|
|
|
|
.filter(value -> value.getThread().equals(thread)) |
|
|
|
|
.sorted(Comparator.comparing(DeviceCodeParamEntity::getDataCom)) |
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
size = deviceManageEntityList.size(); |
|
|
|
|
for (int i=0;i<size;i++){ |
|
|
|
|
for (int i = 0; i < size; i++) { |
|
|
|
|
//判断网页端是否有操作设备的
|
|
|
|
|
if (Constant.WEB_FLAG) { |
|
|
|
|
Constant.FLAG=false; |
|
|
|
|
// serialPortUtil.closePort(serialPort);
|
|
|
|
|
Constant.FLAG = false; |
|
|
|
|
SerialTool.closePort(serialPort); |
|
|
|
|
// Thread.sleep(2000);
|
|
|
|
|
log.info("有指令下发退出定时采集"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
//获取设备实际波特率
|
|
|
|
|
baudrate=deviceManageEntityList.get(i).getBaudrate(); |
|
|
|
|
baudrate = deviceManageEntityList.get(i).getBaudrate(); |
|
|
|
|
//获取设备实际校验位
|
|
|
|
|
parity=deviceManageEntityList.get(i).getParity(); |
|
|
|
|
String comName=deviceManageEntityList.get(i).getDataCom(); |
|
|
|
|
parity = deviceManageEntityList.get(i).getParity(); |
|
|
|
|
String comName = deviceManageEntityList.get(i).getDataCom(); |
|
|
|
|
|
|
|
|
|
if (comName!=null && !comName.equals("")){ |
|
|
|
|
String deviceAddr=deviceManageEntityList.get(i).getDeviceAddr(); |
|
|
|
|
String deviceType=deviceManageEntityList.get(i).getDeviceType(); |
|
|
|
|
String registerAddr=deviceManageEntityList.get(i).getRegisterAddr(); |
|
|
|
|
String brand=deviceManageEntityList.get(i).getBrand();//品牌
|
|
|
|
|
String buildingId=deviceManageEntityList.get(i).getBuildingId(); |
|
|
|
|
String buildingName=buildingService.queryBuildingName(buildingId); //查询楼栋名称
|
|
|
|
|
try{ |
|
|
|
|
if (StringUtils.isBlank(comName)) { |
|
|
|
|
Constant.WEB_FLAG = false;//可以采集的状态
|
|
|
|
|
log.info("-------------串口:" + comName + "不存在!-------------"); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
String deviceAddr = deviceManageEntityList.get(i).getDeviceAddr(); |
|
|
|
|
String deviceType = deviceManageEntityList.get(i).getDeviceType(); |
|
|
|
|
String registerAddr = deviceManageEntityList.get(i).getRegisterAddr(); |
|
|
|
|
String brand = deviceManageEntityList.get(i).getBrand();//品牌
|
|
|
|
|
String buildingId = deviceManageEntityList.get(i).getBuildingId(); |
|
|
|
|
String buildingName = buildingService.queryBuildingName(buildingId); //查询楼栋名称
|
|
|
|
|
try { |
|
|
|
|
//传入对应的串口参数并打开串口
|
|
|
|
|
if (parity==null || parity.equals("") || parity.equalsIgnoreCase("none")){ |
|
|
|
|
if (parity == null || parity.equals("") || parity.equalsIgnoreCase("none")) { |
|
|
|
|
serialPort = SerialTool.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); |
|
|
|
|
}else{ |
|
|
|
|
} else { |
|
|
|
|
serialPort = SerialTool.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN); |
|
|
|
|
} |
|
|
|
|
//向串口发送指令
|
|
|
|
|
if (serialPort != null) { |
|
|
|
|
// log.info("---------波特率:"+baudrate+",校验位:"+parity+" -----------");
|
|
|
|
|
String sendStr=SendOrderUtils.getSendStr(deviceManageEntityList.get(i)); |
|
|
|
|
SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort,sendStr,deviceType); |
|
|
|
|
if (deviceType.equals("热泵")){ |
|
|
|
|
String sendStr = SendOrderUtils.getSendStr(deviceManageEntityList.get(i)); |
|
|
|
|
SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceType); |
|
|
|
|
if (deviceType.equals("热泵")) { |
|
|
|
|
Thread.sleep(4000); |
|
|
|
|
}else{ |
|
|
|
|
} else { |
|
|
|
|
Thread.sleep(2000); |
|
|
|
|
} |
|
|
|
|
}else{ |
|
|
|
|
continue; //continue时,跳出本次循环,继续执行下次循环。Break时,跳出循环(结束循环),执行下面的语句。
|
|
|
|
|
} |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
// e.printStackTrace();
|
|
|
|
|
Constant.WEB_FLAG=false;//可以采集的状态
|
|
|
|
|
if(i==size-1){ |
|
|
|
|
Constant.FLAG=false; |
|
|
|
|
} else { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
Constant.WEB_FLAG = false;//可以采集的状态
|
|
|
|
|
log.error("发送窗口数据异常==>", e); |
|
|
|
|
} |
|
|
|
|
receiveStr=""; |
|
|
|
|
|
|
|
|
|
//从串口读取数据
|
|
|
|
|
byte[] bytes= SerialTool.readFromPort(serialPort); |
|
|
|
|
try { |
|
|
|
|
String byteStr = new String(bytes, 0, bytes.length).trim(); |
|
|
|
|
} catch (NullPointerException e) { |
|
|
|
|
byte[] bytes = SerialTool.readFromPort(serialPort); |
|
|
|
|
if (bytes == null) { |
|
|
|
|
SerialTool.closePort(serialPort); |
|
|
|
|
Thread.sleep(2000); |
|
|
|
|
log.info("串口"+serialPort+"没有数据返回!"+i); |
|
|
|
|
log.info("----------------"+deviceType+"离线,设备号:"+deviceAddr+",所属楼栋:"+buildingName+"----------------"); |
|
|
|
|
Constant.WEB_FLAG=false;//可以采集的状态
|
|
|
|
|
if(i==size-1){ |
|
|
|
|
Constant.FLAG=false; |
|
|
|
|
log.info("串口" + serialPort + "没有数据返回!" + i); |
|
|
|
|
log.info("----------------" + deviceType + "离线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------"); |
|
|
|
|
Constant.WEB_FLAG = false;//可以采集的状态
|
|
|
|
|
if (i == size - 1) { |
|
|
|
|
Constant.FLAG = false; |
|
|
|
|
} |
|
|
|
|
String time1=deviceInstallService.selectLastDate(deviceType,deviceAddr,buildingId); |
|
|
|
|
Date date1=new Date(); |
|
|
|
|
String time2=df.format(date1); |
|
|
|
|
if (time1==null){ |
|
|
|
|
time1=df.format(date1); |
|
|
|
|
String time1 = deviceInstallService.selectLastDate(deviceType, deviceAddr, buildingId); |
|
|
|
|
Date date1 = new Date(); |
|
|
|
|
String time2 = df.format(date1); |
|
|
|
|
if (time1 == null) { |
|
|
|
|
time1 = df.format(date1); |
|
|
|
|
} |
|
|
|
|
int d= ExchangeStringUtil.compareCopyTime(time1,time2); |
|
|
|
|
if (d==1){ |
|
|
|
|
deviceInstallService.updateNotOnline(deviceAddr,deviceType,buildingId,"离线"); //所有设备离线
|
|
|
|
|
if (deviceType.equals("热泵")){ |
|
|
|
|
nowDataService.updateRunState(buildingId,deviceAddr,"离线"); //监控界面状态表热泵在线状态
|
|
|
|
|
int d = ExchangeStringUtil.compareCopyTime(time1, time2); |
|
|
|
|
if (d == 1) { |
|
|
|
|
deviceInstallService.updateNotOnline(deviceAddr, deviceType, buildingId, "离线"); //所有设备离线
|
|
|
|
|
if (deviceType.equals("热泵")) { |
|
|
|
|
nowDataService.updateRunState(buildingId, deviceAddr, "离线"); //监控界面状态表热泵在线状态
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
receiveStr = receiveStr + printHexString(bytes); |
|
|
|
|
// 处理返回来的数据报文
|
|
|
|
|
dealReceiveData(dateStr, serialPort, i, deviceAddr, deviceType, registerAddr, brand, buildingId, buildingName, bytes); |
|
|
|
|
} |
|
|
|
|
Constant.FLAG = false; |
|
|
|
|
log.info("-------------一轮采集完,采集标志Constant.Flag=false-------------"); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
Constant.WEB_FLAG = false;//可以采集的状态
|
|
|
|
|
Constant.FLAG = false; |
|
|
|
|
log.error("-------------串口采集异常!-------------"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 处理返回来的数据 |
|
|
|
|
* @param dateStr |
|
|
|
|
* @param serialPort |
|
|
|
|
* @param i |
|
|
|
|
* @param deviceAddr |
|
|
|
|
* @param deviceType |
|
|
|
|
* @param registerAddr |
|
|
|
|
* @param brand |
|
|
|
|
* @param buildingId |
|
|
|
|
* @param buildingName |
|
|
|
|
* @param bytes |
|
|
|
|
* @throws InterruptedException |
|
|
|
|
*/ |
|
|
|
|
private void dealReceiveData(String dateStr, |
|
|
|
|
SerialPort serialPort, |
|
|
|
|
int i, |
|
|
|
|
String deviceAddr, |
|
|
|
|
String deviceType, |
|
|
|
|
String registerAddr, |
|
|
|
|
String brand, |
|
|
|
|
String buildingId, |
|
|
|
|
String buildingName, byte[] bytes) throws InterruptedException { |
|
|
|
|
receiveStr = ""; |
|
|
|
|
receiveStr = printHexString(bytes); |
|
|
|
|
//去掉空格和null
|
|
|
|
|
receiveStr = receiveStr.replace("null", ""); |
|
|
|
|
receiveStr = receiveStr.replace(" ", ""); |
|
|
|
|
log.info("串口"+serialPort+"接受第"+i+"数据:" + receiveStr + ",大小: " + receiveStr.length()); |
|
|
|
|
try{ |
|
|
|
|
log.info("串口" + serialPort + "接受第" + i + "数据:" + receiveStr + ",大小: " + receiveStr.length()); |
|
|
|
|
try { |
|
|
|
|
SerialTool.closePort(serialPort); |
|
|
|
|
log.info("关闭"+serialPort); |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
// e.printStackTrace();
|
|
|
|
|
Constant.WEB_FLAG=false;//可以采集的状态
|
|
|
|
|
if(i==size-1){ |
|
|
|
|
Constant.FLAG=false; |
|
|
|
|
log.info("关闭" + serialPort); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
Constant.WEB_FLAG = false;//可以采集的状态
|
|
|
|
|
if (i == size - 1) { |
|
|
|
|
Constant.FLAG = false; |
|
|
|
|
} |
|
|
|
|
log.error("关闭"+serialPort+"失败!"); |
|
|
|
|
log.error("关闭" + serialPort + "失败!", e); |
|
|
|
|
} |
|
|
|
|
//返回值全部变成大写
|
|
|
|
|
String receiveData = receiveStr.toUpperCase(); |
|
|
|
|
//截取去掉FE
|
|
|
|
|
String dataStr; |
|
|
|
|
if (receiveData.length()>8){ |
|
|
|
|
String str1=receiveData.substring(0,8); |
|
|
|
|
String str2=receiveData.substring(8); |
|
|
|
|
dataStr=str1.replace("FE", "")+str2; |
|
|
|
|
}else{ |
|
|
|
|
if (receiveData.length() > 8) { |
|
|
|
|
String str1 = receiveData.substring(0, 8); |
|
|
|
|
String str2 = receiveData.substring(8); |
|
|
|
|
dataStr = str1.replace("FE", "") + str2; |
|
|
|
|
} else { |
|
|
|
|
dataStr = receiveData.replace("FE", ""); |
|
|
|
|
} |
|
|
|
|
deviceInstallService.updateOnline(deviceAddr,deviceType,buildingId,"在线"); //设备在线
|
|
|
|
|
log.info("----------------"+deviceType+"在线,设备号:"+deviceAddr+",所属楼栋:"+buildingName+"----------------"); |
|
|
|
|
if (deviceType.equals("热泵")){ |
|
|
|
|
String strState=nowDataService.selectState(buildingId,deviceAddr); |
|
|
|
|
if (strState!=null && strState.equals("离线")){ //采集到数据
|
|
|
|
|
nowDataService.updateRunState(buildingId,deviceAddr,"不运行"); //监控界面状态表热泵在线状态
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
try{ |
|
|
|
|
if ((dataStr.length() == 36 || dataStr.length() == 44 || dataStr.length()==40 || dataStr.length()==50) && deviceType.equals("电表")) { |
|
|
|
|
analysisReceiveOrder485.analysisMeterOrder485(dataStr,registerAddr,brand,buildingId); |
|
|
|
|
nowDataService.proWaterLevel(dateStr,buildingId); //保存时间点楼栋水位
|
|
|
|
|
}else if ((dataStr.length() == 18 || dataStr.length() == 70 || dataStr.length() == 44) && deviceType.equals("水表")) { |
|
|
|
|
analysisReceiveOrder485.analysisWtMeterOrder485(dataStr,registerAddr,brand,buildingId); |
|
|
|
|
}else if (deviceType.equals("压变")) { |
|
|
|
|
analysisReceiveOrder485.analysisPressureOrder485(dataStr,registerAddr,brand,buildingId); |
|
|
|
|
}else if (deviceType.equals("热泵")) { |
|
|
|
|
analysisReceiveOrder485.analysisPumpOrder485(dataStr,registerAddr,brand,buildingId); |
|
|
|
|
}else if (deviceType.equals("温控")) { |
|
|
|
|
analysisReceiveOrder485.analysisTempOrder485(dataStr,registerAddr,brand,buildingId); |
|
|
|
|
}else if (deviceType.equals("时控")) { |
|
|
|
|
analysisReceiveOrder485.analysisTimeSetOrder485(dataStr,registerAddr,brand,buildingId); |
|
|
|
|
}else if (deviceType.equals("水位开关") && (registerAddr.equals("0018") || registerAddr.equals("0017"))){ |
|
|
|
|
analysisReceiveOrder485.analysisRelayOrder485(dataStr,registerAddr,brand,buildingId); |
|
|
|
|
}else if (dataStr.length() == 30 && deviceType.equals("状态检测")) {//五路状态读取,兼容旧版系统
|
|
|
|
|
analysisReceiveOrder485.analysisStateOrder485(dataStr,registerAddr,brand,buildingId); |
|
|
|
|
}else if (deviceType.equals("水位开关") && registerAddr.equals("0010")){ |
|
|
|
|
analysisReceiveOrder485.analysisPumpStateOrder(dataStr,registerAddr,brand,buildingId); //创新,热泵状态与水位共用一个8路设备
|
|
|
|
|
// analysisReceiveOrder485.analysisRelayOrder485(dataStr,registerAddr,brand,buildingId); //华厦
|
|
|
|
|
nowDataService.proWaterLevel(dateStr,buildingId); //保存时间点楼栋水位
|
|
|
|
|
}else if (deviceType.equals("温度变送器")){ |
|
|
|
|
analysisReceiveOrder485.analysisMulTempOrder485(dataStr,registerAddr,brand,buildingId); |
|
|
|
|
}else if (deviceType.equals("热泵状态")){ |
|
|
|
|
analysisReceiveOrder485.analysisPumpStateOrder(dataStr,registerAddr,brand,buildingId); |
|
|
|
|
deviceInstallService.updateOnline(deviceAddr, deviceType, buildingId, "在线"); //设备在线
|
|
|
|
|
log.info("----------------" + deviceType + "在线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------"); |
|
|
|
|
if (deviceType.equals("热泵")) { |
|
|
|
|
String strState = nowDataService.selectState(buildingId, deviceAddr); |
|
|
|
|
if (strState != null && strState.equals("离线")) { //采集到数据
|
|
|
|
|
nowDataService.updateRunState(buildingId, deviceAddr, "不运行"); //监控界面状态表热泵在线状态
|
|
|
|
|
} |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
// e.printStackTrace();
|
|
|
|
|
Constant.WEB_FLAG=false;//可以采集的状态
|
|
|
|
|
if(i==size-1){ |
|
|
|
|
Constant.FLAG=false; |
|
|
|
|
} |
|
|
|
|
log.error(deviceManageEntityList.get(i).getDeviceType()+"保存数据库失败!"+i); |
|
|
|
|
try { |
|
|
|
|
// 解析返回来的数据
|
|
|
|
|
analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, dataStr, analysisReceiveOrder485, nowDataService); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
Constant.WEB_FLAG = false;//可以采集的状态
|
|
|
|
|
log.error(deviceManageEntityList.get(i).getDeviceType() + "保存数据库失败!" + i,e); |
|
|
|
|
} |
|
|
|
|
Thread.sleep(1000); |
|
|
|
|
}else{ |
|
|
|
|
Constant.WEB_FLAG=false;//可以采集的状态
|
|
|
|
|
if(i==size-1){ |
|
|
|
|
Constant.FLAG=false; |
|
|
|
|
} |
|
|
|
|
log.info("-------------串口:"+comName+"不存在!-------------"); |
|
|
|
|
} |
|
|
|
|
if(i==size-1){ |
|
|
|
|
Constant.FLAG=false; |
|
|
|
|
log.info("-------------一轮采集完,采集标志Constant.Flag="+Constant.FLAG+"-------------"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
Constant.WEB_FLAG=false;//可以采集的状态
|
|
|
|
|
Constant.FLAG=false; |
|
|
|
|
log.error("-------------串口采集异常!-------------"); |
|
|
|
|
|
|
|
|
|
static void analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String dataStr, AnalysisReceiveOrder485 analysisReceiveOrder485, NowDataService nowDataService) { |
|
|
|
|
if ((dataStr.length() == 36 || dataStr.length() == 44 || dataStr.length() == 40 || dataStr.length() == 50) && deviceType.equals("电表")) { |
|
|
|
|
analysisReceiveOrder485.analysisMeterOrder485(dataStr, registerAddr, brand, buildingId); |
|
|
|
|
nowDataService.proWaterLevel(dateStr, buildingId); //保存时间点楼栋水位
|
|
|
|
|
} else if ((dataStr.length() == 18 || dataStr.length() == 70 || dataStr.length() == 44) && deviceType.equals("水表")) { |
|
|
|
|
analysisReceiveOrder485.analysisWtMeterOrder485(dataStr, registerAddr, brand, buildingId); |
|
|
|
|
} else if (deviceType.equals("压变")) { |
|
|
|
|
analysisReceiveOrder485.analysisPressureOrder485(dataStr, registerAddr, brand, buildingId); |
|
|
|
|
} else if (deviceType.equals("热泵")) { |
|
|
|
|
analysisReceiveOrder485.analysisPumpOrder485(dataStr, registerAddr, brand, buildingId); |
|
|
|
|
} else if (deviceType.equals("温控")) { |
|
|
|
|
analysisReceiveOrder485.analysisTempOrder485(dataStr, registerAddr, brand, buildingId); |
|
|
|
|
} else if (deviceType.equals("时控")) { |
|
|
|
|
analysisReceiveOrder485.analysisTimeSetOrder485(dataStr, registerAddr, brand, buildingId); |
|
|
|
|
} else if (deviceType.equals("水位开关") && (registerAddr.equals("0018") || registerAddr.equals("0017"))) { |
|
|
|
|
analysisReceiveOrder485.analysisRelayOrder485(dataStr, registerAddr, brand, buildingId); |
|
|
|
|
} else if (dataStr.length() == 30 && deviceType.equals("状态检测")) {//五路状态读取,兼容旧版系统
|
|
|
|
|
analysisReceiveOrder485.analysisStateOrder485(dataStr, registerAddr, brand, buildingId); |
|
|
|
|
} else if (deviceType.equals("水位开关") && registerAddr.equals("0010")) { |
|
|
|
|
analysisReceiveOrder485.analysisPumpStateOrder(dataStr, registerAddr, brand, buildingId); //创新,热泵状态与水位共用一个8路设备
|
|
|
|
|
// analysisReceiveOrder485.analysisRelayOrder485(dataStr,registerAddr,brand,buildingId); //华厦
|
|
|
|
|
nowDataService.proWaterLevel(dateStr, buildingId); //保存时间点楼栋水位
|
|
|
|
|
} else if (deviceType.equals("温度变送器")) { |
|
|
|
|
analysisReceiveOrder485.analysisMulTempOrder485(dataStr, registerAddr, brand, buildingId); |
|
|
|
|
} else if (deviceType.equals("热泵状态")) { |
|
|
|
|
analysisReceiveOrder485.analysisPumpStateOrder(dataStr, registerAddr, brand, buildingId); |
|
|
|
|
} |
|
|
|
|
// }else {
|
|
|
|
|
// log.info("串口:"+comName+"不存在!");
|
|
|
|
|
// }
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 字节数组转16进制字符串 |
|
|
|
|
* |
|
|
|
|
* @param b 字节数组 |
|
|
|
|
* @return 16进制字符串 |
|
|
|
|
*/ |
|
|
|
@ -253,12 +277,13 @@ public class SerialPortSendReceive2 {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 十六进制字符串转byte[] |
|
|
|
|
* |
|
|
|
|
* @param hex 十六进制字符串 |
|
|
|
|
* @return byte[] |
|
|
|
|
*/ |
|
|
|
|
public static byte[] hexStr2Byte(String hex) { |
|
|
|
|
if (hex == null) { |
|
|
|
|
return new byte[] {}; |
|
|
|
|
return new byte[]{}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 奇数位补0
|
|
|
|
@ -280,6 +305,7 @@ public class SerialPortSendReceive2 {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 16进制转换成为string类型字符串 |
|
|
|
|
* |
|
|
|
|
* @param s 待转换字符串 |
|
|
|
|
*/ |
|
|
|
|
public static String hexStringToString(String s) { |
|
|
|
|