fix: 现场联调

This commit is contained in:
2024-04-29 18:26:29 +08:00
parent 610d03a771
commit a6a6f4d7e2
9 changed files with 151 additions and 113 deletions

View File

@@ -648,7 +648,7 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements
}
}else {
//下一个设备不是输送线指令
this.setNotCreateInstMessage("下一个设备不是输送线指令");
this.setNotCreateInstMessage("universal_notCreateInstMessage6");
return false;
}
Instruction instdto = new Instruction();

View File

@@ -288,7 +288,7 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
applyIn(StorageTypeEnum.BOX_IN.getType());
List list1 = new ArrayList();
Map map = new HashMap();
map.put("code", "mode");
map.put("code", "to_command");
map.put("value", 6);
list1.add(map);
this.writing(list1);
@@ -299,7 +299,7 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
applyIn(StorageTypeEnum.STORAGE.getType());
List list1 = new ArrayList();
Map map = new HashMap();
map.put("code", "mode");
map.put("code", "to_command");
map.put("value", 7);
list1.add(map);
this.writing(list1);
@@ -476,115 +476,18 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
return false;
} else {
this.instruction_require_time = date;
//判断是否存在起点相同 任务状态就绪的任务
TaskDto taskdto = taskserver.findByStartCodeAndReady(device_code);
if (!ObjectUtil.isEmpty(taskdto)) {
String taskid = taskdto.getTask_id();
String taskcode = taskdto.getTask_code();
String vehiclecode = taskdto.getVehicle_code();
String priority = taskdto.getPriority();
Instruction instdto = new Instruction();
String interactionJson = taskdto.getInteraction_json();
InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class);
String containerType = "";
if (ObjectUtil.isNotEmpty(interactionJsonDTO)) {
containerType = interactionJsonDTO.getContainerType();
//根据补码查找任务
if (StrUtil.isNotBlank(hand_barcode)) {
TaskDto taskdto = taskserver.findByVehicleCodeCodeAndReady(hand_barcode);
if (!ObjectUtil.isEmpty(taskdto)) {
if (creatInstruction(taskdto)) return false;
}
if (TaskTypeEnum.AGV_Task.getIndex().equals(taskdto.getTask_type())){
String route_plan_code = taskdto.getRoute_plan_code();
List<RouteLineDto> shortPathsList = routeLineService.getShortPathLines(taskdto.getStart_device_code(), taskdto.getNext_device_code(), route_plan_code);
if (CollectionUtil.isEmpty(shortPathsList)){
return false;
}
RouteLineDto routeLineDto = shortPathsList.get(0);
String path = routeLineDto.getPath();
String[] str = path.split("->");
List<String> pathlist = Arrays.asList(str);
Integer start = 0;
String start_device_code = pathlist.get(start);
String next_device_code = pathlist.get(start+1);
//判断有无出入库任务是相同路线
TaskDto dto = taskserver.findByCodeAndExcute(taskdto.getNext_device_code(), taskdto.getStart_device_code());
if (ObjectUtil.isNotEmpty(dto)){
requireSucess = false;
return false;
}
packageInstrcutData(instdto, taskdto, taskid, taskcode, vehiclecode, priority,start_device_code,next_device_code,containerType);
}else {
packageInstrcutData(instdto, taskdto, taskid, taskcode, vehiclecode, priority,taskdto.getStart_device_code(),taskdto.getNext_device_code(),containerType);
}
try {
instructionService.create(instdto);
} catch (Exception e) {
e.printStackTrace();
log.error("指令创建失败!", e.getMessage());
return false;
}
Device nextdevice = deviceAppservice.findDeviceByCode(instdto.getNext_device_code());
//创建指令后修改任务状态
taskdto.setTask_status(TaskStatusEnum.BUSY.getIndex());
taskserver.update(taskdto);
String next_addr = nextdevice.getExtraValue().get("address").toString();
List list = new ArrayList();
Map map = new HashMap();
map.put("code", "to_target");
map.put("value", next_addr);
list.add(map);
Map map2 = new HashMap();
map2.put("code", "to_task");
map2.put("value", instdto.getInstruction_code());
list.add(map2);
Map map3 = new HashMap();
map3.put("code", "to_container_type");
map3.put("value", instdto.getVehicle_type());
list.add(map3);
Map map4 = new HashMap();
map3.put("code", "to_command");
map3.put("value", "1");
list.add(map4);
this.writing(list);
led_message = getLedMessage(instdto);
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 = true;
while (!StrUtil.equals(this.getOpcValueAccessor().getValue(this.getOpcServer() + "." + this.getOpcPlc() + "." + this.getDevice_code() + ".task").toString()
, instdto.getInstruction_code())) {
this.writing(list);
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(device_code + inst.getInstruction_code() + "再次下发电气信号")
.build();
luceneExecuteLogService.deviceExecuteLog(logDto);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (ObjectUtil.isEmpty(taskserver.findByCode(taskdto.getTask_code()))) {
requireSucess = false;
return false;
}else {
if (StrUtil.isNotBlank(barcode)) {
//根据载具号查找任务
TaskDto taskdto = taskserver.findByVehicleCodeCodeAndReady(barcode);
if (!ObjectUtil.isEmpty(taskdto)) {
if (creatInstruction(taskdto)) return false;
}
}
}
@@ -592,6 +495,117 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
}
}
private boolean creatInstruction(TaskDto taskdto) {
String taskid = taskdto.getTask_id();
String taskcode = taskdto.getTask_code();
String vehiclecode = taskdto.getVehicle_code();
String priority = taskdto.getPriority();
Instruction instdto = new Instruction();
String interactionJson = taskdto.getInteraction_json();
InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class);
String containerType = "";
if (ObjectUtil.isNotEmpty(interactionJsonDTO)) {
containerType = interactionJsonDTO.getContainerType();
}
if (TaskTypeEnum.AGV_Task.getIndex().equals(taskdto.getTask_type())){
String route_plan_code = taskdto.getRoute_plan_code();
List<RouteLineDto> shortPathsList = routeLineService.getShortPathLines(taskdto.getStart_device_code(), taskdto.getNext_device_code(), route_plan_code);
if (CollectionUtil.isEmpty(shortPathsList)){
return true;
}
RouteLineDto routeLineDto = shortPathsList.get(0);
String path = routeLineDto.getPath();
String[] str = path.split("->");
List<String> pathlist = Arrays.asList(str);
Integer start = 0;
String start_device_code = pathlist.get(start);
String next_device_code = pathlist.get(start+1);
//判断有无出入库任务是相同路线
TaskDto dto = taskserver.findByCodeAndExcute(taskdto.getNext_device_code(), taskdto.getStart_device_code());
if (ObjectUtil.isNotEmpty(dto)){
requireSucess = false;
return true;
}
packageInstrcutData(instdto, taskdto, taskid, taskcode, vehiclecode, priority,start_device_code,next_device_code,containerType);
}else {
packageInstrcutData(instdto, taskdto, taskid, taskcode, vehiclecode, priority, taskdto.getStart_device_code(), taskdto.getNext_device_code(),containerType);
}
try {
instructionService.create(instdto);
} catch (Exception e) {
e.printStackTrace();
log.error("指令创建失败!", e.getMessage());
return true;
}
Device nextdevice = deviceAppservice.findDeviceByCode(instdto.getNext_device_code());
//创建指令后修改任务状态
taskdto.setTask_status(TaskStatusEnum.BUSY.getIndex());
taskserver.update(taskdto);
String next_addr = nextdevice.getExtraValue().get("address").toString();
List list = new ArrayList();
Map map = new HashMap();
map.put("code", "to_target");
map.put("value", next_addr);
list.add(map);
Map map2 = new HashMap();
map2.put("code", "to_task");
map2.put("value", instdto.getInstruction_code());
list.add(map2);
Map map3 = new HashMap();
map3.put("code", "to_container_type");
map3.put("value", instdto.getVehicle_type());
list.add(map3);
Map map4 = new HashMap();
map3.put("code", "to_command");
map3.put("value", "1");
list.add(map4);
this.writing(list);
led_message = getLedMessage(instdto);
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 = true;
while (!StrUtil.equals(this.getOpcValueAccessor().getValue(this.getOpcServer() + "." + this.getOpcPlc() + "." + this.getDevice_code() + ".task").toString()
, instdto.getInstruction_code())) {
this.writing(list);
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content(device_code + inst.getInstruction_code() + "再次下发电气信号")
.build();
luceneExecuteLogService.deviceExecuteLog(logDto);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (ObjectUtil.isEmpty(taskserver.findByCode(taskdto.getTask_code()))) {
requireSucess = false;
return true;
}
}
return false;
}
/**
* 获取任务信息
*/

View File

@@ -1043,7 +1043,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
jo.put("stopReceiveTask", this.stopReceiveTask);
jo.put("requireSucess", requireSucess);
jo.put("driver_type", "standard_stacker");
jo.put("notCreateInstMessage", LangProcess.msg(notCreateInstMessage));
jo.put("notCreateInstMessage", notCreateInstMessage);
return jo;
}

