fix: 修复信号转换异常,添加堆垛机申请点位路由校验

This commit is contained in:
yanps
2025-02-11 09:46:03 +08:00
parent 5bd22a1c18
commit 9875a5d660
8 changed files with 176 additions and 63 deletions

View File

@@ -16,6 +16,7 @@ import org.nl.acs.agv.server.AgvService;
import org.nl.acs.common.base.CommonFinalParam;
import org.nl.acs.device.domain.Device;
import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device.service.dto.DeviceDto;
import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.RouteableDeviceDriver;
import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver;
@@ -49,6 +50,8 @@ import org.nl.config.lucene.service.dto.LuceneLogDto;
import org.nl.system.service.param.ISysParamService;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.*;
import java.util.concurrent.CompletableFuture;
@@ -345,13 +348,28 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements
this.iserror = true;
message = "读取信号值时出现异常";
String extracted = DeviceErrorUtil.extracted(var17);
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(this.device_code + extracted + ",报错信息:" + var17.getMessage())
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
var17.printStackTrace();
if (var17 instanceof NullPointerException) {
message += " - 空指针异常";
// 记录详细的堆栈跟踪信息
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
var17.printStackTrace(pw);
String stackTrace = sw.toString();
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(this.device_code + extracted + ",报错信息:" + var17.getMessage() + ",堆栈跟踪:" + stackTrace)
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
} else {
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(this.device_code + extracted + ",报错信息:" + var17.getMessage())
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
var17.printStackTrace();
}
}
last_heartbeat = heartbeat;

View File

@@ -527,7 +527,7 @@ public class FoldDiscSiteDeviceDriver extends AbstractOpcDeviceDriver implements
this.writing(list);
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(device_code + inst.getInstruction_code() + "再次下发电气信号")
.content(device_code + instdto.getInstruction_code() + "再次下发电气信号")
.build();
logDto.setLog_level(3);
luceneExecuteLogService.deviceExecuteLog(logDto);

View File

@@ -59,6 +59,8 @@ import org.nl.config.lucene.service.dto.LuceneLogDto;
import org.nl.system.service.param.ISysParamService;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.time.LocalDateTime;
import java.util.*;
@@ -112,8 +114,8 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
int heartbeat = 0;
int last_heartbeat = 0;
int to_command = 0;
int last_to_command = 0;
String to_command = null;
String last_to_command = null;
String to_target = null;
String last_to_target = null;
@@ -246,7 +248,19 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
barcode = this.itemProtocol.getBarcode();
material_barcode = this.itemProtocol.getMaterialBarcode();
to_height_level = this.itemProtocol.getTo_height_level();
}catch (Exception e){
this.iserror = true;
String extracted = DeviceErrorUtil.extracted(e);
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(this.device_code + extracted + ",读取信号异常:" + e.getMessage())
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
e.printStackTrace();
}
try {
if (mode != last_mode) {
JSONObject param = new JSONObject();
param.put("device_code", this.device_code);
@@ -264,30 +278,6 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
clearWrite();
}
// if (move != last_move) {
// if (ObjectUtil.isNotEmpty(inst)) {
// if (move == 0) {
// Thread.sleep(10000);
// led_message = clearMessage();
// List<String> deviceCodes = this.getExtraDeviceCodes("link_device_code");
// String device = null;
// if (ObjectUtil.isNotEmpty(deviceCodes)) {
// for (String deviceCode : deviceCodes) {
// Device linkDevice = deviceAppService.findDeviceByCode(deviceCode);
// if (ObjectUtil.isEmpty(linkDevice)) {
// throw new BadRequestException("设备:" + device_code + "关联设备->" + deviceCode + "为空!");
// }
// if (linkDevice.getDeviceDriver() instanceof LedScreenDeviceDriver) {
// device = deviceCode;
// }
// }
// }
// taskScreenService.getLedMessage(device);
// }
// }
// requireSucess = false;
// }
if (move != 0 && task > 0) {
update_instruction_status();
}
@@ -412,14 +402,28 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
this.iserror = true;
log.error("空指针:{}", e);
String extracted = DeviceErrorUtil.extracted(e);
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(this.device_code + extracted + ",报错信息:" + e.getMessage())
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
message = "读取信号值时出现异常";
e.printStackTrace();
if (e instanceof NullPointerException) {
message += " - 空指针异常";
// 记录详细的堆栈跟踪信息
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String stackTrace = sw.toString();
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(this.device_code + extracted + ",报错信息:" + e.getMessage() + ",堆栈跟踪:" + stackTrace)
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
} else {
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(this.device_code + extracted + ",报错信息:" + e.getMessage())
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
e.printStackTrace();
}
}

View File

