From 1427a3689db190b95858fc9621764a11c04ee5f9 Mon Sep 17 00:00:00 2001 From: psh Date: Fri, 20 Oct 2023 17:46:26 +0800 Subject: [PATCH 1/8] =?UTF-8?q?NDC=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/acs/agv/server/NDCAgvService.java | 2 +- .../agv/server/impl/NDCAgvServiceImpl.java | 22 +++++++++--- .../run/OneNDCSocketConnectionAutoRun.java | 8 ++--- .../agv/ndcone/AgvNdcOneDeviceDriver.java | 30 +++++++++------- .../StandardInspectSiteDeviceDriver.java | 1 + .../FeedBackTaskStatusRequest.java | 5 +++ .../ext/controller/AcsToWmsController.java | 18 ++++++++++ .../nl/wms/ext/service/AcsToWmsService.java | 5 ++- .../ext/service/impl/AcsToWmsServiceImpl.java | 35 +++++++++++++++++++ 9 files changed, 103 insertions(+), 23 deletions(-) diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/NDCAgvService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/NDCAgvService.java index e29dfcf..d1c9d24 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/NDCAgvService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/NDCAgvService.java @@ -29,7 +29,7 @@ public interface NDCAgvService { */ public void sendAgvInstToNDC(String agv_system_type,Instruction inst) throws Exception; - public byte[] sendAgvOneModeInst(int phase, int index,int result); + public byte[] sendAgvOneModeInst(int phase, int index,int result,int startPoint,int nextPoint,int startHigh,int nextHigh); public byte[] sendAgvTwoModeInst(int phase, int index,int result); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java index c4ce0e5..c307495 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java @@ -125,23 +125,35 @@ public class NDCAgvServiceImpl implements NDCAgvService { } @Override - public byte[] sendAgvOneModeInst(int phase, int index, int result) { + public byte[] sendAgvOneModeInst(int phase, int index, int result,int startPoint,int nextPoint,int startHigh,int nextHigh) { if (phase < 0 || index < 0) return null; byte indexhigh = (byte) IntToHexHigh(index); byte indexlow = (byte) IntToHexLow(index); byte phasehigh = (byte) IntToHexHigh(phase); byte phaselow = (byte) IntToHexLow(phase); + byte startPointHigh =(byte) IntToHexHigh(startPoint); + byte startPointLow =(byte) IntToHexLow(startPoint); + byte nextPointHigh =(byte) IntToHexHigh(nextPoint); + byte nextPointLow =(byte) IntToHexLow(nextPoint); + byte startHighHigh =(byte) IntToHexHigh(startHigh); + byte startHighLow =(byte) IntToHexLow(startHigh); + byte nextHighHigh =(byte) IntToHexHigh(nextHigh); + byte nextHighLow =(byte) IntToHexLow(nextHigh); byte[] b = new byte[]{(byte) 0X87, (byte) 0XCD, (byte) 0X00, (byte) 0X08, - (byte) 0X00, (byte) 0X0A, + (byte) 0X00, (byte) 0X12, (byte) 0X00, (byte) 0X01, (byte) 0X00, (byte) 0X6D, - (byte) 0X00, (byte) 0X06, + (byte) 0X00, (byte) 0X0E, (byte) indexhigh, (byte) indexlow, - (byte) 0X01, (byte) 0X12, - (byte) phasehigh, (byte) phaselow + (byte) 0X01, (byte) 0X14, + (byte) phasehigh, (byte) phaselow, + (byte) startPointHigh, (byte) startPointLow, + (byte) nextPointHigh, (byte) nextPointLow, + (byte) startHighHigh, (byte) startHighLow, + (byte) nextHighHigh, (byte) nextHighLow }; 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 3149f00..fc9b314 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 @@ -158,7 +158,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { inst.setSend_status("1"); instructionService.update(inst); } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); } //任务完毕 //(无车id及状态) @@ -168,13 +168,13 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { } else { log.warn("指令号:{},未反馈wms任务完成,因为agv上报指令号查询指令为空!"); } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); log.info("指令号:{},已反馈agv任务完成!"); } //请求删除任务 //(需要WCS反馈) else if (phase == 0x30) { - data = NDCAgvService.sendAgvOneModeInst(0x8F, index, 0); + data = NDCAgvService.sendAgvOneModeInst(0x8F, index, 0,0,0,0,0); } //任务删除确认 //(需要WCS反馈) @@ -185,7 +185,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { instructionService.cancelNOSendAgv(inst.getInstruction_id()); } } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); } else { //上报异常信息 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 937e61c..a24cda7 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 @@ -111,7 +111,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic if (arr[18] * 256 + arr[19] == 0) { } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); } //普通站点 @@ -179,7 +179,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { JSONObject resp = JSONObject.parseObject(httpResponse.body()); if (resp.getInteger("status") == 200) { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); log.info("指令号:{},acs请求wms取货申请成功,wms允许agv申请取货,已反馈agv允许取货", inst.getInstruction_code()); } else { log.warn("指令号:{},acs请求wms取货申请成功,wms不允许agv申请取货,未反馈agv允许取货", inst.getInstruction_code()); @@ -188,8 +188,11 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic log.warn("指令号:{},acs请求wms取货申请失败,连接被拒绝,未反馈agv允许取货", inst.getInstruction_code()); } } else { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); } + //到达取货等待点 + //(需要WCS反馈) + } else if (phase == 0x04) { //取货完毕 //(需要WCS反馈) } else if (phase == 0x05) { @@ -240,7 +243,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { JSONObject resp = JSONObject.parseObject(httpResponse.body()); if (resp.getInteger("status") == 200) { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); log.info("指令号:{},acs反馈wms取货完成成功,wms允许agv取货完成,已反馈agv取货完成", inst.getInstruction_code()); } else { log.warn("指令号:{},acs反馈wms取货完成成功,wms不允许agv取货完成,未反馈agv取货完成", inst.getInstruction_code()); @@ -249,8 +252,11 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic log.warn("指令号:{},acs反馈wms取货完成失败,连接被拒绝,未反馈agv取货完成", inst.getInstruction_code()); } } else { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); } + //到达放货等待点 + //(需要WCS反馈) + } else if (phase == 0x06) { //到达放货点 //(需要WCS反馈) } else if (phase == 0x07) { @@ -297,7 +303,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { JSONObject resp = JSONObject.parseObject(httpResponse.body()); if (resp.getInteger("status") == 200) { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); log.info("指令号:{},acs请求wms放货申请成功,wms允许agv申请放货,已反馈agv允许放货", inst.getInstruction_code()); } else { log.warn("指令号:{},acs请求wms放货申请成功,wms不允许agv申请放货,未反馈agv允许放货", inst.getInstruction_code()); @@ -306,7 +312,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic log.warn("指令号:{},acs请求wms放货申请失败,连接被拒绝,未反馈agv允许放货", inst.getInstruction_code()); } } else { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); } //放货完毕 //(需要WCS反馈) @@ -353,13 +359,13 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic req.add(map); HttpResponse httpResponse = acsToWmsService.feedAgvTaskStatus(req); if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); log.info("指令号:{},acs请求wms放货申请成功,wms允许agv申请放货,已反馈agv允许放货", inst.getInstruction_code()); } else { log.warn("指令号:{},acs请求wms放货申请失败,连接被拒绝,未反馈agv允许放货", inst.getInstruction_code()); } } else { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); } } //到达位置点 @@ -368,13 +374,13 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic //1、根据货位id找到对应三工位设备,赋给agv属性地址对应的满料位设备 agvaddr = arr[18] * 256 + arr[19]; agvaddr_copy = agvaddr; - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); } else if (phase == 0x50) {//进入交通灯区域 - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); } else if (phase == 0x51) {//离开交通灯区域 - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); } if (!ObjectUtil.isEmpty(data)) { diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java index 11884d3..deb62ea 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java @@ -442,6 +442,7 @@ public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imp this.time = date; FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); request.setDevice_code(devicecode); + request.setMaterial_type(String.valueOf(material_type)); request.setVehicle_code(String.valueOf(barcode)); if (devicecode.startsWith("TBX")&&type==5) { //满架下料 diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/feedBackTaskStatus/FeedBackTaskStatusRequest.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/feedBackTaskStatus/FeedBackTaskStatusRequest.java index eb3267b..bd0dfd0 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/feedBackTaskStatus/FeedBackTaskStatusRequest.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/feedBackTaskStatus/FeedBackTaskStatusRequest.java @@ -41,5 +41,10 @@ public class FeedBackTaskStatusRequest extends BaseRequest { */ private String action; + /** + * 1-正极板;2-负极板;3-边负极板 + */ + private String material_type; + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java index d23863c..3e04561 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java @@ -56,6 +56,15 @@ public class AcsToWmsController { return new ResponseEntity<>(acsToWmsService.status(param), HttpStatus.OK); } + @PostMapping("/feedbackState") + @Log("ACS系统反馈AGV取放货状态") + @ApiOperation("ACS系统反馈AGV取放货状态") + //@SaCheckPermission("@el.check('schBaseTask:add')") + @SaIgnore + public ResponseEntity feedbackState(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.feedbackState(param), HttpStatus.OK); + } + @PostMapping("/notify") @Log("acs通知wms") @ApiOperation("acs通知wms") @@ -64,4 +73,13 @@ public class AcsToWmsController { public ResponseEntity notify(@RequestBody JSONObject param) { return new ResponseEntity<>(acsToWmsService.notify(param), HttpStatus.OK); } + +// @PostMapping("/notify") +// @Log("acs通知wms") +// @ApiOperation("acs通知wms") +// //@SaCheckPermission("@el.check('schBaseTask:add')") +// @SaIgnore +// public ResponseEntity notify(@RequestBody JSONObject param) { +// return new ResponseEntity<>(acsToWmsService.notify(param), HttpStatus.OK); +// } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java index 6b49d06..cc74c00 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java @@ -15,7 +15,10 @@ public interface AcsToWmsService { /** 任务反馈 */ BaseResponse status(JSONObject param); - /** 任务反馈 */ + /** 任务阶段反馈最新点位 */ + BaseResponse feedbackState(JSONObject param); + + /** acs通知wms */ BaseResponse notify(JSONObject param); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java index e909a03..00fa2f6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java @@ -179,4 +179,39 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return BaseResponse.responseOk(requestNo, "反馈成功!"); } + /** + * 任务阶段反馈最新点位 + * todo + * */ + + @Override + public BaseResponse feedbackState(JSONObject param) { + String requestNo = param.getString("requestNo"); + String requestMethodCode = param.getString("request_medthod_code"); // 获取请求方法名 + String requestMethodName = param.getString("request_medthod_name"); + BaseResponse result = BaseResponse.build(requestNo); + String device_code = param.getString("device_code"); + param.put("config_code",requestMethodCode); + try { + if(ObjectUtil.isEmpty(requestMethodCode)){ + throw new BadRequestException("任务类型不正确!requestMethodCode:"+requestMethodName+",device_code:"+device_code); + } + AbstractTask task = taskFactory.getTask(requestMethodCode); + // 执行创建任务 + task.apply(param); + } catch (Exception e) { + String message = ObjectUtil.isEmpty(e.getMessage()) + ? ((InvocationTargetException) e).getTargetException().getMessage() + : e.getMessage(); + log.error("ACS请求LMS出现错误: {}", message); + result.setCode(HttpStatus.HTTP_BAD_REQUEST); + result.setMessage(message); + result.setRequestNo(requestNo); + // 消息通知 + noticeService.createNotice("异常信息:" + message, "acsApply: " + param.getString("request_medthod_code"), + NoticeTypeEnum.EXCEPTION.getCode()); + } + return result; + } + } From c173e19565049a483dcee587161ca7cf7de69cd1 Mon Sep 17 00:00:00 2001 From: psh Date: Tue, 24 Oct 2023 14:13:08 +0800 Subject: [PATCH 2/8] =?UTF-8?q?NDC=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agv/ndcone/AgvNdcOneDeviceDriver.java | 107 +++--------------- .../StandardOrdinarySiteDeviceDriver.java | 8 +- .../org/nl/acs/ext/wms/data/BaseRequest.java | 9 ++ .../acs/ext/wms/service/AcsToWmsService.java | 5 + .../wms/service/impl/AcsToWmsServiceImpl.java | 14 +++ .../service/impl/InstructionServiceImpl.java | 12 +- .../ext/service/impl/AcsToWmsServiceImpl.java | 15 ++- .../sch/point/service/dao/SchBasePoint.java | 6 + .../nl/wms/sch/task_manage/AbstractTask.java | 14 +++ .../sch/task_manage/task/tasks/BPSLTask.java | 17 +++ .../task_manage/task/tasks/KGHJRKTask.java | 17 +++ .../sch/task_manage/task/tasks/MJXLTask.java | 18 +++ .../task_manage/task/tasks/TBXBKJTask.java | 17 +++ .../sch/task_manage/task/tasks/XSCKTask.java | 17 +++ .../task_manage/task/tasks/ZJBZKDDTask.java | 17 +++ .../task_manage/task/tasks/ghs/GHSFMTask.java | 17 +++ .../task_manage/task/tasks/ghs/GHSQHTask.java | 17 +++ 17 files changed, 216 insertions(+), 111 deletions(-) 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 a24cda7..772e776 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 @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.basedriver.agv.ndcone; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpResponse; @@ -17,6 +18,7 @@ import org.nl.acs.device_driver.basedriver.siemens_conveyor.SiemensConveyorDevic import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_storage.StandardStorageDeviceDriver; import org.nl.acs.device_driver.driver.AbstractDeviceDriver; +import org.nl.acs.ext.wms.data.BaseRequest; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.instruction.domain.Instruction; @@ -26,6 +28,7 @@ import org.nl.acs.log.LokiLog; import org.nl.acs.log.LokiLogType; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.task.domain.Task; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.impl.TaskServiceImpl; import org.nl.system.service.param.ISysParamService; @@ -165,31 +168,13 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic logServer.deviceExecuteLog(this.device_code, "", "", "未找到关联编号对应的指令" + ikey); return; } - - Object reqWms = device.getExtraValue().get("reqWms"); - if (ObjectUtil.isNotEmpty(reqWms) && reqWms.toString().equals("true")) { - JSONArray req = new JSONArray(); - JSONObject map = new JSONObject(); - map.put("vehicle_code", inst.getVehicle_code()); - map.put("status", "1"); - map.put("device_code", inst.getStart_point_code()); - map.put("task_code", inst.getTask_code()); - req.add(map); - HttpResponse httpResponse = acsToWmsService.feedAgvTaskStatus(req); - if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { - JSONObject resp = JSONObject.parseObject(httpResponse.body()); - if (resp.getInteger("status") == 200) { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); - log.info("指令号:{},acs请求wms取货申请成功,wms允许agv申请取货,已反馈agv允许取货", inst.getInstruction_code()); - } else { - log.warn("指令号:{},acs请求wms取货申请成功,wms不允许agv申请取货,未反馈agv允许取货", inst.getInstruction_code()); - } - } else { - log.warn("指令号:{},acs请求wms取货申请失败,连接被拒绝,未反馈agv允许取货", inst.getInstruction_code()); - } - } else { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); - } + Task task =taskService.getById(inst.getTask_id()); + BaseRequest request=new BaseRequest(); + request.setRequestNo(IdUtil.simpleUUID()); + request.setTaskId(task.getExt_task_id()); + request.setPhase(String.valueOf(phase)); + acsToWmsService.feedbackState(request); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); //到达取货等待点 //(需要WCS反馈) } else if (phase == 0x04) { @@ -229,31 +214,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic logServer.deviceExecuteLog(this.device_code, "", "", "未找到关联编号对应的指令" + ikey); return; } - - Object reqWms = device.getExtraValue().get("reqWms"); - if (ObjectUtil.isNotEmpty(reqWms) && reqWms.toString().equals("true")) { - JSONArray req = new JSONArray(); - JSONObject map = new JSONObject(); - map.put("vehicle_code", inst.getVehicle_code()); - map.put("status", "2"); - map.put("device_code", inst.getStart_point_code()); - map.put("task_code", inst.getTask_code()); - req.add(map); - HttpResponse httpResponse = acsToWmsService.feedAgvTaskStatus(req); - if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { - JSONObject resp = JSONObject.parseObject(httpResponse.body()); - if (resp.getInteger("status") == 200) { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); - log.info("指令号:{},acs反馈wms取货完成成功,wms允许agv取货完成,已反馈agv取货完成", inst.getInstruction_code()); - } else { - log.warn("指令号:{},acs反馈wms取货完成成功,wms不允许agv取货完成,未反馈agv取货完成", inst.getInstruction_code()); - } - } else { - log.warn("指令号:{},acs反馈wms取货完成失败,连接被拒绝,未反馈agv取货完成", inst.getInstruction_code()); - } - } else { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); - } + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); //到达放货等待点 //(需要WCS反馈) } else if (phase == 0x06) { @@ -290,30 +251,8 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic log.info("未找到关联编号{}对应的指令", ikey); return; } - Object reqWms = device.getExtraValue().get("reqWms"); - if (ObjectUtil.isNotEmpty(reqWms) && reqWms.toString().equals("true")) { - JSONArray req = new JSONArray(); - JSONObject map = new JSONObject(); - map.put("vehicle_code", inst.getVehicle_code()); - map.put("status", "3"); - map.put("device_code", inst.getNext_point_code()); - map.put("task_code", inst.getTask_code()); - req.add(map); - HttpResponse httpResponse = acsToWmsService.feedAgvTaskStatus(req); - if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { - JSONObject resp = JSONObject.parseObject(httpResponse.body()); - if (resp.getInteger("status") == 200) { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); - log.info("指令号:{},acs请求wms放货申请成功,wms允许agv申请放货,已反馈agv允许放货", inst.getInstruction_code()); - } else { - log.warn("指令号:{},acs请求wms放货申请成功,wms不允许agv申请放货,未反馈agv允许放货", inst.getInstruction_code()); - } - } else { - log.warn("指令号:{},acs请求wms放货申请失败,连接被拒绝,未反馈agv允许放货", inst.getInstruction_code()); - } - } else { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); - } + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); + //放货完毕 //(需要WCS反馈) } else if (phase == 0x09) { @@ -348,25 +287,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic log.info("未找到编号{}对应的指令", ikey); return; } - Object reqWms = device.getExtraValue().get("reqWms"); - if (ObjectUtil.isNotEmpty(reqWms) && reqWms.toString().equals("true")) { - JSONArray req = new JSONArray(); - JSONObject map = new JSONObject(); - map.put("vehicle_code", inst.getVehicle_code()); - map.put("status", "4"); - map.put("device_code", inst.getNext_point_code()); - map.put("task_code", inst.getTask_code()); - req.add(map); - HttpResponse httpResponse = acsToWmsService.feedAgvTaskStatus(req); - if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); - log.info("指令号:{},acs请求wms放货申请成功,wms允许agv申请放货,已反馈agv允许放货", inst.getInstruction_code()); - } else { - log.warn("指令号:{},acs请求wms放货申请失败,连接被拒绝,未反馈agv允许放货", inst.getInstruction_code()); - } - } else { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); - } + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); } //到达位置点 //(需要WCS反馈) diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_ordinary_site/StandardOrdinarySiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_ordinary_site/StandardOrdinarySiteDeviceDriver.java index 5935872..9b93ce4 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_ordinary_site/StandardOrdinarySiteDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_ordinary_site/StandardOrdinarySiteDeviceDriver.java @@ -126,7 +126,7 @@ public class StandardOrdinarySiteDeviceDriver extends AbstractDeviceDriver imple if (ObjectUtil.isNotEmpty(inst)) { inst.setExecute_status("1"); instructionService.update(inst); - byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); + byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0,0,0,0,0); agvphase = 0; index = 0; inst = null; @@ -141,7 +141,7 @@ public class StandardOrdinarySiteDeviceDriver extends AbstractDeviceDriver imple if (ObjectUtil.isNotEmpty(inst)) { inst.setExecute_status("2"); instructionService.update(inst); - byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); + byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0,0,0,0,0); // OneNDCSocketConnectionAutoRun.write(data); agvphase = 0; index = 0; @@ -157,7 +157,7 @@ public class StandardOrdinarySiteDeviceDriver extends AbstractDeviceDriver imple if (ObjectUtil.isNotEmpty(inst)) { inst.setExecute_status("5"); instructionService.update(inst); - byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); + byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0,0,0,0,0); // OneNDCSocketConnectionAutoRun.write(data); agvphase = 0; index = 0; @@ -172,7 +172,7 @@ public class StandardOrdinarySiteDeviceDriver extends AbstractDeviceDriver imple if (ObjectUtil.isNotEmpty(inst)) { inst.setExecute_status("6"); instructionService.update(inst); - byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); + byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0,0,0,0,0); // OneNDCSocketConnectionAutoRun.write(data); agvphase = 0; index = 0; diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java index a35e7dc..093078e 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java @@ -63,6 +63,15 @@ public class BaseRequest { */ private String state; + /** + * 任务号 + */ + private String taskId; + + /** + * 阶段号 + */ + private String phase; } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java index 4b00ea8..e3af8f8 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java @@ -127,4 +127,9 @@ public interface AcsToWmsService { * ACS向WMS反馈任务状态 */ String notify(BaseRequest request); + + /** + * 任务阶段反馈最新点位 + */ + String feedbackState(BaseRequest request); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java index d18663b..e473525 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java @@ -592,4 +592,18 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { MDC.remove(log_file_type); } } + + @Override + public String feedbackState(BaseRequest requestParam) { + try { + MDC.put(log_file_type, log_type); + String api = addressService.findByCode("feedbackState").getMethods_url(); + log.info("feedbackState-----输入参数{}", JSON.toJSONString(requestParam, SerializerFeature.DisableCircularReferenceDetect)); + String result = LmsUtil.notifyAcs(api, requestParam); + log.info("feedbackState-----输出参数{}", result); + return result; + } finally { + MDC.remove(log_file_type); + } + } } 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 450fb52..2d39114 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 @@ -384,13 +384,13 @@ public class InstructionServiceImpl extends CommonServiceImpl Date: Tue, 24 Oct 2023 18:02:47 +0800 Subject: [PATCH 3/8] =?UTF-8?q?ACS=E8=AF=B7=E6=B1=82LMS=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=82=B9=E4=BD=8D=E9=AB=98=E5=BA=A6=E6=8E=A5=E5=8F=A3=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agv/ndcone/AgvNdcOneDeviceDriver.java | 56 ++++++++++++++++--- .../org/nl/acs/ext/wms/data/BaseRequest.java | 5 -- .../org/nl/acs/task/service/dto/TaskDto.java | 12 ++++ .../ext/service/impl/AcsToWmsServiceImpl.java | 11 +++- .../nl/wms/sch/task_manage/AbstractTask.java | 7 ++- .../sch/task_manage/task/tasks/BPSLTask.java | 22 +++----- .../task_manage/task/tasks/KGHJRKTask.java | 17 +----- .../sch/task_manage/task/tasks/MJXLTask.java | 17 +----- .../task_manage/task/tasks/TBXBKJTask.java | 17 +----- .../sch/task_manage/task/tasks/XSCKTask.java | 17 +----- .../task_manage/task/tasks/ZJBZKDDTask.java | 17 +----- .../task_manage/task/tasks/ghs/GHSFMTask.java | 18 ++---- .../task_manage/task/tasks/ghs/GHSQHTask.java | 17 +----- 13 files changed, 102 insertions(+), 131 deletions(-) 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 772e776..c2f0de0 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 @@ -30,6 +30,7 @@ import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.task.domain.Task; import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; import org.nl.acs.task.service.impl.TaskServiceImpl; import org.nl.system.service.param.ISysParamService; import org.nl.config.SpringContextHolder; @@ -124,6 +125,12 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic // SiemensConveyorDeviceDriver siemensConveyorDeviceDriver; + TaskDto task =taskService.findById(inst.getTask_id()); + int start_height= ObjectUtil.isNotEmpty(task.getStart_height())?Integer.parseInt(task.getStart_height()):0; + int next_height= ObjectUtil.isNotEmpty(task.getNext_height())?Integer.parseInt(task.getNext_height()):0; + String start_point=task.getStart_point_code(); + String next_point=task.getNext_point_code(); + //分配 车id //(不需要WCS反馈) if (phase == 0x02) { @@ -168,16 +175,12 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic logServer.deviceExecuteLog(this.device_code, "", "", "未找到关联编号对应的指令" + ikey); return; } - Task task =taskService.getById(inst.getTask_id()); - BaseRequest request=new BaseRequest(); - request.setRequestNo(IdUtil.simpleUUID()); - request.setTaskId(task.getExt_task_id()); - request.setPhase(String.valueOf(phase)); - acsToWmsService.feedbackState(request); - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); + + data = getData(data, index, inst, task); //到达取货等待点 //(需要WCS反馈) } else if (phase == 0x04) { + data = getData(data, index, inst, task); //取货完毕 //(需要WCS反馈) } else if (phase == 0x05) { @@ -214,7 +217,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic logServer.deviceExecuteLog(this.device_code, "", "", "未找到关联编号对应的指令" + ikey); return; } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); + data = getData(data, index, inst, task); //到达放货等待点 //(需要WCS反馈) } else if (phase == 0x06) { @@ -251,7 +254,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic log.info("未找到关联编号{}对应的指令", ikey); return; } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); + data = getData(data, index, inst, task); //放货完毕 //(需要WCS反馈) @@ -310,4 +313,39 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic } } + private byte[] getData(byte[] data, int index, Instruction inst, TaskDto task) { + String next_point; + String start_point; + int next_height; + int start_height; + if(!"1".equals(task.getTask_type())&&!"2".equals(task.getTask_type())) { + BaseRequest request = new BaseRequest(); + request.setRequestNo(IdUtil.simpleUUID()); + request.setTaskId(task.getExt_task_id()); + JSONObject resp = JSONObject.parseObject(acsToWmsService.feedbackState(request)); + if("200".equals(resp.getString("code"))){ + start_height=(resp.getJSONObject("parameters").getInteger("start_height")-1)*1000; + next_height=(resp.getJSONObject("parameters").getInteger("next_height")-1)*1000; + start_point=resp.getJSONObject("parameters").getString("start_point"); + next_point=resp.getJSONObject("parameters").getString("next_point"); + task.setStart_height(String.valueOf(start_height)); + task.setNext_height(String.valueOf(next_height)); + task.setStart_point_code(start_point); + task.setStart_device_code(start_point); + task.setNext_point_code(next_point); + task.setNext_device_code(next_point); + int start_address=deviceService.queryAddressBydeviceCode(start_point); + int next_address=deviceService.queryAddressBydeviceCode(next_point); + taskService.update(task); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, start_address, next_address, start_height, next_height); + log.info("指令号:{},phase:{},acs请求wms申请成功", inst.getInstruction_code(),phase); + }else{ + log.info("指令号:{},phase:{},acs请求wms申请失败", inst.getInstruction_code(),phase); + } + }else { + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); + } + return data; + } + } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java index 093078e..8006730 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java @@ -68,10 +68,5 @@ public class BaseRequest { */ private String taskId; - /** - * 阶段号 - */ - private String phase; - } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/dto/TaskDto.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/dto/TaskDto.java index c80a62d..96c0712 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/dto/TaskDto.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/dto/TaskDto.java @@ -290,4 +290,16 @@ public class TaskDto implements Serializable { * 烘箱温度 */ private String temperature; + + /** + * 起点高度 + */ + private String start_height; + + /** + * 终点高度 + */ + private String next_height; + + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java index 27aef1d..e9329a0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java @@ -39,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -196,8 +197,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } AbstractTask task = taskFactory.getTask(schBaseTask.getConfig_code()); // 执行创建任务 - String resultCode=task.feedbackState(param); - result.getParameters().put("result",resultCode); + task.feedbackState(param,schBaseTask,result); + Map map=new HashMap<>(); + map.put("start_point",schBaseTask.getPoint_code1()); + map.put("next_point",schBaseTask.getPoint_code2()); + //todo + map.put("start_height","0"); + map.put("next_height","0"); + result.setParameters(map); } catch (Exception e) { String message = ObjectUtil.isEmpty(e.getMessage()) ? ((InvocationTargetException) e).getTargetException().getMessage() diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java index da25fe7..2bebcc8 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.common.exception.BadRequestException; import org.nl.wms.database.material.service.IMdBaseMaterialService; import org.nl.wms.database.material.service.dao.MdBaseMaterial; +import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.point.service.ISchBasePointService; @@ -235,10 +236,10 @@ public abstract class AbstractTask { * @param param * @throws BadRequestException */ - public String feedbackState(JSONObject param) throws BadRequestException { - return this.feedbackTaskState(param); + public void feedbackState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) throws BadRequestException { + this.feedbackTaskState(param,schBaseTask,result); } - protected abstract String feedbackTaskState(JSONObject param); + protected abstract void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask,BaseResponse result); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java index 4dd4c6f..996938d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java @@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; import org.nl.wms.ext.service.WmsToAcsService; +import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -216,19 +217,12 @@ public class BPSLTask extends AbstractTask { } @Override - protected String feedbackTaskState(JSONObject param) { - int phase=param.getInteger("phase"); - String result="0"; - switch (phase){ - case 3: - break; - case 4: - break; - case 6: - break; - case 7: - break; - } - return result; + protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { + //todo 重算最优点 + JSONObject jsonObject = JSONObject.parseObject(schBaseTask.getExt_group_data()); + SchBasePoint point = this.findNextPoint(jsonObject); + // 设置起点并修改创建成功状态 + schBaseTask.setPoint_code1(point.getPoint_code()); + taskService.update(schBaseTask); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java index 419bc67..9b24457 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java @@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; import org.nl.wms.ext.service.WmsToAcsService; +import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -177,19 +178,7 @@ public class KGHJRKTask extends AbstractTask { } @Override - protected String feedbackTaskState(JSONObject param) { - int phase=param.getInteger("phase"); - String result="0"; - switch (phase){ - case 3: - break; - case 4: - break; - case 6: - break; - case 7: - break; - } - return result; + protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { + //todo 重算最优点 } } \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java index cc804ea..e19e8c7 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java @@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; +import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -244,19 +245,7 @@ public class MJXLTask extends AbstractTask { } @Override - protected String feedbackTaskState(JSONObject param) { - int phase=param.getInteger("phase"); - String result="0"; - switch (phase){ - case 3: - break; - case 4: - break; - case 6: - break; - case 7: - break; - } - return result; + protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { + //todo 重算最优点 } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java index 294e590..0e4b895 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java @@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; import org.nl.wms.ext.service.WmsToAcsService; +import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -183,19 +184,7 @@ public class TBXBKJTask extends AbstractTask { } @Override - protected String feedbackTaskState(JSONObject param) { - int phase=param.getInteger("phase"); - String result="0"; - switch (phase){ - case 3: - break; - case 4: - break; - case 6: - break; - case 7: - break; - } - return result; + protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { + //todo 重算最优点 } } \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java index c9038e1..db71194 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java @@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; import org.nl.wms.ext.service.WmsToAcsService; +import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -228,19 +229,7 @@ public class XSCKTask extends AbstractTask { } @Override - protected String feedbackTaskState(JSONObject param) { - int phase=param.getInteger("phase"); - String result="0"; - switch (phase){ - case 3: - break; - case 4: - break; - case 6: - break; - case 7: - break; - } - return result; + protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { + //todo 重算最优点 } } \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java index 9907e57..c1306b5 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java @@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; import org.nl.wms.ext.service.WmsToAcsService; +import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -90,19 +91,7 @@ public class ZJBZKDDTask extends AbstractTask { } @Override - protected String feedbackTaskState(JSONObject param) { - int phase=param.getInteger("phase"); - String result="0"; - switch (phase){ - case 3: - break; - case 4: - break; - case 6: - break; - case 7: - break; - } - return result; + protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { + //todo 重算最优点 } } \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java index b6cef7e..a4b0663 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java @@ -11,6 +11,7 @@ import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; import org.nl.wms.database.material.service.dao.MdBaseMaterial; import org.nl.wms.ext.service.WmsToAcsService; +import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -280,20 +281,9 @@ public class GHSFMTask extends AbstractTask { this.updateStatus(task_code, TaskStatus.CANCELED); } + @Override - protected String feedbackTaskState(JSONObject param) { - int phase=param.getInteger("phase"); - String result="0"; - switch (phase){ - case 3: - break; - case 4: - break; - case 6: - break; - case 7: - break; - } - return result; + protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { + //todo 重算最优点 } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java index ea1a8a6..199e42c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java @@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; import org.nl.wms.ext.service.WmsToAcsService; +import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -294,19 +295,7 @@ public class GHSQHTask extends AbstractTask { } @Override - protected String feedbackTaskState(JSONObject param) { - int phase=param.getInteger("phase"); - String result="0"; - switch (phase){ - case 3: - break; - case 4: - break; - case 6: - break; - case 7: - break; - } - return result; + protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { + //todo 重算最优点 } } From 3c200588716459bb92de5c15c3e24019ec84ff1b Mon Sep 17 00:00:00 2001 From: psh Date: Wed, 25 Oct 2023 10:45:37 +0800 Subject: [PATCH 4/8] =?UTF-8?q?ACS=E8=AF=B7=E6=B1=82LMS=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=82=B9=E4=BD=8D=E9=AB=98=E5=BA=A6=E6=8E=A5=E5=8F=A3=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java | 6 +++--- .../org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java | 6 +++--- .../java/org/nl/wms/sch/task/service/dao/SchBaseTask.java | 6 ++++++ .../org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java | 2 +- 4 files changed, 13 insertions(+), 7 deletions(-) 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 c2f0de0..35cf45d 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 @@ -318,14 +318,14 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic String start_point; int next_height; int start_height; - if(!"1".equals(task.getTask_type())&&!"2".equals(task.getTask_type())) { + if(!"2".equals(task.getTask_type())) { BaseRequest request = new BaseRequest(); request.setRequestNo(IdUtil.simpleUUID()); request.setTaskId(task.getExt_task_id()); JSONObject resp = JSONObject.parseObject(acsToWmsService.feedbackState(request)); if("200".equals(resp.getString("code"))){ - start_height=(resp.getJSONObject("parameters").getInteger("start_height")-1)*1000; - next_height=(resp.getJSONObject("parameters").getInteger("next_height")-1)*1000; + start_height=resp.getJSONObject("parameters").getInteger("start_height"); + next_height=resp.getJSONObject("parameters").getInteger("next_height"); start_point=resp.getJSONObject("parameters").getString("start_point"); next_point=resp.getJSONObject("parameters").getString("next_point"); task.setStart_height(String.valueOf(start_height)); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java index e9329a0..ef6fd39 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java @@ -11,6 +11,7 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; +import org.nl.system.service.param.ISysParamService; import org.nl.wms.database.material.service.IMdBaseMaterialService; import org.nl.wms.database.material.service.dao.MdBaseMaterial; import org.nl.wms.ext.service.AcsToWmsService; @@ -201,9 +202,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { Map map=new HashMap<>(); map.put("start_point",schBaseTask.getPoint_code1()); map.put("next_point",schBaseTask.getPoint_code2()); - //todo - map.put("start_height","0"); - map.put("next_height","0"); + map.put("start_height",schBaseTask.getPoint_code1_height()); + map.put("next_height",schBaseTask.getPoint_code2_height()); result.setParameters(map); } catch (Exception e) { String message = ObjectUtil.isEmpty(e.getMessage()) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java index 635327f..3b33d43 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java @@ -120,4 +120,10 @@ public class SchBaseTask implements Serializable { @ApiModelProperty(value = "修改时间") private String update_time; + @ApiModelProperty(value = "点位1高度") + private String point_code1_height="0"; + + @ApiModelProperty(value = "点位2高度") + private String point_code2_height="0"; + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java index e19e8c7..e34a3f2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java @@ -246,6 +246,6 @@ public class MJXLTask extends AbstractTask { @Override protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { - //todo 重算最优点 + //无需重算,返回当前点位即可 } } From 470974d972b011605e12dce0274ea98fe96e7222 Mon Sep 17 00:00:00 2001 From: psh Date: Wed, 25 Oct 2023 18:05:54 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E4=B8=8B=E5=8F=91=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=9B=AE=E6=A0=87=E5=9C=B0=E7=82=B9=E5=85=88=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=B8=BA=E7=AD=89=E5=BE=85=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/wms/ext/service/impl/AcsToWmsServiceImpl.java | 1 + .../nl/wms/sch/task_manage/task/tasks/BPSLTask.java | 4 ++-- .../nl/wms/sch/task_manage/task/tasks/XSCKTask.java | 10 ++++++++-- .../sch/task_manage/task/tasks/ghs/GHSQHTask.java | 12 +++++++++++- lms/nladmin-ui/src/views/wms/sch/group/index.vue | 1 + 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java index ef6fd39..26ae64b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java @@ -199,6 +199,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { AbstractTask task = taskFactory.getTask(schBaseTask.getConfig_code()); // 执行创建任务 task.feedbackState(param,schBaseTask,result); + taskService.update(schBaseTask); Map map=new HashMap<>(); map.put("start_point",schBaseTask.getPoint_code1()); map.put("next_point",schBaseTask.getPoint_code2()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java index 996938d..27a20db 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java @@ -86,7 +86,8 @@ public class BPSLTask extends AbstractTask { continue; } // 设置起点并修改创建成功状态 - task.setPoint_code1(point.getPoint_code()); + // 取料先去等待点 + task.setPoint_code1(point.getStart_wait_point()); task.setTask_status(TaskStatus.CREATED.getCode()); task.setRemark(""); taskService.update(task); @@ -223,6 +224,5 @@ public class BPSLTask extends AbstractTask { SchBasePoint point = this.findNextPoint(jsonObject); // 设置起点并修改创建成功状态 schBaseTask.setPoint_code1(point.getPoint_code()); - taskService.update(schBaseTask); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java index db71194..d92d171 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java @@ -89,7 +89,8 @@ public class XSCKTask extends AbstractTask { continue; } // 设置起点并修改创建成功状态 - task.setPoint_code1(point.getPoint_code()); + // 取料先去等待点 + task.setPoint_code1(point.getStart_wait_point()); task.setTask_status(TaskStatus.CREATED.getCode()); task.setRemark(""); taskService.update(task); @@ -230,6 +231,11 @@ public class XSCKTask extends AbstractTask { @Override protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { - //todo 重算最优点 + // 重算最优点 + SchBasePoint nextPoint=pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, schBaseTask.getPoint_code2())); + SchBasePoint point = this.findNextPoint(nextPoint,JSONObject.parseObject(schBaseTask.getExt_group_data())); + // 设置起点并修改创建成功状态 + schBaseTask.setPoint_code1(point.getPoint_code()); } } \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java index 199e42c..2a549eb 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; @@ -98,7 +99,8 @@ public class GHSQHTask extends AbstractTask { log.info("未找到当前符合允许放货的缓存点,暂不生成任务Vehicle_type:{}",schBasePoint.getVehicle_type()); return; } - this.createTask(schBasePoint,nextPoint.getPoint_code()); + // 放料先去等待点 + this.createTask(schBasePoint,nextPoint.getNext_wait_point()); } @@ -294,8 +296,16 @@ public class GHSQHTask extends AbstractTask { this.updateStatus(task_code, TaskStatus.CANCELED); } + @SneakyThrows @Override protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { //todo 重算最优点 + SchBasePoint startPoint=pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, schBaseTask.getPoint_code1())); + SchBasePoint nextPoint=this.findNextPoint(startPoint); + if(ObjectUtil.isEmpty(nextPoint)){ + throw new Exception("当前起点"+schBaseTask.getPoint_code1()+"未找到合适的放货点位"); + } + schBaseTask.setPoint_code2(nextPoint.getPoint_code()); } } diff --git a/lms/nladmin-ui/src/views/wms/sch/group/index.vue b/lms/nladmin-ui/src/views/wms/sch/group/index.vue index 2b186a1..9d23a3b 100644 --- a/lms/nladmin-ui/src/views/wms/sch/group/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/group/index.vue @@ -253,6 +253,7 @@ + From e0b122ce8545feedb1c19a4538de2f934af48766 Mon Sep 17 00:00:00 2001 From: psh Date: Fri, 27 Oct 2023 15:20:25 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E4=B8=8B=E5=8F=91?= =?UTF-8?q?=E6=8C=87=E4=BB=A4=E3=80=81=E8=87=AA=E5=8A=A8=E9=87=8D=E8=BF=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agv/server/impl/NDCAgvServiceImpl.java | 2 +- .../run/OneNDCSocketConnectionAutoRun.java | 20 +- .../standard_inspect_site/ItemProtocol.java | 9 +- .../StandardInspectSiteDeviceDriver.java | 24 +- .../driver/AbstractOpcDeviceDriver.java | 105 ++++-- .../rest/InstructionController.java | 4 + .../service/impl/InstructionServiceImpl.java | 19 +- .../src/main/java/org/nl/acs/opc/JsonUtl.java | 125 +++++++ .../org/nl/acs/task/rest/TaskController.java | 4 + .../org/nl/quartz/task/AutoCreateInst.java | 341 ++++++++++++++++++ .../nl/quartz/task/NdcAutoReconnection.java | 30 ++ 11 files changed, 628 insertions(+), 55 deletions(-) create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/JsonUtl.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/NdcAutoReconnection.java diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java index c307495..ea08887 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java @@ -75,7 +75,7 @@ public class NDCAgvServiceImpl implements NDCAgvService { public void sendAgvInstToNDC(String agv_system_type, Instruction inst) { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), "1")) { String instcode = inst.getInstruction_code(); - int type = Integer.parseInt(inst.getAgv_inst_type()); + int type = Integer.parseInt(inst.getInstruction_type()); int priority = Integer.parseInt(inst.getPriority()) + 128; DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class); 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 fc9b314..1c6c92b 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 @@ -158,7 +158,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { inst.setSend_status("1"); instructionService.update(inst); } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); } //任务完毕 //(无车id及状态) @@ -168,13 +168,13 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { } else { log.warn("指令号:{},未反馈wms任务完成,因为agv上报指令号查询指令为空!"); } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); log.info("指令号:{},已反馈agv任务完成!"); } //请求删除任务 //(需要WCS反馈) else if (phase == 0x30) { - data = NDCAgvService.sendAgvOneModeInst(0x8F, index, 0,0,0,0,0); + data = NDCAgvService.sendAgvOneModeInst(0x8F, index, 0, 0, 0, 0, 0); } //任务删除确认 //(需要WCS反馈) @@ -185,7 +185,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { instructionService.cancelNOSendAgv(inst.getInstruction_id()); } } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0,0,0,0,0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); } else { //上报异常信息 @@ -255,7 +255,17 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { dos.flush(); } catch (IOException e) { // TODO Auto-generated catch block - e.printStackTrace(); + try { + Thread.sleep(5000L); + log.info("再次下发agv数据:" + Bytes2HexString(b)); + System.out.println("再次下发agv数据:" + Bytes2HexString(b)); + dos.write(b); + dos.flush(); + } catch (Exception e1) { + e1.printStackTrace(); + } + } } } + diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/ItemProtocol.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/ItemProtocol.java index 7b9fc6f..592ca4a 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/ItemProtocol.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/ItemProtocol.java @@ -16,7 +16,6 @@ public class ItemProtocol { public static String item_move = "move"; public static String item_action = "action"; public static String item_error = "error"; - public static String item_task = "task"; public static String item_to_command = "to_command"; public static String item_to_target = "to_target"; public static String item_to_task = "to_task"; @@ -50,9 +49,6 @@ public class ItemProtocol { return this.getOpcIntegerValue(item_error); } - public int getTask() { - return this.getOpcIntegerValue(item_task); - } public int getMaterialType() { return this.getOpcIntegerValue(item_material_type); @@ -99,8 +95,7 @@ public class ItemProtocol { list.add(new ItemDto(item_mode, "工作状态", "DB600.B2", Boolean.valueOf(true))); list.add(new ItemDto(item_move, "光电开关信号", "DB600.B3")); list.add(new ItemDto(item_action, "取放信号", "DB600.B4")); - list.add(new ItemDto(item_task, "任务号", "DB600.D6")); - list.add(new ItemDto(item_material_type, "任务号", "DB600.D6")); + list.add(new ItemDto(item_material_type, "物料类型", "DB600.D6")); list.add(new ItemDto(item_error, "报警信号", "DB600.B7")); list.add(new ItemDto(item_barcode, "条码", "DB600.D8")); return list; @@ -109,8 +104,6 @@ public class ItemProtocol { public static List getWriteableItemDtos() { ArrayList list = new ArrayList(); list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); - list.add(new ItemDto(item_to_target, "目标站", "DB601.W4")); - list.add(new ItemDto(item_to_task, "任务号", "DB601.D8")); return list; } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java index deb62ea..a7b4de8 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java @@ -146,16 +146,19 @@ public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imp public void execute() { String message = null; try { - String device_code = this.getDeviceCode(); + devicecode = this.getDeviceCode(); mode = this.itemProtocol.getMode(); error = this.itemProtocol.getError(); move = this.itemProtocol.getMove(); - task = this.itemProtocol.getTask(); hasGoods = this.itemProtocol.getMove(); action = this.itemProtocol.getAction(); material_type = this.itemProtocol.getMaterialType(); + barcode=this.itemProtocol.getBarcode(); if (mode != last_mode) { this.setRequireSucess(false); + if(mode==2){ + this.writing(0); + } } if (move != last_move) { } @@ -196,25 +199,25 @@ public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imp break; case 4: //叫料 - if (move==0){ + if (move==0 && !requireSucess){ apply(4); } break; case 5: //满料出库 - if(move==1){ + if(move==1 && !requireSucess){ apply(5); } break; case 6: //申请空盘 - if (move==0){ + if (move==0 && !requireSucess){ apply(6); } break; case 7: //空托盘出库 - if(move==1){ + if(move==1 && !requireSucess){ apply(7); } break; @@ -238,6 +241,7 @@ public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imp last_move = move; last_task = task; last_material_type = material_type; + last_barcode=barcode; } @@ -444,7 +448,7 @@ public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imp request.setDevice_code(devicecode); request.setMaterial_type(String.valueOf(material_type)); request.setVehicle_code(String.valueOf(barcode)); - if (devicecode.startsWith("TBX")&&type==5) { + if (devicecode.startsWith("TBX")&&type==5&&barcode>0) { //满架下料 request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode()); request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName()); @@ -456,15 +460,15 @@ public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imp //空托盘出库,包片机和销售出库空位都可以 request.setRequest_medthod_code(RequestMethodEnum.apply_kghjrk.getCode()); request.setRequest_medthod_name(RequestMethodEnum.apply_kghjrk.getName()); - }else if(devicecode.startsWith("BP")){ + }else if(devicecode.startsWith("BP")&&material_type>0){ request.setRequest_medthod_code(RequestMethodEnum.apply_bpsl.getCode()); request.setRequest_medthod_name(RequestMethodEnum.apply_bpsl.getName()); } String resp = acsToWmsService.applyTask(request); JSONObject res_jo = JSONObject.parseObject(resp); - if (StrUtil.equals(res_jo.getString("status"), "200")) { + if (StrUtil.equals(res_jo.getString("code"), "200")) { this.writing(type); - this.setSucess(true); + this.setRequireSucess(true); log.info("acs申请任务", this.devicecode, "满盅入库任务申请成功!"); }else{ this.writing(99); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/driver/AbstractOpcDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/driver/AbstractOpcDeviceDriver.java index 9e58407..a864698 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/driver/AbstractOpcDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/driver/AbstractOpcDeviceDriver.java @@ -1,37 +1,96 @@ package org.nl.acs.device_driver.driver; -import org.nl.acs.ext.wms.data.JsonUtl; -import org.nl.acs.opc.OpcConfig; -import org.nl.acs.opc.OpcServerService; -import org.nl.acs.opc.OpcServerServiceImpl; +import org.nl.acs.opc.*; import org.nl.acs.udw.UnifiedDataAccessor; import org.nl.acs.udw.UnifiedDataAccessorFactory; - -import org.nl.common.exception.BadRequestException; +import org.nl.acs.udw.UnifiedDataAppService; import org.nl.config.SpringContextHolder; +import org.openscada.opc.lib.da.Group; +import org.openscada.opc.lib.da.Item; +import org.openscada.opc.lib.da.ItemState; +import org.springframework.beans.factory.annotation.Autowired; -import java.util.Date; -import java.util.Iterator; -import java.util.Map; +import java.util.*; public class AbstractOpcDeviceDriver extends AbstractDeviceDriver implements OpcDeviceDriver { UnifiedDataAccessor opcUdw; + private OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerService.class); + + public AbstractOpcDeviceDriver() { + this.opcUdw = UnifiedDataAccessorFactory.getAccessor(OpcConfig.udw_opc_value_key); + } + + private Date sendTime; private String last_items; private int noLog_sendTimeOut; private Date noLog_sendTime; private String noLog_last_items; - public AbstractOpcDeviceDriver() { - this.opcUdw = UnifiedDataAccessorFactory.getAccessor(OpcConfig.udw_opc_value_key); - } - @Override public UnifiedDataAccessor getOpcValueAccessor() { return this.opcUdw; } + + public void checkcontrol(Map itemValues) throws Exception { + Group group = opcServerService.getServer(this.getOpcServer()); + Map write = new HashMap(); + Map readitems = new LinkedHashMap(); + List itemsString = new ArrayList(); + itemsString = new ArrayList<> (itemValues.keySet()); + Iterator is = itemsString.iterator(); + + while (is.hasNext()) { + String string = (String) is.next(); + try { + readitems.put(string, group.addItem(string)); + } catch (Exception e) { + e.printStackTrace(); + } + } + int i = 0; + while(true) { + //下发信号 + control( itemValues); + Map read = new HashMap(); + Map itemStatus = group.read(true, (Item[])readitems.values().toArray(new Item[0])); + Set items = itemStatus.keySet(); + Iterator var15 = items.iterator(); + + while(var15.hasNext()) { + Item item = (Item)var15.next(); + ItemState itemState = (ItemState)itemStatus.get(item); + Object value = OpcUtl.getValue(item, itemState); + read.put(item.getId(), value); + } + + boolean check = true; + Iterator var24 = itemsString.iterator(); + + while(var24.hasNext()) { + String itemString = (String)var24.next(); + if (!ObjectUtl.isEquals(itemValues.get(itemString), JsonUtl.parse(read.get(itemString)))) { + check = false; + } + } + if (check) { + return; + } + + if (i > 0) { + ThreadUtl.sleep(300L); + } + + if (i > 3) { + throw new RuntimeException("写入次数超过3次而失败"); + } + ++i; + } + } + + public boolean control(Map itemValues) { Iterator> it = itemValues.entrySet().iterator(); @@ -48,7 +107,7 @@ public class AbstractOpcDeviceDriver extends AbstractDeviceDriver implements Opc i++; } - return this.control(p2); + return this.control(p2); } @@ -70,11 +129,13 @@ public class AbstractOpcDeviceDriver extends AbstractDeviceDriver implements Opc sb.append(":"); sb.append(JsonUtl.parseWithoutException(udw_value)); sb.append(";"); -// if (!need_write && !UnifiedDataAppService.isEquals(udw_value, write_value)) { -// need_write = true; -// } + if (!need_write && !UnifiedDataAppService.isEquals(udw_value, write_value)) { + need_write = true; + } else { + //log.warn("下发信号点位{} 当前写入值:{} 与系统内存值:{} 相同,不再写入 ", code, write_value, udw_value ); + } } - need_write = true; + // need_write = true; if (need_write) { Date date = new Date(); @@ -85,9 +146,9 @@ public class AbstractOpcDeviceDriver extends AbstractDeviceDriver implements Opc this.last_items = this_items; this.sendTime = date; - /* this.execute_log.setResource(this.getDevice().getCode(), this.getDevice().getName()); - this.execute_log.log("原始记录{}->变更为{}", new Object[]{sb, this_items}); - OpcServerService opcServerService = OpcServerFactory.getOpcServerService();*/ + /* this.execute_log.setResource(this.getDevice().getCode(), this.getDevice().getName()); + this.execute_log.log("原始记录{}->变更为{}", new Object[]{sb, this_items}); + OpcServerService opcServerService = OpcServerFactory.getOpcServerService();*/ OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerServiceImpl.class); @@ -106,7 +167,7 @@ public class AbstractOpcDeviceDriver extends AbstractDeviceDriver implements Opc return true; } else { - throw new BadRequestException("下发 无内容"); + throw new RuntimeException("下发 无内容"); } } } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/rest/InstructionController.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/rest/InstructionController.java index ec58e83..398d3e3 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/rest/InstructionController.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/rest/InstructionController.java @@ -1,6 +1,7 @@ package org.nl.acs.instruction.rest; import cn.dev33.satoken.annotation.SaIgnore; +import cn.hutool.core.util.ObjectUtil; import org.nl.common.logging.annotation.Log; import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.instruction.service.InstructionService; @@ -36,6 +37,9 @@ public class InstructionController { @ApiOperation("查询指令") //@PreAuthorize("@el.check('instruction:list')") public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + if(ObjectUtil.isEmpty(whereJson.get("status"))) { + whereJson.put("status", "1"); + } return new ResponseEntity<>(instructionService.queryAll(whereJson, page), HttpStatus.OK); } 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 2d39114..32d0498 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 @@ -85,6 +85,7 @@ public class InstructionServiceImpl extends CommonServiceImpl instructions = new CopyOnWriteArrayList(); // List instructions_mybatis = new CopyOnWriteArrayList(); @@ -409,8 +410,8 @@ public class InstructionServiceImpl extends CommonServiceImpl T format(String json, Class clazz) throws RuntimeException { + try { + return getObjectMapper().readValue(json, clazz); + } catch (IOException var3) { + throw new RuntimeException(var3); + } + } + + public static List formatList(String json, Class clazz) throws RuntimeException { + try { + JavaType type = getObjectMapper().getTypeFactory().constructParametricType(List.class, new Class[]{clazz}); + return (List)getObjectMapper().readValue(json, type); + } catch (IOException var3) { + throw new RuntimeException(var3); + } + } + + public static Map formatMap(String json, Class clazzKey, Class clazzValue) throws RuntimeException { + try { + JavaType type = getObjectMapper().getTypeFactory().constructParametricType(Map.class, new Class[]{clazzKey, clazzValue}); + return (Map)getObjectMapper().readValue(json, type); + } catch (IOException var4) { + throw new RuntimeException(var4); + } + } + + public static List> formatListTwo(String json, Class clazz) throws RuntimeException { + try { + TypeFactory typeFactory = getObjectMapper().getTypeFactory(); + JavaType type = typeFactory.constructParametrizedType(List.class, List.class, new Class[]{clazz}); + type = typeFactory.constructParametrizedType(List.class, List.class, new JavaType[]{type}); + return (List)getObjectMapper().readValue(json, type); + } catch (IOException var4) { + throw new RuntimeException(var4); + } + } +} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/rest/TaskController.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/rest/TaskController.java index 8c2f34c..4020563 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/rest/TaskController.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/rest/TaskController.java @@ -1,6 +1,7 @@ package org.nl.acs.task.rest; import cn.dev33.satoken.annotation.SaIgnore; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import org.nl.common.logging.annotation.Log; import org.nl.acs.task.domain.Task; @@ -38,6 +39,9 @@ public class TaskController { //@PreAuthorize("@el.check('task:list')") public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { // return new ResponseEntity<>(taskService.queryAllByCache(whereJson, page), HttpStatus.OK); + if(ObjectUtil.isEmpty(whereJson.get("status"))) { + whereJson.put("status", "1"); + } return new ResponseEntity<>(taskService.queryAll(whereJson, page), HttpStatus.OK); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java new file mode 100644 index 0000000..8da8e35 --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java @@ -0,0 +1,341 @@ +package org.nl.quartz.task; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.nl.acs.AcsConfig; +import org.nl.acs.device.domain.Device; +import org.nl.acs.device_driver.basedriver.standard_inspect_site.StandardInspectSiteDeviceDriver; +import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; +import org.nl.acs.instruction.domain.Instruction; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.opc.DeviceAppServiceImpl; +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.config.SpringContextHolder; +import org.nl.system.service.param.ISysParamService; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * 自动创建指令 + */ +@Slf4j +@Component +public class AutoCreateInst { + /** + * 根据任务状态创建指令、生成下一条指令 + * 创建指令前需要判断是否条件具备:起始位置是否有货、目标位置是否有货 + */ + public void run() throws Exception { + TaskService taskserver = SpringContextHolder.getBean(TaskService.class); + InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); + RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class); + ISysParamService acsConfigService = SpringContextHolder.getBean(ISysParamService.class); + List list = taskserver.queryByStauts("0"); + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + for (int i = 0; i < list.size(); i++) { + TaskDto acsTask = list.get(i); + String taskid = acsTask.getTask_id(); + String taskcode = acsTask.getTask_code(); + String vehiclecode = acsTask.getVehicle_code(); + String priority = acsTask.getPriority(); + String start_point_code = acsTask.getStart_point_code(); + String start_device_code = acsTask.getStart_device_code(); + String route_plan_code = acsTask.getRoute_plan_code(); + String vehicleType = acsTask.getVehicle_type(); + //是否复合任务 =0非复合任务 + String compound_task = acsTask.getCompound_task(); + String compound_task_data = null; + String next_point_code = acsTask.getNext_point_code(); + String next_device_code = acsTask.getNext_device_code(); + if (StrUtil.isEmpty(start_device_code)) { + log.info("任务 [" + taskcode + "] 起点设备为空,无法生成指令。"); + acsTask.setRemark("任务 [" + taskcode + "] 起点设备为空,无法生成指令。"); + taskserver.updateByCodeFromCache(acsTask); + continue; + } + if (StrUtil.isEmpty(next_device_code)) { + log.info("任务 [" + taskcode + "] 终点设备为空,无法生成指令。"); + acsTask.setRemark("任务 [" + taskcode + "] 终点设备为空,无法生成指令。"); + taskserver.updateByCodeFromCache(acsTask); + continue; + } + List instructions = instructionService.queryAll("instruction_status < 2"); + String maxInstnumber = acsConfigService.findByCode(AcsConfig.MAXINSTNUMBER).getValue(); + if (ObjectUtils.isNotEmpty(maxInstnumber)) { + if (instructions.size() >= Integer.parseInt(maxInstnumber)) { + log.info("已达到系统参数配置的最大指令数 [" + maxInstnumber + "] ,无法生成指令。"); + acsTask.setRemark("已达到系统参数配置的最大指令数 [" + maxInstnumber + "] ,无法生成指令。"); + taskserver.updateByCodeFromCache(acsTask); + continue; + } + } + + + /** + * 开始平均分解校验 + */ + String this_device_code = taskserver.queryAssignedByDevice(acsTask.getStart_device_code(), acsTask.getNext_device_code()); + if (StrUtil.isEmpty(this_device_code)) { + List shortPathsList = routeLineService.getShortPathLines(start_device_code, acsTask.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); + if (StrUtil.equals(acsTask.getTask_type(), "2")) { + for (int j = 0; j < pathlist.size(); j++) { + if (j == 0) { + compound_task_data = pathlist.get(j).trim(); + } else { + compound_task_data = compound_task_data + "->" + pathlist.get(j).trim(); + } + } + next_device_code = pathlist.get(pathlist.size() - 1); + + } else { + 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_device_code; + } + //校验路由关系 + List shortPathsList = routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code); + if (ObjectUtils.isEmpty(shortPathsList)) { + log.info("任务 [" + taskcode + "] 路由不通无法生成指令。"); + acsTask.setRemark("任务 [" + taskcode + "] 路由不通无法生成指令。"); + taskserver.updateByCodeFromCache(acsTask); + continue; + } + + if (!StrUtil.equals(shortPathsList.get(0).getType(), "1")) { + continue; + } + Device startdevice = appService.findDeviceByCode(start_device_code); + Device nextdevice = appService.findDeviceByCode(next_device_code); + if (StrUtil.equals(appService.findDeviceTypeByCode(next_device_code), "storage")) { + next_point_code = next_device_code + "-" + acsTask.getTo_y() + "-" + acsTask.getTo_z(); + } else { + next_point_code = next_device_code; + } + if (ObjectUtils.isEmpty(startdevice)) { + log.info("任务 [" + taskcode + "] 起点设备编码 [" + start_device_code + "] 对应设备未找到,无法生成指令。"); + continue; + } + if (ObjectUtils.isEmpty(nextdevice)) { + log.info("任务 [" + taskcode + "] 终点设备编码 [" + next_device_code + "] 对应设备未找到,无法生成指令。"); + continue; + } + //普通站点 + StandardOrdinarySiteDeviceDriver standardOrdinarySiteDeviceDriver; + StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver; +// StandardEmptyPalletSiteDeviceDriver standardEmptsyPalletSiteDeviceDriver; +// LampThreecolorDeviceDriver lampThreecolorDeviceDriver; +// LnshFoldDiscSiteDeviceDriver lnshFoldDiscSiteDeviceDriver; + + String createTaskCheck = acsConfigService.findByCode(AcsConfig.CREATETASKCHECK).getValue(); + + if (StrUtil.equals(createTaskCheck, "1")) { + if (startdevice.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) startdevice.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMode() != 2) { + log.info("起点设备:" + startdevice.getDevice_code() + "设备未待机,任务号:" + taskcode); + acsTask.setRemark("起点设备:" + startdevice.getDevice_code() + "设备未待机,任务号:" + taskcode); + taskserver.updateByCodeFromCache(acsTask); + //this.execute_log.setResource(startdevice.getDevice_code(), startdevice.getDevice_code()); + //this.execute_log.log("起点设备:" + startdevice.getDevice_code() + "设备未待机,任务号:" + taskcode); + continue; + } + } +// if (startdevice.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { +// standardEmptsyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) startdevice.getDeviceDriver(); +// if (standardEmptsyPalletSiteDeviceDriver.getMode() != 2) { +// log.info("目标设备:" + nextdevice.getDevice_code() + "设备未待机,任务号:" + taskcode); +// acsTask.setRemark("目标设备:" + nextdevice.getDevice_code() + "设备未待机,任务号:" + taskcode); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } +// } +// if (startdevice.getDeviceDriver() instanceof LnshFoldDiscSiteDeviceDriver) { +// lnshFoldDiscSiteDeviceDriver = (LnshFoldDiscSiteDeviceDriver) startdevice.getDeviceDriver(); +// if (lnshFoldDiscSiteDeviceDriver.getMode() != 2) { +// log.info("目标设备:" + nextdevice.getDevice_code() + "设备未待机,任务号:" + taskcode); +// acsTask.setRemark("目标设备:" + nextdevice.getDevice_code() + "设备未待机,任务号:" + taskcode); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } +// } + + //校验 是否同任务是否存在相同终点、未完成的指令 + int sameqty = instructionService.querySameDestinationInst(next_point_code); + if (sameqty > 0) { + log.info("存在相同终点的指令,任务号:" + taskcode); + acsTask.setRemark("存在相同终点的指令,任务号:" + taskcode); + taskserver.updateByCodeFromCache(acsTask); + continue; + } + } + + //空盘位生成指令需要另外逻辑 +// if (nextdevice.getDeviceDriver() instanceof LnshFoldDiscSiteDeviceDriver) { +// lnshFoldDiscSiteDeviceDriver = (LnshFoldDiscSiteDeviceDriver) nextdevice.getDeviceDriver(); +// if (lnshFoldDiscSiteDeviceDriver.getMode() == 0) { +// log.info("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 未联机,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 未联机,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } else if (lnshFoldDiscSiteDeviceDriver.getError() != 0 +// || lnshFoldDiscSiteDeviceDriver.getStatus() == 3) { +// log.info("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 异常,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 异常,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } +// int max_emptypalletnum = Integer.parseInt(nextdevice.getExtraValue().get("max_emptypalletnum").toString()); +// int nowNumber = lnshFoldDiscSiteDeviceDriver.getContainer_qty(); +// if (nowNumber >= max_emptypalletnum) { +// log.info("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 已满,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 已满,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } +// // 查看是否有相同终点的指令 +// int count = instructionService.queryDeviceInstCount(next_device_code); +// if (count > 0) { +// log.info("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 已被占用,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 已被占用,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// //this.execute_log.setResource(nextdevice.getDevice_code(), nextdevice.getDevice_code()); +// //this.execute_log.log("存在相同终点的指令,任务号:" + taskcode); +// continue; +// } +// next_point_code = next_device_code + "." + (nowNumber + 1); +// } else if (nextdevice.getDeviceDriver() instanceof LnshStationDeviceDriver +// && "true".equals(nextdevice.getExtraValue().get("inspect_in_stocck"))) { +// LnshStationDeviceDriver deviceDriver = (LnshStationDeviceDriver) nextdevice.getDeviceDriver(); +// if (deviceDriver.getMode() == 0) { +// log.info("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 未联机,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 未联机,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } else if (deviceDriver.getMove() != 0) { +// log.info("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 有货,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 有货,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } else if (deviceDriver.getError() != 0) { +// log.info("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 异常,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 终点 [" + nextdevice.getDevice_name() + "] 异常,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } +// } + +// if (startdevice.getDeviceDriver() instanceof LnshFoldDiscSiteDeviceDriver) { +// lnshFoldDiscSiteDeviceDriver = (LnshFoldDiscSiteDeviceDriver) startdevice.getDeviceDriver(); +// if (lnshFoldDiscSiteDeviceDriver.getMode() == 0) { +// log.info("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 未联机,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 未联机,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } else if (lnshFoldDiscSiteDeviceDriver.getError() != 0 +// || lnshFoldDiscSiteDeviceDriver.getStatus() == 3) { +// log.info("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 异常,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 异常,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } +// +// int container_qty = lnshFoldDiscSiteDeviceDriver.getContainer_qty(); +// int max_emptypalletnum = Integer.parseInt(startdevice.getExtraValue().get("max_emptypalletnum").toString()); +// if (container_qty < (max_emptypalletnum / 2)) { +// log.info("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 可用托盘数量少于最大托盘数量 [" + max_emptypalletnum + "] / 2,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 可用托盘数量少于最大托盘数量 [" + max_emptypalletnum + "] / 2,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } +// +// int count = instructionService.queryDeviceInstCount(start_device_code); +// if (count > 0) { +// log.info("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 已被占用,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 已被占用,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// //this.execute_log.setResource(nextdevice.getDevice_code(), nextdevice.getDevice_code()); +// //this.execute_log.log("存在相同终点的指令,任务号:" + taskcode); +// continue; +// } +// +// start_point_code = start_device_code + ".1"; +// } else if (startdevice.getDeviceDriver() instanceof LnshStationDeviceDriver +// && "true".equals(startdevice.getExtraValue().get("inspect_in_stocck"))) { +// LnshStationDeviceDriver deviceDriver = (LnshStationDeviceDriver) startdevice.getDeviceDriver(); +// if (deviceDriver.getMode() == 0) { +// log.info("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 未联机,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 未联机,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } else if (deviceDriver.getMove() == 0) { +// log.info("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 无货,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 无货,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } else if (deviceDriver.getError() != 0) { +// log.info("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 异常,无法生成指令。"); +// acsTask.setRemark("任务 [" + taskcode + "] 起点 [" + startdevice.getDevice_name() + "] 异常,无法生成指令。"); +// taskserver.updateByCodeFromCache(acsTask); +// continue; +// } +// } + + Instruction instdto = new Instruction(); + instdto.setInstruction_type(acsTask.getTask_type()); + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setRemark(acsTask.getRemark()); + instdto.setMaterial(acsTask.getMaterial()); + instdto.setQuantity(acsTask.getQuantity()); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setVehicle_code(vehiclecode); + 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.setCompound_inst_data(compound_task_data); + instdto.setPriority(priority); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(start_point_code); + instdto.setVehicle_type(vehicleType); + try { + instructionService.create(instdto); + } catch (Exception e) { + acsTask.setRemark(e.getMessage()); + taskserver.updateByCodeFromCache(acsTask); + continue; + } + log.info("任务 [" + taskcode + "] 指令成功生成!"); + //创建指令后修改任务状态 + acsTask.setTask_status("1"); + taskserver.update(acsTask); + + } + } +} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/NdcAutoReconnection.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/NdcAutoReconnection.java new file mode 100644 index 0000000..2b43ffc --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/NdcAutoReconnection.java @@ -0,0 +1,30 @@ +package org.nl.quartz.task; + +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.auto.run.AutoRunService; +import org.nl.system.service.param.ISysParamService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * NDC自动重连 + */ +@Slf4j +@Component +public class NdcAutoReconnection { + + @Autowired + ISysParamService paramService; + + @Autowired + AutoRunService autoRunService; + + public void run(String threadCode) throws Exception { + String[] threadCodes = threadCode.split(","); + for (String code : threadCodes) { + if (!autoRunService.getThreadByCode(code).isAlive()) { + autoRunService.startThread(code); + } + } + } +} From 700a95c36feb452ad7d0020bb3d3ad5cadd238bd Mon Sep 17 00:00:00 2001 From: psh Date: Mon, 6 Nov 2023 17:03:24 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E5=A4=A9=E8=83=BD=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=88=9D=E7=89=88=E5=BE=85=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tianneng/guhuashi/ItemProtocol.java | 111 ++++ .../StandardInspectSiteDefination.java | 62 +++ .../StandardInspectSiteDeviceDriver.java | 476 ++++++++++++++++++ .../tianneng/site/ItemProtocol.java | 111 ++++ .../site/StandardInspectSiteDefination.java | 62 +++ .../site/StandardInspectSiteDeviceDriver.java | 476 ++++++++++++++++++ .../tianneng/site_status/ItemProtocol.java | 111 ++++ .../StandardInspectSiteDefination.java | 62 +++ .../StandardInspectSiteDeviceDriver.java | 476 ++++++++++++++++++ .../tianneng/tubanxian/ItemProtocol.java | 149 ++++++ .../tubanxian/TubanxianSiteDefination.java | 62 +++ .../tubanxian/TubanxianSiteDeviceDriver.java | 291 +++++++++++ 12 files changed, 2449 insertions(+) create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/ItemProtocol.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDefination.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDeviceDriver.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/ItemProtocol.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDefination.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDeviceDriver.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/ItemProtocol.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDefination.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDeviceDriver.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/ItemProtocol.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDefination.java create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDeviceDriver.java diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/ItemProtocol.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/ItemProtocol.java new file mode 100644 index 0000000..d900b0c --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/ItemProtocol.java @@ -0,0 +1,111 @@ +package org.nl.acs.device_driver.tianneng.guhuashi; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Data +public class ItemProtocol { + + public static String item_heartbeat = "heartbeat"; + public static String item_mode = "mode"; + public static String item_move = "move"; + public static String item_action = "action"; + public static String item_error = "error"; + public static String item_to_command = "to_command"; + public static String item_to_target = "to_target"; + public static String item_to_task = "to_task"; + public static String item_weight = "weight"; + public static String item_material_type = "material_type"; + public static String item_barcode = "barcode"; + + private StandardInspectSiteDeviceDriver driver; + + public ItemProtocol(StandardInspectSiteDeviceDriver driver) { + this.driver = driver; + } + + public int getHeartbeat() { + return this.getOpcIntegerValue(item_heartbeat); + } + + public int getMode() { + return this.getOpcIntegerValue(item_mode); + } + + public int getMove() { + return this.getOpcIntegerValue(item_move); + } + + public int getAction() { + return this.getOpcIntegerValue(item_action); + } + + public int getError() { + return this.getOpcIntegerValue(item_error); + } + + + public int getMaterialType() { + return this.getOpcIntegerValue(item_material_type); + } + public int getBarcode() { + return this.getOpcIntegerValue(item_barcode); + } + + public int getToCommand() { + return this.getOpcIntegerValue(item_to_command); + } + + public int getToTarget() { + return this.getOpcIntegerValue(item_to_target); + } + + public int getToTask() { + return this.getOpcIntegerValue(item_to_task); + } + + //是否有货 + public int hasGoods(int move) { + return move; + } + + Boolean isonline; + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegeregerValue(protocol); + if (value == null) { + // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!"); + setIsonline(false); + } else { + setIsonline(true); + return value; + } + return 0; + + } + + public static List getReadableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); + list.add(new ItemDto(item_mode, "工作状态", "DB600.B2", Boolean.valueOf(true))); + list.add(new ItemDto(item_move, "光电开关信号", "DB600.B3")); + list.add(new ItemDto(item_action, "取放信号", "DB600.B4")); + list.add(new ItemDto(item_material_type, "物料类型", "DB600.D6")); + list.add(new ItemDto(item_error, "报警信号", "DB600.B7")); + list.add(new ItemDto(item_barcode, "条码", "DB600.D8")); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); + return list; + } + +} + diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDefination.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDefination.java new file mode 100644 index 0000000..3e4229e --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDefination.java @@ -0,0 +1,62 @@ +package org.nl.acs.device_driver.tianneng.guhuashi; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device.domain.Device; +import org.nl.acs.device.enums.DeviceType; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * 检测站点驱动定义 + * 说明:该站点为普通带光电检测站点 + */ +@Service +public class StandardInspectSiteDefination implements OpcDeviceDriverDefination { + @Override + public String getDriverCode() { + return "standard_inspect_site"; + } + + @Override + public String getDriverName() { + return "标准版-检测站点"; + } + + @Override + public String getDriverDescription() { + return "标准版-检测站点"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new StandardInspectSiteDeviceDriver()).setDevice(device).setDriverDefination(this); + + } + + @Override + public Class getDeviceDriverType() { + return StandardInspectSiteDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.conveyor); + return types; + } + + @Override + public List getReadableItemDtos() { + return ItemProtocol.getReadableItemDtos(); + } + + @Override + public List getWriteableItemDtos() { + return ItemProtocol.getWriteableItemDtos(); + } + +} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDeviceDriver.java new file mode 100644 index 0000000..07e6953 --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDeviceDriver.java @@ -0,0 +1,476 @@ +package org.nl.acs.device_driver.tianneng.guhuashi; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +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.device.domain.Device; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.RequestMethodEnum; +import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; +import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; +import org.nl.acs.ext.wms.service.AcsToWmsService; +import org.nl.acs.instruction.domain.Instruction; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.acs.opc.WcsConfig; +import org.nl.acs.route.service.RouteLineService; +import org.nl.acs.route.service.dto.RouteLineDto; +import org.nl.acs.task.domain.Task; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.task.service.mapper.TaskMapper; +import org.nl.acs.utils.ConvertUtil; +import org.nl.common.utils.CodeUtil; +import org.nl.config.SpringContextHolder; +import org.openscada.opc.lib.da.Server; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 检测站点驱动 + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver , DeviceStageMonitor { + protected ItemProtocol itemProtocol = new ItemProtocol(this); + + InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); + + DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); + + RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); + + TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); + + TaskMapper taskMapper; + + AcsToWmsService acsToWmsService=SpringContextHolder.getBean("acsToWmsServiceImpl"); + + String container; + String container_type_desc; + String last_container_type_desc; + String last_container; + //放货准备锁 + String putReadyLock = null; + //有货标记 + protected boolean has_goods_tag = false; + + private Date time = new Date(); + + int mode = 0; + int error = 0; + int move = 0; + int task = 0; + int action = 0; + int last_mode = 0; + int last_error = 0; + int last_move = 0; + int last_task = 0; + Boolean isonline = true; + int hasGoods = 0; + String message = null; + Boolean iserror = false; + + int io_action = 0; + int last_io_action = 0; + int material_type = 0; + int last_material_type = 0; + int barcode = 0; + int last_barcode =0; + + + boolean hasVehicle = false; + boolean isReady = false; + protected int instruction_num = 0; + protected int instruction_num_truth = 0; + boolean isFold = false; + private String assemble_check_tag; + + protected String current_stage_instruction_message; + protected String last_stage_instruction_message; + Integer heartbeat_tag; + private Date instruction_require_time = new Date(); + private Date instruction_finished_time = new Date(); + + private int instruction_require_time_out; + boolean requireSucess = false; + + private int instruction_finished_time_out; + + int branchProtocol = 0; + //备注 + String remark; + //数量 + String qty; + //物料 + String material; + //批次 + String batch; + //当前指令 + Instruction inst = null; + //上次指令 + Instruction last_inst = null; + + //触摸屏手动触发任务 + private Boolean is_has_task = false; + + //满盅入库请求标记 + boolean Sucess = false; + + //暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域 + int flag; + + String devicecode; + + @Override + public Device getDevice() { + return this.device; + } + + + @Override + public void execute() { + String message = null; + try { + devicecode = this.getDeviceCode(); + mode = this.itemProtocol.getMode(); + error = this.itemProtocol.getError(); + move = this.itemProtocol.getMove(); + hasGoods = this.itemProtocol.getMove(); + action = this.itemProtocol.getAction(); + material_type = this.itemProtocol.getMaterialType(); + barcode=this.itemProtocol.getBarcode(); + if (mode != last_mode) { + this.setRequireSucess(false); + if(mode==2){ + this.writing(0); + } + } + if (move != last_move) { + } + if (error != last_error) { + } + + + } catch (Exception var17) { + return; + } + + if (!this.itemProtocol.getIsonline()) { + this.setIsonline(false); + this.setIserror(true); + message = "信号量同步异常"; + //未联机 + } else if (mode == 0) { + this.setIsonline(false); + this.setIserror(true); + message = "未联机"; + //有报警 + } else if (error != 0) { + this.setIsonline(false); + this.setIserror(true); + message = "有报警"; + //无报警 + } else { + this.setIsonline(true); + this.setIserror(false); + message = ""; + Instruction instruction = null; + List toInstructions; + switch (mode) { + case 1: + log.debug("设备运转模式:等待工作"); + return; + case 2: + break; + case 4: + //叫料 + if (move==0 && !requireSucess){ + apply(4); + } + break; + case 5: + //满料出库 + if(move==1 && !requireSucess){ + apply(5); + } + break; + case 6: + //申请空盘 + if (move==0 && !requireSucess){ + apply(6); + } + break; + case 7: + //空托盘出库 + if(move==1 && !requireSucess){ + apply(7); + } + break; + } + + switch (flag) { + //取货完成 + case 1: + writing(2); + return; + //放货完成 + case 2: + writing(3); + return; + + } + + } + last_mode = mode; + last_error = error; + last_move = move; + last_task = task; + last_material_type = material_type; + last_barcode=barcode; + + } + + + public boolean exe_error() { + if (this.error == 0) { + return true; + } else { + log.debug("设备报警"); + return false; + } + } + + protected void thingToNothing() { + log.debug("从有货到无货 清理数据"); + this.set_last_container(container, container_type_desc); + } + + public void set_last_container(String barcode, String type_desc) { + this.set_last_container(barcode); + this.set_last_container_type_desc(type_desc); + } + + public void set_last_container(String barcode) { + } + + public void set_last_container_type_desc(String type) { + } + + public boolean exe_business() { + return true; + } + + protected void executing(Instruction instruction) { + this.executing(1, instruction, ""); + } + + public void executing(int command, Instruction instruction, String appendMessage) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_target; + String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_task; + if (appendMessage == null) { + appendMessage = ""; + } + if (instruction != null) { + instruction_num = Integer.parseInt(instruction.getInstruction_code()); + } + //String opcservcerid = this.getDevice().getOpc_server_id(); +//Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, 1); + itemMap.put(to_task, instruction_num); + this.control(itemMap); + + } + + public void executing(Server server, Map itemMap) { + this.control(itemMap); + } + + public void writing(int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + + //String opcservcerid = this.getDevice().getOpc_server_id(); +//Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, command); + this.control(itemMap); + + } + + public void writing(int type, int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_target; + String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_task; + //String opcservcerid = this.getDevice().getOpc_server_id(); +//Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + if (type == 1) { + itemMap.put(to_command, command); + } else if (type == 2) { + itemMap.put(to_target, command); + + } else if (type == 3) { + itemMap.put(to_task, command); + } + this.control(itemMap); + + } + + public boolean instruction_require(String container_code) { + return instruction_require(container_code, WcsConfig.task_container_type_default_desc); + } + + /** + * 请求指令 + * + * @param container_code + * @param container_type + */ + public synchronized boolean instruction_require(String container_code, String container_type) { + 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); + return false; + } else { + this.instruction_require_time = date; + TaskDto dto = new TaskDto(); + String now = DateUtil.now(); + dto.setTask_id(IdUtil.simpleUUID()); + dto.setCreate_by(this.getDevice().getDevice_code()); + dto.setUpdate_by(this.getDevice().getDevice_code()); + dto.setStart_point_code(this.getDevice().getDevice_code()); + dto.setVehicle_code(container_code); + dto.setVehicle_type(container_type); + + String taskcode = CodeUtil.getNewCode("TASK_NO"); + dto.setTask_code("-" + taskcode); + dto.setTask_status("0"); + dto.setPriority("101"); + RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code()); + String next_device_codecode = jo.getNext_device_code(); + if (StrUtil.isEmpty(next_device_codecode)) { + throw new RuntimeException("该设备未找到对应路由"); + } + dto.setNext_point_code(next_device_codecode); + dto.setUpdate_time(now); + dto.setCreate_time(now); + +// WQLObject wo = WQLObject.getWQLObject("acs_task"); +// JSONObject json = (JSONObject) JSONObject.toJSON(dto); +// +// wo.insert(json); + + Task entity = ConvertUtil.convert(dto, Task.class); + taskMapper.insert(entity); + requireSucess = false; + return true; + } + } + + @Override + public JSONObject getDeviceStatusName() { + JSONObject jo = new JSONObject(); + String mode = ""; + String action = ""; + String move = ""; + if (this.getMode() == 0) { + mode = "未联机"; + } else if (this.getMode() == 1) { + mode = "单机"; + } else if (this.getMode() == 2) { + mode = "联机"; + } else if (this.getMode() == 3) { + mode = "运行中"; + } + + if (this.getMove() == 0) { + move = "无货"; + jo.put("hasGoods", false); + } else if (this.getMove() == 1) { + move = "有货"; + jo.put("hasGoods", true); + } else if (this.getMove() == 2) { + move = "有托盘有货"; + jo.put("hasGoods", true); + } + jo.put("device_name", this.getDevice().getDevice_name()); + jo.put("mode", mode); + jo.put("move", move); + jo.put("action", action); + jo.put("isOnline", this.getIsonline()); + jo.put("error", this.getError()); + jo.put("isError", this.getIserror()); + jo.put("task", this.getTask()); + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { + + } + + /** + * lms申请任务 + * + * @param + */ + public synchronized boolean apply(Integer type) { + Date date = new Date(); + if (date.getTime() - this.time.getTime() < (long) this.instruction_require_time_out) { + log.trace("触发时间因为小于{}毫秒,而被无视", this.time); + return false; + } else { + this.time = date; + FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); + request.setDevice_code(devicecode); + request.setMaterial_type(String.valueOf(material_type)); + request.setVehicle_code(String.valueOf(barcode)); + if (devicecode.startsWith("TBX")&&type==5&&barcode>0) { + //满架下料 + request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName()); + }else if (devicecode.startsWith("TBX")&&type==6) { + //补空架 + request.setRequest_medthod_code(RequestMethodEnum.apply_tbxbkj.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_tbxbkj.getName()); + }else if (type==7) { + //空托盘出库,包片机和销售出库空位都可以 + request.setRequest_medthod_code(RequestMethodEnum.apply_kghjrk.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_kghjrk.getName()); + }else if(devicecode.startsWith("BP")&&material_type>0){ + request.setRequest_medthod_code(RequestMethodEnum.apply_bpsl.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_bpsl.getName()); + } + String resp = acsToWmsService.applyTask(request); + JSONObject res_jo = JSONObject.parseObject(resp); + if (StrUtil.equals(res_jo.getString("code"), "200")) { + this.writing(type); + this.setRequireSucess(true); + log.info("acs申请任务", this.devicecode, "满盅入库任务申请成功!"); + }else{ + this.writing(99); + } + return true; + } + } +} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/ItemProtocol.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/ItemProtocol.java new file mode 100644 index 0000000..bbfc734 --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/ItemProtocol.java @@ -0,0 +1,111 @@ +package org.nl.acs.device_driver.tianneng.site; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Data +public class ItemProtocol { + + public static String item_heartbeat = "heartbeat"; + public static String item_mode = "mode"; + public static String item_move = "move"; + public static String item_action = "action"; + public static String item_error = "error"; + public static String item_to_command = "to_command"; + public static String item_to_target = "to_target"; + public static String item_to_task = "to_task"; + public static String item_weight = "weight"; + public static String item_material_type = "material_type"; + public static String item_barcode = "barcode"; + + private StandardInspectSiteDeviceDriver driver; + + public ItemProtocol(StandardInspectSiteDeviceDriver driver) { + this.driver = driver; + } + + public int getHeartbeat() { + return this.getOpcIntegerValue(item_heartbeat); + } + + public int getMode() { + return this.getOpcIntegerValue(item_mode); + } + + public int getMove() { + return this.getOpcIntegerValue(item_move); + } + + public int getAction() { + return this.getOpcIntegerValue(item_action); + } + + public int getError() { + return this.getOpcIntegerValue(item_error); + } + + + public int getMaterialType() { + return this.getOpcIntegerValue(item_material_type); + } + public int getBarcode() { + return this.getOpcIntegerValue(item_barcode); + } + + public int getToCommand() { + return this.getOpcIntegerValue(item_to_command); + } + + public int getToTarget() { + return this.getOpcIntegerValue(item_to_target); + } + + public int getToTask() { + return this.getOpcIntegerValue(item_to_task); + } + + //是否有货 + public int hasGoods(int move) { + return move; + } + + Boolean isonline; + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegeregerValue(protocol); + if (value == null) { + // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!"); + setIsonline(false); + } else { + setIsonline(true); + return value; + } + return 0; + + } + + public static List getReadableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); + list.add(new ItemDto(item_mode, "工作状态", "DB600.B2", Boolean.valueOf(true))); + list.add(new ItemDto(item_move, "光电开关信号", "DB600.B3")); + list.add(new ItemDto(item_action, "取放信号", "DB600.B4")); + list.add(new ItemDto(item_material_type, "物料类型", "DB600.D6")); + list.add(new ItemDto(item_error, "报警信号", "DB600.B7")); + list.add(new ItemDto(item_barcode, "条码", "DB600.D8")); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); + return list; + } + +} + diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDefination.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDefination.java new file mode 100644 index 0000000..77e7b7d --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDefination.java @@ -0,0 +1,62 @@ +package org.nl.acs.device_driver.tianneng.site; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device.domain.Device; +import org.nl.acs.device.enums.DeviceType; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * 检测站点驱动定义 + * 说明:该站点为普通带光电检测站点 + */ +@Service +public class StandardInspectSiteDefination implements OpcDeviceDriverDefination { + @Override + public String getDriverCode() { + return "standard_inspect_site"; + } + + @Override + public String getDriverName() { + return "标准版-检测站点"; + } + + @Override + public String getDriverDescription() { + return "标准版-检测站点"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new StandardInspectSiteDeviceDriver()).setDevice(device).setDriverDefination(this); + + } + + @Override + public Class getDeviceDriverType() { + return StandardInspectSiteDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.conveyor); + return types; + } + + @Override + public List getReadableItemDtos() { + return ItemProtocol.getReadableItemDtos(); + } + + @Override + public List getWriteableItemDtos() { + return ItemProtocol.getWriteableItemDtos(); + } + +} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDeviceDriver.java new file mode 100644 index 0000000..23a2315 --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDeviceDriver.java @@ -0,0 +1,476 @@ +package org.nl.acs.device_driver.tianneng.site; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +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.device.domain.Device; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.RequestMethodEnum; +import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; +import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; +import org.nl.acs.ext.wms.service.AcsToWmsService; +import org.nl.acs.instruction.domain.Instruction; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.acs.opc.WcsConfig; +import org.nl.acs.route.service.RouteLineService; +import org.nl.acs.route.service.dto.RouteLineDto; +import org.nl.acs.task.domain.Task; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.task.service.mapper.TaskMapper; +import org.nl.acs.utils.ConvertUtil; +import org.nl.common.utils.CodeUtil; +import org.nl.config.SpringContextHolder; +import org.openscada.opc.lib.da.Server; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 检测站点驱动 + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver , DeviceStageMonitor { + protected ItemProtocol itemProtocol = new ItemProtocol(this); + + InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); + + DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); + + RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); + + TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); + + TaskMapper taskMapper; + + AcsToWmsService acsToWmsService=SpringContextHolder.getBean("acsToWmsServiceImpl"); + + String container; + String container_type_desc; + String last_container_type_desc; + String last_container; + //放货准备锁 + String putReadyLock = null; + //有货标记 + protected boolean has_goods_tag = false; + + private Date time = new Date(); + + int mode = 0; + int error = 0; + int move = 0; + int task = 0; + int action = 0; + int last_mode = 0; + int last_error = 0; + int last_move = 0; + int last_task = 0; + Boolean isonline = true; + int hasGoods = 0; + String message = null; + Boolean iserror = false; + + int io_action = 0; + int last_io_action = 0; + int material_type = 0; + int last_material_type = 0; + int barcode = 0; + int last_barcode =0; + + + boolean hasVehicle = false; + boolean isReady = false; + protected int instruction_num = 0; + protected int instruction_num_truth = 0; + boolean isFold = false; + private String assemble_check_tag; + + protected String current_stage_instruction_message; + protected String last_stage_instruction_message; + Integer heartbeat_tag; + private Date instruction_require_time = new Date(); + private Date instruction_finished_time = new Date(); + + private int instruction_require_time_out; + boolean requireSucess = false; + + private int instruction_finished_time_out; + + int branchProtocol = 0; + //备注 + String remark; + //数量 + String qty; + //物料 + String material; + //批次 + String batch; + //当前指令 + Instruction inst = null; + //上次指令 + Instruction last_inst = null; + + //触摸屏手动触发任务 + private Boolean is_has_task = false; + + //满盅入库请求标记 + boolean Sucess = false; + + //暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域 + int flag; + + String devicecode; + + @Override + public Device getDevice() { + return this.device; + } + + + @Override + public void execute() { + String message = null; + try { + devicecode = this.getDeviceCode(); + mode = this.itemProtocol.getMode(); + error = this.itemProtocol.getError(); + move = this.itemProtocol.getMove(); + hasGoods = this.itemProtocol.getMove(); + action = this.itemProtocol.getAction(); + material_type = this.itemProtocol.getMaterialType(); + barcode=this.itemProtocol.getBarcode(); + if (mode != last_mode) { + this.setRequireSucess(false); + if(mode==2){ + this.writing(0); + } + } + if (move != last_move) { + } + if (error != last_error) { + } + + + } catch (Exception var17) { + return; + } + + if (!this.itemProtocol.getIsonline()) { + this.setIsonline(false); + this.setIserror(true); + message = "信号量同步异常"; + //未联机 + } else if (mode == 0) { + this.setIsonline(false); + this.setIserror(true); + message = "未联机"; + //有报警 + } else if (error != 0) { + this.setIsonline(false); + this.setIserror(true); + message = "有报警"; + //无报警 + } else { + this.setIsonline(true); + this.setIserror(false); + message = ""; + Instruction instruction = null; + List toInstructions; + switch (mode) { + case 1: + log.debug("设备运转模式:等待工作"); + return; + case 2: + break; + case 4: + //叫料 + if (move==0 && !requireSucess){ + apply(4); + } + break; + case 5: + //满料出库 + if(move==1 && !requireSucess){ + apply(5); + } + break; + case 6: + //申请空盘 + if (move==0 && !requireSucess){ + apply(6); + } + break; + case 7: + //空托盘出库 + if(move==1 && !requireSucess){ + apply(7); + } + break; + } + + switch (flag) { + //取货完成 + case 1: + writing(2); + return; + //放货完成 + case 2: + writing(3); + return; + + } + + } + last_mode = mode; + last_error = error; + last_move = move; + last_task = task; + last_material_type = material_type; + last_barcode=barcode; + + } + + + public boolean exe_error() { + if (this.error == 0) { + return true; + } else { + log.debug("设备报警"); + return false; + } + } + + protected void thingToNothing() { + log.debug("从有货到无货 清理数据"); + this.set_last_container(container, container_type_desc); + } + + public void set_last_container(String barcode, String type_desc) { + this.set_last_container(barcode); + this.set_last_container_type_desc(type_desc); + } + + public void set_last_container(String barcode) { + } + + public void set_last_container_type_desc(String type) { + } + + public boolean exe_business() { + return true; + } + + protected void executing(Instruction instruction) { + this.executing(1, instruction, ""); + } + + public void executing(int command, Instruction instruction, String appendMessage) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_target; + String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_task; + if (appendMessage == null) { + appendMessage = ""; + } + if (instruction != null) { + instruction_num = Integer.parseInt(instruction.getInstruction_code()); + } + //String opcservcerid = this.getDevice().getOpc_server_id(); +//Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, 1); + itemMap.put(to_task, instruction_num); + this.control(itemMap); + + } + + public void executing(Server server, Map itemMap) { + this.control(itemMap); + } + + public void writing(int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + + //String opcservcerid = this.getDevice().getOpc_server_id(); +//Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, command); + this.control(itemMap); + + } + + public void writing(int type, int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_target; + String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_task; + //String opcservcerid = this.getDevice().getOpc_server_id(); +//Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + if (type == 1) { + itemMap.put(to_command, command); + } else if (type == 2) { + itemMap.put(to_target, command); + + } else if (type == 3) { + itemMap.put(to_task, command); + } + this.control(itemMap); + + } + + public boolean instruction_require(String container_code) { + return instruction_require(container_code, WcsConfig.task_container_type_default_desc); + } + + /** + * 请求指令 + * + * @param container_code + * @param container_type + */ + public synchronized boolean instruction_require(String container_code, String container_type) { + 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); + return false; + } else { + this.instruction_require_time = date; + TaskDto dto = new TaskDto(); + String now = DateUtil.now(); + dto.setTask_id(IdUtil.simpleUUID()); + dto.setCreate_by(this.getDevice().getDevice_code()); + dto.setUpdate_by(this.getDevice().getDevice_code()); + dto.setStart_point_code(this.getDevice().getDevice_code()); + dto.setVehicle_code(container_code); + dto.setVehicle_type(container_type); + + String taskcode = CodeUtil.getNewCode("TASK_NO"); + dto.setTask_code("-" + taskcode); + dto.setTask_status("0"); + dto.setPriority("101"); + RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code()); + String next_device_codecode = jo.getNext_device_code(); + if (StrUtil.isEmpty(next_device_codecode)) { + throw new RuntimeException("该设备未找到对应路由"); + } + dto.setNext_point_code(next_device_codecode); + dto.setUpdate_time(now); + dto.setCreate_time(now); + +// WQLObject wo = WQLObject.getWQLObject("acs_task"); +// JSONObject json = (JSONObject) JSONObject.toJSON(dto); +// +// wo.insert(json); + + Task entity = ConvertUtil.convert(dto, Task.class); + taskMapper.insert(entity); + requireSucess = false; + return true; + } + } + + @Override + public JSONObject getDeviceStatusName() { + JSONObject jo = new JSONObject(); + String mode = ""; + String action = ""; + String move = ""; + if (this.getMode() == 0) { + mode = "未联机"; + } else if (this.getMode() == 1) { + mode = "单机"; + } else if (this.getMode() == 2) { + mode = "联机"; + } else if (this.getMode() == 3) { + mode = "运行中"; + } + + if (this.getMove() == 0) { + move = "无货"; + jo.put("hasGoods", false); + } else if (this.getMove() == 1) { + move = "有货"; + jo.put("hasGoods", true); + } else if (this.getMove() == 2) { + move = "有托盘有货"; + jo.put("hasGoods", true); + } + jo.put("device_name", this.getDevice().getDevice_name()); + jo.put("mode", mode); + jo.put("move", move); + jo.put("action", action); + jo.put("isOnline", this.getIsonline()); + jo.put("error", this.getError()); + jo.put("isError", this.getIserror()); + jo.put("task", this.getTask()); + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { + + } + + /** + * lms申请任务 + * + * @param + */ + public synchronized boolean apply(Integer type) { + Date date = new Date(); + if (date.getTime() - this.time.getTime() < (long) this.instruction_require_time_out) { + log.trace("触发时间因为小于{}毫秒,而被无视", this.time); + return false; + } else { + this.time = date; + FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); + request.setDevice_code(devicecode); + request.setMaterial_type(String.valueOf(material_type)); + request.setVehicle_code(String.valueOf(barcode)); + if (devicecode.startsWith("TBX")&&type==5&&barcode>0) { + //满架下料 + request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName()); + }else if (devicecode.startsWith("TBX")&&type==6) { + //补空架 + request.setRequest_medthod_code(RequestMethodEnum.apply_tbxbkj.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_tbxbkj.getName()); + }else if (type==7) { + //空托盘出库,包片机和销售出库空位都可以 + request.setRequest_medthod_code(RequestMethodEnum.apply_kghjrk.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_kghjrk.getName()); + }else if(devicecode.startsWith("BP")&&material_type>0){ + request.setRequest_medthod_code(RequestMethodEnum.apply_bpsl.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_bpsl.getName()); + } + String resp = acsToWmsService.applyTask(request); + JSONObject res_jo = JSONObject.parseObject(resp); + if (StrUtil.equals(res_jo.getString("code"), "200")) { + this.writing(type); + this.setRequireSucess(true); + log.info("acs申请任务", this.devicecode, "满盅入库任务申请成功!"); + }else{ + this.writing(99); + } + return true; + } + } +} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/ItemProtocol.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/ItemProtocol.java new file mode 100644 index 0000000..218d53e --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/ItemProtocol.java @@ -0,0 +1,111 @@ +package org.nl.acs.device_driver.tianneng.site_status; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Data +public class ItemProtocol { + + public static String item_heartbeat = "heartbeat"; + public static String item_mode = "mode"; + public static String item_move = "move"; + public static String item_action = "action"; + public static String item_error = "error"; + public static String item_to_command = "to_command"; + public static String item_to_target = "to_target"; + public static String item_to_task = "to_task"; + public static String item_weight = "weight"; + public static String item_material_type = "material_type"; + public static String item_barcode = "barcode"; + + private StandardInspectSiteDeviceDriver driver; + + public ItemProtocol(StandardInspectSiteDeviceDriver driver) { + this.driver = driver; + } + + public int getHeartbeat() { + return this.getOpcIntegerValue(item_heartbeat); + } + + public int getMode() { + return this.getOpcIntegerValue(item_mode); + } + + public int getMove() { + return this.getOpcIntegerValue(item_move); + } + + public int getAction() { + return this.getOpcIntegerValue(item_action); + } + + public int getError() { + return this.getOpcIntegerValue(item_error); + } + + + public int getMaterialType() { + return this.getOpcIntegerValue(item_material_type); + } + public int getBarcode() { + return this.getOpcIntegerValue(item_barcode); + } + + public int getToCommand() { + return this.getOpcIntegerValue(item_to_command); + } + + public int getToTarget() { + return this.getOpcIntegerValue(item_to_target); + } + + public int getToTask() { + return this.getOpcIntegerValue(item_to_task); + } + + //是否有货 + public int hasGoods(int move) { + return move; + } + + Boolean isonline; + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegeregerValue(protocol); + if (value == null) { + // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!"); + setIsonline(false); + } else { + setIsonline(true); + return value; + } + return 0; + + } + + public static List getReadableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); + list.add(new ItemDto(item_mode, "工作状态", "DB600.B2", Boolean.valueOf(true))); + list.add(new ItemDto(item_move, "光电开关信号", "DB600.B3")); + list.add(new ItemDto(item_action, "取放信号", "DB600.B4")); + list.add(new ItemDto(item_material_type, "物料类型", "DB600.D6")); + list.add(new ItemDto(item_error, "报警信号", "DB600.B7")); + list.add(new ItemDto(item_barcode, "条码", "DB600.D8")); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); + return list; + } + +} + diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDefination.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDefination.java new file mode 100644 index 0000000..477db7b --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDefination.java @@ -0,0 +1,62 @@ +package org.nl.acs.device_driver.tianneng.site_status; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device.domain.Device; +import org.nl.acs.device.enums.DeviceType; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * 检测站点驱动定义 + * 说明:该站点为普通带光电检测站点 + */ +@Service +public class StandardInspectSiteDefination implements OpcDeviceDriverDefination { + @Override + public String getDriverCode() { + return "standard_inspect_site"; + } + + @Override + public String getDriverName() { + return "标准版-检测站点"; + } + + @Override + public String getDriverDescription() { + return "标准版-检测站点"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new StandardInspectSiteDeviceDriver()).setDevice(device).setDriverDefination(this); + + } + + @Override + public Class getDeviceDriverType() { + return StandardInspectSiteDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.conveyor); + return types; + } + + @Override + public List getReadableItemDtos() { + return ItemProtocol.getReadableItemDtos(); + } + + @Override + public List getWriteableItemDtos() { + return ItemProtocol.getWriteableItemDtos(); + } + +} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDeviceDriver.java new file mode 100644 index 0000000..b1fe03c --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDeviceDriver.java @@ -0,0 +1,476 @@ +package org.nl.acs.device_driver.tianneng.site_status; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +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.device.domain.Device; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.RequestMethodEnum; +import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; +import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; +import org.nl.acs.ext.wms.service.AcsToWmsService; +import org.nl.acs.instruction.domain.Instruction; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.acs.opc.WcsConfig; +import org.nl.acs.route.service.RouteLineService; +import org.nl.acs.route.service.dto.RouteLineDto; +import org.nl.acs.task.domain.Task; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.task.service.mapper.TaskMapper; +import org.nl.acs.utils.ConvertUtil; +import org.nl.common.utils.CodeUtil; +import org.nl.config.SpringContextHolder; +import org.openscada.opc.lib.da.Server; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 检测站点驱动 + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver , DeviceStageMonitor { + protected ItemProtocol itemProtocol = new ItemProtocol(this); + + InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); + + DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); + + RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); + + TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); + + TaskMapper taskMapper; + + AcsToWmsService acsToWmsService=SpringContextHolder.getBean("acsToWmsServiceImpl"); + + String container; + String container_type_desc; + String last_container_type_desc; + String last_container; + //放货准备锁 + String putReadyLock = null; + //有货标记 + protected boolean has_goods_tag = false; + + private Date time = new Date(); + + int mode = 0; + int error = 0; + int move = 0; + int task = 0; + int action = 0; + int last_mode = 0; + int last_error = 0; + int last_move = 0; + int last_task = 0; + Boolean isonline = true; + int hasGoods = 0; + String message = null; + Boolean iserror = false; + + int io_action = 0; + int last_io_action = 0; + int material_type = 0; + int last_material_type = 0; + int barcode = 0; + int last_barcode =0; + + + boolean hasVehicle = false; + boolean isReady = false; + protected int instruction_num = 0; + protected int instruction_num_truth = 0; + boolean isFold = false; + private String assemble_check_tag; + + protected String current_stage_instruction_message; + protected String last_stage_instruction_message; + Integer heartbeat_tag; + private Date instruction_require_time = new Date(); + private Date instruction_finished_time = new Date(); + + private int instruction_require_time_out; + boolean requireSucess = false; + + private int instruction_finished_time_out; + + int branchProtocol = 0; + //备注 + String remark; + //数量 + String qty; + //物料 + String material; + //批次 + String batch; + //当前指令 + Instruction inst = null; + //上次指令 + Instruction last_inst = null; + + //触摸屏手动触发任务 + private Boolean is_has_task = false; + + //满盅入库请求标记 + boolean Sucess = false; + + //暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域 + int flag; + + String devicecode; + + @Override + public Device getDevice() { + return this.device; + } + + + @Override + public void execute() { + String message = null; + try { + devicecode = this.getDeviceCode(); + mode = this.itemProtocol.getMode(); + error = this.itemProtocol.getError(); + move = this.itemProtocol.getMove(); + hasGoods = this.itemProtocol.getMove(); + action = this.itemProtocol.getAction(); + material_type = this.itemProtocol.getMaterialType(); + barcode=this.itemProtocol.getBarcode(); + if (mode != last_mode) { + this.setRequireSucess(false); + if(mode==2){ + this.writing(0); + } + } + if (move != last_move) { + } + if (error != last_error) { + } + + + } catch (Exception var17) { + return; + } + + if (!this.itemProtocol.getIsonline()) { + this.setIsonline(false); + this.setIserror(true); + message = "信号量同步异常"; + //未联机 + } else if (mode == 0) { + this.setIsonline(false); + this.setIserror(true); + message = "未联机"; + //有报警 + } else if (error != 0) { + this.setIsonline(false); + this.setIserror(true); + message = "有报警"; + //无报警 + } else { + this.setIsonline(true); + this.setIserror(false); + message = ""; + Instruction instruction = null; + List toInstructions; + switch (mode) { + case 1: + log.debug("设备运转模式:等待工作"); + return; + case 2: + break; + case 4: + //叫料 + if (move==0 && !requireSucess){ + apply(4); + } + break; + case 5: + //满料出库 + if(move==1 && !requireSucess){ + apply(5); + } + break; + case 6: + //申请空盘 + if (move==0 && !requireSucess){ + apply(6); + } + break; + case 7: + //空托盘出库 + if(move==1 && !requireSucess){ + apply(7); + } + break; + } + + switch (flag) { + //取货完成 + case 1: + writing(2); + return; + //放货完成 + case 2: + writing(3); + return; + + } + + } + last_mode = mode; + last_error = error; + last_move = move; + last_task = task; + last_material_type = material_type; + last_barcode=barcode; + + } + + + public boolean exe_error() { + if (this.error == 0) { + return true; + } else { + log.debug("设备报警"); + return false; + } + } + + protected void thingToNothing() { + log.debug("从有货到无货 清理数据"); + this.set_last_container(container, container_type_desc); + } + + public void set_last_container(String barcode, String type_desc) { + this.set_last_container(barcode); + this.set_last_container_type_desc(type_desc); + } + + public void set_last_container(String barcode) { + } + + public void set_last_container_type_desc(String type) { + } + + public boolean exe_business() { + return true; + } + + protected void executing(Instruction instruction) { + this.executing(1, instruction, ""); + } + + public void executing(int command, Instruction instruction, String appendMessage) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_target; + String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_task; + if (appendMessage == null) { + appendMessage = ""; + } + if (instruction != null) { + instruction_num = Integer.parseInt(instruction.getInstruction_code()); + } + //String opcservcerid = this.getDevice().getOpc_server_id(); +//Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, 1); + itemMap.put(to_task, instruction_num); + this.control(itemMap); + + } + + public void executing(Server server, Map itemMap) { + this.control(itemMap); + } + + public void writing(int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + + //String opcservcerid = this.getDevice().getOpc_server_id(); +//Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, command); + this.control(itemMap); + + } + + public void writing(int type, int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_target; + String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_task; + //String opcservcerid = this.getDevice().getOpc_server_id(); +//Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + if (type == 1) { + itemMap.put(to_command, command); + } else if (type == 2) { + itemMap.put(to_target, command); + + } else if (type == 3) { + itemMap.put(to_task, command); + } + this.control(itemMap); + + } + + public boolean instruction_require(String container_code) { + return instruction_require(container_code, WcsConfig.task_container_type_default_desc); + } + + /** + * 请求指令 + * + * @param container_code + * @param container_type + */ + public synchronized boolean instruction_require(String container_code, String container_type) { + 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); + return false; + } else { + this.instruction_require_time = date; + TaskDto dto = new TaskDto(); + String now = DateUtil.now(); + dto.setTask_id(IdUtil.simpleUUID()); + dto.setCreate_by(this.getDevice().getDevice_code()); + dto.setUpdate_by(this.getDevice().getDevice_code()); + dto.setStart_point_code(this.getDevice().getDevice_code()); + dto.setVehicle_code(container_code); + dto.setVehicle_type(container_type); + + String taskcode = CodeUtil.getNewCode("TASK_NO"); + dto.setTask_code("-" + taskcode); + dto.setTask_status("0"); + dto.setPriority("101"); + RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code()); + String next_device_codecode = jo.getNext_device_code(); + if (StrUtil.isEmpty(next_device_codecode)) { + throw new RuntimeException("该设备未找到对应路由"); + } + dto.setNext_point_code(next_device_codecode); + dto.setUpdate_time(now); + dto.setCreate_time(now); + +// WQLObject wo = WQLObject.getWQLObject("acs_task"); +// JSONObject json = (JSONObject) JSONObject.toJSON(dto); +// +// wo.insert(json); + + Task entity = ConvertUtil.convert(dto, Task.class); + taskMapper.insert(entity); + requireSucess = false; + return true; + } + } + + @Override + public JSONObject getDeviceStatusName() { + JSONObject jo = new JSONObject(); + String mode = ""; + String action = ""; + String move = ""; + if (this.getMode() == 0) { + mode = "未联机"; + } else if (this.getMode() == 1) { + mode = "单机"; + } else if (this.getMode() == 2) { + mode = "联机"; + } else if (this.getMode() == 3) { + mode = "运行中"; + } + + if (this.getMove() == 0) { + move = "无货"; + jo.put("hasGoods", false); + } else if (this.getMove() == 1) { + move = "有货"; + jo.put("hasGoods", true); + } else if (this.getMove() == 2) { + move = "有托盘有货"; + jo.put("hasGoods", true); + } + jo.put("device_name", this.getDevice().getDevice_name()); + jo.put("mode", mode); + jo.put("move", move); + jo.put("action", action); + jo.put("isOnline", this.getIsonline()); + jo.put("error", this.getError()); + jo.put("isError", this.getIserror()); + jo.put("task", this.getTask()); + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { + + } + + /** + * lms申请任务 + * + * @param + */ + public synchronized boolean apply(Integer type) { + Date date = new Date(); + if (date.getTime() - this.time.getTime() < (long) this.instruction_require_time_out) { + log.trace("触发时间因为小于{}毫秒,而被无视", this.time); + return false; + } else { + this.time = date; + FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); + request.setDevice_code(devicecode); + request.setMaterial_type(String.valueOf(material_type)); + request.setVehicle_code(String.valueOf(barcode)); + if (devicecode.startsWith("TBX")&&type==5&&barcode>0) { + //满架下料 + request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName()); + }else if (devicecode.startsWith("TBX")&&type==6) { + //补空架 + request.setRequest_medthod_code(RequestMethodEnum.apply_tbxbkj.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_tbxbkj.getName()); + }else if (type==7) { + //空托盘出库,包片机和销售出库空位都可以 + request.setRequest_medthod_code(RequestMethodEnum.apply_kghjrk.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_kghjrk.getName()); + }else if(devicecode.startsWith("BP")&&material_type>0){ + request.setRequest_medthod_code(RequestMethodEnum.apply_bpsl.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_bpsl.getName()); + } + String resp = acsToWmsService.applyTask(request); + JSONObject res_jo = JSONObject.parseObject(resp); + if (StrUtil.equals(res_jo.getString("code"), "200")) { + this.writing(type); + this.setRequireSucess(true); + log.info("acs申请任务", this.devicecode, "满盅入库任务申请成功!"); + }else{ + this.writing(99); + } + return true; + } + } +} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/ItemProtocol.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/ItemProtocol.java new file mode 100644 index 0000000..62e8d88 --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/ItemProtocol.java @@ -0,0 +1,149 @@ +package org.nl.acs.device_driver.tianneng.tubanxian; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Data +public class ItemProtocol { + + public static String item_heartbeat = "heartbeat"; + public static String item_mode = "mode"; + public static String item_status = "status"; + public static String item_error = "error"; + public static String item_open_time = "open_time"; + public static String item_standby_time = "standby_time"; + public static String item_production_time = "production_time"; + public static String item_error_time = "error_time"; + public static String item_end_time = "end_time"; + public static String item_weight = "weight"; + public static String item_order_No = "order_No"; + public static String item_material = "material"; + public static String item_number = "number"; + public static String item_to_command = "to_command"; + public static String item_to_order_No = "to_order_No"; + public static String item_to_material_code = "to_material_code"; + public static String item_to_number = "to_number"; + + private TubanxianSiteDeviceDriver driver; + + public ItemProtocol(TubanxianSiteDeviceDriver driver) { + this.driver = driver; + } + + public int getHeartbeat() { + return this.getOpcIntegerValue(item_heartbeat); + } + + public int getMode() { + return this.getOpcIntegerValue(item_mode); + } + + public int getItem_status() { + return this.getOpcIntegerValue(item_status); + } + + public int getItem_error() { + return this.getOpcIntegerValue(item_error); + } + + public int getItem_open_time() { + return this.getOpcIntegerValue(item_open_time); + } + + public int getItem_standby_time() { + return this.getOpcIntegerValue(item_standby_time); + } + + public int getItem_production_time() { + return this.getOpcIntegerValue(item_production_time); + } + + public int getItem_error_time() { + return this.getOpcIntegerValue(item_error_time); + } + + public int getItem_end_time() { + return this.getOpcIntegerValue(item_end_time); + } + + public int getItem_weight() { + return this.getOpcIntegerValue(item_weight); + } + + public int getItem_order_No() { + return this.getOpcIntegerValue(item_order_No); + } + + public int getItem_material() { + return this.getOpcIntegerValue(item_material); + } + + public int getItem_number() { + return this.getOpcIntegerValue(item_number); + } + + public int getItem_to_command() { + return this.getOpcIntegerValue(item_to_command); + } + + public int getItem_to_order_No() { + return this.getOpcIntegerValue(item_to_order_No); + } + + public int getItem_to_material_code() { + return this.getOpcIntegerValue(item_to_material_code); + } + + public int getItem_to_number() { + return this.getOpcIntegerValue(item_to_number); + } + + Boolean isonline; + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegeregerValue(protocol); + if (value == null) { + // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!"); + setIsonline(false); + } else { + setIsonline(true); + return value; + } + return 0; + + } + + public static List getReadableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); + list.add(new ItemDto(item_mode, "工作状态", "DB600.B2")); + list.add(new ItemDto(item_status, "设备状态", "DB600.B3")); + list.add(new ItemDto(item_error, "error", "DB600.B4")); + list.add(new ItemDto(item_open_time, "当前开机时间", "DB600.D6")); + list.add(new ItemDto(item_standby_time, "当前待机时间", "DB600.B7")); + list.add(new ItemDto(item_error_time, "当前生产时间", "DB600.D8")); + list.add(new ItemDto(item_end_time, "当前故障时间", "DB600.B3")); + list.add(new ItemDto(item_weight, "当前关机时间", "DB600.B4")); + list.add(new ItemDto(item_order_No, "本次称重重量", "DB600.D6")); + list.add(new ItemDto(item_error, "工单号", "DB600.B7")); + list.add(new ItemDto(item_material, "当前生产物料", "DB600.D8")); + list.add(new ItemDto(item_number, "当前生产数量", "DB600.D8")); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); + list.add(new ItemDto(item_to_order_No, "工单号", "DB601.W2")); + list.add(new ItemDto(item_to_material_code, "下发物料编号", "DB601.W2")); + list.add(new ItemDto(item_to_number, "下发生产数量", "DB601.W2")); + return list; + } + +} + diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDefination.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDefination.java new file mode 100644 index 0000000..9bc6234 --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDefination.java @@ -0,0 +1,62 @@ +package org.nl.acs.device_driver.tianneng.tubanxian; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device.domain.Device; +import org.nl.acs.device.enums.DeviceType; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * 涂板线驱动定义 + * 说明:该站点为涂板线 + */ +@Service +public class TubanxianSiteDefination implements OpcDeviceDriverDefination { + @Override + public String getDriverCode() { + return "tubanxian_site"; + } + + @Override + public String getDriverName() { + return "涂板线"; + } + + @Override + public String getDriverDescription() { + return "涂板线"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new TubanxianSiteDeviceDriver()).setDevice(device).setDriverDefination(this); + + } + + @Override + public Class getDeviceDriverType() { + return TubanxianSiteDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.conveyor); + return types; + } + + @Override + public List getReadableItemDtos() { + return ItemProtocol.getReadableItemDtos(); + } + + @Override + public List getWriteableItemDtos() { + return ItemProtocol.getWriteableItemDtos(); + } + +} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDeviceDriver.java new file mode 100644 index 0000000..283b589 --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDeviceDriver.java @@ -0,0 +1,291 @@ +package org.nl.acs.device_driver.tianneng.tubanxian; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +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.device.domain.Device; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.RequestMethodEnum; +import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; +import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; +import org.nl.acs.ext.wms.service.AcsToWmsService; +import org.nl.acs.instruction.domain.Instruction; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.acs.opc.WcsConfig; +import org.nl.acs.route.service.RouteLineService; +import org.nl.acs.route.service.dto.RouteLineDto; +import org.nl.acs.task.domain.Task; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.task.service.mapper.TaskMapper; +import org.nl.acs.utils.ConvertUtil; +import org.nl.common.utils.CodeUtil; +import org.nl.config.SpringContextHolder; +import org.openscada.opc.lib.da.Server; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 涂板线驱动 + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class TubanxianSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver , DeviceStageMonitor { + protected ItemProtocol itemProtocol = new ItemProtocol(this); + + InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); + + DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); + + RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); + + TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); + + TaskMapper taskMapper; + + AcsToWmsService acsToWmsService=SpringContextHolder.getBean("acsToWmsServiceImpl"); + + String container; + String container_type_desc; + String last_container_type_desc; + String last_container; + //放货准备锁 + String putReadyLock = null; + //有货标记 + protected boolean has_goods_tag = false; + + private Date time = new Date(); + + int mode = 0; + int error = 0; + int move = 0; + int task = 0; + int action = 0; + int last_mode = 0; + int last_error = 0; + int last_move = 0; + int last_task = 0; + Boolean isonline = true; + int hasGoods = 0; + String message = null; + Boolean iserror = false; + + int io_action = 0; + int last_io_action = 0; + int material_type = 0; + int last_material_type = 0; + int barcode = 0; + int last_barcode =0; + + + boolean hasVehicle = false; + boolean isReady = false; + protected int instruction_num = 0; + protected int instruction_num_truth = 0; + boolean isFold = false; + private String assemble_check_tag; + + protected String current_stage_instruction_message; + protected String last_stage_instruction_message; + Integer heartbeat_tag; + private Date instruction_require_time = new Date(); + private Date instruction_finished_time = new Date(); + + private int instruction_require_time_out; + boolean requireSucess = false; + + private int instruction_finished_time_out; + + int branchProtocol = 0; + //备注 + String remark; + //数量 + String qty; + //物料 + String material; + //批次 + String batch; + //当前指令 + Instruction inst = null; + //上次指令 + Instruction last_inst = null; + + //触摸屏手动触发任务 + private Boolean is_has_task = false; + + //满盅入库请求标记 + boolean Sucess = false; + + //暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域 + int flag; + + String devicecode; + + @Override + public Device getDevice() { + return this.device; + } + + + @Override + public void execute() { + String message = null; + try { + devicecode = this.getDeviceCode(); + mode = this.itemProtocol.getMode(); + if (mode != last_mode) { + this.setRequireSucess(false); + if(mode==2){ + this.writing(0); + } + } + if (move != last_move) { + } + if (error != last_error) { + } + + + } catch (Exception var17) { + return; + } + + if (!this.itemProtocol.getIsonline()) { + this.setIsonline(false); + this.setIserror(true); + message = "信号量同步异常"; + //未联机 + } else if (mode == 0) { + this.setIsonline(false); + this.setIserror(true); + message = "未联机"; + //有报警 + } else if (error != 0) { + this.setIsonline(false); + this.setIserror(true); + message = "有报警"; + //无报警 + } else { + this.setIsonline(true); + this.setIserror(false); + message = ""; + Instruction instruction = null; + List toInstructions; + switch (mode) { + case 1: + log.debug("设备运转模式:等待工作"); + return; + case 2: + break; + case 3: + //称重 + if (!requireSucess){ + //todo 请求wms获取称重结果 + } + break; + case 4: + //工单开工 + if (!requireSucess){ + //todo 工单开工 + } + break; + case 5: + //工单完成 + if (!requireSucess){ + //todo 工单完成 + } + break; + } + + switch (flag) { + //取货完成 + case 1: + writing(2); + return; + //放货完成 + case 2: + writing(3); + return; + + } + + } + last_mode = mode; + last_error = error; + last_move = move; + last_task = task; + last_material_type = material_type; + last_barcode=barcode; + + } + + + + public void writing(int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + + //String opcservcerid = this.getDevice().getOpc_server_id(); +//Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, command); + this.control(itemMap); + + } + + + + @Override + public JSONObject getDeviceStatusName() { + JSONObject jo = new JSONObject(); + String mode = ""; + String action = ""; + String move = ""; + if (this.getMode() == 0) { + mode = "未联机"; + } else if (this.getMode() == 1) { + mode = "单机"; + } else if (this.getMode() == 2) { + mode = "联机"; + } else if (this.getMode() == 3) { + mode = "运行中"; + } + + if (this.getMove() == 0) { + move = "无货"; + jo.put("hasGoods", false); + } else if (this.getMove() == 1) { + move = "有货"; + jo.put("hasGoods", true); + } else if (this.getMove() == 2) { + move = "有托盘有货"; + jo.put("hasGoods", true); + } + jo.put("device_name", this.getDevice().getDevice_name()); + jo.put("mode", mode); + jo.put("move", move); + jo.put("action", action); + jo.put("isOnline", this.getIsonline()); + jo.put("error", this.getError()); + jo.put("isError", this.getIserror()); + jo.put("task", this.getTask()); + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { + + } + +} From fbc82a596988041cea031bf8395c8ecdcaec7531 Mon Sep 17 00:00:00 2001 From: psh Date: Tue, 7 Nov 2023 15:24:52 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E5=A4=A9=E8=83=BD=E5=88=86=E6=94=AF?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E5=BB=BA=E7=AB=8B=EF=BC=8C=E4=BB=8E=E8=B6=85?= =?UTF-8?q?=E5=A8=81=E7=89=88=E6=9C=AC=E5=8E=BB=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tianneng/guhuashi/ItemProtocol.java | 111 ---- .../StandardInspectSiteDefination.java | 62 --- .../StandardInspectSiteDeviceDriver.java | 476 ------------------ .../tianneng/site/ItemProtocol.java | 111 ---- .../site/StandardInspectSiteDefination.java | 62 --- .../site/StandardInspectSiteDeviceDriver.java | 476 ------------------ .../tianneng/site_status/ItemProtocol.java | 111 ---- .../StandardInspectSiteDefination.java | 62 --- .../StandardInspectSiteDeviceDriver.java | 476 ------------------ .../tianneng/tubanxian/ItemProtocol.java | 149 ------ .../tubanxian/TubanxianSiteDefination.java | 62 --- .../tubanxian/TubanxianSiteDeviceDriver.java | 291 ----------- 12 files changed, 2449 deletions(-) delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/ItemProtocol.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDefination.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDeviceDriver.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/ItemProtocol.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDefination.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDeviceDriver.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/ItemProtocol.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDefination.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDeviceDriver.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/ItemProtocol.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDefination.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDeviceDriver.java diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/ItemProtocol.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/ItemProtocol.java deleted file mode 100644 index d900b0c..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/ItemProtocol.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.nl.acs.device_driver.tianneng.guhuashi; - -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.nl.acs.device.device_driver.standard_inspect.ItemDto; - -import java.util.ArrayList; -import java.util.List; - -@Slf4j -@Data -public class ItemProtocol { - - public static String item_heartbeat = "heartbeat"; - public static String item_mode = "mode"; - public static String item_move = "move"; - public static String item_action = "action"; - public static String item_error = "error"; - public static String item_to_command = "to_command"; - public static String item_to_target = "to_target"; - public static String item_to_task = "to_task"; - public static String item_weight = "weight"; - public static String item_material_type = "material_type"; - public static String item_barcode = "barcode"; - - private StandardInspectSiteDeviceDriver driver; - - public ItemProtocol(StandardInspectSiteDeviceDriver driver) { - this.driver = driver; - } - - public int getHeartbeat() { - return this.getOpcIntegerValue(item_heartbeat); - } - - public int getMode() { - return this.getOpcIntegerValue(item_mode); - } - - public int getMove() { - return this.getOpcIntegerValue(item_move); - } - - public int getAction() { - return this.getOpcIntegerValue(item_action); - } - - public int getError() { - return this.getOpcIntegerValue(item_error); - } - - - public int getMaterialType() { - return this.getOpcIntegerValue(item_material_type); - } - public int getBarcode() { - return this.getOpcIntegerValue(item_barcode); - } - - public int getToCommand() { - return this.getOpcIntegerValue(item_to_command); - } - - public int getToTarget() { - return this.getOpcIntegerValue(item_to_target); - } - - public int getToTask() { - return this.getOpcIntegerValue(item_to_task); - } - - //是否有货 - public int hasGoods(int move) { - return move; - } - - Boolean isonline; - - public int getOpcIntegerValue(String protocol) { - Integer value = this.driver.getIntegeregerValue(protocol); - if (value == null) { - // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!"); - setIsonline(false); - } else { - setIsonline(true); - return value; - } - return 0; - - } - - public static List getReadableItemDtos() { - ArrayList list = new ArrayList(); - list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); - list.add(new ItemDto(item_mode, "工作状态", "DB600.B2", Boolean.valueOf(true))); - list.add(new ItemDto(item_move, "光电开关信号", "DB600.B3")); - list.add(new ItemDto(item_action, "取放信号", "DB600.B4")); - list.add(new ItemDto(item_material_type, "物料类型", "DB600.D6")); - list.add(new ItemDto(item_error, "报警信号", "DB600.B7")); - list.add(new ItemDto(item_barcode, "条码", "DB600.D8")); - return list; - } - - public static List getWriteableItemDtos() { - ArrayList list = new ArrayList(); - list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); - return list; - } - -} - diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDefination.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDefination.java deleted file mode 100644 index 3e4229e..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDefination.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.nl.acs.device_driver.tianneng.guhuashi; - -import org.nl.acs.device.device_driver.standard_inspect.ItemDto; -import org.nl.acs.device.domain.Device; -import org.nl.acs.device.enums.DeviceType; -import org.nl.acs.device_driver.DeviceDriver; -import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; -import org.springframework.stereotype.Service; - -import java.util.LinkedList; -import java.util.List; - -/** - * 检测站点驱动定义 - * 说明:该站点为普通带光电检测站点 - */ -@Service -public class StandardInspectSiteDefination implements OpcDeviceDriverDefination { - @Override - public String getDriverCode() { - return "standard_inspect_site"; - } - - @Override - public String getDriverName() { - return "标准版-检测站点"; - } - - @Override - public String getDriverDescription() { - return "标准版-检测站点"; - } - - @Override - public DeviceDriver getDriverInstance(Device device) { - return (new StandardInspectSiteDeviceDriver()).setDevice(device).setDriverDefination(this); - - } - - @Override - public Class getDeviceDriverType() { - return StandardInspectSiteDeviceDriver.class; - } - - @Override - public List getFitDeviceTypes() { - List types = new LinkedList(); - types.add(DeviceType.conveyor); - return types; - } - - @Override - public List getReadableItemDtos() { - return ItemProtocol.getReadableItemDtos(); - } - - @Override - public List getWriteableItemDtos() { - return ItemProtocol.getWriteableItemDtos(); - } - -} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDeviceDriver.java deleted file mode 100644 index 07e6953..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/guhuashi/StandardInspectSiteDeviceDriver.java +++ /dev/null @@ -1,476 +0,0 @@ -package org.nl.acs.device_driver.tianneng.guhuashi; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -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.device.domain.Device; -import org.nl.acs.device.service.DeviceService; -import org.nl.acs.device_driver.DeviceDriver; -import org.nl.acs.device_driver.RequestMethodEnum; -import org.nl.acs.device_driver.RouteableDeviceDriver; -import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; -import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; -import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; -import org.nl.acs.ext.wms.service.AcsToWmsService; -import org.nl.acs.instruction.domain.Instruction; -import org.nl.acs.instruction.service.InstructionService; -import org.nl.acs.monitor.DeviceStageMonitor; -import org.nl.acs.opc.WcsConfig; -import org.nl.acs.route.service.RouteLineService; -import org.nl.acs.route.service.dto.RouteLineDto; -import org.nl.acs.task.domain.Task; -import org.nl.acs.task.service.TaskService; -import org.nl.acs.task.service.dto.TaskDto; -import org.nl.acs.task.service.mapper.TaskMapper; -import org.nl.acs.utils.ConvertUtil; -import org.nl.common.utils.CodeUtil; -import org.nl.config.SpringContextHolder; -import org.openscada.opc.lib.da.Server; - -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 检测站点驱动 - */ -@Slf4j -@Data -@RequiredArgsConstructor -public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver , DeviceStageMonitor { - protected ItemProtocol itemProtocol = new ItemProtocol(this); - - InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); - - DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); - - RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); - - TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); - - TaskMapper taskMapper; - - AcsToWmsService acsToWmsService=SpringContextHolder.getBean("acsToWmsServiceImpl"); - - String container; - String container_type_desc; - String last_container_type_desc; - String last_container; - //放货准备锁 - String putReadyLock = null; - //有货标记 - protected boolean has_goods_tag = false; - - private Date time = new Date(); - - int mode = 0; - int error = 0; - int move = 0; - int task = 0; - int action = 0; - int last_mode = 0; - int last_error = 0; - int last_move = 0; - int last_task = 0; - Boolean isonline = true; - int hasGoods = 0; - String message = null; - Boolean iserror = false; - - int io_action = 0; - int last_io_action = 0; - int material_type = 0; - int last_material_type = 0; - int barcode = 0; - int last_barcode =0; - - - boolean hasVehicle = false; - boolean isReady = false; - protected int instruction_num = 0; - protected int instruction_num_truth = 0; - boolean isFold = false; - private String assemble_check_tag; - - protected String current_stage_instruction_message; - protected String last_stage_instruction_message; - Integer heartbeat_tag; - private Date instruction_require_time = new Date(); - private Date instruction_finished_time = new Date(); - - private int instruction_require_time_out; - boolean requireSucess = false; - - private int instruction_finished_time_out; - - int branchProtocol = 0; - //备注 - String remark; - //数量 - String qty; - //物料 - String material; - //批次 - String batch; - //当前指令 - Instruction inst = null; - //上次指令 - Instruction last_inst = null; - - //触摸屏手动触发任务 - private Boolean is_has_task = false; - - //满盅入库请求标记 - boolean Sucess = false; - - //暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域 - int flag; - - String devicecode; - - @Override - public Device getDevice() { - return this.device; - } - - - @Override - public void execute() { - String message = null; - try { - devicecode = this.getDeviceCode(); - mode = this.itemProtocol.getMode(); - error = this.itemProtocol.getError(); - move = this.itemProtocol.getMove(); - hasGoods = this.itemProtocol.getMove(); - action = this.itemProtocol.getAction(); - material_type = this.itemProtocol.getMaterialType(); - barcode=this.itemProtocol.getBarcode(); - if (mode != last_mode) { - this.setRequireSucess(false); - if(mode==2){ - this.writing(0); - } - } - if (move != last_move) { - } - if (error != last_error) { - } - - - } catch (Exception var17) { - return; - } - - if (!this.itemProtocol.getIsonline()) { - this.setIsonline(false); - this.setIserror(true); - message = "信号量同步异常"; - //未联机 - } else if (mode == 0) { - this.setIsonline(false); - this.setIserror(true); - message = "未联机"; - //有报警 - } else if (error != 0) { - this.setIsonline(false); - this.setIserror(true); - message = "有报警"; - //无报警 - } else { - this.setIsonline(true); - this.setIserror(false); - message = ""; - Instruction instruction = null; - List toInstructions; - switch (mode) { - case 1: - log.debug("设备运转模式:等待工作"); - return; - case 2: - break; - case 4: - //叫料 - if (move==0 && !requireSucess){ - apply(4); - } - break; - case 5: - //满料出库 - if(move==1 && !requireSucess){ - apply(5); - } - break; - case 6: - //申请空盘 - if (move==0 && !requireSucess){ - apply(6); - } - break; - case 7: - //空托盘出库 - if(move==1 && !requireSucess){ - apply(7); - } - break; - } - - switch (flag) { - //取货完成 - case 1: - writing(2); - return; - //放货完成 - case 2: - writing(3); - return; - - } - - } - last_mode = mode; - last_error = error; - last_move = move; - last_task = task; - last_material_type = material_type; - last_barcode=barcode; - - } - - - public boolean exe_error() { - if (this.error == 0) { - return true; - } else { - log.debug("设备报警"); - return false; - } - } - - protected void thingToNothing() { - log.debug("从有货到无货 清理数据"); - this.set_last_container(container, container_type_desc); - } - - public void set_last_container(String barcode, String type_desc) { - this.set_last_container(barcode); - this.set_last_container_type_desc(type_desc); - } - - public void set_last_container(String barcode) { - } - - public void set_last_container_type_desc(String type) { - } - - public boolean exe_business() { - return true; - } - - protected void executing(Instruction instruction) { - this.executing(1, instruction, ""); - } - - public void executing(int command, Instruction instruction, String appendMessage) { - String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_command; - String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_target; - String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_task; - if (appendMessage == null) { - appendMessage = ""; - } - if (instruction != null) { - instruction_num = Integer.parseInt(instruction.getInstruction_code()); - } - //String opcservcerid = this.getDevice().getOpc_server_id(); -//Server server = ReadUtil.getServer(opcservcerid); - Map itemMap = new HashMap(); - itemMap.put(to_command, 1); - itemMap.put(to_task, instruction_num); - this.control(itemMap); - - } - - public void executing(Server server, Map itemMap) { - this.control(itemMap); - } - - public void writing(int command) { - String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_command; - - //String opcservcerid = this.getDevice().getOpc_server_id(); -//Server server = ReadUtil.getServer(opcservcerid); - Map itemMap = new HashMap(); - itemMap.put(to_command, command); - this.control(itemMap); - - } - - public void writing(int type, int command) { - String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_command; - String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_target; - String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_task; - //String opcservcerid = this.getDevice().getOpc_server_id(); -//Server server = ReadUtil.getServer(opcservcerid); - Map itemMap = new HashMap(); - if (type == 1) { - itemMap.put(to_command, command); - } else if (type == 2) { - itemMap.put(to_target, command); - - } else if (type == 3) { - itemMap.put(to_task, command); - } - this.control(itemMap); - - } - - public boolean instruction_require(String container_code) { - return instruction_require(container_code, WcsConfig.task_container_type_default_desc); - } - - /** - * 请求指令 - * - * @param container_code - * @param container_type - */ - public synchronized boolean instruction_require(String container_code, String container_type) { - 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); - return false; - } else { - this.instruction_require_time = date; - TaskDto dto = new TaskDto(); - String now = DateUtil.now(); - dto.setTask_id(IdUtil.simpleUUID()); - dto.setCreate_by(this.getDevice().getDevice_code()); - dto.setUpdate_by(this.getDevice().getDevice_code()); - dto.setStart_point_code(this.getDevice().getDevice_code()); - dto.setVehicle_code(container_code); - dto.setVehicle_type(container_type); - - String taskcode = CodeUtil.getNewCode("TASK_NO"); - dto.setTask_code("-" + taskcode); - dto.setTask_status("0"); - dto.setPriority("101"); - RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code()); - String next_device_codecode = jo.getNext_device_code(); - if (StrUtil.isEmpty(next_device_codecode)) { - throw new RuntimeException("该设备未找到对应路由"); - } - dto.setNext_point_code(next_device_codecode); - dto.setUpdate_time(now); - dto.setCreate_time(now); - -// WQLObject wo = WQLObject.getWQLObject("acs_task"); -// JSONObject json = (JSONObject) JSONObject.toJSON(dto); -// -// wo.insert(json); - - Task entity = ConvertUtil.convert(dto, Task.class); - taskMapper.insert(entity); - requireSucess = false; - return true; - } - } - - @Override - public JSONObject getDeviceStatusName() { - JSONObject jo = new JSONObject(); - String mode = ""; - String action = ""; - String move = ""; - if (this.getMode() == 0) { - mode = "未联机"; - } else if (this.getMode() == 1) { - mode = "单机"; - } else if (this.getMode() == 2) { - mode = "联机"; - } else if (this.getMode() == 3) { - mode = "运行中"; - } - - if (this.getMove() == 0) { - move = "无货"; - jo.put("hasGoods", false); - } else if (this.getMove() == 1) { - move = "有货"; - jo.put("hasGoods", true); - } else if (this.getMove() == 2) { - move = "有托盘有货"; - jo.put("hasGoods", true); - } - jo.put("device_name", this.getDevice().getDevice_name()); - jo.put("mode", mode); - jo.put("move", move); - jo.put("action", action); - jo.put("isOnline", this.getIsonline()); - jo.put("error", this.getError()); - jo.put("isError", this.getIserror()); - jo.put("task", this.getTask()); - return jo; - } - - @Override - public void setDeviceStatus(JSONObject data) { - - } - - /** - * lms申请任务 - * - * @param - */ - public synchronized boolean apply(Integer type) { - Date date = new Date(); - if (date.getTime() - this.time.getTime() < (long) this.instruction_require_time_out) { - log.trace("触发时间因为小于{}毫秒,而被无视", this.time); - return false; - } else { - this.time = date; - FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); - request.setDevice_code(devicecode); - request.setMaterial_type(String.valueOf(material_type)); - request.setVehicle_code(String.valueOf(barcode)); - if (devicecode.startsWith("TBX")&&type==5&&barcode>0) { - //满架下料 - request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName()); - }else if (devicecode.startsWith("TBX")&&type==6) { - //补空架 - request.setRequest_medthod_code(RequestMethodEnum.apply_tbxbkj.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.apply_tbxbkj.getName()); - }else if (type==7) { - //空托盘出库,包片机和销售出库空位都可以 - request.setRequest_medthod_code(RequestMethodEnum.apply_kghjrk.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.apply_kghjrk.getName()); - }else if(devicecode.startsWith("BP")&&material_type>0){ - request.setRequest_medthod_code(RequestMethodEnum.apply_bpsl.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.apply_bpsl.getName()); - } - String resp = acsToWmsService.applyTask(request); - JSONObject res_jo = JSONObject.parseObject(resp); - if (StrUtil.equals(res_jo.getString("code"), "200")) { - this.writing(type); - this.setRequireSucess(true); - log.info("acs申请任务", this.devicecode, "满盅入库任务申请成功!"); - }else{ - this.writing(99); - } - return true; - } - } -} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/ItemProtocol.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/ItemProtocol.java deleted file mode 100644 index bbfc734..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/ItemProtocol.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.nl.acs.device_driver.tianneng.site; - -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.nl.acs.device.device_driver.standard_inspect.ItemDto; - -import java.util.ArrayList; -import java.util.List; - -@Slf4j -@Data -public class ItemProtocol { - - public static String item_heartbeat = "heartbeat"; - public static String item_mode = "mode"; - public static String item_move = "move"; - public static String item_action = "action"; - public static String item_error = "error"; - public static String item_to_command = "to_command"; - public static String item_to_target = "to_target"; - public static String item_to_task = "to_task"; - public static String item_weight = "weight"; - public static String item_material_type = "material_type"; - public static String item_barcode = "barcode"; - - private StandardInspectSiteDeviceDriver driver; - - public ItemProtocol(StandardInspectSiteDeviceDriver driver) { - this.driver = driver; - } - - public int getHeartbeat() { - return this.getOpcIntegerValue(item_heartbeat); - } - - public int getMode() { - return this.getOpcIntegerValue(item_mode); - } - - public int getMove() { - return this.getOpcIntegerValue(item_move); - } - - public int getAction() { - return this.getOpcIntegerValue(item_action); - } - - public int getError() { - return this.getOpcIntegerValue(item_error); - } - - - public int getMaterialType() { - return this.getOpcIntegerValue(item_material_type); - } - public int getBarcode() { - return this.getOpcIntegerValue(item_barcode); - } - - public int getToCommand() { - return this.getOpcIntegerValue(item_to_command); - } - - public int getToTarget() { - return this.getOpcIntegerValue(item_to_target); - } - - public int getToTask() { - return this.getOpcIntegerValue(item_to_task); - } - - //是否有货 - public int hasGoods(int move) { - return move; - } - - Boolean isonline; - - public int getOpcIntegerValue(String protocol) { - Integer value = this.driver.getIntegeregerValue(protocol); - if (value == null) { - // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!"); - setIsonline(false); - } else { - setIsonline(true); - return value; - } - return 0; - - } - - public static List getReadableItemDtos() { - ArrayList list = new ArrayList(); - list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); - list.add(new ItemDto(item_mode, "工作状态", "DB600.B2", Boolean.valueOf(true))); - list.add(new ItemDto(item_move, "光电开关信号", "DB600.B3")); - list.add(new ItemDto(item_action, "取放信号", "DB600.B4")); - list.add(new ItemDto(item_material_type, "物料类型", "DB600.D6")); - list.add(new ItemDto(item_error, "报警信号", "DB600.B7")); - list.add(new ItemDto(item_barcode, "条码", "DB600.D8")); - return list; - } - - public static List getWriteableItemDtos() { - ArrayList list = new ArrayList(); - list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); - return list; - } - -} - diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDefination.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDefination.java deleted file mode 100644 index 77e7b7d..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDefination.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.nl.acs.device_driver.tianneng.site; - -import org.nl.acs.device.device_driver.standard_inspect.ItemDto; -import org.nl.acs.device.domain.Device; -import org.nl.acs.device.enums.DeviceType; -import org.nl.acs.device_driver.DeviceDriver; -import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; -import org.springframework.stereotype.Service; - -import java.util.LinkedList; -import java.util.List; - -/** - * 检测站点驱动定义 - * 说明:该站点为普通带光电检测站点 - */ -@Service -public class StandardInspectSiteDefination implements OpcDeviceDriverDefination { - @Override - public String getDriverCode() { - return "standard_inspect_site"; - } - - @Override - public String getDriverName() { - return "标准版-检测站点"; - } - - @Override - public String getDriverDescription() { - return "标准版-检测站点"; - } - - @Override - public DeviceDriver getDriverInstance(Device device) { - return (new StandardInspectSiteDeviceDriver()).setDevice(device).setDriverDefination(this); - - } - - @Override - public Class getDeviceDriverType() { - return StandardInspectSiteDeviceDriver.class; - } - - @Override - public List getFitDeviceTypes() { - List types = new LinkedList(); - types.add(DeviceType.conveyor); - return types; - } - - @Override - public List getReadableItemDtos() { - return ItemProtocol.getReadableItemDtos(); - } - - @Override - public List getWriteableItemDtos() { - return ItemProtocol.getWriteableItemDtos(); - } - -} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDeviceDriver.java deleted file mode 100644 index 23a2315..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/StandardInspectSiteDeviceDriver.java +++ /dev/null @@ -1,476 +0,0 @@ -package org.nl.acs.device_driver.tianneng.site; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -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.device.domain.Device; -import org.nl.acs.device.service.DeviceService; -import org.nl.acs.device_driver.DeviceDriver; -import org.nl.acs.device_driver.RequestMethodEnum; -import org.nl.acs.device_driver.RouteableDeviceDriver; -import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; -import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; -import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; -import org.nl.acs.ext.wms.service.AcsToWmsService; -import org.nl.acs.instruction.domain.Instruction; -import org.nl.acs.instruction.service.InstructionService; -import org.nl.acs.monitor.DeviceStageMonitor; -import org.nl.acs.opc.WcsConfig; -import org.nl.acs.route.service.RouteLineService; -import org.nl.acs.route.service.dto.RouteLineDto; -import org.nl.acs.task.domain.Task; -import org.nl.acs.task.service.TaskService; -import org.nl.acs.task.service.dto.TaskDto; -import org.nl.acs.task.service.mapper.TaskMapper; -import org.nl.acs.utils.ConvertUtil; -import org.nl.common.utils.CodeUtil; -import org.nl.config.SpringContextHolder; -import org.openscada.opc.lib.da.Server; - -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 检测站点驱动 - */ -@Slf4j -@Data -@RequiredArgsConstructor -public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver , DeviceStageMonitor { - protected ItemProtocol itemProtocol = new ItemProtocol(this); - - InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); - - DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); - - RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); - - TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); - - TaskMapper taskMapper; - - AcsToWmsService acsToWmsService=SpringContextHolder.getBean("acsToWmsServiceImpl"); - - String container; - String container_type_desc; - String last_container_type_desc; - String last_container; - //放货准备锁 - String putReadyLock = null; - //有货标记 - protected boolean has_goods_tag = false; - - private Date time = new Date(); - - int mode = 0; - int error = 0; - int move = 0; - int task = 0; - int action = 0; - int last_mode = 0; - int last_error = 0; - int last_move = 0; - int last_task = 0; - Boolean isonline = true; - int hasGoods = 0; - String message = null; - Boolean iserror = false; - - int io_action = 0; - int last_io_action = 0; - int material_type = 0; - int last_material_type = 0; - int barcode = 0; - int last_barcode =0; - - - boolean hasVehicle = false; - boolean isReady = false; - protected int instruction_num = 0; - protected int instruction_num_truth = 0; - boolean isFold = false; - private String assemble_check_tag; - - protected String current_stage_instruction_message; - protected String last_stage_instruction_message; - Integer heartbeat_tag; - private Date instruction_require_time = new Date(); - private Date instruction_finished_time = new Date(); - - private int instruction_require_time_out; - boolean requireSucess = false; - - private int instruction_finished_time_out; - - int branchProtocol = 0; - //备注 - String remark; - //数量 - String qty; - //物料 - String material; - //批次 - String batch; - //当前指令 - Instruction inst = null; - //上次指令 - Instruction last_inst = null; - - //触摸屏手动触发任务 - private Boolean is_has_task = false; - - //满盅入库请求标记 - boolean Sucess = false; - - //暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域 - int flag; - - String devicecode; - - @Override - public Device getDevice() { - return this.device; - } - - - @Override - public void execute() { - String message = null; - try { - devicecode = this.getDeviceCode(); - mode = this.itemProtocol.getMode(); - error = this.itemProtocol.getError(); - move = this.itemProtocol.getMove(); - hasGoods = this.itemProtocol.getMove(); - action = this.itemProtocol.getAction(); - material_type = this.itemProtocol.getMaterialType(); - barcode=this.itemProtocol.getBarcode(); - if (mode != last_mode) { - this.setRequireSucess(false); - if(mode==2){ - this.writing(0); - } - } - if (move != last_move) { - } - if (error != last_error) { - } - - - } catch (Exception var17) { - return; - } - - if (!this.itemProtocol.getIsonline()) { - this.setIsonline(false); - this.setIserror(true); - message = "信号量同步异常"; - //未联机 - } else if (mode == 0) { - this.setIsonline(false); - this.setIserror(true); - message = "未联机"; - //有报警 - } else if (error != 0) { - this.setIsonline(false); - this.setIserror(true); - message = "有报警"; - //无报警 - } else { - this.setIsonline(true); - this.setIserror(false); - message = ""; - Instruction instruction = null; - List toInstructions; - switch (mode) { - case 1: - log.debug("设备运转模式:等待工作"); - return; - case 2: - break; - case 4: - //叫料 - if (move==0 && !requireSucess){ - apply(4); - } - break; - case 5: - //满料出库 - if(move==1 && !requireSucess){ - apply(5); - } - break; - case 6: - //申请空盘 - if (move==0 && !requireSucess){ - apply(6); - } - break; - case 7: - //空托盘出库 - if(move==1 && !requireSucess){ - apply(7); - } - break; - } - - switch (flag) { - //取货完成 - case 1: - writing(2); - return; - //放货完成 - case 2: - writing(3); - return; - - } - - } - last_mode = mode; - last_error = error; - last_move = move; - last_task = task; - last_material_type = material_type; - last_barcode=barcode; - - } - - - public boolean exe_error() { - if (this.error == 0) { - return true; - } else { - log.debug("设备报警"); - return false; - } - } - - protected void thingToNothing() { - log.debug("从有货到无货 清理数据"); - this.set_last_container(container, container_type_desc); - } - - public void set_last_container(String barcode, String type_desc) { - this.set_last_container(barcode); - this.set_last_container_type_desc(type_desc); - } - - public void set_last_container(String barcode) { - } - - public void set_last_container_type_desc(String type) { - } - - public boolean exe_business() { - return true; - } - - protected void executing(Instruction instruction) { - this.executing(1, instruction, ""); - } - - public void executing(int command, Instruction instruction, String appendMessage) { - String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_command; - String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_target; - String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_task; - if (appendMessage == null) { - appendMessage = ""; - } - if (instruction != null) { - instruction_num = Integer.parseInt(instruction.getInstruction_code()); - } - //String opcservcerid = this.getDevice().getOpc_server_id(); -//Server server = ReadUtil.getServer(opcservcerid); - Map itemMap = new HashMap(); - itemMap.put(to_command, 1); - itemMap.put(to_task, instruction_num); - this.control(itemMap); - - } - - public void executing(Server server, Map itemMap) { - this.control(itemMap); - } - - public void writing(int command) { - String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_command; - - //String opcservcerid = this.getDevice().getOpc_server_id(); -//Server server = ReadUtil.getServer(opcservcerid); - Map itemMap = new HashMap(); - itemMap.put(to_command, command); - this.control(itemMap); - - } - - public void writing(int type, int command) { - String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_command; - String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_target; - String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_task; - //String opcservcerid = this.getDevice().getOpc_server_id(); -//Server server = ReadUtil.getServer(opcservcerid); - Map itemMap = new HashMap(); - if (type == 1) { - itemMap.put(to_command, command); - } else if (type == 2) { - itemMap.put(to_target, command); - - } else if (type == 3) { - itemMap.put(to_task, command); - } - this.control(itemMap); - - } - - public boolean instruction_require(String container_code) { - return instruction_require(container_code, WcsConfig.task_container_type_default_desc); - } - - /** - * 请求指令 - * - * @param container_code - * @param container_type - */ - public synchronized boolean instruction_require(String container_code, String container_type) { - 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); - return false; - } else { - this.instruction_require_time = date; - TaskDto dto = new TaskDto(); - String now = DateUtil.now(); - dto.setTask_id(IdUtil.simpleUUID()); - dto.setCreate_by(this.getDevice().getDevice_code()); - dto.setUpdate_by(this.getDevice().getDevice_code()); - dto.setStart_point_code(this.getDevice().getDevice_code()); - dto.setVehicle_code(container_code); - dto.setVehicle_type(container_type); - - String taskcode = CodeUtil.getNewCode("TASK_NO"); - dto.setTask_code("-" + taskcode); - dto.setTask_status("0"); - dto.setPriority("101"); - RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code()); - String next_device_codecode = jo.getNext_device_code(); - if (StrUtil.isEmpty(next_device_codecode)) { - throw new RuntimeException("该设备未找到对应路由"); - } - dto.setNext_point_code(next_device_codecode); - dto.setUpdate_time(now); - dto.setCreate_time(now); - -// WQLObject wo = WQLObject.getWQLObject("acs_task"); -// JSONObject json = (JSONObject) JSONObject.toJSON(dto); -// -// wo.insert(json); - - Task entity = ConvertUtil.convert(dto, Task.class); - taskMapper.insert(entity); - requireSucess = false; - return true; - } - } - - @Override - public JSONObject getDeviceStatusName() { - JSONObject jo = new JSONObject(); - String mode = ""; - String action = ""; - String move = ""; - if (this.getMode() == 0) { - mode = "未联机"; - } else if (this.getMode() == 1) { - mode = "单机"; - } else if (this.getMode() == 2) { - mode = "联机"; - } else if (this.getMode() == 3) { - mode = "运行中"; - } - - if (this.getMove() == 0) { - move = "无货"; - jo.put("hasGoods", false); - } else if (this.getMove() == 1) { - move = "有货"; - jo.put("hasGoods", true); - } else if (this.getMove() == 2) { - move = "有托盘有货"; - jo.put("hasGoods", true); - } - jo.put("device_name", this.getDevice().getDevice_name()); - jo.put("mode", mode); - jo.put("move", move); - jo.put("action", action); - jo.put("isOnline", this.getIsonline()); - jo.put("error", this.getError()); - jo.put("isError", this.getIserror()); - jo.put("task", this.getTask()); - return jo; - } - - @Override - public void setDeviceStatus(JSONObject data) { - - } - - /** - * lms申请任务 - * - * @param - */ - public synchronized boolean apply(Integer type) { - Date date = new Date(); - if (date.getTime() - this.time.getTime() < (long) this.instruction_require_time_out) { - log.trace("触发时间因为小于{}毫秒,而被无视", this.time); - return false; - } else { - this.time = date; - FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); - request.setDevice_code(devicecode); - request.setMaterial_type(String.valueOf(material_type)); - request.setVehicle_code(String.valueOf(barcode)); - if (devicecode.startsWith("TBX")&&type==5&&barcode>0) { - //满架下料 - request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName()); - }else if (devicecode.startsWith("TBX")&&type==6) { - //补空架 - request.setRequest_medthod_code(RequestMethodEnum.apply_tbxbkj.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.apply_tbxbkj.getName()); - }else if (type==7) { - //空托盘出库,包片机和销售出库空位都可以 - request.setRequest_medthod_code(RequestMethodEnum.apply_kghjrk.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.apply_kghjrk.getName()); - }else if(devicecode.startsWith("BP")&&material_type>0){ - request.setRequest_medthod_code(RequestMethodEnum.apply_bpsl.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.apply_bpsl.getName()); - } - String resp = acsToWmsService.applyTask(request); - JSONObject res_jo = JSONObject.parseObject(resp); - if (StrUtil.equals(res_jo.getString("code"), "200")) { - this.writing(type); - this.setRequireSucess(true); - log.info("acs申请任务", this.devicecode, "满盅入库任务申请成功!"); - }else{ - this.writing(99); - } - return true; - } - } -} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/ItemProtocol.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/ItemProtocol.java deleted file mode 100644 index 218d53e..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/ItemProtocol.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.nl.acs.device_driver.tianneng.site_status; - -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.nl.acs.device.device_driver.standard_inspect.ItemDto; - -import java.util.ArrayList; -import java.util.List; - -@Slf4j -@Data -public class ItemProtocol { - - public static String item_heartbeat = "heartbeat"; - public static String item_mode = "mode"; - public static String item_move = "move"; - public static String item_action = "action"; - public static String item_error = "error"; - public static String item_to_command = "to_command"; - public static String item_to_target = "to_target"; - public static String item_to_task = "to_task"; - public static String item_weight = "weight"; - public static String item_material_type = "material_type"; - public static String item_barcode = "barcode"; - - private StandardInspectSiteDeviceDriver driver; - - public ItemProtocol(StandardInspectSiteDeviceDriver driver) { - this.driver = driver; - } - - public int getHeartbeat() { - return this.getOpcIntegerValue(item_heartbeat); - } - - public int getMode() { - return this.getOpcIntegerValue(item_mode); - } - - public int getMove() { - return this.getOpcIntegerValue(item_move); - } - - public int getAction() { - return this.getOpcIntegerValue(item_action); - } - - public int getError() { - return this.getOpcIntegerValue(item_error); - } - - - public int getMaterialType() { - return this.getOpcIntegerValue(item_material_type); - } - public int getBarcode() { - return this.getOpcIntegerValue(item_barcode); - } - - public int getToCommand() { - return this.getOpcIntegerValue(item_to_command); - } - - public int getToTarget() { - return this.getOpcIntegerValue(item_to_target); - } - - public int getToTask() { - return this.getOpcIntegerValue(item_to_task); - } - - //是否有货 - public int hasGoods(int move) { - return move; - } - - Boolean isonline; - - public int getOpcIntegerValue(String protocol) { - Integer value = this.driver.getIntegeregerValue(protocol); - if (value == null) { - // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!"); - setIsonline(false); - } else { - setIsonline(true); - return value; - } - return 0; - - } - - public static List getReadableItemDtos() { - ArrayList list = new ArrayList(); - list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); - list.add(new ItemDto(item_mode, "工作状态", "DB600.B2", Boolean.valueOf(true))); - list.add(new ItemDto(item_move, "光电开关信号", "DB600.B3")); - list.add(new ItemDto(item_action, "取放信号", "DB600.B4")); - list.add(new ItemDto(item_material_type, "物料类型", "DB600.D6")); - list.add(new ItemDto(item_error, "报警信号", "DB600.B7")); - list.add(new ItemDto(item_barcode, "条码", "DB600.D8")); - return list; - } - - public static List getWriteableItemDtos() { - ArrayList list = new ArrayList(); - list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); - return list; - } - -} - diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDefination.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDefination.java deleted file mode 100644 index 477db7b..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDefination.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.nl.acs.device_driver.tianneng.site_status; - -import org.nl.acs.device.device_driver.standard_inspect.ItemDto; -import org.nl.acs.device.domain.Device; -import org.nl.acs.device.enums.DeviceType; -import org.nl.acs.device_driver.DeviceDriver; -import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; -import org.springframework.stereotype.Service; - -import java.util.LinkedList; -import java.util.List; - -/** - * 检测站点驱动定义 - * 说明:该站点为普通带光电检测站点 - */ -@Service -public class StandardInspectSiteDefination implements OpcDeviceDriverDefination { - @Override - public String getDriverCode() { - return "standard_inspect_site"; - } - - @Override - public String getDriverName() { - return "标准版-检测站点"; - } - - @Override - public String getDriverDescription() { - return "标准版-检测站点"; - } - - @Override - public DeviceDriver getDriverInstance(Device device) { - return (new StandardInspectSiteDeviceDriver()).setDevice(device).setDriverDefination(this); - - } - - @Override - public Class getDeviceDriverType() { - return StandardInspectSiteDeviceDriver.class; - } - - @Override - public List getFitDeviceTypes() { - List types = new LinkedList(); - types.add(DeviceType.conveyor); - return types; - } - - @Override - public List getReadableItemDtos() { - return ItemProtocol.getReadableItemDtos(); - } - - @Override - public List getWriteableItemDtos() { - return ItemProtocol.getWriteableItemDtos(); - } - -} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDeviceDriver.java deleted file mode 100644 index b1fe03c..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site_status/StandardInspectSiteDeviceDriver.java +++ /dev/null @@ -1,476 +0,0 @@ -package org.nl.acs.device_driver.tianneng.site_status; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -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.device.domain.Device; -import org.nl.acs.device.service.DeviceService; -import org.nl.acs.device_driver.DeviceDriver; -import org.nl.acs.device_driver.RequestMethodEnum; -import org.nl.acs.device_driver.RouteableDeviceDriver; -import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; -import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; -import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; -import org.nl.acs.ext.wms.service.AcsToWmsService; -import org.nl.acs.instruction.domain.Instruction; -import org.nl.acs.instruction.service.InstructionService; -import org.nl.acs.monitor.DeviceStageMonitor; -import org.nl.acs.opc.WcsConfig; -import org.nl.acs.route.service.RouteLineService; -import org.nl.acs.route.service.dto.RouteLineDto; -import org.nl.acs.task.domain.Task; -import org.nl.acs.task.service.TaskService; -import org.nl.acs.task.service.dto.TaskDto; -import org.nl.acs.task.service.mapper.TaskMapper; -import org.nl.acs.utils.ConvertUtil; -import org.nl.common.utils.CodeUtil; -import org.nl.config.SpringContextHolder; -import org.openscada.opc.lib.da.Server; - -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 检测站点驱动 - */ -@Slf4j -@Data -@RequiredArgsConstructor -public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver , DeviceStageMonitor { - protected ItemProtocol itemProtocol = new ItemProtocol(this); - - InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); - - DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); - - RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); - - TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); - - TaskMapper taskMapper; - - AcsToWmsService acsToWmsService=SpringContextHolder.getBean("acsToWmsServiceImpl"); - - String container; - String container_type_desc; - String last_container_type_desc; - String last_container; - //放货准备锁 - String putReadyLock = null; - //有货标记 - protected boolean has_goods_tag = false; - - private Date time = new Date(); - - int mode = 0; - int error = 0; - int move = 0; - int task = 0; - int action = 0; - int last_mode = 0; - int last_error = 0; - int last_move = 0; - int last_task = 0; - Boolean isonline = true; - int hasGoods = 0; - String message = null; - Boolean iserror = false; - - int io_action = 0; - int last_io_action = 0; - int material_type = 0; - int last_material_type = 0; - int barcode = 0; - int last_barcode =0; - - - boolean hasVehicle = false; - boolean isReady = false; - protected int instruction_num = 0; - protected int instruction_num_truth = 0; - boolean isFold = false; - private String assemble_check_tag; - - protected String current_stage_instruction_message; - protected String last_stage_instruction_message; - Integer heartbeat_tag; - private Date instruction_require_time = new Date(); - private Date instruction_finished_time = new Date(); - - private int instruction_require_time_out; - boolean requireSucess = false; - - private int instruction_finished_time_out; - - int branchProtocol = 0; - //备注 - String remark; - //数量 - String qty; - //物料 - String material; - //批次 - String batch; - //当前指令 - Instruction inst = null; - //上次指令 - Instruction last_inst = null; - - //触摸屏手动触发任务 - private Boolean is_has_task = false; - - //满盅入库请求标记 - boolean Sucess = false; - - //暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域 - int flag; - - String devicecode; - - @Override - public Device getDevice() { - return this.device; - } - - - @Override - public void execute() { - String message = null; - try { - devicecode = this.getDeviceCode(); - mode = this.itemProtocol.getMode(); - error = this.itemProtocol.getError(); - move = this.itemProtocol.getMove(); - hasGoods = this.itemProtocol.getMove(); - action = this.itemProtocol.getAction(); - material_type = this.itemProtocol.getMaterialType(); - barcode=this.itemProtocol.getBarcode(); - if (mode != last_mode) { - this.setRequireSucess(false); - if(mode==2){ - this.writing(0); - } - } - if (move != last_move) { - } - if (error != last_error) { - } - - - } catch (Exception var17) { - return; - } - - if (!this.itemProtocol.getIsonline()) { - this.setIsonline(false); - this.setIserror(true); - message = "信号量同步异常"; - //未联机 - } else if (mode == 0) { - this.setIsonline(false); - this.setIserror(true); - message = "未联机"; - //有报警 - } else if (error != 0) { - this.setIsonline(false); - this.setIserror(true); - message = "有报警"; - //无报警 - } else { - this.setIsonline(true); - this.setIserror(false); - message = ""; - Instruction instruction = null; - List toInstructions; - switch (mode) { - case 1: - log.debug("设备运转模式:等待工作"); - return; - case 2: - break; - case 4: - //叫料 - if (move==0 && !requireSucess){ - apply(4); - } - break; - case 5: - //满料出库 - if(move==1 && !requireSucess){ - apply(5); - } - break; - case 6: - //申请空盘 - if (move==0 && !requireSucess){ - apply(6); - } - break; - case 7: - //空托盘出库 - if(move==1 && !requireSucess){ - apply(7); - } - break; - } - - switch (flag) { - //取货完成 - case 1: - writing(2); - return; - //放货完成 - case 2: - writing(3); - return; - - } - - } - last_mode = mode; - last_error = error; - last_move = move; - last_task = task; - last_material_type = material_type; - last_barcode=barcode; - - } - - - public boolean exe_error() { - if (this.error == 0) { - return true; - } else { - log.debug("设备报警"); - return false; - } - } - - protected void thingToNothing() { - log.debug("从有货到无货 清理数据"); - this.set_last_container(container, container_type_desc); - } - - public void set_last_container(String barcode, String type_desc) { - this.set_last_container(barcode); - this.set_last_container_type_desc(type_desc); - } - - public void set_last_container(String barcode) { - } - - public void set_last_container_type_desc(String type) { - } - - public boolean exe_business() { - return true; - } - - protected void executing(Instruction instruction) { - this.executing(1, instruction, ""); - } - - public void executing(int command, Instruction instruction, String appendMessage) { - String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_command; - String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_target; - String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_task; - if (appendMessage == null) { - appendMessage = ""; - } - if (instruction != null) { - instruction_num = Integer.parseInt(instruction.getInstruction_code()); - } - //String opcservcerid = this.getDevice().getOpc_server_id(); -//Server server = ReadUtil.getServer(opcservcerid); - Map itemMap = new HashMap(); - itemMap.put(to_command, 1); - itemMap.put(to_task, instruction_num); - this.control(itemMap); - - } - - public void executing(Server server, Map itemMap) { - this.control(itemMap); - } - - public void writing(int command) { - String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_command; - - //String opcservcerid = this.getDevice().getOpc_server_id(); -//Server server = ReadUtil.getServer(opcservcerid); - Map itemMap = new HashMap(); - itemMap.put(to_command, command); - this.control(itemMap); - - } - - public void writing(int type, int command) { - String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_command; - String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_target; - String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_task; - //String opcservcerid = this.getDevice().getOpc_server_id(); -//Server server = ReadUtil.getServer(opcservcerid); - Map itemMap = new HashMap(); - if (type == 1) { - itemMap.put(to_command, command); - } else if (type == 2) { - itemMap.put(to_target, command); - - } else if (type == 3) { - itemMap.put(to_task, command); - } - this.control(itemMap); - - } - - public boolean instruction_require(String container_code) { - return instruction_require(container_code, WcsConfig.task_container_type_default_desc); - } - - /** - * 请求指令 - * - * @param container_code - * @param container_type - */ - public synchronized boolean instruction_require(String container_code, String container_type) { - 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); - return false; - } else { - this.instruction_require_time = date; - TaskDto dto = new TaskDto(); - String now = DateUtil.now(); - dto.setTask_id(IdUtil.simpleUUID()); - dto.setCreate_by(this.getDevice().getDevice_code()); - dto.setUpdate_by(this.getDevice().getDevice_code()); - dto.setStart_point_code(this.getDevice().getDevice_code()); - dto.setVehicle_code(container_code); - dto.setVehicle_type(container_type); - - String taskcode = CodeUtil.getNewCode("TASK_NO"); - dto.setTask_code("-" + taskcode); - dto.setTask_status("0"); - dto.setPriority("101"); - RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code()); - String next_device_codecode = jo.getNext_device_code(); - if (StrUtil.isEmpty(next_device_codecode)) { - throw new RuntimeException("该设备未找到对应路由"); - } - dto.setNext_point_code(next_device_codecode); - dto.setUpdate_time(now); - dto.setCreate_time(now); - -// WQLObject wo = WQLObject.getWQLObject("acs_task"); -// JSONObject json = (JSONObject) JSONObject.toJSON(dto); -// -// wo.insert(json); - - Task entity = ConvertUtil.convert(dto, Task.class); - taskMapper.insert(entity); - requireSucess = false; - return true; - } - } - - @Override - public JSONObject getDeviceStatusName() { - JSONObject jo = new JSONObject(); - String mode = ""; - String action = ""; - String move = ""; - if (this.getMode() == 0) { - mode = "未联机"; - } else if (this.getMode() == 1) { - mode = "单机"; - } else if (this.getMode() == 2) { - mode = "联机"; - } else if (this.getMode() == 3) { - mode = "运行中"; - } - - if (this.getMove() == 0) { - move = "无货"; - jo.put("hasGoods", false); - } else if (this.getMove() == 1) { - move = "有货"; - jo.put("hasGoods", true); - } else if (this.getMove() == 2) { - move = "有托盘有货"; - jo.put("hasGoods", true); - } - jo.put("device_name", this.getDevice().getDevice_name()); - jo.put("mode", mode); - jo.put("move", move); - jo.put("action", action); - jo.put("isOnline", this.getIsonline()); - jo.put("error", this.getError()); - jo.put("isError", this.getIserror()); - jo.put("task", this.getTask()); - return jo; - } - - @Override - public void setDeviceStatus(JSONObject data) { - - } - - /** - * lms申请任务 - * - * @param - */ - public synchronized boolean apply(Integer type) { - Date date = new Date(); - if (date.getTime() - this.time.getTime() < (long) this.instruction_require_time_out) { - log.trace("触发时间因为小于{}毫秒,而被无视", this.time); - return false; - } else { - this.time = date; - FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); - request.setDevice_code(devicecode); - request.setMaterial_type(String.valueOf(material_type)); - request.setVehicle_code(String.valueOf(barcode)); - if (devicecode.startsWith("TBX")&&type==5&&barcode>0) { - //满架下料 - request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName()); - }else if (devicecode.startsWith("TBX")&&type==6) { - //补空架 - request.setRequest_medthod_code(RequestMethodEnum.apply_tbxbkj.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.apply_tbxbkj.getName()); - }else if (type==7) { - //空托盘出库,包片机和销售出库空位都可以 - request.setRequest_medthod_code(RequestMethodEnum.apply_kghjrk.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.apply_kghjrk.getName()); - }else if(devicecode.startsWith("BP")&&material_type>0){ - request.setRequest_medthod_code(RequestMethodEnum.apply_bpsl.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.apply_bpsl.getName()); - } - String resp = acsToWmsService.applyTask(request); - JSONObject res_jo = JSONObject.parseObject(resp); - if (StrUtil.equals(res_jo.getString("code"), "200")) { - this.writing(type); - this.setRequireSucess(true); - log.info("acs申请任务", this.devicecode, "满盅入库任务申请成功!"); - }else{ - this.writing(99); - } - return true; - } - } -} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/ItemProtocol.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/ItemProtocol.java deleted file mode 100644 index 62e8d88..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/ItemProtocol.java +++ /dev/null @@ -1,149 +0,0 @@ -package org.nl.acs.device_driver.tianneng.tubanxian; - -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.nl.acs.device.device_driver.standard_inspect.ItemDto; - -import java.util.ArrayList; -import java.util.List; - -@Slf4j -@Data -public class ItemProtocol { - - public static String item_heartbeat = "heartbeat"; - public static String item_mode = "mode"; - public static String item_status = "status"; - public static String item_error = "error"; - public static String item_open_time = "open_time"; - public static String item_standby_time = "standby_time"; - public static String item_production_time = "production_time"; - public static String item_error_time = "error_time"; - public static String item_end_time = "end_time"; - public static String item_weight = "weight"; - public static String item_order_No = "order_No"; - public static String item_material = "material"; - public static String item_number = "number"; - public static String item_to_command = "to_command"; - public static String item_to_order_No = "to_order_No"; - public static String item_to_material_code = "to_material_code"; - public static String item_to_number = "to_number"; - - private TubanxianSiteDeviceDriver driver; - - public ItemProtocol(TubanxianSiteDeviceDriver driver) { - this.driver = driver; - } - - public int getHeartbeat() { - return this.getOpcIntegerValue(item_heartbeat); - } - - public int getMode() { - return this.getOpcIntegerValue(item_mode); - } - - public int getItem_status() { - return this.getOpcIntegerValue(item_status); - } - - public int getItem_error() { - return this.getOpcIntegerValue(item_error); - } - - public int getItem_open_time() { - return this.getOpcIntegerValue(item_open_time); - } - - public int getItem_standby_time() { - return this.getOpcIntegerValue(item_standby_time); - } - - public int getItem_production_time() { - return this.getOpcIntegerValue(item_production_time); - } - - public int getItem_error_time() { - return this.getOpcIntegerValue(item_error_time); - } - - public int getItem_end_time() { - return this.getOpcIntegerValue(item_end_time); - } - - public int getItem_weight() { - return this.getOpcIntegerValue(item_weight); - } - - public int getItem_order_No() { - return this.getOpcIntegerValue(item_order_No); - } - - public int getItem_material() { - return this.getOpcIntegerValue(item_material); - } - - public int getItem_number() { - return this.getOpcIntegerValue(item_number); - } - - public int getItem_to_command() { - return this.getOpcIntegerValue(item_to_command); - } - - public int getItem_to_order_No() { - return this.getOpcIntegerValue(item_to_order_No); - } - - public int getItem_to_material_code() { - return this.getOpcIntegerValue(item_to_material_code); - } - - public int getItem_to_number() { - return this.getOpcIntegerValue(item_to_number); - } - - Boolean isonline; - - public int getOpcIntegerValue(String protocol) { - Integer value = this.driver.getIntegeregerValue(protocol); - if (value == null) { - // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!"); - setIsonline(false); - } else { - setIsonline(true); - return value; - } - return 0; - - } - - public static List getReadableItemDtos() { - ArrayList list = new ArrayList(); - list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); - list.add(new ItemDto(item_mode, "工作状态", "DB600.B2")); - list.add(new ItemDto(item_status, "设备状态", "DB600.B3")); - list.add(new ItemDto(item_error, "error", "DB600.B4")); - list.add(new ItemDto(item_open_time, "当前开机时间", "DB600.D6")); - list.add(new ItemDto(item_standby_time, "当前待机时间", "DB600.B7")); - list.add(new ItemDto(item_error_time, "当前生产时间", "DB600.D8")); - list.add(new ItemDto(item_end_time, "当前故障时间", "DB600.B3")); - list.add(new ItemDto(item_weight, "当前关机时间", "DB600.B4")); - list.add(new ItemDto(item_order_No, "本次称重重量", "DB600.D6")); - list.add(new ItemDto(item_error, "工单号", "DB600.B7")); - list.add(new ItemDto(item_material, "当前生产物料", "DB600.D8")); - list.add(new ItemDto(item_number, "当前生产数量", "DB600.D8")); - return list; - } - - public static List getWriteableItemDtos() { - ArrayList list = new ArrayList(); - list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); - list.add(new ItemDto(item_to_order_No, "工单号", "DB601.W2")); - list.add(new ItemDto(item_to_material_code, "下发物料编号", "DB601.W2")); - list.add(new ItemDto(item_to_number, "下发生产数量", "DB601.W2")); - return list; - } - -} - diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDefination.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDefination.java deleted file mode 100644 index 9bc6234..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDefination.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.nl.acs.device_driver.tianneng.tubanxian; - -import org.nl.acs.device.device_driver.standard_inspect.ItemDto; -import org.nl.acs.device.domain.Device; -import org.nl.acs.device.enums.DeviceType; -import org.nl.acs.device_driver.DeviceDriver; -import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; -import org.springframework.stereotype.Service; - -import java.util.LinkedList; -import java.util.List; - -/** - * 涂板线驱动定义 - * 说明:该站点为涂板线 - */ -@Service -public class TubanxianSiteDefination implements OpcDeviceDriverDefination { - @Override - public String getDriverCode() { - return "tubanxian_site"; - } - - @Override - public String getDriverName() { - return "涂板线"; - } - - @Override - public String getDriverDescription() { - return "涂板线"; - } - - @Override - public DeviceDriver getDriverInstance(Device device) { - return (new TubanxianSiteDeviceDriver()).setDevice(device).setDriverDefination(this); - - } - - @Override - public Class getDeviceDriverType() { - return TubanxianSiteDeviceDriver.class; - } - - @Override - public List getFitDeviceTypes() { - List types = new LinkedList(); - types.add(DeviceType.conveyor); - return types; - } - - @Override - public List getReadableItemDtos() { - return ItemProtocol.getReadableItemDtos(); - } - - @Override - public List getWriteableItemDtos() { - return ItemProtocol.getWriteableItemDtos(); - } - -} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDeviceDriver.java deleted file mode 100644 index 283b589..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/tubanxian/TubanxianSiteDeviceDriver.java +++ /dev/null @@ -1,291 +0,0 @@ -package org.nl.acs.device_driver.tianneng.tubanxian; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -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.device.domain.Device; -import org.nl.acs.device.service.DeviceService; -import org.nl.acs.device_driver.DeviceDriver; -import org.nl.acs.device_driver.RequestMethodEnum; -import org.nl.acs.device_driver.RouteableDeviceDriver; -import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; -import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; -import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; -import org.nl.acs.ext.wms.service.AcsToWmsService; -import org.nl.acs.instruction.domain.Instruction; -import org.nl.acs.instruction.service.InstructionService; -import org.nl.acs.monitor.DeviceStageMonitor; -import org.nl.acs.opc.WcsConfig; -import org.nl.acs.route.service.RouteLineService; -import org.nl.acs.route.service.dto.RouteLineDto; -import org.nl.acs.task.domain.Task; -import org.nl.acs.task.service.TaskService; -import org.nl.acs.task.service.dto.TaskDto; -import org.nl.acs.task.service.mapper.TaskMapper; -import org.nl.acs.utils.ConvertUtil; -import org.nl.common.utils.CodeUtil; -import org.nl.config.SpringContextHolder; -import org.openscada.opc.lib.da.Server; - -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 涂板线驱动 - */ -@Slf4j -@Data -@RequiredArgsConstructor -public class TubanxianSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver , DeviceStageMonitor { - protected ItemProtocol itemProtocol = new ItemProtocol(this); - - InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); - - DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); - - RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); - - TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); - - TaskMapper taskMapper; - - AcsToWmsService acsToWmsService=SpringContextHolder.getBean("acsToWmsServiceImpl"); - - String container; - String container_type_desc; - String last_container_type_desc; - String last_container; - //放货准备锁 - String putReadyLock = null; - //有货标记 - protected boolean has_goods_tag = false; - - private Date time = new Date(); - - int mode = 0; - int error = 0; - int move = 0; - int task = 0; - int action = 0; - int last_mode = 0; - int last_error = 0; - int last_move = 0; - int last_task = 0; - Boolean isonline = true; - int hasGoods = 0; - String message = null; - Boolean iserror = false; - - int io_action = 0; - int last_io_action = 0; - int material_type = 0; - int last_material_type = 0; - int barcode = 0; - int last_barcode =0; - - - boolean hasVehicle = false; - boolean isReady = false; - protected int instruction_num = 0; - protected int instruction_num_truth = 0; - boolean isFold = false; - private String assemble_check_tag; - - protected String current_stage_instruction_message; - protected String last_stage_instruction_message; - Integer heartbeat_tag; - private Date instruction_require_time = new Date(); - private Date instruction_finished_time = new Date(); - - private int instruction_require_time_out; - boolean requireSucess = false; - - private int instruction_finished_time_out; - - int branchProtocol = 0; - //备注 - String remark; - //数量 - String qty; - //物料 - String material; - //批次 - String batch; - //当前指令 - Instruction inst = null; - //上次指令 - Instruction last_inst = null; - - //触摸屏手动触发任务 - private Boolean is_has_task = false; - - //满盅入库请求标记 - boolean Sucess = false; - - //暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域 - int flag; - - String devicecode; - - @Override - public Device getDevice() { - return this.device; - } - - - @Override - public void execute() { - String message = null; - try { - devicecode = this.getDeviceCode(); - mode = this.itemProtocol.getMode(); - if (mode != last_mode) { - this.setRequireSucess(false); - if(mode==2){ - this.writing(0); - } - } - if (move != last_move) { - } - if (error != last_error) { - } - - - } catch (Exception var17) { - return; - } - - if (!this.itemProtocol.getIsonline()) { - this.setIsonline(false); - this.setIserror(true); - message = "信号量同步异常"; - //未联机 - } else if (mode == 0) { - this.setIsonline(false); - this.setIserror(true); - message = "未联机"; - //有报警 - } else if (error != 0) { - this.setIsonline(false); - this.setIserror(true); - message = "有报警"; - //无报警 - } else { - this.setIsonline(true); - this.setIserror(false); - message = ""; - Instruction instruction = null; - List toInstructions; - switch (mode) { - case 1: - log.debug("设备运转模式:等待工作"); - return; - case 2: - break; - case 3: - //称重 - if (!requireSucess){ - //todo 请求wms获取称重结果 - } - break; - case 4: - //工单开工 - if (!requireSucess){ - //todo 工单开工 - } - break; - case 5: - //工单完成 - if (!requireSucess){ - //todo 工单完成 - } - break; - } - - switch (flag) { - //取货完成 - case 1: - writing(2); - return; - //放货完成 - case 2: - writing(3); - return; - - } - - } - last_mode = mode; - last_error = error; - last_move = move; - last_task = task; - last_material_type = material_type; - last_barcode=barcode; - - } - - - - public void writing(int command) { - String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + ItemProtocol.item_to_command; - - //String opcservcerid = this.getDevice().getOpc_server_id(); -//Server server = ReadUtil.getServer(opcservcerid); - Map itemMap = new HashMap(); - itemMap.put(to_command, command); - this.control(itemMap); - - } - - - - @Override - public JSONObject getDeviceStatusName() { - JSONObject jo = new JSONObject(); - String mode = ""; - String action = ""; - String move = ""; - if (this.getMode() == 0) { - mode = "未联机"; - } else if (this.getMode() == 1) { - mode = "单机"; - } else if (this.getMode() == 2) { - mode = "联机"; - } else if (this.getMode() == 3) { - mode = "运行中"; - } - - if (this.getMove() == 0) { - move = "无货"; - jo.put("hasGoods", false); - } else if (this.getMove() == 1) { - move = "有货"; - jo.put("hasGoods", true); - } else if (this.getMove() == 2) { - move = "有托盘有货"; - jo.put("hasGoods", true); - } - jo.put("device_name", this.getDevice().getDevice_name()); - jo.put("mode", mode); - jo.put("move", move); - jo.put("action", action); - jo.put("isOnline", this.getIsonline()); - jo.put("error", this.getError()); - jo.put("isError", this.getIserror()); - jo.put("task", this.getTask()); - return jo; - } - - @Override - public void setDeviceStatus(JSONObject data) { - - } - -}