fix: 读空指针异常解决阻塞问题
This commit is contained in:
@@ -273,14 +273,14 @@ public class ItemProtocol {
|
|||||||
setIsonline(true);
|
setIsonline(true);
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
return 0;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getOpcStringValue(String protocol) {
|
public String getOpcStringValue(String protocol) {
|
||||||
String value = this.driver.getStringValue(protocol);
|
String value = this.driver.getStringValue(protocol);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
setIsonline(false);
|
setIsonline(false);
|
||||||
return "0";
|
return value;
|
||||||
} else {
|
} else {
|
||||||
setIsonline(true);
|
setIsonline(true);
|
||||||
return value;
|
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) {
|
} 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();
|
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_heartbeat = heartbeat;
|
||||||
last_item_deviceCode = item_deviceCode;
|
last_item_deviceCode = item_deviceCode;
|
||||||
@@ -924,6 +932,12 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
|||||||
requireSucess = true;
|
requireSucess = true;
|
||||||
return 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 {
|
}else {
|
||||||
message = "one_message20";
|
message = "one_message20";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user