From 3d1bada4c9cad3e43254e59491add623b2c2348d Mon Sep 17 00:00:00 2001 From: yanps Date: Thu, 27 Jun 2024 17:01:01 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E6=B7=BB=E5=8A=A0AGV=E8=BF=9B=E5=85=A5?= =?UTF-8?q?=E7=A6=BB=E5=BC=80=E7=83=98=E7=AE=B1=E5=8C=BA=E5=9F=9F=E5=8F=8D?= =?UTF-8?q?=E9=A6=88,=E4=B8=8B=E5=8F=91=E7=AE=A1=E8=8A=AF=E6=89=98?= =?UTF-8?q?=E7=9B=98=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../run/TwoNDCSocketConnectionAutoRun.java | 123 ++++++++++++++---- .../agv/ndctwo/AgvNdcTwoDeviceDriver.java | 19 ++- .../oven_manipulator/ItemProtocol.java | 43 ++++++ .../OvenGantryManipulatorDeviceDriver.java | 23 ++++ .../acs/device/driver/standard_autodoor.vue | 48 ++++++- 5 files changed, 230 insertions(+), 26 deletions(-) diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java index 52656158c..70fd97c49 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java @@ -1,5 +1,6 @@ package org.nl.acs.auto.run; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; @@ -10,6 +11,8 @@ import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.agv.ndcone.AgvNdcOneDeviceDriver; import org.nl.acs.device_driver.agv.ndctwo.AgvNdcTwoDeviceDriver; import org.nl.acs.device_driver.autodoor.standard_autodoor.StandardAutodoorDeviceDriver; +import org.nl.acs.device_driver.conveyor.standard_inspect_site.StandardInspectSiteDeviceDriver; +import org.nl.acs.device_driver.two_conveyor.oven_manipulator.OvenGantryManipulatorDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.instruction.domain.Instruction; @@ -27,9 +30,13 @@ import org.springframework.stereotype.Component; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.lang.reflect.Field; import java.net.InetSocketAddress; import java.net.Socket; import java.util.Date; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import static org.nl.acs.agv.server.impl.NDCAgvServiceImpl.Bytes2HexString; @@ -52,6 +59,11 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { boolean bConnected = true; boolean isReConnect = false; + int i = 1 ; + boolean requireSucessRegion = false; + boolean requireSucessTake = false; + boolean requireSucessPut = false; + @Autowired ISysParamService paramService; @@ -195,7 +207,7 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { if (agvDevice.getDeviceDriver() instanceof AgvNdcTwoDeviceDriver) { agvNdcTwoDeviceDriver = (AgvNdcTwoDeviceDriver) agvDevice.getDeviceDriver(); agvNdcTwoDeviceDriver.setInstruction(null); - }else if (device.getDeviceDriver() instanceof AgvNdcOneDeviceDriver) { + } else if (device.getDeviceDriver() instanceof AgvNdcOneDeviceDriver) { agvNdcOneDeviceDriver = (AgvNdcOneDeviceDriver) device.getDeviceDriver(); agvNdcOneDeviceDriver.setInstruction(null); } @@ -231,18 +243,47 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { if (ObjectUtil.isNotEmpty(device)) { if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); - try { - standardAutodoorDeviceDriver.writing("to_open", "1"); - standardAutodoorDeviceDriver.writing("to_close", "0"); - } catch (Exception e) { - log.info("下发电气信号失败:" + e.getMessage()); - e.printStackTrace(); - } - if (standardAutodoorDeviceDriver.getOpen() == 1 && standardAutodoorDeviceDriver.getToOpen() == 1 ) { - log.info("下发开门信号值为:{},下发关门信号值为:{}", standardAutodoorDeviceDriver.getToOpen(), standardAutodoorDeviceDriver.getToClose()); - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - }else { - log.info("未下发NDC信号原因: 下发开门信号值为:{},下发关门信号值为:{}", standardAutodoorDeviceDriver.getToOpen(), standardAutodoorDeviceDriver.getToClose()); + String region = (String) standardAutodoorDeviceDriver.getDevice().getExtraValue().get("region"); + if (StrUtil.isNotEmpty(region) && !(" ".equals(region))) { + String linkDeviceCode = (String) standardAutodoorDeviceDriver.getDevice().getExtraValue().get("link_device_code"); + Device deviceByCode = deviceAppService.findDeviceByCode(linkDeviceCode); + if (ObjectUtil.isNotEmpty(deviceByCode) && deviceByCode.getDeviceDriver() instanceof OvenGantryManipulatorDeviceDriver) { + OvenGantryManipulatorDeviceDriver hxhj = (OvenGantryManipulatorDeviceDriver) deviceByCode.getDeviceDriver(); + String s = Integer.parseInt(region) == 1 ? "one" : Integer.parseInt(region) == 2 ? + "two" : Integer.parseInt(region) == 3 ? "three" : null; + Class aClass = hxhj.getClass(); + String regionCode = "region_" + s; + String s1 = Integer.parseInt(region) == 1 ? "2" : Integer.parseInt(region) == 2 ? + "6" : Integer.parseInt(region) == 3 ? "8" : null; + if (StrUtil.isNotEmpty(s) && ((Integer) aClass.getField(regionCode).get(hxhj) == 0)) { + hxhj.writing("to_"+regionCode, s1); + log.info("下发AGV进入区域{}信号值为:{}", region, s1); + } else { + log.info("区域{}信号{}未清除,导致不满足下发AGV进入区域信号", region, regionCode); + } + if (hxhj.getMode() == 2 && StrUtil.isNotEmpty(s1) && ((Integer) aClass.getField(regionCode).get(hxhj) == 2)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + requireSucessRegion = true; + } else { + log.error("AGV进入区域{}信号{}行架未接收{},请检查;或行架正在执行中:{}", region, regionCode,s1, hxhj.getMode()); + } + } else { + log.error("未设置关联设备或关联的不是烘箱行架设备{}导致信号未反馈", linkDeviceCode); + } + } else { + try { + standardAutodoorDeviceDriver.writing("to_open", "1"); + standardAutodoorDeviceDriver.writing("to_close", "0"); + } catch (Exception e) { + log.info("下发电气信号失败:" + e.getMessage()); + e.printStackTrace(); + } + if (standardAutodoorDeviceDriver.getOpen() == 1 && standardAutodoorDeviceDriver.getToOpen() == 1) { + log.info("下发开门信号值为:{},下发关门信号值为:{}", standardAutodoorDeviceDriver.getToOpen(), standardAutodoorDeviceDriver.getToClose()); + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + log.info("未下发NDC信号原因: 下发开门信号值为:{},下发关门信号值为:{}", standardAutodoorDeviceDriver.getToOpen(), standardAutodoorDeviceDriver.getToClose()); + } } } } else { @@ -257,19 +298,50 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { if (ObjectUtil.isNotEmpty(device)) { if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); - try { - standardAutodoorDeviceDriver.writing("to_close", "1"); - standardAutodoorDeviceDriver.writing("to_open", "0"); - } catch (Exception e) { - log.info("下发电气信号失败:" + e.getMessage()); - e.printStackTrace(); + String region = (String) standardAutodoorDeviceDriver.getDevice().getExtraValue().get("region"); + if (StrUtil.isNotEmpty(region) && !(" ".equals(region))) { + String linkDeviceCode = (String) standardAutodoorDeviceDriver.getDevice().getExtraValue().get("link_device_code"); + if(requireSucessTake || requireSucessPut){ + Device deviceByCode = deviceAppService.findDeviceByCode(linkDeviceCode); + if (ObjectUtil.isNotEmpty(deviceByCode) && deviceByCode.getDeviceDriver() instanceof OvenGantryManipulatorDeviceDriver) { + OvenGantryManipulatorDeviceDriver hxhj = (OvenGantryManipulatorDeviceDriver) deviceByCode.getDeviceDriver(); + String s = Integer.parseInt(region) == 1 ? "one" : Integer.parseInt(region) == 2 ? + "two" : Integer.parseInt(region) == 3 ? "three" : null; + Class aClass = hxhj.getClass(); + String regionCode = "region_" + s; + if (StrUtil.isNotEmpty(s) && ((Integer) aClass.getField(regionCode).get(hxhj) != 0)) { + hxhj.writing("to_"+regionCode, "0"); + log.info("下发AGV离开区域{}信号值为:{}", region, 0); + } else { + log.info("区域{}信号{}为0,不需要下发AGV离开区域信号", region, regionCode); + } + if (hxhj.getMode() == 2 && ((Integer) aClass.getField(regionCode).get(hxhj) == 0)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + requireSucessPut = false; + requireSucessTake = false; + } else { + log.error("AGV离开区域{}信号{}行架未接收0,请检查;或行架正在执行中:{}", region, regionCode, hxhj.getMode()); + } + } else { + log.error("未设置关联设备或关联的不是烘箱行架设备{}导致信号未反馈", linkDeviceCode); + } + }else{ + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } else { + try { + standardAutodoorDeviceDriver.writing("to_close", "1"); + standardAutodoorDeviceDriver.writing("to_open", "0"); + } catch (Exception e) { + log.info("下发电气信号失败:" + e.getMessage()); + e.printStackTrace(); + } + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); } - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); } } else { log.info(device_code + "对应设备号为空!"); } - } else { //上报异常信息 //(不需要WCS反馈) @@ -283,6 +355,13 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { if (device.getDeviceDriver() instanceof AgvNdcTwoDeviceDriver) { agvNdcTwoDeviceDriver = (AgvNdcTwoDeviceDriver) device.getDeviceDriver(); agvNdcTwoDeviceDriver.processSocket(arr); + if(phase == 0x05 && "3".equals(inst.getInstruction_type()) && requireSucessRegion){ + requireSucessPut = true; + requireSucessRegion = false; + }else if(phase == 0x0E && "8".equals(inst.getInstruction_type()) && requireSucessRegion){ + requireSucessTake = true; + requireSucessRegion = false; + } } else if (device.getDeviceDriver() instanceof AgvNdcOneDeviceDriver) { agvNdcOneDeviceDriver = (AgvNdcOneDeviceDriver) device.getDeviceDriver(); agvNdcOneDeviceDriver.processSocket(arr); @@ -298,12 +377,10 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { if (!ObjectUtil.isEmpty(data)) { write(data); } - } else { System.out.println("agv上报不是0073类型动作,不处理"); } } - } catch (Exception e) { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java index e32322f49..0cb6bf4c2 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java @@ -47,6 +47,7 @@ import org.nl.config.lucene.service.dto.LuceneLogDto; import org.nl.system.service.param.ISysParamService; import org.nl.config.SpringContextHolder; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -1543,7 +1544,23 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic } else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); try { - paperTubePickSiteDeviceDriver.writing(5); + TaskDto byTaskCode = taskService.findByTaskCode(inst.getTask_code()); + Map map = new HashMap(); + if(StrUtil.isNotEmpty(byTaskCode.getInteraction_json())){ + String interaction_json = byTaskCode.getInteraction_json(); + JSONObject jsonObject = JSONObject.parseObject(interaction_json); + String to_material = jsonObject.getString("to_material"); + String to_spec = jsonObject.getString("to_spec"); + String to_qty = jsonObject.getString("to_qty"); + map.put("to_command",5); + map.put("to_material",to_material); + map.put("to_spec",to_spec); + map.put("to_qty",to_qty); + paperTubePickSiteDeviceDriver.writing(map); + }else{ + map.put("to_command",5); + paperTubePickSiteDeviceDriver.writing(map); + } } catch (Exception e) { e.printStackTrace(); } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/ItemProtocol.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/ItemProtocol.java index 463dafdda..a183f50c3 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/ItemProtocol.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/ItemProtocol.java @@ -30,6 +30,13 @@ public class ItemProtocol { public static String item_x_position = "x"; //y轴坐标 public static String item_y_position = "y"; + //区域一 + public static String item_region_one = "region_one"; + //区域二 + public static String item_region_two = "region_two"; + //区域三 + public static String item_region_three = "region_three"; + //下发命令 public static String item_to_command = "to_command"; @@ -37,6 +44,12 @@ public class ItemProtocol { public static String item_to_onset = "to_onset"; //下发目标站 public static String item_to_target = "to_target"; + //下发区域一 + public static String item_to_region_one = "to_region_one"; + //下发区域二 + public static String item_to_region_two = "to_region_two"; + //下发区域三 + public static String item_to_region_three = "to_region_three"; //下发任务号 public static String item_to_task = "to_task"; @@ -82,6 +95,30 @@ public class ItemProtocol { return this.getOpcIntegerValue(item_to_target); } + public int getTo_region_one() { + return this.getOpcIntegerValue(item_to_region_one); + } + + public int getTo_region_two() { + return this.getOpcIntegerValue(item_to_region_two); + } + + public int getTo_region_three() { + return this.getOpcIntegerValue(item_to_region_three); + } + + public int getRegion_one() { + return this.getOpcIntegerValue(item_region_one); + } + + public int getRegion_two() { + return this.getOpcIntegerValue(item_region_two); + } + + public int getRegion_three() { + return this.getOpcIntegerValue(item_region_three); + } + public int getTo_task() { return this.getOpcIntegerValue(item_to_task); } @@ -150,6 +187,9 @@ public class ItemProtocol { list.add(new ItemDto(item_task, "任务号", "DB1.D6")); list.add(new ItemDto(item_x_position, "x坐标", "DB1.REAL10")); list.add(new ItemDto(item_y_position, "y坐标", "DB1.REAL14")); + list.add(new ItemDto(item_region_one, "区域一", "DB1.REAL18")); + list.add(new ItemDto(item_region_two, "区域二", "DB1.REAL22")); + list.add(new ItemDto(item_region_three, "区域三", "DB1.REAL26")); return list; } @@ -159,6 +199,9 @@ public class ItemProtocol { list.add(new ItemDto(item_to_onset, "下发起始站", "DB2.W2")); list.add(new ItemDto(item_to_target, "下发目标站", "DB2.W4")); list.add(new ItemDto(item_to_task, "下发任务号", "DB2.D6")); + list.add(new ItemDto(item_to_region_one, "下发区域一", "DB2.D6")); + list.add(new ItemDto(item_to_region_two, "下发区域二", "DB2.D6")); + list.add(new ItemDto(item_to_region_three, "下发区域三", "DB2.D6")); return list; } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/OvenGantryManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/OvenGantryManipulatorDeviceDriver.java index 40f1d5f91..92bb217fb 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/OvenGantryManipulatorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/OvenGantryManipulatorDeviceDriver.java @@ -110,6 +110,19 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i int last_heartbeat = 0; int to_command = 0; int last_to_command = 0; + public int region_one = 0; + public int last_region_one = 0; + public int region_two = 0; + public int last_region_two = 0; + public int region_three = 0; + public int last_region_three = 0; + public int to_region_one = 0; + public int last_to_region_one = 0; + public int to_region_two = 0; + public int last_to_region_two = 0; + public int to_region_three = 0; + public int last_to_region_three = 0; + int to_target = 0; int last_to_target = 0; @@ -183,6 +196,12 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i to_onset = this.itemProtocol.getTo_onset(); x_position = this.itemProtocol.getX_position(); y_position = this.itemProtocol.getY_position(); + region_one = this.itemProtocol.getRegion_one(); + region_two = this.itemProtocol.getRegion_two(); + region_three = this.itemProtocol.getRegion_three(); + to_region_one = this.itemProtocol.getTo_region_one(); + to_region_two = this.itemProtocol.getTo_region_two(); + to_region_three = this.itemProtocol.getTo_region_three(); iserror = this.itemProtocol.device_status; if (mode != last_mode) { @@ -262,6 +281,10 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i last_to_onset = to_onset; last_x_position = x_position; last_y_position = y_position; + last_region_one = region_one; + last_region_two = region_two; + last_region_three = region_three; + } public List sortTask(List taskDtos) { diff --git a/acs2/nladmin-ui/src/views/acs/device/driver/standard_autodoor.vue b/acs2/nladmin-ui/src/views/acs/device/driver/standard_autodoor.vue index c1fb0acc9..59c075a53 100644 --- a/acs2/nladmin-ui/src/views/acs/device/driver/standard_autodoor.vue +++ b/acs2/nladmin-ui/src/views/acs/device/driver/standard_autodoor.vue @@ -50,11 +50,45 @@ - + + + + + + + + + + + + + + + @@ -161,6 +195,7 @@ import { import { selectOpcList } from '@/api/acs/device/opc' import { selectPlcList } from '@/api/acs/device/opcPlc' import { selectListByOpcID } from '@/api/acs/device/opcPlc' +import deviceCrud from '@/api/acs/device/device' import crud from '@/mixins/crud' @@ -184,6 +219,7 @@ export default { configLoading: false, dataOpcservers: [], dataOpcPlcs: [], + deviceList: [], data1: [], data2: [], form: { @@ -195,7 +231,12 @@ export default { is_pickup: true, is_release: true }, - rules: {} + rules: {}, + region: [ + { region_name: '区域一', region_number: '1' }, + { region_name: '区域二', region_number: '2' }, + { region_name: '区域三', region_number: '3' } + ] } }, created() { @@ -234,6 +275,9 @@ export default { this.dataOpcservers = data this.opc_id = this.$props.parentForm.opc_server_id }) + deviceCrud.selectDeviceList().then(data => { + this.deviceList = data + }) }) }, methods: {