From 46f2fb51be718126c05284dee00c47e54b528865 Mon Sep 17 00:00:00 2001 From: qiezi <15576055375@163.com> Date: Sun, 29 Sep 2024 15:23:31 +0800 Subject: [PATCH] 20240929 --- .../entity/EquipmentFolderSortEntity.java | 2 + .../impl/ModbusCommunicateServiceImpl.java | 98 +++++++------------ 2 files changed, 40 insertions(+), 60 deletions(-) diff --git a/src/main/java/com/xujie/sys/modules/reader/entity/EquipmentFolderSortEntity.java b/src/main/java/com/xujie/sys/modules/reader/entity/EquipmentFolderSortEntity.java index 1080c971..16b73c51 100644 --- a/src/main/java/com/xujie/sys/modules/reader/entity/EquipmentFolderSortEntity.java +++ b/src/main/java/com/xujie/sys/modules/reader/entity/EquipmentFolderSortEntity.java @@ -20,6 +20,8 @@ public class EquipmentFolderSortEntity { //文件编号 private String fileNo; + private String value; + //文件保存时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createDate; diff --git a/src/main/java/com/xujie/sys/modules/reader/service/impl/ModbusCommunicateServiceImpl.java b/src/main/java/com/xujie/sys/modules/reader/service/impl/ModbusCommunicateServiceImpl.java index 713fdde4..37b8a090 100644 --- a/src/main/java/com/xujie/sys/modules/reader/service/impl/ModbusCommunicateServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/reader/service/impl/ModbusCommunicateServiceImpl.java @@ -156,10 +156,7 @@ public class ModbusCommunicateServiceImpl implements ModbusCommunicateService { List list = equipmentFolderLocationService .lambdaQuery() .eq(EquipmentFolderLocation::getSuffix, "RS232/RS485") - .and(wrapper -> { - wrapper.isNull(EquipmentFolderLocation::getTransparentFlag) - .or().eq(EquipmentFolderLocation::getTransparentFlag,"N"); - }) + .ne(EquipmentFolderLocation::getTransparentFlag,"Y") .list(); if (list.isEmpty()){ log.info("没有维护RS232/RS485的设备信息"); @@ -171,70 +168,51 @@ public class ModbusCommunicateServiceImpl implements ModbusCommunicateService { int unitId = device.getUnitId();// 从站ID int ref = device.getRegisterAddress();// 开始地址 int count = device.getRegisterNum();//数量 -// int size = device.getRegisterAddressInspection();// 记录条数所在寄存器地址 String type = device.getRegisterNumColumntype();// 类型 -// EquipmentFolderSortEntity sort = equipmentFolderSortService.lambdaQuery() -// .eq(EquipmentFolderSortEntity::getSite, device.getSite()) -// .eq(EquipmentFolderSortEntity::getBuNo, device.getBuNo()) -// .eq(EquipmentFolderSortEntity::getFileNo, device.getFileNo()) -// .one(); -// log.info("IP:{},Port:{}",IP, PORT); -// Integer value = CollectUtil.getValue(IP, PORT, unitId, size-1); -// if (Objects.isNull(sort) || value == null) { -// continue; -// }else if (Integer.valueOf(sort.getBatchNo()).equals(value)){ -// continue; -// }else if (value.equals(0)){ -// equipmentFolderSortService.lambdaUpdate() -// .eq(EquipmentFolderSortEntity::getSite, device.getSite()) -// .eq(EquipmentFolderSortEntity::getBuNo, device.getBuNo()) -// .eq(EquipmentFolderSortEntity::getFileNo, device.getFileNo()) -// .set(EquipmentFolderSortEntity::getBatchNo,value) -// .update(); -// continue; -// } + EquipmentFolderSortEntity sort = equipmentFolderSortService.lambdaQuery() + .eq(EquipmentFolderSortEntity::getSite, device.getSite()) + .eq(EquipmentFolderSortEntity::getBuNo, device.getBuNo()) + .eq(EquipmentFolderSortEntity::getFileNo, device.getFileNo()) + .one(); List values = CollectUtil.getValues(IP, PORT, unitId, ref-1, count); - List details = new ArrayList<>(); - Date createDate = new Date(); - if ("float".equals(type) && count % 2 == 0){ - int value = 1; - for (int i = 0; i < values.size(); i+=2) { - EquipmentDataDetail detail = new EquipmentDataDetail(); - detail.setSite(device.getSite()); - detail.setBuNo(device.getBuNo()); - detail.setFileNo(device.getFileNo()); - detail.setValue0(values.get(i)+"."+values.get(i+1)); - detail.setNum(value++); - detail.setCreateDate(createDate); - detail.setEquipmentNo(device.getEquipmentNo()); - details.add(detail); - } - }else if ("int".equals(type)){ - for (int i = 0; i < values.size(); i++) { - EquipmentDataDetail detail = new EquipmentDataDetail(); - detail.setSite(device.getSite()); - detail.setBuNo(device.getBuNo()); - detail.setFileNo(device.getFileNo()); - detail.setValue0(values.get(i).toString()); - detail.setNum(i+1); - detail.setCreateDate(createDate); - detail.setEquipmentNo(device.getEquipmentNo()); - details.add(detail); - } + if (values.size() != 2 && "float".equals(type)){ + log.info("获取数据失败"); + continue; } - for (EquipmentDataDetail detail : details) { - equipmentDataDetailService.save(detail); + float num = registersToFloat(values.get(0), values.get(1)); + if ((num == 0 || num == 0.0) && (Objects.isNull(sort.getValue()) || "0".equalsIgnoreCase(sort.getValue()) || "0.0".equalsIgnoreCase(sort.getValue()))){ + continue; } -// equipmentFolderSortService.lambdaUpdate() -// .eq(EquipmentFolderSortEntity::getSite, device.getSite()) -// .eq(EquipmentFolderSortEntity::getBuNo, device.getBuNo()) -// .eq(EquipmentFolderSortEntity::getFileNo, device.getFileNo()) -// .set(EquipmentFolderSortEntity::getBatchNo,value) -// .update(); + Date createDate = new Date(); + EquipmentDataDetail detail = new EquipmentDataDetail(); + detail.setSite(device.getSite()); + detail.setBuNo(device.getBuNo()); + detail.setFileNo(device.getFileNo()); + detail.setValue0(String.valueOf(num)); + detail.setGroupValue(sort.getBatchNo()); + detail.setCreateDate(createDate); + detail.setEquipmentNo(device.getEquipmentNo()); + equipmentDataDetailService.save(detail); + if (num == 0){ + sort.setBatchNo(sort.getBatchNo() + 1); + } + equipmentFolderSortService.lambdaUpdate() + .set(EquipmentFolderSortEntity::getValue, String.valueOf(num)) + .set(EquipmentFolderSortEntity::getBatchNo, sort.getBatchNo()) + .eq(EquipmentFolderSortEntity::getId, sort.getId()) + .update(); } } + + public static float registersToFloat(int highRegister, int lowRegister) { + // 合并两个寄存器 + int combined = (highRegister << 16) | (lowRegister & 0xFFFF); + // 转换为浮点数 + return Float.intBitsToFloat(combined); + } + //应为modbus 寄存器每次最大请求一百多个 这里一次连接多次分多次请求 //获取具体值(连接modbus) @Transactional