Browse Source

20240929

java8
qiezi 1 year ago
parent
commit
46f2fb51be
  1. 2
      src/main/java/com/xujie/sys/modules/reader/entity/EquipmentFolderSortEntity.java
  2. 98
      src/main/java/com/xujie/sys/modules/reader/service/impl/ModbusCommunicateServiceImpl.java

2
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;

98
src/main/java/com/xujie/sys/modules/reader/service/impl/ModbusCommunicateServiceImpl.java

@ -156,10 +156,7 @@ public class ModbusCommunicateServiceImpl implements ModbusCommunicateService {
List<EquipmentFolderLocation> 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<Integer> values = CollectUtil.getValues(IP, PORT, unitId, ref-1, count);
List<EquipmentDataDetail> 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

Loading…
Cancel
Save