From 97a28a226ceb217a971d1b0a179c79f5416f8da9 Mon Sep 17 00:00:00 2001 From: lishuai <1793460677@qq.com> Date: Thu, 14 Dec 2023 17:59:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=B3=E8=81=94=E7=AB=99=E7=82=B9?= =?UTF-8?q?=E9=A9=B1=E5=8A=A8=E6=B5=8B=E8=AF=95=E3=80=81=E5=8F=8C=E5=B7=A5?= =?UTF-8?q?=E4=BD=8D=E5=A0=86=E5=9E=9B=E6=9C=BA=E9=A9=B1=E5=8A=A8=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WithStationDeviceDriver.java | 277 ++++++------------ .../DoubleBeltConveyorDefination.java | 2 +- .../DoubleBeltConveyorDeviceDriver.java | 100 ++++--- .../DoubleStationStackerDeviceDriver.java | 67 +++-- .../service/InstructionService.java | 5 + .../service/impl/InstructionServiceImpl.java | 2 + .../org/nl/acs/task/rest/TaskController.java | 2 +- .../org/nl/acs/task/service/TaskService.java | 1 + .../task/service/impl/TaskServiceImpl.java | 19 ++ 9 files changed, 222 insertions(+), 253 deletions(-) diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_with_station/WithStationDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_with_station/WithStationDeviceDriver.java index 27df61f..ee83d20 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_with_station/WithStationDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_with_station/WithStationDeviceDriver.java @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.conveyor.belt_with_station; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; @@ -10,7 +11,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.nl.acs.agv.server.NDCAgvService; -import org.nl.acs.auto.run.OneNDCSocketConnectionAutoRun; import org.nl.acs.device.domain.Device; import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.DeviceDriver; @@ -21,6 +21,8 @@ import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.instruction.domain.Instruction; +import org.nl.acs.instruction.domain.InstructionMybatis; +import org.nl.acs.instruction.enums.InstructionStatusEnum; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.monitor.DeviceStageMonitor; @@ -29,8 +31,8 @@ import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.dto.RouteLineDto; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.utils.ConvertUtil; import org.nl.config.SpringContextHolder; -import org.springframework.beans.factory.annotation.Autowired; import java.util.*; @@ -42,82 +44,32 @@ import java.util.*; @RequiredArgsConstructor public class WithStationDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor { - @Autowired DeviceAppService deviceAppservice = SpringContextHolder.getBean(DeviceAppService.class); - @Autowired InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); - @Autowired DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); - @Autowired RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); - @Autowired TaskService taskServer = SpringContextHolder.getBean("taskServiceImpl"); - @Autowired RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class); - @Autowired AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); - @Autowired DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class); - @Autowired NDCAgvService agvService = SpringContextHolder.getBean(NDCAgvService.class); - Integer hasGoods = 0; int error = 0; Boolean iserror = false; Boolean islock = false; - - int branchProtocol = 0; - int last_branchProtocol = 0; - //是否需要输入物料 - String input_material = "0"; - //备注 - String remark = ""; - //数量 - String qty = ""; - //批次 - String batch = ""; - //物料 - String material = ""; - //目标点位 - String purpose = ""; - - //上次指令 - Instruction last_inst = null; - boolean requireSucess = false; - - //触摸屏手动触发任务 - private Boolean is_has_task = false; - - //申请搬运任务 - private Boolean apply_handling = false; - //申请物料 - private Boolean apply_material = false; - - // 1取货完成 2放货完成 3进入区域 4离开区域 - private int flag; - - //人工确认信号 默认0 agv到达后请求置1 等人工确认后变为2 反馈agv后继续为0 - private int manua_confirm = 0; - - String device_code = null; - String container; - String container_type_desc; - String last_container_type_desc; - String last_container; private Date instruction_require_time = new Date(); private Date instruction_finished_time = new Date(); - + private Date instruction_update_time = new Date(); private int instruction_require_time_out = 30000; + private int instruction_update_time_out = 500; String message; // 1 上位系统允许进入 2 上位系统允许离开 int option = 0; - //agv请求当前信息 - private int agvphase = 0; private int index = 0; int mode = 2; @@ -125,162 +77,105 @@ public class WithStationDeviceDriver extends AbstractOpcDeviceDriver implements int move; @Override - public void execute() { - - device_code = this.getDeviceCode(); + public void execute() throws Exception { //取关联设备 list 要求:先配置外侧的站点 //遍历 List sddjExtraCodeList = this.getExtraDeviceCodes("link_device_code"); //只需要判断对接位就可以 - for (int i = 0; i < 1; i++) { + for (int i = 0; i < 4; ) { Device sddjExtraCode1 = deviceAppservice.findDeviceByCode(sddjExtraCodeList.get(i)); Device sddjExtraCode2 = deviceAppservice.findDeviceByCode(sddjExtraCodeList.get(i + 1)); - DoubleBeltConveyorDeviceDriver doubleBeltConveyorDeviceDriver1; - DoubleBeltConveyorDeviceDriver doubleBeltConveyorDeviceDriver2; - if (sddjExtraCode1.getDeviceDriver() instanceof DoubleBeltConveyorDeviceDriver && sddjExtraCode1.getDeviceDriver() instanceof DoubleBeltConveyorDeviceDriver) { - doubleBeltConveyorDeviceDriver1 = (DoubleBeltConveyorDeviceDriver) sddjExtraCode1.getDeviceDriver(); - doubleBeltConveyorDeviceDriver2 = (DoubleBeltConveyorDeviceDriver) sddjExtraCode2.getDeviceDriver(); - //判断输送线是否有任务,有任务进行创建指令。 - TaskDto taskDtos1 = taskServer.findByStartCodeAndReady(doubleBeltConveyorDeviceDriver1.getDevice_code()); - TaskDto taskDtos2 = taskServer.findByStartCodeAndReady(doubleBeltConveyorDeviceDriver1.getDevice_code()); - if (ObjectUtil.isNotEmpty(taskDtos1) && ObjectUtil.isNotEmpty(taskDtos2)) { - if (doubleBeltConveyorDeviceDriver1.getMove() == 0) { - requireSucess = false; - } - if (doubleBeltConveyorDeviceDriver2.getMove() == 0) { - requireSucess = false; - } - //判断任务列是否相邻 - String nextDeviceCode1 = taskDtos1.getNext_device_code(); - String nextDeviceCode2 = taskDtos2.getNext_device_code(); - if (StrUtil.contains(nextDeviceCode1, "-") && StrUtil.contains(nextDeviceCode2, "-")) { - String[] split1 = nextDeviceCode1.split("-"); - String nextPointCodeDown = split1[0] + "-" + (Integer.parseInt(split1[1]) - 1) + "-" + split1[2]; - String nextPointCodeUp = split1[0] + "-" + (Integer.parseInt(split1[1]) + 1) + "-" + split1[2]; - if (!nextDeviceCode2.equals(nextPointCodeDown) || !nextDeviceCode2.equals(nextPointCodeUp)) { - //创建指令 - if (ObjectUtil.isNotNull(taskDtos1) && "1".equals(taskDtos1.getTask_type())) { - creatInstruction(taskDtos1); + Device sddjExtraCode3 = deviceAppservice.findDeviceByCode(sddjExtraCodeList.get(i + 2)); + Device sddjExtraCode4 = deviceAppservice.findDeviceByCode(sddjExtraCodeList.get(i + 3)); + DoubleBeltConveyorDeviceDriver doubleBeltConveyorDeviceDriverStart; + DoubleBeltConveyorDeviceDriver doubleBeltConveyorDeviceDriverEnd1; + DoubleBeltConveyorDeviceDriver doubleBeltConveyorDeviceDriverEnd2; + DoubleBeltConveyorDeviceDriver doubleBeltConveyorDeviceDriverWith; + if (sddjExtraCode1.getDeviceDriver() instanceof DoubleBeltConveyorDeviceDriver && sddjExtraCode2.getDeviceDriver() instanceof DoubleBeltConveyorDeviceDriver) { + doubleBeltConveyorDeviceDriverStart = (DoubleBeltConveyorDeviceDriver) sddjExtraCode1.getDeviceDriver(); + doubleBeltConveyorDeviceDriverEnd1 = (DoubleBeltConveyorDeviceDriver) sddjExtraCode2.getDeviceDriver(); + doubleBeltConveyorDeviceDriverEnd2 = (DoubleBeltConveyorDeviceDriver) sddjExtraCode3.getDeviceDriver(); + doubleBeltConveyorDeviceDriverWith = (DoubleBeltConveyorDeviceDriver) sddjExtraCode4.getDeviceDriver(); + //判断输送线是否有任务 + List tasks = taskServer.findByStartCodeAndBusy(doubleBeltConveyorDeviceDriverStart.getDevice_code()); + if (CollectionUtil.isNotEmpty(tasks) && tasks.size() == 2) { + String nextPointCode1 = tasks.get(0).getNext_point_code(); + String nextPointCode2 = tasks.get(1).getNext_point_code(); + if (StrUtil.contains(nextPointCode1, "-") && StrUtil.contains(nextPointCode2, "-")) { + //判断关联的输送线是否满足状态 + if (doubleBeltConveyorDeviceDriverEnd1.getMode() == 2 && doubleBeltConveyorDeviceDriverEnd1.getMove() == 1) { + //判断任务列是否相邻 + String[] split1 = nextPointCode1.split("-"); + String x1; + String x2; + if (Integer.parseInt(split1[1]) < 10) { + x1 = "0" + (Integer.parseInt(split1[1]) - 1); + x2 = "0" + (Integer.parseInt(split1[1]) + 1); + } else { + x1 = "" + (Integer.parseInt(split1[1]) - 1); + x2 = "" + (Integer.parseInt(split1[1]) + 1); + } + String nextPointCodeDown = split1[0] + "-" + x1 + "-" + split1[2]; + String nextPointCodeUp = split1[0] + "-" + x2 + "-" + split1[2]; + if (!nextPointCode2.equals(nextPointCodeDown) && !nextPointCode2.equals(nextPointCodeUp)) { + if ("1".equals(tasks.get(0) + .getTask_type())) { + //创建单指令 + extracted(doubleBeltConveyorDeviceDriverEnd1, doubleBeltConveyorDeviceDriverWith); + log.info("虚拟工位指令创建成功"); + } + } else { + //判断是否大于等待时间 + if (null != doubleBeltConveyorDeviceDriverEnd1.getArrivalTime() && System.currentTimeMillis() - doubleBeltConveyorDeviceDriverEnd1.getArrivalTime().getTime() + < Integer.parseInt(this.getExtraValue().get("apply_time").toString()) * 1000) { + if (doubleBeltConveyorDeviceDriverEnd2.getMode() == 2 && doubleBeltConveyorDeviceDriverEnd2.getMove() == 1) { + //创建双指令 + extracted(doubleBeltConveyorDeviceDriverEnd1, doubleBeltConveyorDeviceDriverWith); + extracted(doubleBeltConveyorDeviceDriverEnd2, doubleBeltConveyorDeviceDriverWith); + log.info("虚拟工位指令创建成功"); + requireSucess = true; + } + } else { + extracted(doubleBeltConveyorDeviceDriverEnd1, doubleBeltConveyorDeviceDriverWith); + } } } - } else { - requireSucess = false; } + } + } + break; + } + } + + + private void extracted(DoubleBeltConveyorDeviceDriver doubleBeltConveyorDeviceDriver, DoubleBeltConveyorDeviceDriver doubleBeltConveyorDeviceDriverWith) throws Exception { + if (doubleBeltConveyorDeviceDriver.getMove() != 0 && doubleBeltConveyorDeviceDriver.getTask() > 0) { + Date date = new Date(); + if (date.getTime() - this.instruction_update_time.getTime() < (long) this.instruction_update_time_out) { + log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_update_time_out); + } else { + this.instruction_update_time = date; + Instruction inst = instructionService.findByCodeFromCache(String.valueOf(doubleBeltConveyorDeviceDriver.getTask())); + if (inst != null) { + //当货物到达b点,实现完成指令 + if (StrUtil.equals(inst.getInstruction_status(), InstructionStatusEnum.BUSY.getIndex()) || StrUtil.equals(inst.getInstruction_status(), InstructionStatusEnum.READY.getIndex())) { + inst.setExecute_device_code(doubleBeltConveyorDeviceDriver.getDevice_code()); + inst.setNext_device_code(doubleBeltConveyorDeviceDriverWith.getDevice_code()); + finish_instruction(inst); + logServer.deviceExecuteLog(doubleBeltConveyorDeviceDriver.getDevice_code(), "", "", "入库输送线任务开始反馈完成状态,反馈成功,指令号:" + doubleBeltConveyorDeviceDriver.getTask()); - //判断关联的输送线是否满足状态 - if (doubleBeltConveyorDeviceDriver1.getMode() == 2 && doubleBeltConveyorDeviceDriver1.getMove() == 1 && !requireSucess && doubleBeltConveyorDeviceDriver2.getMode() == 2 && doubleBeltConveyorDeviceDriver2.getMove() == 1) { - //判断是否大于等待时间 - if (System.currentTimeMillis() - doubleBeltConveyorDeviceDriver1.getInstruction_require_time().getTime() - > Integer.parseInt(this.getExtraValue().get("apply_time").toString()) * 1000) { - //创建指令 - if (ObjectUtil.isNotNull(taskDtos1) && "1".equals(taskDtos1.getTask_type())) { - creatInstruction(taskDtos1); - } - } - log.info("单工位请求成功"); - requireSucess = true; - } else { - //创建指令 - if (ObjectUtil.isNotNull(taskDtos1) && "1".equals(taskDtos1.getTask_type())) { - creatInstruction(taskDtos1); - } - if (ObjectUtil.isNotNull(taskDtos2) && "1".equals(taskDtos1.getTask_type())) { - creatInstruction(taskDtos2); - } - log.info("双工位指令创建成功"); - requireSucess = true; } - } } } } - private void creatInstruction(TaskDto taskDtos1) { - //判断当前任务号是否存在指令 - String taskid = taskDtos1.getTask_id(); - String taskcode = taskDtos1.getTask_code(); - String priority = taskDtos1.getPriority(); - String start_point_code = taskDtos1.getStart_point_code(); - String start_device_code = taskDtos1.getStart_device_code(); - String route_plan_code = taskDtos1.getRoute_plan_code(); - String next_device_code = ""; - /** - * 开始平均分配 - */ - String this_coevice_code = taskServer.queryAssignedByDevice(device_code, taskDtos1.getNext_device_code()); - if (StrUtil.isEmpty(this_coevice_code)) { - List shortPathsList = routeLineService.getShortPathLines(start_device_code, taskDtos1.getNext_device_code(), route_plan_code); - RouteLineDto routeLineDto = shortPathsList.get(0); - - String path = routeLineDto.getPath(); - String type = routeLineDto.getType(); - String[] str = path.split("->"); - - List pathlist = Arrays.asList(str); - int index = 0; - for (int m = 0; m < pathlist.size(); m++) { - if (pathlist.get(m).equals(start_device_code)) { - index = m + 1; - break; - } - } - next_device_code = pathlist.get(index); - } else { - next_device_code = this_coevice_code; - } - //校验路由关系 - List shortPathsList = routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code); - if (ObjectUtils.isEmpty(shortPathsList) || shortPathsList.size() < 1) { - throw new RuntimeException("路由不通!"); - } - Device nextdevice = deviceAppservice.findDeviceByCode(next_device_code); - String next_point_code; - if (StrUtil.equals(deviceAppservice.findDeviceTypeByCode(next_device_code), "storage")) { - next_point_code = taskDtos1.getTo_x() + "-" + taskDtos1.getTo_y() + "-" + taskDtos1.getTo_z(); - } else { - next_point_code = next_device_code; - } - Instruction instdto = new Instruction(); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setRemark(taskDtos1.getRemark()); - instdto.setMaterial(taskDtos1.getMaterial()); - instdto.setQuantity(taskDtos1.getQuantity()); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - String now = DateUtil.now(); - instdto.setCreate_time(now); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setPriority(priority); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(start_point_code); - log.error("=================================,{}", instdto.getCreate_by()); - try { - instructionService.create(instdto); - } catch (Exception e) { - e.printStackTrace(); - log.error("指令创建失败!", e.getMessage()); - } - taskDtos1.setTask_status("1"); - taskServer.update(taskDtos1); - requireSucess = true; - Map map = new HashMap(); - String next_addr = nextdevice.getExtraValue().get("address").toString(); - map.put("to_target", next_addr); - map.put("to_task", instdto.getInstruction_code()); - map.put("to_command", "1"); - map.put("to_container_type", "1"); - map.put("to_container_no", "1"); - this.writing(map); - requireSucess = true; + public synchronized boolean finish_instruction(Instruction inst) throws Exception { + instructionService.finish(inst); + return true; } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_belt_conveyor/DoubleBeltConveyorDefination.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_belt_conveyor/DoubleBeltConveyorDefination.java index f28cf81..a13b2c4 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_belt_conveyor/DoubleBeltConveyorDefination.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_belt_conveyor/DoubleBeltConveyorDefination.java @@ -11,7 +11,7 @@ import java.util.LinkedList; import java.util.List; /** - * 标准版-输送机 + * 双工位-输送机 */ @Service public class DoubleBeltConveyorDefination implements OpcDeviceDriverDefination { diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_belt_conveyor/DoubleBeltConveyorDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_belt_conveyor/DoubleBeltConveyorDeviceDriver.java index 2dc9369..b278745 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_belt_conveyor/DoubleBeltConveyorDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_belt_conveyor/DoubleBeltConveyorDeviceDriver.java @@ -10,6 +10,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; 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_driver.DeviceDriver; @@ -36,7 +37,7 @@ import java.util.*; import static redis.clients.jedis.HostAndPort.localhost; /** - * 输送线 + * 双工位输送线 */ @Slf4j @Data @@ -59,6 +60,7 @@ public class DoubleBeltConveyorDeviceDriver extends AbstractOpcDeviceDriver impl private Date instruction_finished_time = new Date(); private Date instruction_apply_time = new Date(); private int instruction_require_time_out = 3000; + private Date arrivalTime = null; //心跳 int heartbeat = 0; @@ -249,29 +251,28 @@ public class DoubleBeltConveyorDeviceDriver extends AbstractOpcDeviceDriver impl Instruction instruction = null; List toInstructions; - //纸管库申请任务 - switch (mode) { - case 1: - log.debug("弃用(留作兼容)"); - break; - case 2: - //申请任务 - if (move == 1 && !requireSucess) { - instruction_require(); - } - break; - case 3: - log.info("运行中"); - break; - case 4: - //申请出货 - if (move == 1 && !requireSucess) { - //request_for_shipment(String.valueOf(mode), item_out_seq_arr, item_out_qty_arr); - } - break; - default: - break; - } + } + switch (mode) { + case 1: + log.debug("弃用(留作兼容)"); + break; + case 2: + //申请任务 + if (move == 1 && !requireSucess) { + instruction_require(); + } + break; + case 3: + log.info("运行中"); + break; + case 4: + //申请出货 + if (move == 1 && !requireSucess) { + //request_for_shipment(String.valueOf(mode), item_out_seq_arr, item_out_qty_arr); + } + break; + default: + break; } last_heartbeat = heartbeat; last_mode = mode; @@ -300,17 +301,28 @@ public class DoubleBeltConveyorDeviceDriver extends AbstractOpcDeviceDriver impl } - public void writing(Map map) { - DeviceExecuteLogService logServer = SpringContextHolder.getBean("deviceExecuteLogServiceImpl"); - Map itemMap = new LinkedHashMap<>(); - map.forEach((key, value) -> { - if (ObjectUtil.isNotEmpty(value)) { - itemMap.put(getToParam() + key, value); + public void writing(List list) { + + Map itemMap = new HashMap(); + for (int i = 0; i < list.size(); i++) { + Object ob = list.get(i); + JSONObject json = (JSONObject) JSONObject.toJSON(ob); + if (!StrUtil.isEmpty(json.getString("value"))) { + String to_param = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + json.getString("code"); + itemMap.put(to_param, json.getString("value")); + } + } + logServer.deviceExecuteLog(device_code, "", "", "下发电气信号:" + itemMap); + try { + this.checkcontrol(itemMap); + } catch (Exception e) { + e.printStackTrace(); + try { + this.checkcontrol(itemMap); + } catch (Exception e1) { + e1.printStackTrace(); } - }); - if (ObjectUtil.isNotEmpty(itemMap)) { - this.control(itemMap); - logServer.deviceExecuteLog(this.getDevice().getDevice_code(), "", "", "下发多个电气信号:" + itemMap); } } @@ -373,6 +385,7 @@ public class DoubleBeltConveyorDeviceDriver extends AbstractOpcDeviceDriver impl * 申请任务 */ public synchronized Boolean instruction_require() { + List list = new ArrayList<>(); Date date = new Date(); if (date.getTime() - this.instruction_require_time.getTime() < (long) this.instruction_require_time_out) { log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); @@ -395,7 +408,8 @@ public class DoubleBeltConveyorDeviceDriver extends AbstractOpcDeviceDriver impl map.put("to_command", "1"); map.put("to_container_type", "1"); map.put("to_container_no", "1"); - this.writing(map); + list.add(map); + this.writing(list); led_message = getLedMessage(inst); requireSucess = true; return true; @@ -491,7 +505,8 @@ public class DoubleBeltConveyorDeviceDriver extends AbstractOpcDeviceDriver impl map.put("to_command", "1"); map.put("to_container_type", "1"); map.put("to_container_no", "1"); - this.writing(map); + list.add(map); + this.writing(list); led_message = getLedMessage(instdto); requireSucess = true; return true; @@ -580,7 +595,7 @@ public class DoubleBeltConveyorDeviceDriver extends AbstractOpcDeviceDriver impl /** * 更新指令状态 */ - public synchronized void update_instruction_status() throws Exception { + public synchronized void update_instruction_status() { Date date = new Date(); if (date.getTime() - this.instruction_update_time.getTime() < (long) this.instruction_update_time_out) { log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_update_time_out); @@ -588,13 +603,22 @@ public class DoubleBeltConveyorDeviceDriver extends AbstractOpcDeviceDriver impl this.instruction_update_time = date; inst = checkInst(); if (inst != null) { - //a点到b点,给状态说允许取货 + //a点,给状态说允许取货 if (StrUtil.equals(inst.getInstruction_status(), InstructionStatusEnum.READY.getIndex()) && StrUtil.equals(this.getDeviceCode(), inst.getStart_device_code())) { inst.setInstruction_status(InstructionStatusEnum.BUSY.getIndex()); inst.setExecute_device_code(this.device_code); instructionService.update(inst); logServer.deviceExecuteLog(device_code, "", "", "入库输送线任务开始反馈执行中状态,反馈成功,指令号:" + task); } + //当b点存在货物的时候设置到达时间 + if (StrUtil.equals(inst.getInstruction_status(), CommonFinalParam.ONE) || StrUtil.equals(inst.getInstruction_status(), InstructionStatusEnum.READY.getIndex())) { + if (!StrUtil.equals(this.getDeviceCode(), inst.getStart_device_code()) && mode ==2 && move == 1) { + this.arrivalTime = new Date(); + } + } + + + } } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_station_stacker/DoubleStationStackerDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_station_stacker/DoubleStationStackerDeviceDriver.java index 17121b6..ff95322 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_station_stacker/DoubleStationStackerDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_station_stacker/DoubleStationStackerDeviceDriver.java @@ -264,6 +264,7 @@ public class DoubleStationStackerDeviceDriver extends AbstractOpcDeviceDriver im message = "有报警"; } else { HashMap map = new HashMap<>(); + List list = new ArrayList<>(); if (CommandEnum.STANDY.getStatus().equals(frontCommand) || backCommand.equals(CommandEnum.STANDY.getStatus())){ applyTask(); requireSucess = true; @@ -349,7 +350,8 @@ public class DoubleStationStackerDeviceDriver extends AbstractOpcDeviceDriver im requireSucess = true; } if (ObjectUtil.isNotNull(map)) { - this.writing(map); + list.add(map); + this.writing(list); } } lastHeartbeat = heartbeat; @@ -490,7 +492,7 @@ public class DoubleStationStackerDeviceDriver extends AbstractOpcDeviceDriver im Instruction inst = instructionList.get(0); LinkedList instructionsAll = new LinkedList<>(); - + instructionsAll.add(inst); //找出有相邻的列的指令,如果没有按照单叉走,有按照双叉走 if (findInstruction(instructionList, inst, instructionsAll)) { return false; @@ -541,6 +543,7 @@ public class DoubleStationStackerDeviceDriver extends AbstractOpcDeviceDriver im } private boolean wirteData(LinkedList inst) { + List list = new ArrayList<>(); if (StrUtil.equals(inst.get(0).getInstruction_status(), InstructionStatusEnum.READY.getIndex())) { String startDeviceCode = inst.get(0).getStart_device_code(); Device startDevice = deviceAppService.findDeviceByCode(startDeviceCode); @@ -557,23 +560,23 @@ public class DoubleStationStackerDeviceDriver extends AbstractOpcDeviceDriver im HashMap map = new HashMap<>(); if (inst.size()==1&& ObjectUtil.isNotEmpty(inst.get(0))) { map.put("to_device_code", this.getDevice().getAddress()); - map.put("to_command", CommandEnum.PICKUP.getStatus()); + map.put("to_command", CommandEnum.PICKUP.getStatus().toString()); map.put("to_front_task", inst.get(0).getInstruction_code()); } - if (inst.size()>1 && ObjectUtil.isNotEmpty(inst.get(1))) { + else if (inst.size()>1 && ObjectUtil.isEmpty(inst.get(1))) { map.put("to_device_code", this.getDevice().getAddress()); - map.put("to_command", CommandEnum.PICKUP.getStatus()); + map.put("to_command", CommandEnum.PICKUP.getStatus().toString()); map.put("to_back_task", inst.get(1).getInstruction_code()); }else{ map.put("to_device_code", this.getDevice().getAddress()); - map.put("to_command", CommandEnum.PICKUP.getStatus()); + map.put("to_command", CommandEnum.PICKUP.getStatus().toString()); map.put("to_front_task", inst.get(0).getInstruction_code()); map.put("to_back_task", inst.get(1).getInstruction_code()); } writeStorageOrConveyor(inst, startDeviceCode, startDevice, map); - - this.writing(map); + list.add(map); + this.writing(list); } return false; } @@ -645,12 +648,21 @@ public class DoubleStationStackerDeviceDriver extends AbstractOpcDeviceDriver im if (Integer.valueOf(splitFront[1]).equals(MIN_Y)){ return true; } + String x1 ; + String x2 ; + if (Integer.parseInt(splitFront[1])<10){ + x1 = "0"+(Integer.parseInt(splitFront[1]) - 1); + x2 = "0"+(Integer.parseInt(splitFront[1]) + 1); + }else { + x1 = ""+(Integer.parseInt(splitFront[1]) - 1); + x2 = ""+(Integer.parseInt(splitFront[1]) + 1); + } //根据排序进行加减 - String nextPointCodeDown = splitFront[0] + commonFinalParam.getBARRE() + (Integer.parseInt(splitFront[1]) - 1) + commonFinalParam.getBARRE() + splitFront[2]; - String nextPointCodeUp = splitFront[0] + commonFinalParam.getBARRE() + (Integer.parseInt(splitFront[1]) + 1) + commonFinalParam.getBARRE() + splitFront[2]; + String nextPointCodeDown = splitFront[0] + commonFinalParam.getBARRE() + x1 + commonFinalParam.getBARRE() + splitFront[2]; + String nextPointCodeUp = splitFront[0] + commonFinalParam.getBARRE() + x2 + commonFinalParam.getBARRE() + splitFront[2]; if (CollectionUtil.isNotEmpty(sort)&& SortEnum.BACK.getCode().equals(sort.get(0).getExtra_value())){ - nextPointCodeDown = splitFront[0] + commonFinalParam.getBARRE() + (Integer.parseInt(splitFront[1]) + 1) + commonFinalParam.getBARRE() + splitFront[2]; - nextPointCodeUp = splitFront[0] + commonFinalParam.getBARRE() + (Integer.parseInt(splitFront[1]) - 1) + commonFinalParam.getBARRE() + splitFront[2]; + nextPointCodeDown = splitFront[0] + commonFinalParam.getBARRE() + x2 + commonFinalParam.getBARRE() + splitFront[2]; + nextPointCodeUp = splitFront[0] + commonFinalParam.getBARRE() + x1 + commonFinalParam.getBARRE() + splitFront[2]; } if (Integer.valueOf(splitFront[1]).equals(MAX_Y)){ @@ -772,17 +784,28 @@ public class DoubleStationStackerDeviceDriver extends AbstractOpcDeviceDriver im return this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + "."; } - public void writing(Map map) { - DeviceExecuteLogService logServer = SpringContextHolder.getBean("deviceExecuteLogServiceImpl"); - Map itemMap = new LinkedHashMap<>(); - map.forEach((key, value) -> { - if (ObjectUtil.isNotEmpty(value)) { - itemMap.put(getToParam() + key, value); + public void writing(List list) { + + Map itemMap = new HashMap(); + for (int i = 0; i < list.size(); i++) { + Object ob = list.get(i); + JSONObject json = (JSONObject) JSONObject.toJSON(ob); + if (!StrUtil.isEmpty(json.getString("value"))) { + String to_param = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + json.getString("code"); + itemMap.put(to_param, json.getString("value")); + } + } + logServer.deviceExecuteLog(device_code, "", "", "下发电气信号:" + itemMap); + try { + this.checkcontrol(itemMap); + } catch (Exception e) { + e.printStackTrace(); + try { + this.checkcontrol(itemMap); + } catch (Exception e1) { + e1.printStackTrace(); } - }); - if (ObjectUtil.isNotEmpty(itemMap)) { - this.control(itemMap); - logServer.deviceExecuteLog(this.getDevice().getDevice_code(), "", "", "下发多个电气信号:" + itemMap); } } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/InstructionService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/InstructionService.java index 61abec7..11d4dda 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/InstructionService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/InstructionService.java @@ -406,4 +406,9 @@ public interface InstructionService extends CommonService { * @throws IOException */ void downloadInstLogging(List instList, HttpServletResponse response) throws IOException; + + /** + * 只完成指令 + * @param inst2 + */ } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index 4281130..73ba580 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -1622,4 +1622,6 @@ public class InstructionServiceImpl extends CommonServiceImpl update(@Validated @RequestBody TaskDto dto) { + public ResponseEntity update(@Validated @RequestBody TaskDto dto) { taskService.update(dto); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java index 9cb739e..af234e9 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java @@ -501,4 +501,5 @@ public interface TaskService extends CommonService { */ List getTaskList(Map whereJson); + List findByStartCodeAndBusy(String deviceCode); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index 8aeb0a9..a308442 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -1733,6 +1733,25 @@ public class TaskServiceImpl extends CommonServiceImpl impleme return array; } + @Override + public List findByStartCodeAndBusy(String deviceCode) { + Iterator var3 = tasks.iterator(); + ArrayList tasks = new ArrayList<>(); + while (var3.hasNext()) { + TaskDto task = (TaskDto) var3.next(); + // if (!StrUtil.equals(task.getTask_type(), "5")) { + // continue; + // } + if (StrUtil.equals(task.getStart_device_code(), deviceCode) + && StrUtil.equals(task.getTask_status(), TaskStatusEnum.BUSY.getIndex())) { + if (tasks.size()<2){ + tasks.add(task); + } + } + } + return tasks; + } + @Override public Integer querySameTaskByType(String taskType) {