From 972731fc0cee412fa7dc2ab1aa05065bb8b744b3 Mon Sep 17 00:00:00 2001 From: gengby <858962040@qq.com> Date: Fri, 6 Feb 2026 18:58:27 +0800 Subject: [PATCH] =?UTF-8?q?rev:=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hk/service/impl/HkToAcsServiceImpl.java | 121 ++++++------- .../run/OneNDCSocketConnectionAutoRun.java | 35 +++- .../StandardAutodoorDeviceDriver.java | 39 +++- .../agv/ndcone/AgvNdcOneDeviceDriver.java | 58 +++--- .../robot_arm/RobotArmDeviceDriver.java | 55 ++++-- .../StretchWrapperDeviceDriver.java | 39 +++- .../service/impl/InstructionServiceImpl.java | 38 ++-- .../task/service/impl/TaskServiceImpl.java | 2 +- .../src/main/resources/logback-spring.xml | 166 +++++++++++------- 9 files changed, 326 insertions(+), 227 deletions(-) diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/hk/service/impl/HkToAcsServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/hk/service/impl/HkToAcsServiceImpl.java index 2b686f4..df6e0e9 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/hk/service/impl/HkToAcsServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/hk/service/impl/HkToAcsServiceImpl.java @@ -11,7 +11,8 @@ import lombok.extern.slf4j.Slf4j; import org.nl.acs.device.domain.Device; import org.nl.acs.agv.hk.service.AcsToHkService; import org.nl.acs.agv.hk.service.HkToAcsService; -import org.nl.acs.agv.hk.service.data.GenPreScheduleTaskReq; +import org.nl.acs.device_driver.autodoor.standard_autodoor.ItemProtocol; +import org.nl.acs.device_driver.autodoor.standard_autodoor.StandardAutodoorDeviceDriver; import org.nl.acs.device_driver.basedriver.robot_arm.RobotArmDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.instruction.domain.Instruction; @@ -19,7 +20,7 @@ import org.nl.acs.instruction.enums.InstTypeEnum; import org.nl.acs.instruction.enums.InstructionStatusEnum; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.opc.DeviceAppService; -import org.nl.acs.task.enums.TaskTypeEnum; +import org.nl.acs.opc.ThreadUtl; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; import org.nl.system.service.param.ISysParamService; @@ -58,16 +59,19 @@ public class HkToAcsServiceImpl implements HkToAcsService { @SneakyThrows @Override public JSONObject agvCallback(JSONObject requestParam) { + log.info("agvCallback-----请求参数{}", requestParam.toString()); JSONObject resp = new JSONObject(); String reqCode = requestParam.getString("reqCode"); String robotCode = requestParam.getString("robotCode"); String taskCode = requestParam.getString("taskCode"); String method = requestParam.getString("method"); + String currentCallCode = requestParam.getString("currentCallCode"); Instruction instruction = instructionService.findByCodeFromCache(taskCode); if (ObjectUtil.isEmpty(instruction)) { resp.put("code", "1"); resp.put("message", "请求失败,指令信息不存在,指令号:" + taskCode); resp.put("reqCode", reqCode); + log.info("agvCallback-----响应参数{}", resp.toString()); return resp; } TaskDto taskDto = taskService.findByCodeFromCache(instruction.getTask_code()); @@ -75,6 +79,7 @@ public class HkToAcsServiceImpl implements HkToAcsService { resp.put("code", "1"); resp.put("message", "请求失败,任务信息不存在,指令号:" + taskCode); resp.put("reqCode", reqCode); + log.info("agvCallback-----响应参数{}", resp.toString()); return resp; } String now = DateUtil.now(); @@ -86,31 +91,21 @@ public class HkToAcsServiceImpl implements HkToAcsService { instruction.setExecute_device_code(instruction.getStart_point_code()); instruction.setUpdate_time(now); instructionService.update(instruction); - - JSONObject reqParam = new JSONObject(); - reqParam.put("task_id", instruction.getTask_id()); - reqParam.put("task_code", instruction.getTask_code()); - reqParam.put("car_no", robotCode); - acsToWmsService.feedCarNo(reqParam); } //method 回调2、任务完成/结束end else if (StrUtil.equals(method, "end")) { - if (instruction.getInstruction_type().equals(InstTypeEnum.AGV_THREE_TASK.getCode())) { - instruction.setExecute_device_code(instruction.getStart_point_code()); + Device device = deviceAppService.findDeviceByCode(instruction.getNext_device_code()); + RobotArmDeviceDriver robotArmDeviceDriver; + if (device.getDeviceDriver() instanceof RobotArmDeviceDriver) { + robotArmDeviceDriver = (RobotArmDeviceDriver) device.getDeviceDriver(); + Map map = new HashMap<>(); + map.put("to_in", "0"); + robotArmDeviceDriver.writing(map); } //修改指令状态完成 instruction.setInstruction_status(InstructionStatusEnum.FINISHED.getIndex()); instruction.setUpdate_time(now); instructionService.finish(instruction); -// if (StrUtil.equals(instruction.getIs_wait(), "1") && StrUtil.equals(instruction.getInstruction_type(), InstTypeEnum.CTU_OUT_TASK.getCode())) { -// String ctuWaitTime = Optional.ofNullable(sysParamService.findByCode("ctuWaitTime").getValue()).map(Object::toString).orElse("3600"); -// GenPreScheduleTaskReq gpsReq = GenPreScheduleTaskReq.builder() -// .positionCode(instruction.getStart_device_code()) -// .nextTask(ctuWaitTime) -// .agvTyp("10") -// .build(); -// acsToHkService.genPreScheduleTask(gpsReq, null); -// } } //method 回调3、任务取消cancel else if (StrUtil.equals(method, "cancel")) { @@ -126,21 +121,9 @@ public class HkToAcsServiceImpl implements HkToAcsService { resp.put("code", "1"); resp.put("message", "请求失败,请求位置编号不存在!"); resp.put("reqCode", reqCode); + log.info("agvCallback-----响应参数{}", resp.toString()); return resp; } -// StandardWeightSiteDeviceDriver standardWeightSiteDeviceDriver; -// //CTU取货申请 -// //如果请求位置编号与指令起点一致并且是输送线则是取货申请 -// if (device.getDeviceDriver() instanceof StandardWeightSiteDeviceDriver) { -// standardWeightSiteDeviceDriver = (StandardWeightSiteDeviceDriver) device.getDeviceDriver(); -// if (TaskTypeEnum.CTU_TASK.getCode().equals(taskDto.getTask_type())) { -// standardWeightSiteDeviceDriver.setReqCtuTakeRequireSuccess(true); -// standardWeightSiteDeviceDriver.setReqCtuTakeInstCode(taskCode); -// } else { -// standardWeightSiteDeviceDriver.setReqAgvTakeRequireSuccess(true); -// standardWeightSiteDeviceDriver.setReqAgvTakeInstCode(taskCode); -// } -// } // 机械手驱动 RobotArmDeviceDriver robotArmDeviceDriver; if (device.getDeviceDriver() instanceof RobotArmDeviceDriver) { @@ -154,13 +137,6 @@ public class HkToAcsServiceImpl implements HkToAcsService { } //method 回调5、inApplyOk else if (StrUtil.equals(method, "inApplyOK")) { - //如果是WMS下发的任务,就反馈WMS取货完成 - if (!instruction.getTask_code().startsWith("-")) { - JSONObject reqParam = new JSONObject(); - reqParam.put("task_code", instruction.getTask_code()); - reqParam.put("point_code", instruction.getStart_point_code()); - acsToWmsService.takeFinish(reqParam); - } Device device = deviceAppService.findDeviceByCode(instruction.getStart_device_code()); RobotArmDeviceDriver robotArmDeviceDriver; if (device.getDeviceDriver() instanceof RobotArmDeviceDriver) { @@ -168,35 +144,18 @@ public class HkToAcsServiceImpl implements HkToAcsService { Map map = new HashMap<>(); map.put("to_out", "0"); robotArmDeviceDriver.writing(map); -// robotArmDeviceDriver.setReqAgvTakeRequireSuccess(true); -// robotArmDeviceDriver.setReqAgvTakeInstCode(taskCode); } } //method 回调6、放料箱申请outApply else if (StrUtil.equals(method, "outApply")) { Device device = deviceAppService.findDeviceByCode(instruction.getNext_device_code()); - if (instruction.getInstruction_type().equals(InstTypeEnum.AGV_THREE_TASK.getCode())) { - device = deviceAppService.findDeviceByCode(instruction.getStart_device_code()); - } if (ObjectUtil.isEmpty(device)) { resp.put("code", "1"); resp.put("message", "请求失败,请求位置编号不存在!"); resp.put("reqCode", reqCode); + log.info("agvCallback-----响应参数{}", resp.toString()); return resp; } -// StandardWeightSiteDeviceDriver standardWeightSiteDeviceDriver; -// //CTU取货申请 -// //如果请求位置编号与指令起点一致并且是输送线则是取货申请 -// if (device.getDeviceDriver() instanceof StandardWeightSiteDeviceDriver) { -// standardWeightSiteDeviceDriver = (StandardWeightSiteDeviceDriver) device.getDeviceDriver(); -// if (TaskTypeEnum.CTU_TASK.getCode().equals(taskDto.getTask_type())) { -// standardWeightSiteDeviceDriver.setReqCtuTakeRequireSuccess(true); -// standardWeightSiteDeviceDriver.setReqCtuTakeInstCode(taskCode); -// } else { -// standardWeightSiteDeviceDriver.setReqAgvTakeRequireSuccess(true); -// standardWeightSiteDeviceDriver.setReqAgvTakeInstCode(taskCode); -// } -// } RobotArmDeviceDriver robotArmDeviceDriver; if (device.getDeviceDriver() instanceof RobotArmDeviceDriver) { robotArmDeviceDriver = (RobotArmDeviceDriver) device.getDeviceDriver(); @@ -206,28 +165,50 @@ public class HkToAcsServiceImpl implements HkToAcsService { robotArmDeviceDriver.setReqAgvTakeRequireSuccess(true); robotArmDeviceDriver.setReqAgvTakeInstCode(taskCode); } - } - //method 回调7、放货完成 - else if (StrUtil.equals(method, "outApplyOK")) { - Device device = deviceAppService.findDeviceByCode(instruction.getStart_device_code()); - RobotArmDeviceDriver robotArmDeviceDriver; - if (device.getDeviceDriver() instanceof RobotArmDeviceDriver) { - robotArmDeviceDriver = (RobotArmDeviceDriver) device.getDeviceDriver(); - Map map = new HashMap<>(); - map.put("to_in", "0"); - robotArmDeviceDriver.writing(map); -// robotArmDeviceDriver.setReqAgvTakeRequireSuccess(true); -// robotArmDeviceDriver.setReqAgvTakeInstCode(taskCode); + } else if (StrUtil.equals(method, "inDoor")) { + Device device = deviceAppService.findDeviceByCode(currentCallCode); + StandardAutodoorDeviceDriver standardAutodoorDeviceDriver; + if (device != null && device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + Map param = new HashMap<>(); + param.put(ItemProtocol.to_open, 1); + standardAutodoorDeviceDriver.writing(param); + standardAutodoorDeviceDriver.setRequireDoor(true); + standardAutodoorDeviceDriver.setRequireTaskCode(taskCode); + } else { + resp.put("code", "1"); + resp.put("message", "请求开门失败,请求位置编号不存在!"); + resp.put("reqCode", reqCode); + log.info("agvCallback-----响应参数{}", resp.toString()); + return resp; + } + } else if (StrUtil.equals(method, "outDoor")) { + Device device = deviceAppService.findDeviceByCode("DOOR02"); + StandardAutodoorDeviceDriver standardAutodoorDeviceDriver; + if (device != null && device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + Map param = new HashMap<>(); + param.put(ItemProtocol.to_open, 0); + standardAutodoorDeviceDriver.writing(param); + ThreadUtl.sleep(500); + standardAutodoorDeviceDriver.writing(param); + standardAutodoorDeviceDriver.setRequireDoor(false); + } else { + resp.put("code", "1"); + resp.put("message", "请求关门失败,请求位置编号不存在!"); + resp.put("reqCode", reqCode); + log.info("agvCallback-----响应参数{}", resp.toString()); + return resp; } } resp.put("code", "0"); resp.put("message", "成功"); resp.put("reqCode", reqCode); + log.info("agvCallback-----响应参数{}", resp.toString()); return resp; } - @Override public JSONObject warnCallback(JSONObject requestParam) { String reqCode = requestParam.getString("reqCode"); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java index e2bbe57..b796d8d 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java @@ -11,6 +11,7 @@ import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.autodoor.standard_autodoor.ItemProtocol; import org.nl.acs.device_driver.autodoor.standard_autodoor.StandardAutodoorDeviceDriver; import org.nl.acs.device_driver.basedriver.agv.ndcone.AgvNdcOneDeviceDriver; +import org.nl.acs.device_driver.basedriver.stretch_wrapper.StretchWrapperDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.instruction.domain.Instruction; @@ -31,7 +32,9 @@ import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static org.nl.acs.agv.server.impl.NDCAgvServiceImpl.Bytes2HexString; /** @@ -170,8 +173,8 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { inst.setAgv_jobno(String.valueOf(index)); inst.setSend_status(CommonFinalParam.ONE); instructionService.update(inst); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); } //任务完毕 //(无车id及状态) @@ -223,8 +226,10 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { StandardAutodoorDeviceDriver driver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); log.info("agv车号为"+carno+",进入自动门:"+device_code+"区域,请求开门中"); + Map param = new HashMap<>(); + param.put(ItemProtocol.to_open,1); // 下发开门 - driver.writing(ItemProtocol.to_open,"1"); + driver.writing(param); log.info("agv车号为"+carno+",进入自动门区域"+"自动门:"+device_code+"已联机,允许开门。"); logServer.deviceExecuteLog(device_code, "", "", "允许开门。"); if (driver.getOpen() == 1) { @@ -263,10 +268,34 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { StandardAutodoorDeviceDriver driver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); // 关门 - driver.writing(ItemProtocol.to_open,"0"); + Map param = new HashMap<>(); + param.put(ItemProtocol.to_open,0); + driver.writing(param); log.info("agv车号为"+carno+",准备离开自动门:"+device_code+"区域,请求关门中"); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); } + } else if (phase == 0x4D){ + if (agvaddr != 0) { + old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + if (StrUtil.contains(old_device_code, "-")) { + String[] point = old_device_code.split("-"); + device_code = point[0]; + } else if (StrUtil.contains(old_device_code, ".")) { + String[] point = old_device_code.split("\\."); + device_code = point[0]; + } else { + device_code = old_device_code; + } + } + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + if (device != null && device.getDeviceDriver() instanceof StretchWrapperDeviceDriver){ + + } + Instruction instruction = instructionService.findByCodeFromCache(String.valueOf(ikey)); } else { //上报异常信息 //(不需要WCS反馈) diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDeviceDriver.java index 3ef19db..2568b2e 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDeviceDriver.java @@ -1,10 +1,14 @@ package org.nl.acs.device_driver.autodoor.standard_autodoor; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.acs.agv.hk.UnifiedResponse; +import org.nl.acs.agv.hk.service.AcsToHkService; +import org.nl.acs.agv.hk.service.data.ContinueTaskReq; import org.nl.acs.common.base.CommonFinalParam; import org.nl.acs.device.domain.Device; import org.nl.acs.device.service.DeviceService; @@ -15,6 +19,7 @@ import org.nl.acs.ext.wms.data.one.feedBackTaskStatus.FeedBackTaskStatusRequest; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.log.service.DeviceExecuteLogService; +import org.nl.acs.opc.ThreadUtl; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.task.service.TaskService; import org.nl.acs.utils.ReadUtil; @@ -48,6 +53,7 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); AcsToWmsService acsToWmsService = SpringContextHolder.getBean("acsToWmsServiceImpl"); + AcsToHkService acsToHkService = SpringContextHolder.getBean(AcsToHkService.class); String container; String container_type_desc; String last_container_type_desc; @@ -66,10 +72,10 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem int move = 0; int task = 0; - int last_close= 0; - int last_open= 0; - int last_to_close= 0; - int last_to_open= 0; + int last_close = 0; + int last_open = 0; + int last_to_close = 0; + int last_to_open = 0; boolean hasVehicle = false; boolean isReady = false; @@ -96,6 +102,9 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem private int instruction_finished_time_out; + private volatile boolean requireDoor = false; + private volatile String requireTaskCode = null; + int branchProtocol = 0; String message = ""; @@ -114,6 +123,23 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem to_close = this.itemProtocol.getToClose(); to_open = this.itemProtocol.getToOpen(); + if (this.requireDoor){ + Map param = new HashMap<>(); + param.put(ItemProtocol.to_open,1); + this.writing(param); + if (this.open == 1 && StrUtil.isNotBlank(this.requireTaskCode)){ + ContinueTaskReq req = ContinueTaskReq.builder() + .taskCode(this.requireTaskCode) + .build(); + UnifiedResponse unifiedResponse = acsToHkService.continueTask(req); + // 初始化 + if (unifiedResponse.isSuccess()) { + this.requireTaskCode = null; + } + } + ThreadUtl.sleep(3000); + } + last_close = close; last_open = open; last_to_close = to_close; @@ -145,9 +171,9 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem this.checkcontrol(itemMap); } catch (Exception e) { e.printStackTrace(); - try{ + try { this.checkcontrol(itemMap); - } catch (Exception e1){ + } catch (Exception e1) { e1.printStackTrace(); } } @@ -155,6 +181,7 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem lucene.deviceExecuteLog(new LuceneLogDto(this.getDeviceCode(), "下发多个电气信号:" + itemMap)); } } + /** * 抽取统一下发电气信号前缀 * diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java index ba55adb..08ff654 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java @@ -37,7 +37,9 @@ import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.impl.SysParamServiceImpl; import org.springframework.beans.factory.annotation.Autowired; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ThreadPoolExecutor; /** @@ -195,12 +197,6 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); flag = true; } - if (flag) { - // log.info("==================允许AGV取货=================="); - // logServer.deviceExecuteLog(device_code, "", "", "允许AGV取货。"); - //log.info("{},{}", device_code, "允许AGV取货。"); - // lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, "允许AGV取货。")); - } // 到达货架 if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { log.info("到达{}取货点开始取货", device_code); @@ -214,7 +210,9 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic if (device.getDeviceDriver() instanceof StretchWrapperDeviceDriver) { StretchWrapperDeviceDriver deviceDriver = (StretchWrapperDeviceDriver) device.getDeviceDriver(); // 下发请求取货 - deviceDriver.writing(ItemProtocol.to_out, "1"); + Map param = new HashMap<>(); + param.put(ItemProtocol.to_out, 1); + deviceDriver.writing(param); // 判断是否允许取货 if (deviceDriver.getAction() == 1) { log.info("到达{}取货点开始取货", device_code); @@ -230,7 +228,9 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic RobotArmDeviceDriver deviceDriver = (RobotArmDeviceDriver) device.getDeviceDriver(); if (deviceDriver.getHeartbeat() == 1) { // 下发正在取货 - deviceDriver.writing(org.nl.acs.device_driver.basedriver.robot_arm.ItemProtocol.to_out, "1"); + Map param = new HashMap<>(); + param.put(org.nl.acs.device_driver.basedriver.robot_arm.ItemProtocol.to_out, 1); + deviceDriver.writing(param); log.info("到达{}取货点开始取货", device_code); inst.setExecute_status("1"); instructionService.update(inst); @@ -245,7 +245,9 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic // 判断是否允许取 if (deviceDriver.getEmp_ready() == 1) { // 下发正在取货 - deviceDriver.writing(org.nl.acs.device_driver.basedriver.pallet_dispenser.ItemProtocol.to_out, "1"); + Map param = new HashMap<>(); + param.put(org.nl.acs.device_driver.basedriver.pallet_dispenser.ItemProtocol.to_out, 1); + deviceDriver.writing(param); log.info("到达{}取货点开始取货", device_code); inst.setExecute_status("1"); instructionService.update(inst); @@ -311,8 +313,9 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic // 到达缠绕机取货完成 if (device.getDeviceDriver() instanceof StretchWrapperDeviceDriver) { StretchWrapperDeviceDriver deviceDriver = (StretchWrapperDeviceDriver) device.getDeviceDriver(); - deviceDriver.writing(ItemProtocol.to_out_finish, "1"); - + Map param = new HashMap<>(); + param.put(ItemProtocol.to_out_finish, 1); + deviceDriver.writing(param); data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); log.info("agv进入" + device_code + "取货完成"); flag = true; @@ -322,7 +325,9 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic if (device.getDeviceDriver() instanceof RobotArmDeviceDriver) { RobotArmDeviceDriver deviceDriver = (RobotArmDeviceDriver) device.getDeviceDriver(); // 取货复位 - deviceDriver.writing("to_out","0"); + Map param = new HashMap<>(); + param.put("to_out", 0); + deviceDriver.writing(param); data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); log.info("agv进入" + device_code + "取货完成"); flag = true; @@ -331,7 +336,9 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic // 到达拆盘机手取货完成 if (device.getDeviceDriver() instanceof PalletDispenseDeviceDriver) { PalletDispenseDeviceDriver deviceDriver = (PalletDispenseDeviceDriver) device.getDeviceDriver(); - deviceDriver.writing("to_out","0"); + Map param = new HashMap<>(); + param.put("to_out", 0); + deviceDriver.writing(param); data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); log.info("agv进入" + device_code + "取货完成"); flag = true; @@ -387,18 +394,13 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); flag = true; } - if (flag) { - // log.info("==================允许AGV放货=================="); - // logServer.deviceExecuteLog(device_code, "", "", "允许AGV放货。"); - // log.info("{},{}", device_code, "允许AGV放货。"); - // lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, "允许AGV放货。")); - } - // 缠绕机 if (device.getDeviceDriver() instanceof StretchWrapperDeviceDriver) { StretchWrapperDeviceDriver deviceDriver = (StretchWrapperDeviceDriver) device.getDeviceDriver(); // 下发请求放货 - deviceDriver.writing(ItemProtocol.to_in, "1"); + Map param = new HashMap<>(); + param.put(ItemProtocol.to_in, 1); + deviceDriver.writing(param); // 判断是否允许放货 if (deviceDriver.getAction() == 1) { log.info("到达{}放货点开始放货", device_code); @@ -472,18 +474,12 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); flag = true; } - if (flag) { - //log.info("================允许AGV放货后离开================="); - //logServer.deviceExecuteLog(device_code, "", "", "允许AGV放货后离开。"); - // log.info("{},{}", device_code, "允许AGV放货后离开。"); - //lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, "允许AGV放货后离开。")); - } - // 到达缠绕机放货完成 if (device.getDeviceDriver() instanceof StretchWrapperDeviceDriver) { StretchWrapperDeviceDriver deviceDriver = (StretchWrapperDeviceDriver) device.getDeviceDriver(); - deviceDriver.writing(ItemProtocol.to_in_finish, "1"); - + Map param = new HashMap<>(); + param.put(ItemProtocol.to_in_finish, 1); + deviceDriver.writing(param); data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); log.info("{}放货完成", device_code); flag = true; @@ -492,7 +488,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic // 到达机械手放货完成 if (device.getDeviceDriver() instanceof RobotArmDeviceDriver) { RobotArmDeviceDriver deviceDriver = (RobotArmDeviceDriver) device.getDeviceDriver(); - deviceDriver.writing("to_in","0"); + deviceDriver.writing("to_in", "0"); data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); log.info("{}放货完成", device_code); flag = true; diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/robot_arm/RobotArmDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/robot_arm/RobotArmDeviceDriver.java index 897eea6..9d613f4 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/robot_arm/RobotArmDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/robot_arm/RobotArmDeviceDriver.java @@ -2,11 +2,13 @@ package org.nl.acs.device_driver.basedriver.robot_arm; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.acs.AcsConfig; import org.nl.acs.agv.hk.UnifiedResponse; import org.nl.acs.agv.hk.service.AcsToHkService; import org.nl.acs.agv.hk.service.data.ContinueTaskReq; @@ -27,6 +29,7 @@ import org.nl.acs.utils.ReadUtil; import org.nl.config.SpringContextHolder; import org.nl.system.service.lucene.LuceneExecuteLogService; import org.nl.system.service.lucene.dto.LuceneLogDto; +import org.nl.system.service.param.ISysParamService; import org.openscada.opc.lib.da.Server; import java.util.*; @@ -50,7 +53,7 @@ public class RobotArmDeviceDriver extends AbstractOpcDeviceDriver implements Dev RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); - + ISysParamService paramService = SpringContextHolder.getBean(ISysParamService.class); AcsToWmsService acsToWmsService = SpringContextHolder.getBean("acsToWmsServiceImpl"); private final AcsToHkService acsToHkService = SpringContextHolder.getBean(AcsToHkService.class); @@ -126,19 +129,27 @@ public class RobotArmDeviceDriver extends AbstractOpcDeviceDriver implements Dev heartbeat = this.itemProtocol.getHeartbeat(); emp_task = this.itemProtocol.getEmp(); pallet_apply = this.itemProtocol.getPallet(); + to_out = this.itemProtocol.getToOut(); + to_in = this.itemProtocol.getToIn(); + + if (emp_task != last_emp_task) { + this.requireSucess = false; + } + + if (pallet_apply != last_pallet_apply) { + this.requireSucess = false; + } last_heartbeat = heartbeat; last_emp_task = emp_task; last_pallet_apply = pallet_apply; - if (last_heartbeat == 1) { - 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); - } else { - this.instruction_require_time = date; - this.executeTask(); - } + 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); + } else { + this.instruction_require_time = date; + this.executeTask(); } } @@ -146,37 +157,51 @@ public class RobotArmDeviceDriver extends AbstractOpcDeviceDriver implements Dev * 执行业务逻辑 */ public void executeTask() { + String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue(); + JSONObject param = new JSONObject(); // 申请叫料任务 - if (last_emp_task == 1) { + if (emp_task == 1 && !requireSucess) { List list = taskserver.list( new QueryWrapper().lambda() .eq(Task::getNext_device_code, devicecode) .eq(Task::getIs_delete, "0") .in(Task::getTask_status, "0", "1") ); - if (ObjectUtil.isEmpty(list)) { + if (ObjectUtil.isEmpty(list) && "1".equals(hasWms)) { // 调用上位接口 param.put("device_code", devicecode); param.put("type", "2"); param.put("type_dtl", "2"); - acsToWmsService.applyTask(param); + HttpResponse httpResponse = acsToWmsService.applyTask(param); + if (httpResponse != null) { + JSONObject resp = JSONObject.parseObject(httpResponse.body()); + if (resp != null && resp.getIntValue("status") == 200) { + this.requireSucess = true; + } + } } } // 申请下料任务 - if (last_pallet_apply == 1) { + if (pallet_apply == 1 && !requireSucess) { List list = taskserver.list( new QueryWrapper().lambda() .eq(Task::getStart_device_code, devicecode) .eq(Task::getIs_delete, "0") .in(Task::getTask_status, "0", "1") ); - if (ObjectUtil.isEmpty(list)) { + if (ObjectUtil.isEmpty(list) && "1".equals(hasWms)) { // 调用上位接口 param.put("device_code", devicecode); param.put("type", "2"); param.put("type_dtl", "1"); - acsToWmsService.applyTask(param); + HttpResponse httpResponse = acsToWmsService.applyTask(param); + if (httpResponse != null) { + JSONObject resp = JSONObject.parseObject(httpResponse.body()); + if (resp != null && resp.getIntValue("status") == 200) { + this.requireSucess = true; + } + } } } // 取货/放货信号写入需要初始化并允许离开 diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/stretch_wrapper/StretchWrapperDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/stretch_wrapper/StretchWrapperDeviceDriver.java index 2e4ee04..cd364fd 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/stretch_wrapper/StretchWrapperDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/stretch_wrapper/StretchWrapperDeviceDriver.java @@ -1,11 +1,14 @@ package org.nl.acs.device_driver.basedriver.stretch_wrapper; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.acs.AcsConfig; +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; @@ -21,6 +24,7 @@ import org.nl.acs.utils.ReadUtil; import org.nl.config.SpringContextHolder; import org.nl.system.service.lucene.LuceneExecuteLogService; import org.nl.system.service.lucene.dto.LuceneLogDto; +import org.nl.system.service.param.ISysParamService; import org.openscada.opc.lib.da.Server; import java.util.*; @@ -47,6 +51,8 @@ public class StretchWrapperDeviceDriver extends AbstractOpcDeviceDriver implemen AcsToWmsService acsToWmsService = SpringContextHolder.getBean("acsToWmsServiceImpl"); + ISysParamService paramService = SpringContextHolder.getBean(ISysParamService.class); + String container; String container_type_desc; String last_container_type_desc; @@ -113,6 +119,14 @@ public class StretchWrapperDeviceDriver extends AbstractOpcDeviceDriver implemen action = this.itemProtocol.getAction(); error = this.itemProtocol.getError(); + if (task_in != last_task_in){ + this.requireSucess = false; + } + + if (task_out != last_task_out){ + this.requireSucess = false; + } + last_action = action; last_error = error; last_task_in = task_in; @@ -131,37 +145,50 @@ public class StretchWrapperDeviceDriver extends AbstractOpcDeviceDriver implemen * 执行业务逻辑 */ public void executeTask() { + String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue(); JSONObject param = new JSONObject(); // 申请叫料任务 - if (last_task_in == 1) { + if (last_task_in == 1 && !this.requireSucess) { List list = taskserver.list( new QueryWrapper().lambda() .eq(Task::getNext_device_code, devicecode) .eq(Task::getIs_delete, "0") .in(Task::getTask_status, "0", "1") ); - if (ObjectUtil.isEmpty(list)) { + if (ObjectUtil.isEmpty(list) && "1".equals(hasWms)) { // 调用上位接口 param.put("device_code", devicecode); param.put("type", "1"); param.put("type_dtl", "2"); - acsToWmsService.applyTask(param); + HttpResponse httpResponse = acsToWmsService.applyTask(param); + if (httpResponse != null) { + JSONObject resp = JSONObject.parseObject(httpResponse.body()); + if (resp != null && resp.getIntValue("status") == 200){ + this.requireSucess = true; + } + } } } // 申请下料任务 - if (last_task_out == 1) { + if (last_task_out == 1 && !this.requireSucess) { List list = taskserver.list( new QueryWrapper().lambda() .eq(Task::getStart_device_code, devicecode) .eq(Task::getIs_delete, "0") .in(Task::getTask_status, "0", "1") ); - if (ObjectUtil.isEmpty(list)) { + if (ObjectUtil.isEmpty(list) && "1".equals(hasWms)) { // 调用上位接口 param.put("device_code", devicecode); param.put("type", "1"); param.put("type_dtl", "1"); - acsToWmsService.applyTask(param); + HttpResponse httpResponse = acsToWmsService.applyTask(param); + if (httpResponse != null) { + JSONObject resp = JSONObject.parseObject(httpResponse.body()); + if (resp != null && resp.getIntValue("status") == 200){ + this.requireSucess = true; + } + } } } } 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 4792cfb..6a04814 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 @@ -19,6 +19,7 @@ import org.apache.commons.lang3.ObjectUtils; import org.nl.acs.AcsConfig; import org.nl.acs.agv.hk.UnifiedResponse; import org.nl.acs.agv.hk.service.AcsToHkService; +import org.nl.acs.agv.hk.service.data.CancelTaskReq; import org.nl.acs.agv.hk.service.data.GenAgvSchedulingTaskReq; import org.nl.acs.agv.server.NDCAgvService; import org.nl.acs.agv.server.XianGongAgvService; @@ -445,11 +446,12 @@ public class InstructionServiceImpl extends CommonServiceImpl> positionCodePath = Arrays.asList(MapOf.of("positionCode", dto.getStart_parent_code(), "type", "00"), MapOf.of("positionCode", dto.getNext_parent_code(), "type", "00")); + List> positionCodePath = Arrays.asList(MapOf.of("positionCode", dto.getStart_device_code(), "type", "00"), MapOf.of("positionCode", dto.getNext_device_code(), "type", "00")); GenAgvSchedulingTaskReq gasReq = GenAgvSchedulingTaskReq .builder() .taskTyp(dto.getInstruction_type()) .positionCodePath(positionCodePath) + .ctnrTyp("1") .priority(dto.getPriority()) .taskCode(dto.getInstruction_code()) .build(); @@ -975,7 +977,7 @@ public class InstructionServiceImpl extends CommonServiceImpl impleme instdto.setNext_point_code2(next_point_code2); instdto.setAgv_system_type(agv_system_type); instdto.setAgv_inst_type(CommonFinalParam.ONE); - instructionservice.create2(instdto); + instructionservice.create(instdto); acsTask.setTask_status(CommonFinalParam.ONE); this.update(acsTask); diff --git a/acs/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml b/acs/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml index 15307fb..7d425b9 100644 --- a/acs/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml +++ b/acs/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml @@ -78,90 +78,122 @@ https://juejin.cn/post/6844903775631572999 - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - + - + - - + + - - + + - - + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +