fix: 读空指针异常解决阻塞问题

This commit is contained in:
2024-07-24 10:01:19 +08:00
parent fd9eef0191
commit 98618cbf52
2 changed files with 215 additions and 201 deletions

View File

@@ -273,14 +273,14 @@ public class ItemProtocol {
setIsonline(true);
return value;
}
return 0;
return value;
}
public String getOpcStringValue(String protocol) {
String value = this.driver.getStringValue(protocol);
if (value == null) {
setIsonline(false);
return "0";
return value;
} else {
setIsonline(true);
return value;

View File

@@ -358,211 +358,219 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
}
}
}
//不同任务限制清零
if (!Objects.equals(task, last_task)) {
this.isonline=true;
count = 0;
}
if (mode == 0 || command == 9) {
this.setIsonline(false);
message = "universal_off";
}else {
this.setIsonline(true);
}
if (error != 0) {
this.setIserror(true);
message = "universal_message3";
} else {
this.setIserror(false);
}
if (mode != 3 || requireSucess) {
message = "one_message7";
} else {
if (error != 0) {
erroBlock();
}
List list = new ArrayList();
switch (command) {
case 0:
boolean b = applyTask();
if (b) {
requireSucess = false;
}
break;
case 1:
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content("取货中")
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
message = "universal_delivery";
if (updateCommand("1")) break;
break;
case 2:
LuceneLogDto logDto1 = LuceneLogDto.builder()
.device_code(device_code)
.content("取货完成")
.build();
logDto1.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto1);
message = "universal_completed";
if (updateCommand("2")) break;
Instruction instruction2 = checkInst();
if (ObjectUtil.isEmpty(instruction2)) {
message = "universal_message4";
break;
}
String next_device_code = instruction2.getNext_device_code();
Device nextDevice = deviceAppService.findDeviceByCode(next_device_code);
if (StrUtil.equals(nextDevice.getDevice_type(), DeviceType.conveyor.name())) {
packageDevicePoint(nextDevice, list);
}
if (StrUtil.equals(nextDevice.getDevice_type(), DeviceType.storage.name())) {
String pattern = "\\d+";
Pattern compile = Pattern.compile(pattern);
Map<String, Object> map = new HashMap<>();
map.put("code", "to_y");
map.put("value", inst.getTo_z() );
list.add(map);
if (inst.getTo_x().length() > 1 && !compile.matcher(inst.getTo_x()).matches()) {
String substring = inst.getTo_x().substring(1);
Map<String, Object> map1 = new HashMap<>();
map1.put("code", "to_z");
map1.put("value", substring);
list.add(map1);
} else {
Map<String, Object> map2 = new HashMap<>();
map2.put("code", "to_z");
map2.put("value", inst.getTo_x());
list.add(map2);
}
Map<String, Object> map3 = new HashMap<>();
map3.put("code", "to_x");
map3.put("value", inst.getTo_y());
list.add(map3);
}
Map<String, Object> map4 = new HashMap<>();
map4.put("code", "to_command");
map4.put("value", 2);
list.add(map4);
requireSucess = false;
break;
case 3:
LuceneLogDto logDto2 = LuceneLogDto.builder()
.device_code(device_code)
.content("放货")
.build();
logDto2.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto2);
message = "universal_releasing";
if (updateCommand("3")) break;
break;
case 4:
message = "one_message1";
Instruction instruction1 = checkInst();
String next_device_code1 = instruction1.getNext_device_code();
Device nextDevice1 = deviceAppService.findDeviceByCode(next_device_code1);
if (ObjectUtil.isNotNull(instruction1)) {
//指令为执行
SiemensConveyorDeviceDriver siemensConveyorDeviceDriver;
if (nextDevice1.getDeviceDriver() instanceof SiemensConveyorDeviceDriver) {
siemensConveyorDeviceDriver = (SiemensConveyorDeviceDriver) nextDevice1.getDeviceDriver();
if (siemensConveyorDeviceDriver.getMode() != 2 || siemensConveyorDeviceDriver.getMove() == 1) {
notCreateInstMessage = "未下发电气信号原因->输送线-货架对接位:" + siemensConveyorDeviceDriver.getDevice_code() +
"有货或未联机,无法下发指令!指令号:" + inst.getInstruction_code();
return;
}
}
Map<String, Object> map = new HashMap<>();
map.put("code", "to_command");
map.put("value", 4);
list.add(map);
}
requireSucess = false;
break;
case 5:
LuceneLogDto logDto3 = LuceneLogDto.builder()
.device_code(device_code)
.content("放货完成")
.build();
logDto3.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto3);
message = "universal_releasing_completed";
Map<String, Object> map = new HashMap<>();
List list5 = new ArrayList();
map.put("code", "to_command");
map.put("value", 11);
list5.add(map);
this.writing(list5);
Instruction inst = checkInst();
try {
if ("3".equals(inst.getPriority()) && errorInst != null) {
//存在同排移库做完后直接出库
String start_device_code = errorInst.getStart_device_code();
Device startDevice = deviceAppService.findDeviceByCode(start_device_code);
List listError = new ArrayList();
pakageCommand(listError , errorInst.getInstruction_code());
if (StrUtil.equals(startDevice.getDevice_type(), DeviceType.storage.name()) && !prohibitOutWarehouse) {
pakagePlc(errorInst, listError,"1");
}
if (ObjectUtil.isNotEmpty(listError)) {
this.writing(listError);
}
finish_instruction(inst);
errorInst = null;
} else {
finish_instruction(inst);
}
} catch (Exception e) {
e.printStackTrace();
}
inst = null;
requireSucess = false;
break;
case 6:
message = "one_message2";
Map<String, Object> map1 = new HashMap<>();
map1.put("code", "to_command");
map1.put("value", 6);
list.add(map1);
requireSucess = false;
break;
case 7:
message = "one_message3";
Map<String, Object> map2 = new HashMap<>();
map2.put("code", "to_command");
map2.put("value", 7);
list.add(map2);
requireSucess = false;
break;
case 8:
message = "one_message4";
Map<String, Object> map3 = new HashMap<>();
map3.put("code", "to_command");
map3.put("value", 8);
list.add(map3);
requireSucess = false;
break;
default:
message = "one_message5";
requireSucess = false;
break;
}
if (list.size() != 0) {
this.writing(list);
}
}
} catch (Exception var17) {
this.iserror = true;
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(this.device_code + "读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null")
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
message = "读取信号值时出现异常:" + var17.getMessage();
var17.printStackTrace();
logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null:" + ObjectUtil.isEmpty(this.itemProtocol));
}
//不同任务限制清零
if (!Objects.equals(task, last_task)) {
this.isonline=true;
count = 0;
}
if (mode == 0 || command == 9) {
this.setIsonline(false);
message = "universal_off";
}else {
this.setIsonline(true);
}
if (error != 0) {
this.setIserror(true);
message = "universal_message3";
} else {
this.setIserror(false);
}
if (mode != 3 || requireSucess) {
message = "one_message7";
} else {
if (error != 0) {
erroBlock();
}
List list = new ArrayList();
switch (command) {
case 0:
boolean b = applyTask();
if (b) {
requireSucess = false;
}
break;
case 1:
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content("取货中")
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
message = "universal_delivery";
if (updateCommand("1")) break;
break;
case 2:
LuceneLogDto logDto1 = LuceneLogDto.builder()
.device_code(device_code)
.content("取货完成")
.build();
logDto1.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto1);
message = "universal_completed";
if (updateCommand("2")) break;
Instruction instruction2 = checkInst();
if (ObjectUtil.isEmpty(instruction2)) {
message = "universal_message4";
break;
}
String next_device_code = instruction2.getNext_device_code();
Device nextDevice = deviceAppService.findDeviceByCode(next_device_code);
if (StrUtil.equals(nextDevice.getDevice_type(), DeviceType.conveyor.name())) {
packageDevicePoint(nextDevice, list);
}
if (StrUtil.equals(nextDevice.getDevice_type(), DeviceType.storage.name())) {
String pattern = "\\d+";
Pattern compile = Pattern.compile(pattern);
Map<String, Object> map = new HashMap<>();
map.put("code", "to_y");
map.put("value", inst.getTo_z() );
list.add(map);
if (inst.getTo_x().length() > 1 && !compile.matcher(inst.getTo_x()).matches()) {
String substring = inst.getTo_x().substring(1);
Map<String, Object> map1 = new HashMap<>();
map1.put("code", "to_z");
map1.put("value", substring);
list.add(map1);
} else {
Map<String, Object> map2 = new HashMap<>();
map2.put("code", "to_z");
map2.put("value", inst.getTo_x());
list.add(map2);
}
Map<String, Object> map3 = new HashMap<>();
map3.put("code", "to_x");
map3.put("value", inst.getTo_y());
list.add(map3);
}
Map<String, Object> map4 = new HashMap<>();
map4.put("code", "to_command");
map4.put("value", 2);
list.add(map4);
requireSucess = false;
break;
case 3:
LuceneLogDto logDto2 = LuceneLogDto.builder()
.device_code(device_code)
.content("放货")
.build();
logDto2.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto2);
message = "universal_releasing";
if (updateCommand("3")) break;
break;
case 4:
message = "one_message1";
Instruction instruction1 = checkInst();
String next_device_code1 = instruction1.getNext_device_code();
Device nextDevice1 = deviceAppService.findDeviceByCode(next_device_code1);
if (ObjectUtil.isNotNull(instruction1)) {
//指令为执行
SiemensConveyorDeviceDriver siemensConveyorDeviceDriver;
if (nextDevice1.getDeviceDriver() instanceof SiemensConveyorDeviceDriver) {
siemensConveyorDeviceDriver = (SiemensConveyorDeviceDriver) nextDevice1.getDeviceDriver();
if (siemensConveyorDeviceDriver.getMode() != 2 || siemensConveyorDeviceDriver.getMove() == 1) {
notCreateInstMessage = "未下发电气信号原因->输送线-货架对接位:" + siemensConveyorDeviceDriver.getDevice_code() +
"有货或未联机,无法下发指令!指令号:" + inst.getInstruction_code();
return;
}
}
Map<String, Object> map = new HashMap<>();
map.put("code", "to_command");
map.put("value", 4);
list.add(map);
}
requireSucess = false;
break;
case 5:
LuceneLogDto logDto3 = LuceneLogDto.builder()
.device_code(device_code)
.content("放货完成")
.build();
logDto3.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto3);
message = "universal_releasing_completed";
Map<String, Object> map = new HashMap<>();
List list5 = new ArrayList();
map.put("code", "to_command");
map.put("value", 11);
list5.add(map);
this.writing(list5);
Instruction inst = checkInst();
try {
if ("3".equals(inst.getPriority()) && errorInst != null) {
//存在同排移库做完后直接出库
String start_device_code = errorInst.getStart_device_code();
Device startDevice = deviceAppService.findDeviceByCode(start_device_code);
List listError = new ArrayList();
pakageCommand(listError , errorInst.getInstruction_code());
if (StrUtil.equals(startDevice.getDevice_type(), DeviceType.storage.name()) && !prohibitOutWarehouse) {
pakagePlc(errorInst, listError,"1");
}
if (ObjectUtil.isNotEmpty(listError)) {
this.writing(listError);
}
finish_instruction(inst);
errorInst = null;
} else {
finish_instruction(inst);
}
} catch (Exception e) {
e.printStackTrace();
}
inst = null;
requireSucess = false;
break;
case 6:
message = "one_message2";
Map<String, Object> map1 = new HashMap<>();
map1.put("code", "to_command");
map1.put("value", 6);
list.add(map1);
requireSucess = false;
break;
case 7:
message = "one_message3";
Map<String, Object> map2 = new HashMap<>();
map2.put("code", "to_command");
map2.put("value", 7);
list.add(map2);
requireSucess = false;
break;
case 8:
message = "one_message4";
Map<String, Object> map3 = new HashMap<>();
map3.put("code", "to_command");
map3.put("value", 8);
list.add(map3);
requireSucess = false;
break;
default:
message = "one_message5";
requireSucess = false;
break;
}
if (list.size() != 0) {
this.writing(list);
}
}
last_heartbeat = heartbeat;
last_item_deviceCode = item_deviceCode;
@@ -924,6 +932,12 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
requireSucess = true;
return true;
}
//同排移库报警
if (StrUtil.equals(startDevice.getDevice_type(), DeviceType.storage.name())) {
pakagePLCData(list, nextDevice.getExtraValue().get("x").toString(), nextDevice.getExtraValue().get("z").toString(), nextDevice.getExtraValue().get("y").toString(), "2", instructionErro.getInstruction_code());
requireSucess = true;
return true;
}
}else {
message = "one_message20";
}