From c91ff868f91c98833b704f6d1eac61e0b276b089 Mon Sep 17 00:00:00 2001 From: gengby <858962040@qq.com> Date: Tue, 29 Apr 2025 09:30:38 +0800 Subject: [PATCH] =?UTF-8?q?add:=E4=B8=9A=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/acs/agv/server/AgvService.java | 17 + .../acs/agv/server/impl/AgvServiceImpl.java | 577 +++++++----------- .../device/device_driver/DriverTypeEnum.java | 160 ++--- .../java/org/nl/acs/device/wql/task_inst.xls | Bin 155648 -> 157184 bytes .../yu_qing/call_task/ItemProtocol.java | 66 ++ .../call_task/YqCallTaskDefination.java | 62 ++ .../call_task/YqCallTaskDeviceDriver.java | 165 +++++ .../yu_qing/gu_rong_lu/ItemProtocol.java | 75 +++ .../yu_qing/gu_rong_lu/YqGRLDefination.java | 62 ++ .../yu_qing/gu_rong_lu/YqGRLDeviceDriver.java | 150 +++++ .../yu_qing/shi_xiao_lu/ItemProtocol.java | 65 ++ .../yu_qing/shi_xiao_lu/YqSXLDefination.java | 62 ++ .../shi_xiao_lu/YqSXLDeviceDriver.java | 122 ++++ .../rest/TaskSignalMappingController.java | 81 +++ .../org/nl/acs/task/service/TaskService.java | 3 + .../service/TaskSignalMappingService.java | 37 ++ .../service/dto/TaskSignalMappingDto.java | 55 ++ .../task/service/impl/TaskServiceImpl.java | 62 +- .../impl/TaskSignalMappingServiceImpl.java | 131 ++++ qd/src/api/acs/task/taskSignalMapping.js | 35 ++ qd/src/views/acs/device/config.vue | 59 +- .../acs/device/driver/yq/yq_call_task.vue | 487 +++++++++++++++ qd/src/views/acs/device/driver/yq/yq_grl.vue | 487 +++++++++++++++ qd/src/views/acs/device/driver/yq/yq_sxl.vue | 487 +++++++++++++++ .../acs/task/task_signal_mapping/index.vue | 270 ++++++++ 25 files changed, 3324 insertions(+), 453 deletions(-) create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/call_task/ItemProtocol.java create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/call_task/YqCallTaskDefination.java create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/call_task/YqCallTaskDeviceDriver.java create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/gu_rong_lu/ItemProtocol.java create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/gu_rong_lu/YqGRLDefination.java create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/gu_rong_lu/YqGRLDeviceDriver.java create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/shi_xiao_lu/ItemProtocol.java create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/shi_xiao_lu/YqSXLDefination.java create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/shi_xiao_lu/YqSXLDeviceDriver.java create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/task/rest/TaskSignalMappingController.java create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/task/service/TaskSignalMappingService.java create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/task/service/dto/TaskSignalMappingDto.java create mode 100644 hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskSignalMappingServiceImpl.java create mode 100644 qd/src/api/acs/task/taskSignalMapping.js create mode 100644 qd/src/views/acs/device/driver/yq/yq_call_task.vue create mode 100644 qd/src/views/acs/device/driver/yq/yq_grl.vue create mode 100644 qd/src/views/acs/device/driver/yq/yq_sxl.vue create mode 100644 qd/src/views/acs/task/task_signal_mapping/index.vue diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/AgvService.java b/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/AgvService.java index 3e028c9..0d962ba 100644 --- a/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/AgvService.java +++ b/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/AgvService.java @@ -198,4 +198,21 @@ public interface AgvService { * @return */ JSONObject getBlockGroup(JSONObject requestParam); + + /** + * 仙工AGV请求进入互斥组 + * + * @param requestParam + * @return + */ + JSONObject inBlockGroup(JSONObject requestParam); + + + /** + * 仙工AGV请求离开互斥组 + * + * @param requestParam + * @return + */ + JSONObject outBlockGroup(JSONObject requestParam); } diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/AgvServiceImpl.java b/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/AgvServiceImpl.java index 60b79ea..14a5405 100644 --- a/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/AgvServiceImpl.java +++ b/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/AgvServiceImpl.java @@ -29,6 +29,8 @@ import org.nl.acs.device_driver.standard_inspect_site_smart200.StandardInspectSi import org.nl.acs.device_driver.standard_manipulator_inspect_site.StandardManipulatorInspectSiteDeviceDriver; import org.nl.acs.device_driver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; import org.nl.acs.device_driver.standard_storage.StandardStorageDeviceDriver; +import org.nl.acs.device_driver.yu_qing.gu_rong_lu.YqGRLDeviceDriver; +import org.nl.acs.device_driver.yu_qing.shi_xiao_lu.YqSXLDeviceDriver; import org.nl.acs.device_driver.yzja_special.YzjaSpecialDeviceDriver; import org.nl.acs.ext.erp.service.AcsToErpService; import org.nl.acs.ext.wms.service.AcsToWmsService; @@ -680,10 +682,10 @@ public class AgvServiceImpl implements AgvService { deviceDriver.writing("ma", 1); deviceDriver.writing("tss", 0); deviceDriver.writing("eots", 0); - deviceDriver.writing("rtg", 0); - deviceDriver.writing("tric", 0); - deviceDriver.writing("rap", 0); - deviceDriver.writing("rtrtg", 0); + deviceDriver.writing("rtg", 0); + deviceDriver.writing("tric", 0); + deviceDriver.writing("rap", 0); + deviceDriver.writing("rtrtg", 0); startPointInget = false; endPointOutput = false; startPointOutget = false; @@ -1644,379 +1646,121 @@ public class AgvServiceImpl implements AgvService { } } - public com.alibaba.fastjson.JSONArray createBlocksData(Instruction inst) { - com.alibaba.fastjson.JSONArray ja = new com.alibaba.fastjson.JSONArray(); + public JSONArray createBlocksData(Instruction inst) { +// String ip = paramService.findByCode("local_host").getValue(); + String addr = "http://192.168.81.251:8010"; - Device startDevice = deviceAppService.findDeviceByCode(inst.getStart_device_code()); - if ("true".equals(startDevice.getExtraValue().get("ignore_pickup_check"))) { + JSONArray blocks = new JSONArray(); + + // 起点1 + Device device1 = deviceAppService.findDeviceByCode(inst.getStart_device_code()); + if ("true".equals(device1.getExtraValue().get("ignore_pickup_check"))) { //取货前等待 - com.alibaba.fastjson.JSONObject jo = new com.alibaba.fastjson.JSONObject(); - jo.put("blockId", IdUtil.simpleUUID()); - jo.put("location", inst.getStart_point_code() + "INGET"); - jo.put("operation", "script"); - jo.put("id", inst.getStart_point_code() + "INGET"); - jo.put("script_name", "userpy/interact1.py"); - com.alibaba.fastjson.JSONObject script_args = new com.alibaba.fastjson.JSONObject(); - script_args.put("addr", addr); - com.alibaba.fastjson.JSONObject data = new com.alibaba.fastjson.JSONObject(); - com.alibaba.fastjson.JSONObject reach = new com.alibaba.fastjson.JSONObject(); + JSONObject block = new JSONObject(); + block.put("blockId", IdUtil.simpleUUID()); + block.put("location", inst.getStart_point_code() + "INGET"); + block.put("operation", "script"); + block.put("id", inst.getStart_point_code() + "INGET"); + block.put("script_name", "userpy/interact.py"); + JSONObject scriptArgs = new JSONObject(); + scriptArgs.put("addr", addr); + JSONObject data = new JSONObject(); + JSONObject reach = new JSONObject(); reach.put("task_code", inst.getInstruction_code()); reach.put("address", inst.getStart_point_code() + "INGET"); data.put("reach", reach); - script_args.put("data", data); - script_args.put("protocol", "HTTP"); - jo.put("script_args", script_args); - ja.add(jo); + scriptArgs.put("data", data); + scriptArgs.put("protocol", "HTTP"); + block.put("script_args", scriptArgs); + blocks.add(block); } - com.alibaba.fastjson.JSONObject jo1 = new com.alibaba.fastjson.JSONObject(); - jo1.put("blockId", IdUtil.simpleUUID()); - jo1.put("location", inst.getStart_point_code()); - jo1.put("operation", "JackLoad"); - ja.add(jo1); + JSONObject block = new JSONObject(); + block.put("blockId", IdUtil.simpleUUID()); + block.put("location", inst.getStart_point_code()); + block.put("binTask", "ForkLoad"); +// block.put("operationArgs", new JSONObject() {{ +// put("recognize", true); +// }}); + blocks.add(block); - //取货完成等待 - com.alibaba.fastjson.JSONObject jo2 = new com.alibaba.fastjson.JSONObject(); - jo2.put("blockId", IdUtil.simpleUUID()); - jo2.put("location", inst.getStart_point_code() + "OUTGET"); - jo2.put("operation", "script"); - jo2.put("id", inst.getStart_point_code() + "OUTGET"); - jo2.put("script_name", "userpy/interact1.py"); - com.alibaba.fastjson.JSONObject script_args2 = new com.alibaba.fastjson.JSONObject(); - script_args2.put("addr", addr); - com.alibaba.fastjson.JSONObject data2 = new com.alibaba.fastjson.JSONObject(); - com.alibaba.fastjson.JSONObject reach2 = new com.alibaba.fastjson.JSONObject(); - reach2.put("task_code", inst.getInstruction_code()); - reach2.put("address", inst.getStart_point_code() + "OUTGET"); - data2.put("reach", reach2); - script_args2.put("data", data2); - script_args2.put("protocol", "HTTP"); - jo2.put("script_args", script_args2); - ja.add(jo2); + if ("true".equals(device1.getExtraValue().get("ignore_pickup_check"))) { + //取货完成等待 + block = new JSONObject(); + block.put("blockId", IdUtil.simpleUUID()); + block.put("location", inst.getStart_point_code() + "OUTGET"); + block.put("operation", "script"); + block.put("id", inst.getStart_point_code() + "OUTGET"); + block.put("script_name", "userpy/interact.py"); + JSONObject scriptArgs = new JSONObject(); + scriptArgs.put("addr", addr); + JSONObject data = new JSONObject(); + JSONObject reach = new JSONObject(); + reach.put("task_code", inst.getInstruction_code()); + reach.put("address", inst.getStart_point_code() + "OUTGET"); + data.put("reach", reach); + scriptArgs.put("data", data); + scriptArgs.put("protocol", "HTTP"); + block.put("script_args", scriptArgs); + blocks.add(block); + } else { + block = new JSONObject(); + block.put("binTask", "ForkHeight"); + block.put("blockId", IdUtil.simpleUUID()); + block.put("location", inst.getStart_point_code() + "OUTGET"); + blocks.add(block); + } - Device nextDevice = deviceAppService.findDeviceByCode(inst.getNext_device_code()); - if ("true".equals(nextDevice.getExtraValue().get("ignore_release_check"))) { + // 终点1 + Device device2 = deviceAppService.findDeviceByCode(inst.getNext_device_code()); + if ("true".equals(device2.getExtraValue().get("ignore_release_check"))) { //放货前等待 - com.alibaba.fastjson.JSONObject jo3 = new com.alibaba.fastjson.JSONObject(); - jo3.put("blockId", IdUtil.simpleUUID()); - jo3.put("location", inst.getNext_point_code() + "INPUT"); - jo3.put("operation", "script"); - jo3.put("id", inst.getNext_point_code() + "INPUT"); - jo3.put("script_name", "userpy/interact1.py"); - com.alibaba.fastjson.JSONObject script_args3 = new com.alibaba.fastjson.JSONObject(); - script_args3.put("addr", addr); - com.alibaba.fastjson.JSONObject data3 = new com.alibaba.fastjson.JSONObject(); - com.alibaba.fastjson.JSONObject reach3 = new com.alibaba.fastjson.JSONObject(); - reach3.put("task_code", inst.getInstruction_code()); - reach3.put("address", inst.getNext_point_code() + "INPUT"); - data3.put("reach", reach3); - script_args3.put("data", data3); - script_args3.put("protocol", "HTTP"); - jo3.put("script_args", script_args3); - ja.add(jo3); + block = new JSONObject(); + block.put("blockId", IdUtil.simpleUUID()); + block.put("location", inst.getNext_point_code() + "INPUT"); + block.put("operation", "script"); + block.put("id", inst.getNext_point_code() + "INPUT"); + block.put("script_name", "userpy/interact.py"); + JSONObject scriptArgs = new JSONObject(); + scriptArgs.put("addr", addr); + JSONObject data = new JSONObject(); + JSONObject reach = new JSONObject(); + reach.put("task_code", inst.getInstruction_code()); + reach.put("address", inst.getNext_point_code() + "INPUT"); + data.put("reach", reach); + scriptArgs.put("data", data); + scriptArgs.put("protocol", "HTTP"); + block.put("script_args", scriptArgs); + blocks.add(block); } - //放货前下发旋转角度 - com.alibaba.fastjson.JSONObject json1 = new com.alibaba.fastjson.JSONObject(); - if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("4031")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3031") && inst.getNext_device_code().equals("4010")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3012") && inst.getNext_device_code().equals("4019")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("4012")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3001") && inst.getNext_device_code().equals("4019")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("4001")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("4027")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3027") && inst.getNext_device_code().equals("4019")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3027") && inst.getNext_device_code().equals("4019")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("4028")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3028") && inst.getNext_device_code().equals("4019")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("4017")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3017") && inst.getNext_device_code().equals("4019")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("4036")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3036") && inst.getNext_device_code().equals("4019")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3036") && inst.getNext_device_code().equals("4019")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("4032")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3032") && inst.getNext_device_code().equals("4010")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("4033")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3033") && inst.getNext_device_code().equals("4010")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("4034")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3034") && inst.getNext_device_code().equals("4010")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("4015")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3035") && inst.getNext_device_code().equals("4010")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("4003")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3003") && inst.getNext_device_code().equals("4010")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3034") && inst.getNext_device_code().equals("4018")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3035") && inst.getNext_device_code().equals("4018")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3018") && inst.getNext_device_code().equals("4034")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } else if (inst.getStart_device_code().equals("3018") && inst.getNext_device_code().equals("4035")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - }else if (inst.getStart_device_code().equals("3041") && inst.getNext_device_code().equals("4019")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - }else if (inst.getStart_device_code().equals("3042") && inst.getNext_device_code().equals("4010")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - }else if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("3042")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - }else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("3041")) { - com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); - operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14 - operation_args.put("skill_name", "GoByOdometer"); - json1.put("blockId", IdUtil.simpleUUID()); - json1.put("location", inst.getNext_point_code() + "INPUT"); - json1.put("operation_args", operation_args); - ja.add(json1); - } - com.alibaba.fastjson.JSONObject jo4 = new com.alibaba.fastjson.JSONObject(); - jo4.put("blockId", IdUtil.simpleUUID()); - jo4.put("location", inst.getNext_point_code()); - jo4.put("operation", "JackUnload"); - ja.add(jo4); - if ("true".equals(nextDevice.getExtraValue().get("ignore_release_check"))) { + block = new JSONObject(); + block.put("blockId", IdUtil.simpleUUID()); + block.put("location", inst.getNext_point_code()); + block.put("binTask", "ForkUnload"); + blocks.add(block); + + if ("true".equals(device2.getExtraValue().get("ignore_release_check"))) { //放货完成等待 - com.alibaba.fastjson.JSONObject jo5 = new com.alibaba.fastjson.JSONObject(); - jo5.put("blockId", IdUtil.simpleUUID()); - jo5.put("location", inst.getNext_point_code() + "OUTPUT"); - jo5.put("operation", "script"); - jo5.put("id", inst.getNext_point_code() + "OUTPUT"); - jo5.put("script_name", "userpy/interact1.py"); - com.alibaba.fastjson.JSONObject script_args5 = new com.alibaba.fastjson.JSONObject(); - script_args5.put("addr", addr); - com.alibaba.fastjson.JSONObject data5 = new com.alibaba.fastjson.JSONObject(); - com.alibaba.fastjson.JSONObject reach5 = new com.alibaba.fastjson.JSONObject(); - reach5.put("task_code", inst.getInstruction_code()); - reach5.put("address", inst.getNext_point_code() + "OUTPUT"); - data5.put("reach", reach5); - script_args5.put("data", data5); - script_args5.put("protocol", "HTTP"); - jo5.put("script_args", script_args5); - ja.add(jo5); + block = new JSONObject(); + block.put("blockId", IdUtil.simpleUUID()); + block.put("location", inst.getNext_point_code() + "OUTPUT"); + block.put("operation", "script"); + block.put("id", inst.getNext_point_code() + "OUTPUT"); + block.put("script_name", "userpy/interact.py"); + JSONObject scriptArgs = new JSONObject(); + scriptArgs.put("addr", addr); + JSONObject data = new JSONObject(); + JSONObject reach = new JSONObject(); + reach.put("task_code", inst.getInstruction_code()); + reach.put("address", inst.getNext_point_code() + "OUTPUT"); + data.put("reach", reach); + scriptArgs.put("data", data); + scriptArgs.put("protocol", "HTTP"); + block.put("script_args", scriptArgs); + blocks.add(block); } - return ja; + return blocks; } @Override @@ -2386,6 +2130,111 @@ public class AgvServiceImpl implements AgvService { throw new BadRequestException("请求失败,参数错误!"); } + @Override + public JSONObject inBlockGroup(JSONObject requestParam) { + log.info("仙工AGV请求进入互斥组区域,请求参数 - {}", requestParam); + JSONObject resp = new JSONObject(); + //AGV名称 + String robot_name = requestParam.getString("robot_name"); + //进入区域 + String block_group_id = requestParam.getString("block_group_id"); + if (robot_name == null || block_group_id == null) { + resp.put("code", 400); + resp.put("message", "请求参数不完整: robot_name 或 block_group_id缺失"); + log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", resp); + return resp; + } + Device device = deviceAppService.findDeviceByCode(block_group_id); + if (device == null) { + resp.put("code", 400); + resp.put("message", "请求设备不存在"); + log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", resp); + return resp; + } + if (device.getDeviceDriver() instanceof YqGRLDeviceDriver) { + YqGRLDeviceDriver grlDeviceDriver = (YqGRLDeviceDriver) device.getDeviceDriver(); + if (grlDeviceDriver.getGDoorStatus() == 1 && grlDeviceDriver.getADoorStatus() == 1 && grlDeviceDriver.getMiddleStatus() == 1) { + //返回AGV成功 + resp.put("code", 200); + resp.put("message", "ok"); + log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", resp); + return resp; + } else { + //到达固熔炉 + grlDeviceDriver.writing(1); + //返回AGV失败 + resp.put("code", 400); + resp.put("message", "安全门未开到位||固熔炉门未开到位||卷扬机未到达中位"); + log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", resp); + return resp; + } + } else if (device.getDeviceDriver() instanceof YqSXLDeviceDriver) { + YqSXLDeviceDriver sxlDeviceDriver = (YqSXLDeviceDriver) device.getDeviceDriver(); + if (sxlDeviceDriver.getSDoorStatus() == 1) { + resp.put("code", 200); + resp.put("message", "ok"); + log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", resp); + return resp; + } else { + sxlDeviceDriver.writing(1); + resp.put("code", 400); + resp.put("message", "时效炉门未开到位"); + log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", resp); + return resp; + } + } + resp.put("code", 400); + resp.put("message", "请求参数有误!"); + log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", resp); + return resp; + } + + @Override + public JSONObject outBlockGroup(JSONObject requestParam) { + log.info("仙工AGV请求进入互斥组区域,请求参数 - {}", requestParam); + JSONObject resp = new JSONObject(); + //AGV名称 + String robot_name = requestParam.getString("robot_name"); + //进入区域 + String block_group_id = requestParam.getString("block_group_id"); + if (robot_name == null || block_group_id == null) { + resp.put("code", 400); + resp.put("message", "请求参数不完整: robot_name 或 block_group_id缺失"); + log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", resp); + return resp; + } + Device device = deviceAppService.findDeviceByCode(block_group_id); + if (device == null) { + resp.put("code", 400); + resp.put("message", "请求设备不存在"); + log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", resp); + return resp; + } + if (device.getDeviceDriver() instanceof YqGRLDeviceDriver) { + YqGRLDeviceDriver grlDeviceDriver = (YqGRLDeviceDriver) device.getDeviceDriver(); + //离开固熔炉 + grlDeviceDriver.writing(2); + //返回AGV失败 + resp.put("code", 200); + resp.put("message", "ok"); + log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", resp); + return resp; + } else if (device.getDeviceDriver() instanceof YqSXLDeviceDriver) { + YqSXLDeviceDriver sxlDeviceDriver = (YqSXLDeviceDriver) device.getDeviceDriver(); + //离开时效炉 + sxlDeviceDriver.writing(2); + resp.put("code", 200); + resp.put("message", "ok"); + log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", resp); + return resp; + } + resp.put("code", 400); + resp.put("message", "请求参数有误!"); + log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", resp); + return resp; + } + + String hexToString(int i) { return (i < 16 ? "0" + Integer.toHexString(i) : Integer.toHexString(i)).toUpperCase(); } @@ -2417,7 +2266,7 @@ public class AgvServiceImpl implements AgvService { public static void main(String[] args) { String msg = null; String msg1 = null; - System.out.println("msg = " + Objects.equals(msg,msg1)); + System.out.println("msg = " + Objects.equals(msg, msg1)); } } diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java b/hd/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java index 1e386e4..d090ff4 100644 --- a/hd/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java +++ b/hd/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java @@ -10,89 +10,89 @@ import net.sf.json.JSONObject; public enum DriverTypeEnum { ORDINARY_SITE(1, "standard_ordinary_site", "普通站点", "conveyor"), - WEIGHING_SITE(2, "weighing_site", "称重站点", "conveyor"), +// WEIGHING_SITE(2, "weighing_site", "称重站点", "conveyor"), +// +// INSPECT_SITE(3, "standard_inspect_site", "检测站点", "conveyor"), +// +// NON_LINE_INSPECT_SITE(4, "non_line_inspect_site", "检测站点-无PLC", "conveyor"), +// +// MACHINES_SITE(5, "machines_site", "机台设备-无光电", "conveyor"), +// +// SPECIAL_SITE(6, "standard_special_inspect_site", "专机设备交互站点", "conveyor"), +// +// MANIPULATOR_SITE(7, "standard_manipulator_inspect_site", "区域管制设备交互站点", "conveyor"), +// +// NON_LINE_MANIPULATOR_SITE(8, "non_line_manipulator_inspect_site", "区域管制设备交互站点-无PLC", "conveyor"), +// +// AUTODOOR(9, "standard_autodoor", "标准版-自动门", "autodoor"), +// +// STACK_EMPUYPALLET_SITE(10, "standard_emptypallet_site", "标准版-空盘叠盘站点", "conveyor"), +// +// LAMP_THREE_COLOR(11, "lamp_three_color", "标准版-三色灯", "三色灯"), +// +// SPECIAL_ORDINARY_SITE(12, "special_ordinary_site", "特殊版-普通站点-关联锁定", "conveyor"), +// +// STORAGE(13, "standard_storage", "标准版-货架", "storage"), +// +// SCANNER(14, "standard_scanner", "标准版-扫码器", "scanner"), +// +// INSPECT_CONVEYOR_CONTROL_WITH_SCANNER(15, "standard_conveyor_control_with_scanner", "标准版-输送机-控制点-关联扫码", "conveyor"), +// +// INSPECT_CONVEYOR_CONTROL(16, "standard_conveyor_control", "标准版-输送机-控制点", "conveyor"), +// +// INSPECT_CONVEYOR_MONITOR(17, "standard_conveyor_monitor", "标准版-输送机-监控点", "conveyor"), +// +// MANIPULATOR_INSPECT_SITE_NDC(18, "manipulator_inspect_site_NDC", "区域管制设备交互站点-NDC", "conveyor"), +// +// FEEDBACK_AGV_STATUS_SITE(19, "feedback_agv_status_site", "上报AGV状态站点", "conveyor"), +// +// FEEDBACK_AGV_STATUS(42, "feedback_agv_status", "反馈AGV状态", "conveyor"), +// +// MANIPULATOR_STACKING_SITE(20, "standard_manipulator_stacking_site", "机械手码垛驱动(区分托盘类型)", "conveyor"), +// +// PHOTOELECTRIC_INSPECT_SITE(21, "standard_photoelectric_inspect_site", "光电检测站点(优先出库)", "conveyor"), +// +// HAILIANG_PACKING(22, "hailiang_packing", "海亮项目-包装机", "conveyor"), +// +// HAILIANG_LABELING(23, "hailiang_labeling", "海亮项目-贴标机", "conveyor"), +// +// HAILIANG_COATING(24, "hailiang_coating", "海亮项目-裹膜机", "conveyor"), +// +// NDXY_SPECIAL(25, "ndxy_special", "纽迪希亚专用", "conveyor"), +// +// NDXY_SPECIAL_TWO(26, "ndxy_special_two", "纽迪希亚专用2", "conveyor"), +// +// INSPECT_CONVEYOR_CONTROL_WITH_PLCSCANNER(27, "standard_conveyor_control_with_plcscanner", "标准版-输送机-控制点-PLC扫码", "conveyor"), +// +// WHXR_STORAGE_CONVEYOR(28, "whxr_storage_conveyor", "武汉新锐-立库对接位", "conveyor"), +// +// WHXR_BALL_MILL_DEVICE(29, "whxr_ball_mill", "武汉新锐-球磨机", "conveyor"), +// +// WHXR_SPRAY_TOWER_DEVICE(30, "whxr_spary_tower", "武汉新锐-喷雾塔", "conveyor"), +// +// WHXR_WEIGHT_DEVICE(31, "whxr_weight", "武汉新锐-称重设备", "conveyor"), +// +// ELECTRIC_FENCE(32, "electric_fence", "标准版-电子围栏", "safetydoor"), +// +// OUMULONGPLC(33, "oumulong_plc", "标准版-自动门-欧姆龙plc", "autodoor"), +// +// TRAFFIC_LIGHT(34, "traffic_light", "标准版-交通灯-欧姆龙plc", "三色灯"), +// +// STANDARD_RGV(35, "standard_rgv", "标准版-RGV", "rgv"), +// +// YKBK_SPECIAL(36, "ykbk_special", "伊科拜克默认物料", "conveyor"), +// +// ssj_cache_site(36, "ssj_cache_site", "三时纪-缓存站点", "conveyor"), +// +// MAGIC3(37, "magic3", "magic3.0", "agv"), +// +// AGV_SITE(38, "agv_site", "agv站点", "conveyor"), - INSPECT_SITE(3, "standard_inspect_site", "检测站点", "conveyor"), + YQ_CALL_TASK(39, "yq_call_task", "宇清-呼叫任务站点", "conveyor"), - NON_LINE_INSPECT_SITE(4, "non_line_inspect_site", "检测站点-无PLC", "conveyor"), + YQ_GRL(40, "yq_grl", "宇清-固熔炉", "conveyor"), - MACHINES_SITE(5, "machines_site", "机台设备-无光电", "conveyor"), - - SPECIAL_SITE(6, "standard_special_inspect_site", "专机设备交互站点", "conveyor"), - - MANIPULATOR_SITE(7, "standard_manipulator_inspect_site", "区域管制设备交互站点", "conveyor"), - - NON_LINE_MANIPULATOR_SITE(8, "non_line_manipulator_inspect_site", "区域管制设备交互站点-无PLC", "conveyor"), - - AUTODOOR(9, "standard_autodoor", "标准版-自动门", "autodoor"), - - STACK_EMPUYPALLET_SITE(10, "standard_emptypallet_site", "标准版-空盘叠盘站点", "conveyor"), - - LAMP_THREE_COLOR(11, "lamp_three_color", "标准版-三色灯", "三色灯"), - - SPECIAL_ORDINARY_SITE(12, "special_ordinary_site", "特殊版-普通站点-关联锁定", "conveyor"), - - STORAGE(13, "standard_storage", "标准版-货架", "storage"), - - SCANNER(14, "standard_scanner", "标准版-扫码器", "scanner"), - - INSPECT_CONVEYOR_CONTROL_WITH_SCANNER(15, "standard_conveyor_control_with_scanner", "标准版-输送机-控制点-关联扫码", "conveyor"), - - INSPECT_CONVEYOR_CONTROL(16, "standard_conveyor_control", "标准版-输送机-控制点", "conveyor"), - - INSPECT_CONVEYOR_MONITOR(17, "standard_conveyor_monitor", "标准版-输送机-监控点", "conveyor"), - - MANIPULATOR_INSPECT_SITE_NDC(18, "manipulator_inspect_site_NDC", "区域管制设备交互站点-NDC", "conveyor"), - - FEEDBACK_AGV_STATUS_SITE(19, "feedback_agv_status_site", "上报AGV状态站点", "conveyor"), - - FEEDBACK_AGV_STATUS(42, "feedback_agv_status", "反馈AGV状态", "conveyor"), - - MANIPULATOR_STACKING_SITE(20, "standard_manipulator_stacking_site", "机械手码垛驱动(区分托盘类型)", "conveyor"), - - PHOTOELECTRIC_INSPECT_SITE(21, "standard_photoelectric_inspect_site", "光电检测站点(优先出库)", "conveyor"), - - HAILIANG_PACKING(22, "hailiang_packing", "海亮项目-包装机", "conveyor"), - - HAILIANG_LABELING(23, "hailiang_labeling", "海亮项目-贴标机", "conveyor"), - - HAILIANG_COATING(24, "hailiang_coating", "海亮项目-裹膜机", "conveyor"), - - NDXY_SPECIAL(25, "ndxy_special", "纽迪希亚专用", "conveyor"), - - NDXY_SPECIAL_TWO(26, "ndxy_special_two", "纽迪希亚专用2", "conveyor"), - - INSPECT_CONVEYOR_CONTROL_WITH_PLCSCANNER(27, "standard_conveyor_control_with_plcscanner", "标准版-输送机-控制点-PLC扫码", "conveyor"), - - WHXR_STORAGE_CONVEYOR(28, "whxr_storage_conveyor", "武汉新锐-立库对接位", "conveyor"), - - WHXR_BALL_MILL_DEVICE(29, "whxr_ball_mill", "武汉新锐-球磨机", "conveyor"), - - WHXR_SPRAY_TOWER_DEVICE(30, "whxr_spary_tower", "武汉新锐-喷雾塔", "conveyor"), - - WHXR_WEIGHT_DEVICE(31, "whxr_weight", "武汉新锐-称重设备", "conveyor"), - - ELECTRIC_FENCE(32, "electric_fence", "标准版-电子围栏", "safetydoor"), - - OUMULONGPLC(33, "oumulong_plc", "标准版-自动门-欧姆龙plc", "autodoor"), - - TRAFFIC_LIGHT(34, "traffic_light", "标准版-交通灯-欧姆龙plc", "三色灯"), - - STANDARD_RGV(35, "standard_rgv", "标准版-RGV", "rgv"), - - YKBK_SPECIAL(36, "ykbk_special", "伊科拜克默认物料", "conveyor"), - - ssj_cache_site(36, "ssj_cache_site", "三时纪-缓存站点", "conveyor"), - - MAGIC3(37, "magic3", "magic3.0", "agv"), - - AGV_SITE(38, "agv_site", "agv站点", "conveyor"), - - WHXR_WEIGHING(39, "whxr_weighing", "武汉新锐-称重", "conveyor"), - - YZJA_SPECIAL(40, "yzja_special", "扬州晶澳专用", "conveyor"), - - INSPECT_SITE_SMART(41, "standard_inspect_site_smart", "检测站点_smaet200", "conveyor"); + YQ_SXL(41, "yq_sxl", "宇清-时效炉", "conveyor"); //驱动索引 private int index; diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/device/wql/task_inst.xls b/hd/nladmin-system/src/main/java/org/nl/acs/device/wql/task_inst.xls index a8d1d30795bbef7e55fbdb1b89cc416331323351..2dca788dc84bfb4ed346caae986eeee4832c642b 100644 GIT binary patch delta 18080 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 getReadableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_mode, "工作模式", "40001")); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_to_command, "反馈命令", "40002")); + return list; + } + +} + diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/call_task/YqCallTaskDefination.java b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/call_task/YqCallTaskDefination.java new file mode 100644 index 0000000..8ea022c --- /dev/null +++ b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/call_task/YqCallTaskDefination.java @@ -0,0 +1,62 @@ +package org.nl.acs.device_driver.yu_qing.call_task; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceType; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * 伊科拜克默认物料 + * 说明:该站点为普通带光电检测站点 + */ +@Service +public class YqCallTaskDefination implements OpcDeviceDriverDefination { + @Override + public String getDriverCode() { + return "yq_call_task"; + } + + @Override + public String getDriverName() { + return "宇清呼叫任务"; + } + + @Override + public String getDriverDescription() { + return "宇清呼叫任务"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new YqCallTaskDeviceDriver()).setDevice(device).setDriverDefination(this); + + } + + @Override + public Class getDeviceDriverType() { + return YqCallTaskDeviceDriver.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/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/call_task/YqCallTaskDeviceDriver.java b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/call_task/YqCallTaskDeviceDriver.java new file mode 100644 index 0000000..8531def --- /dev/null +++ b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/call_task/YqCallTaskDeviceDriver.java @@ -0,0 +1,165 @@ +package org.nl.acs.device_driver.yu_qing.call_task; + +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.nl.acs.device.device_driver.standard_inspect.ReadUtil; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +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.instruction.service.InstructionService; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.route.service.RouteLineService; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.TaskSignalMappingService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.task.service.dto.TaskSignalMappingDto; +import org.nl.utils.SpringContextHolder; +import org.openscada.opc.lib.da.Server; + +import java.util.*; + +/** + * 伊科拜克默认物料 + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class YqCallTaskDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver { + protected ItemProtocol itemProtocol = new ItemProtocol(this); + + + private final InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); + private final DeviceService deviceservice = SpringContextHolder.getBean(DeviceService.class); + private final RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class); + private final TaskService taskService = SpringContextHolder.getBean(TaskService.class); + private final DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); + private final TaskSignalMappingService taskSignalMappingService = SpringContextHolder.getBean(TaskSignalMappingService.class); + + + /** + * 呼叫任务模式 + */ + private int mode = 0; + private int last_mode = 0; + + /** + * 设备在线状态 + */ + private Boolean isOnline = true; + + /** + * 设备报警 + */ + private Boolean isError = false; + + /** + * 备注 + */ + String message = null; + + /** + * 呼叫任务时间 + */ + private Date instruction_require_time = new Date(); + + /** + * 呼叫任务超时时间 + */ + private int instruction_require_time_out = 3000; + + /** + * 请求标记 + */ + private boolean requireSuccess = false; + + /** + * 设备编号 + */ + String device_code = null; + + + @Override + public Device getDevice() { + return this.device; + } + + + @Override + public void execute() { + try { + device_code = this.getDevice().getDevice_code(); + mode = this.itemProtocol.getMode(); + if (mode != last_mode) { + this.setRequireSuccess(false); + this.execute_log.setResource(this.device_code, this.device.getDevice_name()); + this.execute_log.log("设备:" + device_code + ",last_mode -> mode:" + last_mode + "->" + mode); + } + } catch (Exception var17) { + return; + } + if (!this.itemProtocol.getIsOnline()) { + this.setIsOnline(false); + this.setIsError(true); + message = "信号量同步异常"; + } else { + this.setIsOnline(true); + this.setIsError(false); + if (!requireSuccess && this.mode > 0) { + createTask(); + } + } + last_mode = mode; + } + + private void createTask() { + 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; + } else { + List mappingDtos = taskSignalMappingService.findByDeviceSign(this.device_code, String.valueOf(this.mode)); + if (CollectionUtils.isNotEmpty(mappingDtos)) { + List taskDtos = new ArrayList<>(); + for (TaskSignalMappingDto mappingDto : mappingDtos) { + String task_type = mappingDto.getTask_type(); + String task_priority = mappingDto.getTask_priority(); + String task_start_device_code = mappingDto.getTask_start_device_code(); + String task_next_device_code = mappingDto.getTask_next_device_code(); + TaskDto taskDto = new TaskDto(); + taskDto.setStart_device_code(task_start_device_code); + taskDto.setStart_point_code(task_start_device_code); + taskDto.setStart_parent_code(task_start_device_code); + taskDto.setNext_device_code(task_next_device_code); + taskDto.setNext_point_code(task_next_device_code); + taskDto.setNext_parent_code(task_next_device_code); + taskDto.setTask_type(task_type); + taskDto.setPriority(task_priority); + taskDtos.add(taskDto); + } + try { + taskService.createBach(taskDtos); + } catch (Exception e) { + return; + } + this.writing(1); + this.requireSuccess = true; + } + } + } + + 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); + ReadUtil.write(itemMap, server); + } + +} diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/gu_rong_lu/ItemProtocol.java b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/gu_rong_lu/ItemProtocol.java new file mode 100644 index 0000000..df69d8d --- /dev/null +++ b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/gu_rong_lu/ItemProtocol.java @@ -0,0 +1,75 @@ +package org.nl.acs.device_driver.yu_qing.gu_rong_lu; + +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_gDoorStatus = "gDoorStatus"; + public static String item_aDoorStatus = "aDoorStatus"; + public static String item_middleStatus = "middleStatus"; + public static String item_toCommand = "toCommand"; + + + private YqGRLDeviceDriver driver; + + public ItemProtocol(YqGRLDeviceDriver driver) { + this.driver = driver; + } + + + public int getGDoorStatus() { + return this.getOpcIntegerValue(item_gDoorStatus); + } + public int getADoorStatus() { + return this.getOpcIntegerValue(item_aDoorStatus); + } + public int getMiddleStatus() { + return this.getOpcIntegerValue(item_middleStatus); + } + public int getToCommand() { + return this.getOpcIntegerValue(item_toCommand); + } + + + //是否有货 + public int hasGoods(int move) { + return move; + } + + Boolean isOnline; + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegerValue(protocol); + if (value == null) { + setIsOnline(false); + } else { + setIsOnline(true); + return value; + } + return 0; + + } + + public static List getReadableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_gDoorStatus, "固熔炉门开到位信号", "40001")); + list.add(new ItemDto(item_aDoorStatus, "安全门开到位信号", "40002")); + list.add(new ItemDto(item_middleStatus, "卷扬机到达中位信号", "40003")); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_toCommand, "反馈命令", "40004")); + return list; + } + +} + diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/gu_rong_lu/YqGRLDefination.java b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/gu_rong_lu/YqGRLDefination.java new file mode 100644 index 0000000..68bab51 --- /dev/null +++ b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/gu_rong_lu/YqGRLDefination.java @@ -0,0 +1,62 @@ +package org.nl.acs.device_driver.yu_qing.gu_rong_lu; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceType; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * 伊科拜克默认物料 + * 说明:该站点为普通带光电检测站点 + */ +@Service +public class YqGRLDefination implements OpcDeviceDriverDefination { + @Override + public String getDriverCode() { + return "yq_grl"; + } + + @Override + public String getDriverName() { + return "宇清固熔炉"; + } + + @Override + public String getDriverDescription() { + return "宇清固熔炉"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new YqGRLDeviceDriver()).setDevice(device).setDriverDefination(this); + + } + + @Override + public Class getDeviceDriverType() { + return YqGRLDeviceDriver.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/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/gu_rong_lu/YqGRLDeviceDriver.java b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/gu_rong_lu/YqGRLDeviceDriver.java new file mode 100644 index 0000000..3c49e93 --- /dev/null +++ b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/gu_rong_lu/YqGRLDeviceDriver.java @@ -0,0 +1,150 @@ +package org.nl.acs.device_driver.yu_qing.gu_rong_lu; + +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ReadUtil; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +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.instruction.service.InstructionService; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.route.service.RouteLineService; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.TaskSignalMappingService; +import org.nl.utils.SpringContextHolder; +import org.openscada.opc.lib.da.Server; + +import java.util.*; + +/** + * 伊科拜克默认物料 + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class YqGRLDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver { + + protected ItemProtocol itemProtocol = new ItemProtocol(this); + + + private final InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); + private final DeviceService deviceservice = SpringContextHolder.getBean(DeviceService.class); + private final RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class); + private final TaskService taskService = SpringContextHolder.getBean(TaskService.class); + private final DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); + private final TaskSignalMappingService taskSignalMappingService = SpringContextHolder.getBean(TaskSignalMappingService.class); + + + /** + * 固熔炉门开到位信号 + */ + private int gDoorStatus = 0; + private int lastGDoorStatus = 0; + + /** + * 安全门开到位信号 + */ + private int aDoorStatus = 0; + private int lastADoorStatus = 0; + + /** + * 卷扬机到达中位信号 + */ + private int middleStatus = 0; + private int lastMiddleStatus = 0; + + /** + * 设备在线状态 + */ + private Boolean isOnline = true; + + /** + * 设备报警 + */ + private Boolean isError = false; + + /** + * 备注 + */ + String message = null; + + /** + * 呼叫任务时间 + */ + private Date instruction_require_time = new Date(); + + /** + * 呼叫任务超时时间 + */ + private int instruction_require_time_out = 3000; + + /** + * 请求标记 + */ + private boolean requireSuccess = false; + + /** + * 设备编号 + */ + String device_code = null; + + + @Override + public Device getDevice() { + return this.device; + } + + + @Override + public void execute() { + try { + device_code = this.getDevice().getDevice_code(); + gDoorStatus = this.itemProtocol.getGDoorStatus(); + aDoorStatus = this.itemProtocol.getADoorStatus(); + middleStatus = this.itemProtocol.getMiddleStatus(); + if (gDoorStatus != lastGDoorStatus) { + this.execute_log.setResource(this.device_code, this.device.getDevice_name()); + this.execute_log.log("设备:" + device_code + ",lastGDoorStatus -> gDoorStatus:" + lastGDoorStatus + "->" + gDoorStatus); + } + + if (aDoorStatus != lastADoorStatus) { + this.execute_log.setResource(this.device_code, this.device.getDevice_name()); + this.execute_log.log("设备:" + device_code + ",lastADoorStatus -> aDoorStatus:" + lastADoorStatus + "->" + aDoorStatus); + } + + if (middleStatus != lastMiddleStatus) { + this.execute_log.setResource(this.device_code, this.device.getDevice_name()); + this.execute_log.log("设备:" + device_code + ",lastMiddleStatus -> middleStatus:" + lastMiddleStatus + "->" + middleStatus); + } + } catch (Exception var17) { + return; + } + if (!this.itemProtocol.getIsOnline()) { + this.setIsOnline(false); + this.setIsError(true); + message = "信号量同步异常"; + } else { + this.setIsOnline(true); + this.setIsError(false); + } + lastGDoorStatus = gDoorStatus; + lastADoorStatus = aDoorStatus; + lastMiddleStatus = middleStatus; + } + + + public void writing(int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_toCommand; + String opcservcerid = this.getDevice().getOpc_server_id(); + Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, command); + ReadUtil.write(itemMap, server); + } + +} diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/shi_xiao_lu/ItemProtocol.java b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/shi_xiao_lu/ItemProtocol.java new file mode 100644 index 0000000..700eb77 --- /dev/null +++ b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/shi_xiao_lu/ItemProtocol.java @@ -0,0 +1,65 @@ +package org.nl.acs.device_driver.yu_qing.shi_xiao_lu; + +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_sDoorStatus = "sDoorStatus"; + public static String item_toCommand = "toCommand"; + + + private YqSXLDeviceDriver driver; + + public ItemProtocol(YqSXLDeviceDriver driver) { + this.driver = driver; + } + + + public int getSDoorStatus() { + return this.getOpcIntegerValue(item_sDoorStatus); + } + public int getToCommand() { + return this.getOpcIntegerValue(item_toCommand); + } + + + //是否有货 + public int hasGoods(int move) { + return move; + } + + Boolean isOnline; + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegerValue(protocol); + if (value == null) { + setIsOnline(false); + } else { + setIsOnline(true); + return value; + } + return 0; + + } + + public static List getReadableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_sDoorStatus, "时效炉门开到位信号", "40001")); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_toCommand, "反馈命令", "40002")); + return list; + } + +} + diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/shi_xiao_lu/YqSXLDefination.java b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/shi_xiao_lu/YqSXLDefination.java new file mode 100644 index 0000000..65372c1 --- /dev/null +++ b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/shi_xiao_lu/YqSXLDefination.java @@ -0,0 +1,62 @@ +package org.nl.acs.device_driver.yu_qing.shi_xiao_lu; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceType; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * 伊科拜克默认物料 + * 说明:该站点为普通带光电检测站点 + */ +@Service +public class YqSXLDefination implements OpcDeviceDriverDefination { + @Override + public String getDriverCode() { + return "yq_sxl"; + } + + @Override + public String getDriverName() { + return "宇清时效炉"; + } + + @Override + public String getDriverDescription() { + return "宇清时效炉"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new YqSXLDeviceDriver()).setDevice(device).setDriverDefination(this); + + } + + @Override + public Class getDeviceDriverType() { + return YqSXLDeviceDriver.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/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/shi_xiao_lu/YqSXLDeviceDriver.java b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/shi_xiao_lu/YqSXLDeviceDriver.java new file mode 100644 index 0000000..f8c5801 --- /dev/null +++ b/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/yu_qing/shi_xiao_lu/YqSXLDeviceDriver.java @@ -0,0 +1,122 @@ +package org.nl.acs.device_driver.yu_qing.shi_xiao_lu; + +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ReadUtil; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +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.instruction.service.InstructionService; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.route.service.RouteLineService; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.TaskSignalMappingService; +import org.nl.utils.SpringContextHolder; +import org.openscada.opc.lib.da.Server; + +import java.util.*; + +/** + * 伊科拜克默认物料 + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class YqSXLDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver { + protected ItemProtocol itemProtocol = new ItemProtocol(this); + + private final InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); + private final DeviceService deviceservice = SpringContextHolder.getBean(DeviceService.class); + private final RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class); + private final TaskService taskService = SpringContextHolder.getBean(TaskService.class); + private final DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); + private final TaskSignalMappingService taskSignalMappingService = SpringContextHolder.getBean(TaskSignalMappingService.class); + + /** + * 时效炉门开到位信号 + */ + private int sDoorStatus = 0; + private int lastSDoorStatus = 0; + + /** + * 设备在线状态 + */ + private Boolean isOnline = true; + + /** + * 设备报警 + */ + private Boolean isError = false; + + /** + * 备注 + */ + String message = null; + + /** + * 呼叫任务时间 + */ + private Date instruction_require_time = new Date(); + + /** + * 呼叫任务超时时间 + */ + private int instruction_require_time_out = 3000; + + /** + * 请求标记 + */ + private boolean requireSuccess = false; + + /** + * 设备编号 + */ + String device_code = null; + + + @Override + public Device getDevice() { + return this.device; + } + + + @Override + public void execute() { + try { + device_code = this.getDevice().getDevice_code(); + sDoorStatus = this.itemProtocol.getSDoorStatus(); + if (sDoorStatus != lastSDoorStatus) { + this.execute_log.setResource(this.device_code, this.device.getDevice_name()); + this.execute_log.log("设备:" + device_code + ",lastSDoorStatus -> sDoorStatus:" + lastSDoorStatus + "->" + sDoorStatus); + } + } catch (Exception var17) { + return; + } + if (!this.itemProtocol.getIsOnline()) { + this.setIsOnline(false); + this.setIsError(true); + message = "信号量同步异常"; + } else { + this.setIsOnline(true); + this.setIsError(false); + + } + lastSDoorStatus = sDoorStatus; + } + + + public void writing(int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_toCommand; + String opcservcerid = this.getDevice().getOpc_server_id(); + Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, command); + ReadUtil.write(itemMap, server); + } + +} diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/task/rest/TaskSignalMappingController.java b/hd/nladmin-system/src/main/java/org/nl/acs/task/rest/TaskSignalMappingController.java new file mode 100644 index 0000000..ed0b46c --- /dev/null +++ b/hd/nladmin-system/src/main/java/org/nl/acs/task/rest/TaskSignalMappingController.java @@ -0,0 +1,81 @@ + +package org.nl.acs.task.rest; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.task.service.TaskSignalMappingService; +import org.nl.acs.task.service.dto.TaskSignalMappingDto; +import org.nl.annotation.Log; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author ldjun + * @date 2021-03-18 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "任务映射管理") +@RequestMapping("/api/taskSignalMapping") +@Slf4j +public class TaskSignalMappingController { + + private final TaskSignalMappingService taskSignalMappingService; + + @GetMapping + @Log("查询任务映射关系") + @ApiOperation("查询任务映射关系") + //@PreAuthorize("@el.check('task:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(taskSignalMappingService.queryAllByCache(whereJson, page), HttpStatus.OK); + } + + @GetMapping("/reload") + @Log("数据同步") + @ApiOperation("数据同步") + //@PreAuthorize("@el.check('task:list')") + public ResponseEntity reload() { + taskSignalMappingService.reload(); + return new ResponseEntity<>(HttpStatus.OK); + } + + + @PostMapping + @Log("新增任务映射关系") + @ApiOperation("新增任务映射关系") + //@PreAuthorize("@el.check('task:add')") + public ResponseEntity create(@Validated @RequestBody TaskSignalMappingDto dto) throws Exception { + taskSignalMappingService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + + + @PutMapping + @Log("修改任务映射关系") + @ApiOperation("修改任务映射关系") + //@PreAuthorize("@el.check('task:edit')") + public ResponseEntity update(@Validated @RequestBody TaskSignalMappingDto dto) { + taskSignalMappingService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除任务映射关系") + @ApiOperation("删除任务关系") + //@PreAuthorize("@el.check('task:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody String[] ids) throws Exception { + taskSignalMappingService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + +} diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/task/service/TaskService.java b/hd/nladmin-system/src/main/java/org/nl/acs/task/service/TaskService.java index cb20fd5..0c7a934 100644 --- a/hd/nladmin-system/src/main/java/org/nl/acs/task/service/TaskService.java +++ b/hd/nladmin-system/src/main/java/org/nl/acs/task/service/TaskService.java @@ -269,4 +269,7 @@ public interface TaskService { */ Integer querySameOriginTask(String code); + + + void createBach(List taskDtos) throws Exception; } diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/task/service/TaskSignalMappingService.java b/hd/nladmin-system/src/main/java/org/nl/acs/task/service/TaskSignalMappingService.java new file mode 100644 index 0000000..1922419 --- /dev/null +++ b/hd/nladmin-system/src/main/java/org/nl/acs/task/service/TaskSignalMappingService.java @@ -0,0 +1,37 @@ + +package org.nl.acs.task.service; + + +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.task.service.dto.TaskSignalMappingDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @author ldjun + * @description 服务接口 + * @date 2021-03-18 + **/ +public interface TaskSignalMappingService { + + /** + * 查询所有数据不分页 + * + * @return List + */ + List queryAll(); + + Object queryAllByCache(Map whereJson, Pageable page); + + void reload(); + + void create(TaskSignalMappingDto dto); + + void update(TaskSignalMappingDto dto); + + void deleteAll(String[] ids); + + List findByDeviceSign(String deviceCode,String deviceSign); +} diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/task/service/dto/TaskSignalMappingDto.java b/hd/nladmin-system/src/main/java/org/nl/acs/task/service/dto/TaskSignalMappingDto.java new file mode 100644 index 0000000..e243a22 --- /dev/null +++ b/hd/nladmin-system/src/main/java/org/nl/acs/task/service/dto/TaskSignalMappingDto.java @@ -0,0 +1,55 @@ +package org.nl.acs.task.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author ldjun + * @description / + * @date 2021-03-18 + **/ +@Data +public class TaskSignalMappingDto implements Serializable { + + /** + * 映射标识 + */ + private String id; + + /** + * 设备编码 + */ + private String device_code; + + /** + * 信号值 + */ + private String device_sign; + + /** + * 信号类型 + */ + private String task_type; + + /** + * 任务起点 + */ + private String task_start_device_code; + + /** + * 任务终点 + */ + private String task_next_device_code; + + /** + * 任务优先级 + */ + private String task_priority; + + /** + * 备注 + */ + private String parameters; + +} diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index a5e205a..68c0dec 100644 --- a/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -291,7 +291,7 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { @Override public Map queryAllByCache(Map whereJson, Pageable page) { - this.reload(); +// this.reload(); String task_code = (String) whereJson.get("task_code"); String vehicle_code = (String) whereJson.get("vehicle_code"); String material_type = (String) whereJson.get("material_type"); @@ -1570,4 +1570,64 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { return num; } + @Override + @Transactional(rollbackFor = Exception.class) + public void createBach(List taskDtos) throws Exception { + List cacheTasks = new ArrayList<>(); + for (TaskDto dto : taskDtos) { + dto = foramte(dto); + if (!StrUtil.isEmpty(dto.getVehicle_code())) { + TaskDto vehicle_dto = this.findByContainer(dto.getVehicle_code()); + if (vehicle_dto != null) { + throw new WDKException("已存在该载具号的任务!"); + } + } + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + String task_uuid = dto.getTask_id(); + if (StrUtil.isEmpty(task_uuid)) { + dto.setTask_id(IdUtil.simpleUUID()); + } + String task_code = dto.getTask_code(); + if (StrUtil.isEmpty(task_code)) { + task_code = CodeUtil.getNewCode("TASK_NO"); + task_code = "-" + task_code; + } + String start_point_code = dto.getStart_point_code(); + String next_point_code = dto.getNext_point_code(); + String start_device_code = dto.getStart_device_code(); + String next_device_code = dto.getNext_device_code(); + String route_plan_code = dto.getRoute_plan_code(); + dto.setCreate_by(currentUsername); + dto.setUpdate_by(currentUsername); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setTask_code(task_code); + dto.setRoute_plan_code(route_plan_code); + dto.setTask_status("0"); + + if (StrUtil.isEmpty(dto.getPriority())) { + dto.setPriority("1"); + } + String plan_code = dto.getRoute_plan_code(); + //判断起点终点设备类型 + if (routelineserver.getShortPathLines(dto.getStart_device_code(), dto.getNext_device_code(), plan_code).size() == 0) { + throw new Exception(dto.getStart_point_code() + "->" + dto.getNext_point_code() + "路由不通!"); + } + String createTaskCheck = acsConfigService.findConfigFromCache().get(AcsConfig.CREATETASKCHECK); + DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class); + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + Device nextdevice = appService.findDeviceByCode(next_device_code); + Device startdevice = appService.findDeviceByCode(start_device_code); + dto.setMaterial(startdevice.getMaterial_type()); + WQLObject wo = WQLObject.getWQLObject("acs_task"); + JSONObject json = JSONObject.fromObject(dto); + wo.insert(json); + cacheTasks.add(dto); + } + for (TaskDto cacheTask : cacheTasks) { + this.tasks.add(cacheTask); + } + } + } diff --git a/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskSignalMappingServiceImpl.java b/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskSignalMappingServiceImpl.java new file mode 100644 index 0000000..40d4787 --- /dev/null +++ b/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskSignalMappingServiceImpl.java @@ -0,0 +1,131 @@ + +package org.nl.acs.task.service.impl; + + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.nl.acs.task.service.TaskSignalMappingService; +import org.nl.acs.task.service.dto.TaskSignalMappingDto; +import org.nl.exception.BadRequestException; +import org.nl.start.auto.initial.ApplicationAutoInitial; +import org.nl.wql.core.bean.WQLObject; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.stream.Collectors; + +/** + * @author ldjun + * @description 服务实现 + * @date 2021-03-18 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class TaskSignalMappingServiceImpl implements TaskSignalMappingService, ApplicationAutoInitial { + + private final List mappingDtos = new CopyOnWriteArrayList<>(); + + @Override + public void autoInitial() throws Exception { + this.reload(); + } + + @Override + public synchronized void reload() { + List newList = queryAll(); + this.mappingDtos.clear(); + this.mappingDtos.addAll(newList); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(TaskSignalMappingDto dto) { + if (StrUtil.equals(dto.getTask_start_device_code(), dto.getTask_next_device_code())) { + throw new BadRequestException("任务起点和终点不能一致"); + } + WQLObject wo = WQLObject.getWQLObject("acs_task_signal_mapping"); + dto.setId(IdUtil.simpleUUID()); + JSONObject json = JSONObject.fromObject(dto); + wo.insert(json); + this.mappingDtos.add(dto); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(TaskSignalMappingDto dto) { + WQLObject wo = WQLObject.getWQLObject("acs_task_signal_mapping"); + JSONObject json = JSONObject.fromObject(dto); + wo.update(json); + updateByCodeFromCache(dto); + } + + private void updateByCodeFromCache(TaskSignalMappingDto dto) { + this.mappingDtos.removeIf(mappingDto -> mappingDto.getId().equals(dto.getId())); + this.mappingDtos.add(dto); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(String[] ids) { + WQLObject wo = WQLObject.getWQLObject("acs_task_signal_mapping"); + for (String id : ids) { + wo.delete("id = '" + id + "'"); + } + } + + @Override + public List findByDeviceSign(String deviceCode, String deviceSign) { + return Optional.ofNullable(this.mappingDtos) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(dto -> dto.getDevice_sign().equals(deviceSign)) + .filter(dto -> dto.getDevice_code().equals(deviceCode)) + .collect(Collectors.toList()); + } + + + @Override + public List queryAll() { + WQLObject wo = WQLObject.getWQLObject("acs_task_signal_mapping"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = JSONArray.toList(arr, TaskSignalMappingDto.class); + return list; + } + + @Override + public Object queryAllByCache(Map whereJson, Pageable page) { + int pageNumber = page.getPageNumber(); + int pageSize = page.getPageSize(); + int skipCount = (pageNumber - 1) * pageSize; + int limitCount = pageSize; + String device_sign = (String) whereJson.get("device_sign"); + String device_code = (String) whereJson.get("device_code"); + String task_type = (String) whereJson.get("task_type"); + String task_start_device_code = (String) whereJson.get("task_start_device_code"); + String task_next_device_code = (String) whereJson.get("task_next_device_code"); + List taskSignalMappingDtoList = this.mappingDtos.stream() + .filter(dto -> (device_code == null || device_code.equals(dto.getDevice_code()))) + .filter(dto -> (device_sign == null || device_sign.equals(dto.getDevice_sign()))) + .filter(dto -> (task_type == null || task_type.equals(dto.getTask_type()))) + .filter(dto -> (task_start_device_code == null || task_start_device_code.contains(dto.getTask_start_device_code()))) + .filter(dto -> (task_next_device_code == null || task_next_device_code.contains(dto.getTask_next_device_code()))) + .collect(Collectors.toList()); + int total = taskSignalMappingDtoList.size(); + int fromIndex = Math.max(0, skipCount); + int toIndex = Math.min(fromIndex + limitCount, total); + List pageList = taskSignalMappingDtoList.subList(fromIndex, toIndex); + JSONObject jo = new JSONObject(); + jo.put("content", pageList); + jo.put("totalElements", total); + return jo; + } + +} diff --git a/qd/src/api/acs/task/taskSignalMapping.js b/qd/src/api/acs/task/taskSignalMapping.js new file mode 100644 index 0000000..c4331e4 --- /dev/null +++ b/qd/src/api/acs/task/taskSignalMapping.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/taskSignalMapping', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/taskSignalMapping/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/taskSignalMapping', + method: 'put', + data + }) +} + +export function reload() { + return request({ + url: 'api/taskSignalMapping/reload', + method: 'get' + }) +} + +export default { add, edit, del, reload } + diff --git a/qd/src/views/acs/device/config.vue b/qd/src/views/acs/device/config.vue index da537ff..5e26512 100644 --- a/qd/src/views/acs/device/config.vue +++ b/qd/src/views/acs/device/config.vue @@ -86,7 +86,8 @@ import special_ordinary_site from './driver/special_ordinary_site' import standard_storage from '@/views/acs/device/driver/standard_storage' import standard_scanner from '@/views/acs/device/driver/standard_scanner' import standard_conveyor_control_with_scanner from '@/views/acs/device/driver/standard_conveyor_control_with_scanner' -import standard_conveyor_control_with_plcscanner from '@/views/acs/device/driver/standard_conveyor_control_with_plcscanner' +import standard_conveyor_control_with_plcscanner +from '@/views/acs/device/driver/standard_conveyor_control_with_plcscanner' import standard_conveyor_control from '@/views/acs/device/driver/standard_conveyor_control' import standard_conveyor_monitor from '@/views/acs/device/driver/standard_conveyor_monitor' import non_line_manipulator_inspect_site from '@/views/acs/device/driver/non_line_manipulator_inspect_site' @@ -113,17 +114,59 @@ import magic3 from '@/views/acs/device/driver/magic3' import agv_site from '@/views/acs/device/driver/agv_site' import whxr_weighing from '@/views/acs/device/driver/whxr/whxr_weighing' import jmagv from '@/views/acs/device/driver/jmagv' +import yq_grl from '@/views/acs/device/driver/yq/yq_grl' +import yq_sxl from '@/views/acs/device/driver/yq/yq_sxl' +import yq_call_task from '@/views/acs/device/driver/yq/yq_call_task' import yzja_special from '@/views/acs/device/driver/yzja_special' export default { name: 'DeviceConfig', - components: { standard_ordinary_site, standard_inspect_site, standard_autodoor, - standard_emptypallet_site, standard_manipulator_inspect_site, standard_special_inspect_site, - lamp_three_color, standard_storage, special_ordinary_site, standard_scanner, standard_conveyor_control_with_scanner, - standard_conveyor_control_with_plcscanner, standard_conveyor_control, standard_conveyor_monitor, weighing_site, machines_site, non_line_manipulator_inspect_site, - non_line_inspect_site, manipulator_inspect_site_NDC, feedback_agv_status_site, feedback_agv_status, standard_manipulator_stacking_site, - standard_photoelectric_inspect_site, ndxy_special, hailiang_labeling, ndxy_special_two, whxr_storage_conveyor, whxr_ball_mill, whxr_spary_tower, whxr_weight, - electric_fence, oumulong_plc, traffic_light, standard_rgv, ykbk_special, ssj_cache_site, magic3, agv_site, whxr_weighing, jmagv, yzja_special }, + components: { + standard_ordinary_site, + standard_inspect_site, + standard_autodoor, + yq_grl, + yq_sxl, + yq_call_task, + standard_emptypallet_site, + standard_manipulator_inspect_site, + standard_special_inspect_site, + lamp_three_color, + standard_storage, + special_ordinary_site, + standard_scanner, + standard_conveyor_control_with_scanner, + standard_conveyor_control_with_plcscanner, + standard_conveyor_control, + standard_conveyor_monitor, + weighing_site, + machines_site, + non_line_manipulator_inspect_site, + non_line_inspect_site, + manipulator_inspect_site_NDC, + feedback_agv_status_site, + feedback_agv_status, + standard_manipulator_stacking_site, + standard_photoelectric_inspect_site, + ndxy_special, + hailiang_labeling, + ndxy_special_two, + whxr_storage_conveyor, + whxr_ball_mill, + whxr_spary_tower, + whxr_weight, + electric_fence, + oumulong_plc, + traffic_light, + standard_rgv, + ykbk_special, + ssj_cache_site, + magic3, + agv_site, + whxr_weighing, + jmagv, + yzja_special + }, dicts: ['device_type'], mixins: [crud], data() { diff --git a/qd/src/views/acs/device/driver/yq/yq_call_task.vue b/qd/src/views/acs/device/driver/yq/yq_call_task.vue new file mode 100644 index 0000000..b024ca1 --- /dev/null +++ b/qd/src/views/acs/device/driver/yq/yq_call_task.vue @@ -0,0 +1,487 @@ + + + + + diff --git a/qd/src/views/acs/device/driver/yq/yq_grl.vue b/qd/src/views/acs/device/driver/yq/yq_grl.vue new file mode 100644 index 0000000..b024ca1 --- /dev/null +++ b/qd/src/views/acs/device/driver/yq/yq_grl.vue @@ -0,0 +1,487 @@ + + + + + diff --git a/qd/src/views/acs/device/driver/yq/yq_sxl.vue b/qd/src/views/acs/device/driver/yq/yq_sxl.vue new file mode 100644 index 0000000..b024ca1 --- /dev/null +++ b/qd/src/views/acs/device/driver/yq/yq_sxl.vue @@ -0,0 +1,487 @@ + + + + + diff --git a/qd/src/views/acs/task/task_signal_mapping/index.vue b/qd/src/views/acs/task/task_signal_mapping/index.vue new file mode 100644 index 0000000..7973bdf --- /dev/null +++ b/qd/src/views/acs/task/task_signal_mapping/index.vue @@ -0,0 +1,270 @@ + + + + +