fix: 读空指针异常解决阻塞问题
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user