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

@@ -184,8 +184,8 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
if (ObjectUtil.isEmpty(inst)) { if (ObjectUtil.isEmpty(inst)) {
log.info("未找到指令号{}对应的指令", ikey); log.info("未找到指令号{}对应的指令", ikey);
} else { } else {
if("1".equals(inst.getInstruction_type()) || "2".equals(inst.getInstruction_type()) || "3".equals(inst.getInstruction_type())) { String agvcar = inst.getCarno();
String agvcar = inst.getCarno(); if(StrUtil.isNotEmpty(agvcar) && !StrUtil.equals(agvcar,"0")) {
Device agvDevice = deviceAppService.findDeviceByCode(agvcar); Device agvDevice = deviceAppService.findDeviceByCode(agvcar);
if (agvDevice != null) { if (agvDevice != null) {
if (agvDevice.getDeviceDriver() instanceof AgvNdcTwoDeviceDriver) { if (agvDevice.getDeviceDriver() instanceof AgvNdcTwoDeviceDriver) {

View File

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

View File

@@ -527,7 +527,7 @@ public class FoldDiscSiteDeviceDriver extends AbstractOpcDeviceDriver implements
this.writing(list); this.writing(list);
LuceneLogDto logDto = LuceneLogDto.builder() LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code) .device_code(device_code)
.content(device_code + inst.getInstruction_code() + "再次下发电气信号") .content(device_code + instdto.getInstruction_code() + "再次下发电气信号")
.build(); .build();
logDto.setLog_level(3); logDto.setLog_level(3);
luceneExecuteLogService.deviceExecuteLog(logDto); 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.nl.system.service.param.ISysParamService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@@ -112,8 +114,8 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
int heartbeat = 0; int heartbeat = 0;
int last_heartbeat = 0; int last_heartbeat = 0;
int to_command = 0; String to_command = null;
int last_to_command = 0; String last_to_command = null;
String to_target = null; String to_target = null;
String last_to_target = null; String last_to_target = null;
@@ -246,7 +248,19 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
barcode = this.itemProtocol.getBarcode(); barcode = this.itemProtocol.getBarcode();
material_barcode = this.itemProtocol.getMaterialBarcode(); material_barcode = this.itemProtocol.getMaterialBarcode();
to_height_level = this.itemProtocol.getTo_height_level(); 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) { if (mode != last_mode) {
JSONObject param = new JSONObject(); JSONObject param = new JSONObject();
param.put("device_code", this.device_code); param.put("device_code", this.device_code);
@@ -264,30 +278,6 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
clearWrite(); 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) { if (move != 0 && task > 0) {
update_instruction_status(); update_instruction_status();
} }
@@ -412,14 +402,28 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
this.iserror = true; this.iserror = true;
log.error("空指针:{}", e); log.error("空指针:{}", e);
String extracted = DeviceErrorUtil.extracted(e); String extracted = DeviceErrorUtil.extracted(e);
LuceneLogDto logDto = LuceneLogDto.builder() if (e instanceof NullPointerException) {
.device_code(device_code) message += " - 空指针异常";
.content(this.device_code + extracted + ",报错信息:" + e.getMessage()) // 记录详细的堆栈跟踪信息
.build(); StringWriter sw = new StringWriter();
logDto.setLog_level(4); PrintWriter pw = new PrintWriter(sw);
luceneExecuteLogService.deviceExecuteLog(logDto); e.printStackTrace(pw);
message = "读取信号值时出现异常"; String stackTrace = sw.toString();
e.printStackTrace(); 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); return this.getOpcStringValue(item_to_task);
} }
public int getTo_command() { public String getTo_command() {
return this.getOpcIntegerValue(item_to_command); return this.getOpcStringValue(item_to_command);
} }
public String getTo_target() { public String getTo_target() {

View File

@@ -1,5 +1,6 @@
package org.nl.acs.device_driver.one_manipulator.return_good_manipulator; package org.nl.acs.device_driver.one_manipulator.return_good_manipulator;
import cn.hutool.core.util.StrUtil;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.acs.device.device_driver.standard_inspect.ItemDto; import org.nl.acs.device.device_driver.standard_inspect.ItemDto;
@@ -144,14 +145,14 @@ public class ItemProtocol {
public int getTo_task() { public String getTo_task() {
return this.getOpcIntegerValue(item_to_task); return this.getOpcStringValue(item_to_task);
} }
public int getTo_command() { public String getTo_command() {
return this.getOpcIntegerValue(item_to_command); return this.getOpcStringValue(item_to_command);
} }
public int getTo_target() { public int getTo_target() {
@@ -164,6 +165,17 @@ public class ItemProtocol {
Boolean isonline; 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) { public float getOpcFloatValue(String protocol) {
Float value = this.driver.getDoubleValue(protocol); Float value = this.driver.getDoubleValue(protocol);
if (value == null) { 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.LuceneExecuteLogService;
import org.nl.config.lucene.service.dto.LuceneLogDto; import org.nl.config.lucene.service.dto.LuceneLogDto;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -91,8 +93,8 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
int heartbeat = 0; int heartbeat = 0;
int last_heartbeat = 0; int last_heartbeat = 0;
int to_command = 0; String to_command = null;
int last_to_command = 0; String last_to_command = null;
int to_target = 0; int to_target = 0;
int last_to_target = 0; int last_to_target = 0;
@@ -100,8 +102,8 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
int to_onset = 0; int to_onset = 0;
int last_to_onset = 0; int last_to_onset = 0;
int to_task = 0; String to_task = null;
int last_to_task = 0; String last_to_task = null;
int to_layer = 0; int to_layer = 0;
int last_to_layer = 0; int last_to_layer = 0;
int to_barcode = 0; int to_barcode = 0;
@@ -231,14 +233,45 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
this.iserror = true; this.iserror = true;
log.error("空指针:{}",e); log.error("空指针:{}",e);
String extracted = DeviceErrorUtil.extracted(e); String extracted = DeviceErrorUtil.extracted(e);
LuceneLogDto logDto = LuceneLogDto.builder() if (e == null) {
.device_code(device_code) message += " - 捕获到的异常为 null";
.content(this.device_code + extracted + ",报错信息:" + e.getMessage()) // 获取堆栈跟踪信息
.build(); StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
logDto.setLog_level(4); StringBuilder stackTrace = new StringBuilder();
luceneExecuteLogService.deviceExecuteLog(logDto); for (StackTraceElement element : stackTraceElements) {
message = "universal_remark8"; stackTrace.append(element.toString()).append("\n");
e.printStackTrace(); }
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; package org.nl.acs.device_driver.stacker.standard_stacker;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; 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.route.service.impl.RouteLineServiceImpl;
import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.TaskService;
import org.nl.acs.task.service.dto.TaskDto; import org.nl.acs.task.service.dto.TaskDto;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.RedisUtils; import org.nl.common.utils.RedisUtils;
import org.nl.config.SpringContextHolder; import org.nl.config.SpringContextHolder;
import org.nl.config.language.LangProcess; import org.nl.config.language.LangProcess;
@@ -732,9 +734,10 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
logDto1.setLog_level(4); logDto1.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto1); luceneExecuteLogService.deviceExecuteLog(logDto1);
String response = acsToWmsService.applyUpdatePointCode(param); 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) { if (jo.getInteger("status") == 200) {
try { try {
verifyPoint(type,jo);
//清警 //清警
cleanErro(); cleanErro();
LuceneLogDto logDto2 = LuceneLogDto.builder() 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) { private void updateData1(String poinCode, Device point, String[] split, String vehicleCode) {
Instruction instructionUpdate = checkInst(); Instruction instructionUpdate = checkInst();
TaskDto taskUpdate = new TaskDto(); TaskDto taskUpdate = new TaskDto();