Browse Source

modbus,数据采集完成

java8
wenkuan.shi 1 year ago
parent
commit
108ef15416
  1. 6
      src/main/java/com/xujie/sys/config/RedisConfig.java
  2. 5
      src/main/java/com/xujie/sys/modules/reader/entity/EquipmentFolderLocation.java
  3. 18
      src/main/java/com/xujie/sys/modules/reader/service/impl/GetInformationForExcelServiceImpl.java
  4. 170
      src/main/java/com/xujie/sys/modules/reader/service/impl/ModbusCommunicateServiceImpl.java

6
src/main/java/com/xujie/sys/config/RedisConfig.java

@ -7,6 +7,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
@ -21,11 +22,14 @@ public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate() {
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
// redisTemplate.setValueSerializer(new StringRedisSerializer());
// value序列化方式采用jackson
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setConnectionFactory(factory);
return redisTemplate;
}

5
src/main/java/com/xujie/sys/modules/reader/entity/EquipmentFolderLocation.java

@ -18,6 +18,7 @@ public class EquipmentFolderLocation {
private String site;
private String buNo;
private String itemNo;
private String itemType;
private String backupFolderPath;
private String batchDate;
private String suffix;
@ -38,8 +39,6 @@ public class EquipmentFolderLocation {
//跳过数据行
private Integer skipLine;
//设备类型(针对modbus设备)
private String equipmentDesc;
private String ip;
@ -52,6 +51,4 @@ public class EquipmentFolderLocation {
private int registerNumInspection;
private String registerNumInspectionColumntype;
private int unitId;
}

18
src/main/java/com/xujie/sys/modules/reader/service/impl/GetInformationForExcelServiceImpl.java

@ -3,6 +3,7 @@ package com.xujie.sys.modules.reader.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xujie.sys.config.RedisConfig;
import com.xujie.sys.modules.reader.dao.GetInformationForExcelMapper;
import com.xujie.sys.modules.reader.entity.EquipmentDataDetail;
import com.xujie.sys.modules.reader.entity.EquipmentFolderLocation;
@ -43,6 +44,9 @@ public class GetInformationForExcelServiceImpl extends ServiceImpl<GetInformatio
@Autowired
private EquipmentFolderSortService equipmentFolderSortService;
@Autowired
private RedisConfig redisConfig;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveByExcel() {
@ -627,16 +631,4 @@ public class GetInformationForExcelServiceImpl extends ServiceImpl<GetInformatio
}
}
}
//将数据储存在redis里面
// private void saveRedisByFolderLocation(){
// //获取每一个文件夹路径
// List<EquipmentFolderLocation> locationList = equipmentFolderLocationService.list();
// redisTemplate.opsForValue().setIfAbsent("locationList",locationList)
//
// }
}
}

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

