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