View File

@@ -1128,7 +1128,7 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
jo.put("isError", this.getIserror());
jo.put("message", message);
jo.put("notCreateTaskMessage", notCreateTaskMessage);
jo.put("notCreateInstMessage", LangProcess.msg(notCreateInstMessage));
jo.put("notCreateInstMessage", notCreateInstMessage);
jo.put("feedMessage", feedMessage);
jo.put("requireActionSucess", requireActionSucess);
jo.put("driver_type", "siemens_conveyor");

View File

@@ -0,0 +1,20 @@
package org.nl.acs.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum ContainerTypeEnum {
SMALL("1", "小托盘"),
BIG("2", "大托盘");
/**
* 索引
*/
private String type;
/**
* 编码
*/
private String value;
}

View File

@@ -46,6 +46,7 @@ universal_notCreateInstMessage2=\u5149\u7535\u65E0\u8D27,\u65E0\u6CD5\u751F\u621
universal_notCreateInstMessage3=\u8BBE\u5907\u5F85\u673A\u6216\u4E0D\u5141\u8BB8\u8FDB\u5165
universal_notCreateInstMessage4=ddj\u5BF9\u63A5\u4F4D\u6709\u8D27,\u65E0\u6CD5\u751F\u6210\u6307\u4EE4!
universal_notCreateInstMessage5=\u5B58\u5728\u76F8\u540C\u8DEF\u7EBF\u7684\u6307\u4EE4!
universal_notCreateInstMessage6=\u4E0B\u4E00\u4E2A\u8BBE\u5907\u4E0D\u662F\u8F93\u9001\u7EBF\u6307\u4EE4!