@ -12,7 +12,6 @@ import com.ghgande.j2mod.modbus.procimg.SimpleRegister;
import com.xujie.sys.modules.reader.dao.GetInformationForExcelMapper;
import com.xujie.sys.modules.reader.entity.EquipmentDataDetail;
import com.xujie.sys.modules.reader.entity.EquipmentFolderLocation;
import com.xujie.sys.modules.reader.entity.EquipmentFolderSortEntity;
import com.xujie.sys.modules.reader.service.EquipmentFolderLocationService;
import com.xujie.sys.modules.reader.service.EquipmentFolderSortService;
import com.xujie.sys.modules.reader.service.GetInformationForExcelService;
@ -82,47 +81,44 @@ public class ModbusCommunicateServiceImpl implements ModbusCommunicateService {
//获取对应检验单号的值
List<List<Float>> floatValues = getValue(modbusIp, modbusPort, registerAddress, registerNum, unitId);
//获取对应的batchNo
LambdaQueryWrapper<EquipmentFolderSortEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(EquipmentFolderSortEntity::getSite,folderLocation.getSite());
wrapper.eq(EquipmentFolderSortEntity::getBuNo,folderLocation.getBuNo());
wrapper.eq(EquipmentFolderSortEntity::getInspectionNo,inspectionOrderNumber);
EquipmentFolderSortEntity one = equipmentFolderSortService.getOne(wrapper);
Integer batchNo ;
//在所有的数据新增玩之后 , 对应的获取批次号进行新增或者修改(数据第一次就新增)
if (one==null) {
EquipmentFolderSortEntity equipmentFolderSortEntity = new EquipmentFolderSortEntity();
equipmentFolderSortEntity.setSite(folderLocation.getSite());
equipmentFolderSortEntity.setBuNo(folderLocation.getBuNo());
equipmentFolderSortEntity.setInspectionNo(inspectionOrderNumber);
equipmentFolderSortEntity.setBatchNo(2);
equipmentFolderSortEntity.setFileNo(folderLocation.getFileNo());
equipmentFolderSortEntity.setCreateDate(new Date());
equipmentFolderSortService.save(equipmentFolderSortEntity);
//对应的批次号为1
batchNo = 1;
} else {
Date createDate = one.getCreateDate();//获取最近新增一条信息的时间
Date date = new Date();
if (StringUtils.isEmpty(folderLocation.getBatchDate())) {
folderLocation.setBatchDate("1");
}
int time = Integer.parseInt(folderLocation.getBatchDate());
Long finalTime = date.getTime() - createDate.getTime();
if (finalTime / 1000 > time) {
batchNo = one.getBatchNo();
//对应的不是第一次新增的情况下如果批次号不为空的情况下那么草果规定时间 批次号就加一,下次获取的时候就可以直接引用
one.setBatchNo(batchNo+1);
one.setFileNo(folderLocation.getFileNo());
one.setCreateDate(new Date());
equipmentFolderSortService.updateById(one);
} else {
batchNo = one.getBatchNo();
}
}
// LambdaQueryWrapper<EquipmentFolderSortEntity> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(EquipmentFolderSortEntity::getSite,folderLocation.getSite());
// wrapper.eq(EquipmentFolderSortEntity::getBuNo,folderLocation.getBuNo());
// wrapper.eq(EquipmentFolderSortEntity::getInspectionNo,inspectionOrderNumber);
// EquipmentFolderSortEntity one = equipmentFolderSortService.getOne(wrapper);
// Integer batchNo ;
// //在所有的数据新增玩之后 , 对应的获取批次号进行新增或者修改(数据第一次就新增)
// if (one==null) {
// EquipmentFolderSortEntity equipmentFolderSortEntity = new EquipmentFolderSortEntity();
// equipmentFolderSortEntity.setSite(folderLocation.getSite());
// equipmentFolderSortEntity.setBuNo(folderLocation.getBuNo());
// equipmentFolderSortEntity.setInspectionNo(inspectionOrderNumber);
// equipmentFolderSortEntity.setBatchNo(2);
// equipmentFolderSortEntity.setFileNo(folderLocation.getFileNo());
// equipmentFolderSortEntity.setCreateDate(new Date());
// equipmentFolderSortService.save(equipmentFolderSortEntity);
// //对应的批次号为1
// batchNo = 1;
// } else {
// Date createDate = one.getCreateDate();//获取最近新增一条信息的时间
// Date date = new Date();
// if (StringUtils.isEmpty(folderLocation.getBatchDate())) {
// folderLocation.setBatchDate("1");
// }
// int time = Integer.parseInt(folderLocation.getBatchDate());
// Long finalTime = date.getTime() - createDate.getTime();
// if (finalTime / 1000 > time) {
// batchNo = one.getBatchNo();
// //对应的不是第一次新增的情况下如果批次号不为空的情况下那么草果规定时间 批次号就加一,下次获取的时候就可以直接引用
// one.setBatchNo(batchNo+1);
// one.setFileNo(folderLocation.getFileNo());
// one.setCreateDate(new Date());
// equipmentFolderSortService.updateById(one);
// } else {
// batchNo = one.getBatchNo();
// }
// }
int num = 1;
List<EquipmentDataDetail> detailList = new ArrayList<>();
@ -135,7 +131,6 @@ public class ModbusCommunicateServiceImpl implements ModbusCommunicateService {
equipmentDataDetail.setSite(folderLocation.getSite());
equipmentDataDetail.setEquipmentNo(folderLocation.getEquipmentNo());
equipmentDataDetail.setBuNo(folderLocation.getBuNo());
equipmentDataDetail.setBatchNo(batchNo);
equipmentDataDetail.setNum(num);
detailList.add(equipmentDataDetail);
num++;
@ -206,51 +201,6 @@ public class ModbusCommunicateServiceImpl implements ModbusCommunicateService {
return floatValues;
}
//获取值(请求modbus获取)
public List<Float> getResponseMessage(int registerAddress, int registerNum, int unitId, TCPMasterConnection connection) {
ArrayList<Float> floats = new ArrayList<Float>();
try {
// 创建一个Modbus TCP请求
ReadMultipleRegistersRequest request = new ReadMultipleRegistersRequest(registerAddress, registerNum);
request.setUnitID(unitId); // 设置Modbus设备的Unit ID
// 创建一个Modbus TCP事务
ModbusTCPTransaction transaction = new ModbusTCPTransaction(connection);
transaction.setRequest(request);
// 执行Modbus TCP事务
transaction.execute();
log.info("开始执行modbus tcp事物");
// 获取响应
ReadMultipleRegistersResponse response = (ReadMultipleRegistersResponse) transaction.getResponse();
log.info("打印响应的数据: {}", response.getMessage());
if (response != null) {
// 处理响应数据
ArrayList<Integer> hex = new ArrayList<>();
InputRegister[] registers = response.getRegisters();
for (InputRegister register : registers) {
short value = register.toShort();
int hexValue = value & 0xFFFF;
log.info("获取的值是: {},value: {}", hexValue, value);
hex.add(hexValue);
}
for (int i = 0; i < hex.size(); i += 2) {
int hexI = (hex.get(i) << 16) | (hex.get(i + 1) & 0xFFFF);
float floatValue = Float.intBitsToFloat(hexI);
floats.add(floatValue);
log.info("最终值是: {}", floatValue);
}
} else {
log.info("处理数据出现异常");
}
} catch (Exception e) {
log.error("连接Modbus设备时出现异常: {}", e.getMessage());
e.printStackTrace();
}
return floats;
}
//获取检验单号
@Transactional
@ -372,6 +322,52 @@ public class ModbusCommunicateServiceImpl implements ModbusCommunicateService {
}
}
}
//获取值(请求modbus获取)
public List<Float> getResponseMessage(int registerAddress, int registerNum, int unitId, TCPMasterConnection connection) {
ArrayList<Float> floats = new ArrayList<Float>();
try {
// 创建一个Modbus TCP请求
ReadMultipleRegistersRequest request = new ReadMultipleRegistersRequest(registerAddress, registerNum);
request.setUnitID(unitId); // 设置Modbus设备的Unit ID
// 创建一个Modbus TCP事务
ModbusTCPTransaction transaction = new ModbusTCPTransaction(connection);
transaction.setRequest(request);
// 执行Modbus TCP事务
transaction.execute();
log.info("开始执行modbus tcp事物");
// 获取响应
ReadMultipleRegistersResponse response = (ReadMultipleRegistersResponse) transaction.getResponse();
log.info("打印响应的数据: {}", response.getMessage());
if (response != null) {
// 处理响应数据
ArrayList<Integer> hex = new ArrayList<>();
InputRegister[] registers = response.getRegisters();
for (InputRegister register : registers) {
short value = register.toShort();
int hexValue = value & 0xFFFF;
log.info("获取的值是: {},value: {}", hexValue, value);
hex.add(hexValue);
}
for (int i = 0; i < hex.size(); i += 2) {
int hexI = (hex.get(i) << 16) | (hex.get(i + 1) & 0xFFFF);
float floatValue = Float.intBitsToFloat(hexI);
floats.add(floatValue);
log.info("最终值是: {}", floatValue);
}
} else {
log.info("处理数据出现异常");
}
} catch (Exception e) {
log.error("连接Modbus设备时出现异常: {}", e.getMessage());
e.printStackTrace();
}
return floats;
}
//数据清零
public void deleteForModbus(int registerAddress, int registerNum, int unitId, TCPMasterConnection connection) {
try {

Loading…
Cancel
Save