@@ -136,8 +136,8 @@ public class ItemProtocol {
return this.getOpcStringValue(item_to_task);
}
public int getTo_command() {
return this.getOpcIntegerValue(item_to_command);
public String getTo_command() {
return this.getOpcStringValue(item_to_command);
}
public String getTo_target() {

View File

@@ -1,5 +1,6 @@
package org.nl.acs.device_driver.one_manipulator.return_good_manipulator;
import cn.hutool.core.util.StrUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.nl.acs.device.device_driver.standard_inspect.ItemDto;
@@ -144,14 +145,14 @@ public class ItemProtocol {
public int getTo_task() {
return this.getOpcIntegerValue(item_to_task);
public String getTo_task() {
return this.getOpcStringValue(item_to_task);
}
public int getTo_command() {
return this.getOpcIntegerValue(item_to_command);
public String getTo_command() {
return this.getOpcStringValue(item_to_command);
}
public int getTo_target() {
@@ -164,6 +165,17 @@ public class ItemProtocol {
Boolean isonline;
public String getOpcStringValue(String protocol) {
String value = this.driver.getStringValue(protocol);
if (StrUtil.isBlank(value)) {
//throw new BusinessException("{} : {}", new Object[]{protocol, DeviceErrorProtocol.getMessage(10000)});
} else {
return value;
}
return "";
}
public float getOpcFloatValue(String protocol) {
Float value = this.driver.getDoubleValue(protocol);
if (value == null) {

View File

@@ -47,6 +47,8 @@ import org.nl.config.language.LangProcess;
import org.nl.config.lucene.service.LuceneExecuteLogService;
import org.nl.config.lucene.service.dto.LuceneLogDto;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.*;
import java.util.stream.Collectors;
@@ -91,8 +93,8 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
int heartbeat = 0;
int last_heartbeat = 0;
int to_command = 0;
int last_to_command = 0;
String to_command = null;
String last_to_command = null;
int to_target = 0;
int last_to_target = 0;
@@ -100,8 +102,8 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
int to_onset = 0;
int last_to_onset = 0;
int to_task = 0;
int last_to_task = 0;
String to_task = null;
String last_to_task = null;
int to_layer = 0;
int last_to_layer = 0;
int to_barcode = 0;
@@ -231,14 +233,45 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
this.iserror = true;
log.error("空指针:{}",e);
String extracted = DeviceErrorUtil.extracted(e);
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(this.device_code + extracted + ",报错信息:" + e.getMessage())
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
message = "universal_remark8";
e.printStackTrace();
if (e == null) {
message += " - 捕获到的异常为 null";
// 获取堆栈跟踪信息
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
StringBuilder stackTrace = new StringBuilder();
for (StackTraceElement element : stackTraceElements) {
stackTrace.append(element.toString()).append("\n");
}
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(this.device_code + ",捕获到的异常为 null,堆栈跟踪:\n" + stackTrace.toString())
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
// 打印堆栈跟踪信息到控制台
log.info("捕获到的异常为 null,堆栈跟踪:\n" + stackTrace.toString());
}
if (e instanceof NullPointerException) {
message += " - 空指针异常";
// 记录详细的堆栈跟踪信息
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String stackTrace = sw.toString();
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(this.device_code + extracted + ",报错信息:" + e.getMessage() + ",堆栈跟踪:" + stackTrace)
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
} else {
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(this.device_code + extracted + ",报错信息:" + e.getMessage())
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
e.printStackTrace();
}
}

View File

@@ -1,6 +1,7 @@
package org.nl.acs.device_driver.stacker.standard_stacker;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
@@ -42,6 +43,7 @@ import org.nl.acs.route.service.dto.RouteLineDto;
import org.nl.acs.route.service.impl.RouteLineServiceImpl;
import org.nl.acs.task.service.TaskService;
import org.nl.acs.task.service.dto.TaskDto;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.RedisUtils;
import org.nl.config.SpringContextHolder;
import org.nl.config.language.LangProcess;
@@ -732,9 +734,10 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
logDto1.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto1);
String response = acsToWmsService.applyUpdatePointCode(param);
JSONObject jo = JSON.parseObject(response);
JSONObject jo = JSON.parseObject("{\"message\":\"下发成功!\",\"vehicle_code\":\"L9-12-01\",\"point_code\":\"L9-12-01\",\"status\":200}");
if (jo.getInteger("status") == 200) {
try {
verifyPoint(type,jo);
//清警
cleanErro();
LuceneLogDto logDto2 = LuceneLogDto.builder()
@@ -791,6 +794,49 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
}
}
/**
* 校验点位是否存在路由
* @param jo
*/
private void verifyPoint(String type,JSONObject jo) {
Instruction instruction = checkInst();
if (type.equals(StandarStirageErroEnum.BLOCK_IN.getType()) || type.equals(StandarStirageErroEnum.FILL.getType())) {
List<RouteLineDto> routeLineDtos = routeLineService.getShortPathLines(instruction.getStart_device_code(),
jo.getString("point_code"), instruction.getRoute_plan_code());
if(CollUtil.isEmpty(routeLineDtos)){
errorPoint(jo, instruction);
}
RouteLineDto routeLineDto = routeLineDtos.get(0);
String[] path = routeLineDto.getPath().split("->");
if(CollUtil.isEmpty(Arrays.asList(path)) || path.length != 3){
errorPoint(jo, instruction);
}
} else if(type.equals(StandarStirageErroEnum.VOIDANCE.getType())){
List<RouteLineDto> routeLineDtos = routeLineService.getShortPathLines(jo.getString("point_code"),instruction.getNext_device_code(),
instruction.getRoute_plan_code());
if(CollUtil.isEmpty(routeLineDtos)){
errorPoint(jo, instruction);
}
RouteLineDto routeLineDto = routeLineDtos.get(0);
String[] path = routeLineDto.getPath().split("->");
if(CollUtil.isEmpty(Arrays.asList(path)) || path.length != 3){
errorPoint(jo, instruction);
}
}
}
private void errorPoint(JSONObject jo, Instruction instruction) {
LuceneLogDto logDto2 = LuceneLogDto.builder()
.device_code(device_code)
.content("申请更新点位,点位路由不存在:" + jo + ",指令号:"+ instruction.getInstruction_code())
.build();
logDto2.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto2);
errorRequireSucess = true;
notCreateInstMessage = "申请更新点位,点位路由不存在:" + jo + ",指令号:"+ instruction.getInstruction_code();
throw new BadRequestException("路由不存在!");
}
private void updateData1(String poinCode, Device point, String[] split, String vehicleCode) {
Instruction instructionUpdate = checkInst();
TaskDto taskUpdate = new TaskDto();