View File

@@ -45,3 +45,4 @@ universal_notCreateInstMessage2=Photoelectric no goods, can not generate command
universal_notCreateInstMessage3=The device is in standby mode or is not allowed to enter
universal_notCreateInstMessage4=ddj interface bit is in stock, cannot generate command!
universal_notCreateInstMessage5=Instructions with the same route exist!
universal_notCreateInstMessage6=The next device is not a conveyor line directive!

View File

@@ -45,3 +45,4 @@ universal_notCreateInstMessage2=Photo-electric tidak tersedia dan tidak dapat me
universal_notCreateInstMessage3=Siaga perangkat atau tidak diizinkan masuk
universal_notCreateInstMessage4=DDJ mendarat di dok, tidak ada perintah yang diberikan!
universal_notCreateInstMessage5=Ada instruksi tentang rute yang sama!
universal_notCreateInstMessage6=Perangkat berikutnya bukan arahan jalur konveyor!

View File

@@ -45,4 +45,5 @@ universal_notCreateInstMessage2=\u5149\u7535\u65E0\u8D27,\u65E0\u6CD5\u751F\u621
universal_notCreateInstMessage3=\u8BBE\u5907\u5F85\u673A\u6216\u4E0D\u5141\u8BB8\u8FDB\u5165
universal_notCreateInstMessage4=ddj\u5BF9\u63A5\u4F4D\u6709\u8D27,\u65E0\u6CD5\u751F\u6210\u6307\u4EE4!
universal_notCreateInstMessage5=\u5B58\u5728\u76F8\u540C\u8DEF\u7EBF\u7684\u6307\u4EE4!
universal_notCreateInstMessage6=\u4E0B\u4E00\u4E2A\u8BBE\u5907\u4E0D\u662F\u8F93\u9001\u7EBF\u6307\u4EE4!