Browse Source

20241223

java8
qiezi 1 year ago
parent
commit
b087c9204a
  1. 67
      src/main/java/com/xujie/sys/modules/reader/service/impl/ModbusCommunicateServiceImpl.java

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

@ -259,12 +259,6 @@ public class ModbusCommunicateServiceImpl implements ModbusCommunicateService {
//获取检验单号
@Transactional
public String getInspectionOrderNumber(String modbusIp, int modbusPort, int registerAddress, int registerNum, int unitId) {
log.info("modbus请求开始解析");
// String modbusIp = "172.26.58.222";
// int modbusPort = 502;
// int registerAddress = 299;
// int registerNum = 11;
// int unitId = 1;
log.info("获取modbus设备ip-端口-地址值-数量-unitId:{}-{}-{}-{}-{}", modbusIp, modbusPort, registerAddress, registerNum, unitId);
long startTime = System.nanoTime();
String finalString = "";
@ -286,7 +280,7 @@ public class ModbusCommunicateServiceImpl implements ModbusCommunicateService {
// 执行Modbus TCP事务
transaction.execute();
log.info("开始执行modbus tcp事物");
log.info("开始执行{}modbus tcp事物",modbusIp);
// 获取响应
ReadMultipleRegistersResponse response = (ReadMultipleRegistersResponse) transaction.getResponse();
@ -295,44 +289,39 @@ public class ModbusCommunicateServiceImpl implements ModbusCommunicateService {
double elapsedTimeInSeconds = (double) elapsedTimeInNanos / 1_000_000_000.0;
log.info("时间elapsedTimeInSeconds: {}", elapsedTimeInSeconds);
log.info("打印响应的数据: {}", response.getMessage());
if (response != null) {
InputRegister[] registers = response.getRegisters();
ArrayList<byte[]> byteArrayList = new ArrayList<byte[]>();
for (InputRegister register : registers) {
short value = register.toShort();
log.info("short类型: {}", value);
// 创建一个长度为 2 的字节数组
byte[] byteArray = new byte[2];
// short 值转换成字节数组
byteArray[1] = (byte) (value & 0xff); // 获取低位字节
byteArray[0] = (byte) ((value >> 8) & 0xff); // 获取高位字节
byteArrayList.add(byteArray);
}
log.info("打印响应的数据IP:{}: {}",modbusIp, response.getMessage());
InputRegister[] registers = response.getRegisters();
ArrayList<byte[]> byteArrayList = new ArrayList<byte[]>();
for (InputRegister register : registers) {
short value = register.toShort();
log.info("short类型: {}", value);
// 创建一个长度为 2 的字节数组
byte[] byteArray = new byte[2];
// short 值转换成字节数组
byteArray[1] = (byte) (value & 0xff); // 获取低位字节
byteArray[0] = (byte) ((value >> 8) & 0xff); // 获取高位字节
byteArrayList.add(byteArray);
}
// 将字节数组列表转换为字符串
StringBuilder stringBuilder = new StringBuilder();
for (byte[] byteArray : byteArrayList) {
stringBuilder.append(new String(byteArray, StandardCharsets.UTF_8));
}
//复制需要返回的string值
finalString = stringBuilder.toString();
log.info("转换后的字符串: {}", finalString);
if (StringUtils.isEmpty(finalString) || finalString.trim().equals("")) {//判断是空或者是寄存器是零的话就返回
log.info("没有值或者已被清零");
} else {
//如果不是零的话就对寄存器清零
deleteForModbus(registerAddress, registerNum, unitId, connection);
}
// 将字节数组列表转换为字符串
StringBuilder stringBuilder = new StringBuilder();
for (byte[] byteArray : byteArrayList) {
stringBuilder.append(new String(byteArray, StandardCharsets.UTF_8));
}
//复制需要返回的string值
finalString = stringBuilder.toString();
log.info("转换后的字符串: {}", finalString);
if (StringUtils.isEmpty(finalString) || finalString.trim().equals("")) {//判断是空或者是寄存器是零的话就返回
log.info("没有值或者已被清零");
} else {
log.info("处理数据出现异常");
//如果不是零的话就对寄存器清零
deleteForModbus(registerAddress, registerNum, unitId, connection);
}
// 关闭连接
connection.close();
log.info("关闭连接");
} catch (Exception e) {
log.error("连接Modbus设备时出现异常: {}", e.getMessage());
log.error("连接IP{}Modbus设备时出现异常: {}", modbusIp,e.getMessage());
e.printStackTrace();
}
return finalString;

Loading…
Cancel
Save