From b8bcdd7dce18c1713f805f2d21e8bc4912e39425 Mon Sep 17 00:00:00 2001 From: loujf Date: Tue, 22 Nov 2022 16:56:56 +0800 Subject: [PATCH] =?UTF-8?q?NDC=E8=B0=83=E5=BA=A6=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/acs/agv/server/NDCAgvService.java | 2 + .../agv/server/impl/MagicAgvServiceImpl.java | 6 +- .../agv/server/impl/NDCAgvServiceImpl.java | 9 + .../acs/ext/wms/service/AcsToWmsService.java | 7 + .../wms/service/impl/AcsToWmsServiceImpl.java | 47 + .../service/dto/InstructionDto.java | 2 +- .../task/service/impl/TaskServiceImpl.java | 44 +- .../auto/run/NDCSocketConnectionAutoRun.java | 2835 +++++++++++++++++ .../lnsh/lnsh_palletizing_manipulator.vue | 109 +- 9 files changed, 3019 insertions(+), 42 deletions(-) create mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/start/auto/run/NDCSocketConnectionAutoRun.java diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/NDCAgvService.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/NDCAgvService.java index 8118215..2cdb977 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/NDCAgvService.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/NDCAgvService.java @@ -66,4 +66,6 @@ public interface NDCAgvService { */ public byte[] sendAgvOneModeInst(int phase, int index, int result); + void updateAgvFromCache(AgvDto dto); + } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/MagicAgvServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/MagicAgvServiceImpl.java index d156503..77252fa 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/MagicAgvServiceImpl.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/MagicAgvServiceImpl.java @@ -439,7 +439,8 @@ public class MagicAgvServiceImpl implements MagicAgvService { } //请求放货 } else if ("Unload".equals(action)) { - if (standardInspectSiteDeviceDriver.getMode() == 2 && standardInspectSiteDeviceDriver.getMove() == 0) { + if (standardInspectSiteDeviceDriver.getMode() == 2 + && standardInspectSiteDeviceDriver.getMove() == 0) { inst.setExecute_status("3"); is_feedback = true; } @@ -856,7 +857,8 @@ public class MagicAgvServiceImpl implements MagicAgvService { } //放货完成离开 if (lnshStationDeviceDriver.getFlag() == 3) { - if (lnshStationDeviceDriver.getMove() == 1 && (lnshStationDeviceDriver.getIo_action() == 3 || lnshStationDeviceDriver.getIo_action() == 2)) { + if (lnshStationDeviceDriver.getMove() == 1 + && (lnshStationDeviceDriver.getIo_action() == 3 || lnshStationDeviceDriver.getIo_action() == 2)) { flag = true; lnshStationDeviceDriver.setFlag(0); lnshStationDeviceDriver.writing(3); diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java index 73860fa..3ad9c4e 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java @@ -130,6 +130,7 @@ public class NDCAgvServiceImpl implements NDCAgvService { if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.FORKAGV).toString(), "1")) { String instcode = inst.getInstruction_code(); int type = Integer.parseInt(inst.getInstruction_type()); + int priority = Integer.parseInt(inst.getPriority()) + 128; DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class); @@ -382,4 +383,12 @@ public class NDCAgvServiceImpl implements NDCAgvService { return AGVDeviceStatus; } + @Override + public void updateAgvFromCache(AgvDto dto) { + if (AGVDeviceStatus.containsKey(dto.getName())) { + AGVDeviceStatus.remove(dto.getName()); + } + AGVDeviceStatus.put(dto.getName(), dto); + } + } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java index 5b440de..0cd5bcc 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java @@ -158,5 +158,12 @@ public interface AcsToWmsService { */ HttpResponse queryDoorsStatus(); + /** + * 向WMS反馈动作状态 + * + * @return Map + */ + public HttpResponse feedbackActionStatusToWms(JSONArray arr); + } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java index 0b65da8..af18253 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java @@ -1,8 +1,10 @@ package org.nl.acs.ext.wms.service.impl; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -912,4 +914,49 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } + @Override + public HttpResponse feedbackActionStatusToWms(JSONArray data) { + String wmsurl = acsConfigService.findConfigFromCache().get(AcsConfig.WMSURL); + + String task_code = ""; + for (int i = 0; i < data.size(); i++) { + net.sf.json.JSONObject json = (net.sf.json.JSONObject) data.get(i); + task_code = json.optString("task_code"); + } + TaskDto taskDto = taskService.findByCode(task_code); + String vehicle_code = taskDto.getVehicle_code(); + + HttpResponse result2 = null; + log.info("feedbackActionStatusToWms-----请求参数{}", data.toString()); + AddressDto addressDto = addressService.findByCode("feedbackActionStatusToWms"); + String methods_url = addressDto.getMethods_url(); + try { + result2 = HttpRequest.post(wmsurl + methods_url) +// .header("Authorization", token) + .body(String.valueOf(data)) + .execute(); + } catch (Exception e) { + String msg = e.getMessage(); + //网络不通 + System.out.println(msg); + log.info("feedbackActionStatusToWms-----异常返回参数{}", msg); + } + + String type = ""; + if(!ObjectUtil.isEmpty(result2)){ + if (result2.getStatus() == 200) { + type = "info"; + } else { + type = "error"; + } + } else { + type = "error"; + } + + + JSONObject jo = (JSONObject) JSON.toJSON(result2.body()); + log.info("feedbackActionStatusToWms-----输出参数{}", jo.toString()); + return result2; + } + } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/instruction/service/dto/InstructionDto.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/instruction/service/dto/InstructionDto.java index 5bc0624..45aef48 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/instruction/service/dto/InstructionDto.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/instruction/service/dto/InstructionDto.java @@ -36,7 +36,7 @@ public class InstructionDto implements Serializable { /** * 执行状态 */ - //暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域 + //暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域 9到达等待点 private String execute_status; /** diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index b224446..7c3fa81 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -889,28 +889,28 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { String next_device_code = acsTask.getNext_device_code(); String maxInstnumber = acsConfigService.findConfigFromCache().get(AcsConfig.MAXINSTNUMBER); - /** - * 开始平均分解校验 - */ - String this_device_code = this.queryAssignedByDevice(acsTask.getStart_device_code(), acsTask.getNext_device_code()); - if (StrUtil.isEmpty(this_device_code)) { - List shortPathsList = routeLineService.getShortPathLines(start_device_code, acsTask.getNext_device_code(), route_plan_code); - RouteLineDto routeLineDto = shortPathsList.get(0); - String path = routeLineDto.getPath(); - String type = routeLineDto.getType(); - String[] str = path.split("->"); - List pathlist = Arrays.asList(str); - int index = 0; - for (int m = 0; m < pathlist.size(); m++) { - if (pathlist.get(m).equals(start_device_code)) { - index = m + 1; - break; - } - } - next_device_code = pathlist.get(index); - } else { - next_device_code = this_device_code; - } +// /** +// * 开始平均分解校验 +// */ +// String this_device_code = this.queryAssignedByDevice(acsTask.getStart_device_code(), acsTask.getNext_device_code()); +// if (StrUtil.isEmpty(this_device_code)) { +// List shortPathsList = routeLineService.getShortPathLines(start_device_code, acsTask.getNext_device_code(), route_plan_code); +// RouteLineDto routeLineDto = shortPathsList.get(0); +// String path = routeLineDto.getPath(); +// String type = routeLineDto.getType(); +// String[] str = path.split("->"); +// List pathlist = Arrays.asList(str); +// int index = 0; +// for (int m = 0; m < pathlist.size(); m++) { +// if (pathlist.get(m).equals(start_device_code)) { +// index = m + 1; +// break; +// } +// } +// next_device_code = pathlist.get(index); +// } else { +// next_device_code = this_device_code; +// } if (StrUtil.equals(appService.findDeviceTypeByCode(next_device_code), "storage")) { next_point_code = next_device_code + "-" + acsTask.getTo_y() + "-" + acsTask.getTo_z(); diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/start/auto/run/NDCSocketConnectionAutoRun.java b/acs/hd/nladmin-system/src/main/java/org/nl/start/auto/run/NDCSocketConnectionAutoRun.java new file mode 100644 index 0000000..f9f142f --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/start/auto/run/NDCSocketConnectionAutoRun.java @@ -0,0 +1,2835 @@ +package org.nl.start.auto.run; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.agv.server.NDCAgvService; +import org.nl.acs.agv.server.dto.AgvDto; +import org.nl.acs.config.AcsConfig; +import org.nl.acs.config.server.AcsConfigService; +import org.nl.acs.config.server.impl.AcsConfigServiceImpl; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.lnsh.lnsh_Laminating_machine.LnshLaminatingMachineDeviceDriver; +import org.nl.acs.device_driver.lnsh.lnsh_palletizing_manipulator.LnshPalletizingManipulatorDeviceDriver; +import org.nl.acs.device_driver.lnsh.lnsh_palletizing_manipulator_site.LnshPalletizingManipulatorSiteDeviceDriver; +import org.nl.acs.device_driver.lnsh.lnsh_station.LnshStationDeviceDriver; +import org.nl.acs.device_driver.standard_autodoor.StandardAutodoorDeviceDriver; +import org.nl.acs.device_driver.standard_conveyor_control.StandardCoveyorControlDeviceDriver; +import org.nl.acs.device_driver.standard_emptypallet_site.StandardEmptyPalletSiteDeviceDriver; +import org.nl.acs.device_driver.standard_inspect_site.StandardInspectSiteDeviceDriver; +import org.nl.acs.device_driver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; +import org.nl.acs.device_driver.standard_storage.StandardStorageDeviceDriver; +import org.nl.acs.ext.wms.service.AcsToWmsService; +import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.instruction.service.dto.Instruction; +import org.nl.acs.instruction.service.impl.InstructionServiceImpl; +import org.nl.acs.log.service.DeviceExecuteLogService; +import org.nl.acs.log.service.impl.DeviceExecuteLogServiceImpl; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.opc.DeviceAppServiceImpl; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.task.service.impl.TaskServiceImpl; +import org.nl.utils.SpringContextHolder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.util.Date; +import java.util.Map; + +@Slf4j +@Component +public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable { + + Socket s; + String ip = "127.0.0.1"; + int port = 1234; + static DataOutputStream dos; + static DataInputStream dis; + private int recordTimeOut = 10000; + private Date recordTime; + String[] ERROR = new String[]{ + "货叉尖部传感器触发", "S300传感器触发", "载货状态改变", "急停按钮触发", "触边开关出发", "需要复位", + "停在充电位", "取货失败", "放货失败", "轮子打滑", "没有动作码不能进入站点", "取货时有货", "丢失定位", + "抬叉停止"}; + boolean bConnected = true; + + boolean isReConnect = false; + + @Autowired + AcsConfigService acsConfigService; + @Autowired + AutoRunService autoRunService; + + + public NDCSocketConnectionAutoRun() { + this.recordTime = new Date((new Date()).getTime() - (long) this.recordTimeOut); + } + + public String getCode() { + return NDCSocketConnectionAutoRun.class.getSimpleName(); + } + + public String getName() { + return "NDC在线连接"; + } + + public void autoRun() { + + try { + AcsConfigService acsConfigService = SpringContextHolder.getBean(AcsConfigServiceImpl.class); + InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class); + AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); + NDCAgvService AgvService = SpringContextHolder.getBean(NDCAgvService.class); + DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); + DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class); + DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogServiceImpl.class); + ip = acsConfigService.findConfigFromCache().get(AcsConfig.AGVURL); + port = Integer.parseInt(acsConfigService.findConfigFromCache().get(AcsConfig.AGVPORT)); + byte[] b = new byte[1028]; + s = new Socket(ip, port); + dos = new DataOutputStream(s.getOutputStream()); + dis = new DataInputStream(s.getInputStream()); + + while (bConnected) { + int count = dis.read(b); + + if (count == -1) { + break; + } + + int[] arr = new int[count]; + StringBuffer bs = new StringBuffer(); + + for (int i = 0; i < count; i++) { + int temp = b[i]; + if (temp < 0) + temp += 256; + arr[i] = temp; + StringBuffer bs1 = new StringBuffer("0"); + bs.append(temp < 16 ? bs1.append(Integer.toHexString(temp)) : Integer.toHexString(temp)); + } + + System.out.println("收到请求参数:" + bs); + boolean flag = false; + if (arr[8] * 256 + arr[9] == 0x73) { + byte[] data = null; + System.out.println("接收agv上报信息:" + bs); + //执行阶段 + int phase = arr[16] * 256 + arr[17]; + // agv任务号 + int index = arr[12] * 256 + arr[13]; + //任务号 + int ikey = arr[26] * 256 + arr[27]; + //站点号 + int agvaddr = arr[18] * 256 + arr[19]; + //车号 + int carno = arr[20]; + Instruction inst = null; + if (ikey != 0) { + inst = instructionService.findByCodeFromCache(String.valueOf(ikey)); + } + log.info("接收agv上报信息:" + bs); + log.info("接收agv上报信息:" + "phase--" + phase + " index--" + index + " ikey--" + ikey + " agvaddr--" + agvaddr + " Car--" + carno); + Device device = null; + String device_code = null; + String old_device_code = null; + String emptyNum = null; + if (agvaddr != 0) { + old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + if (StrUtil.contains(old_device_code, "-")) { + String[] point = old_device_code.split("-"); + device_code = point[0]; + } else if (StrUtil.contains(old_device_code, ".")) { + String[] point = old_device_code.split("\\."); + device_code = point[0]; + emptyNum = point[1]; + } else { + device_code = old_device_code; + } + device = deviceAppService.findDeviceByCode(device_code); + } + StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver; + StandardOrdinarySiteDeviceDriver standardOrdinarySiteDeviceDriver; + StandardCoveyorControlDeviceDriver standardCoveyorControlDeviceDriver; + StandardStorageDeviceDriver standardStorageDeviceDriver; + StandardAutodoorDeviceDriver standardAutodoorDeviceDriver; + StandardEmptyPalletSiteDeviceDriver standardEmptyPalletSiteDeviceDriver; + LnshStationDeviceDriver lnshStationDeviceDriver; + LnshLaminatingMachineDeviceDriver lnshLaminatingMachineDeviceDriver; + LnshPalletizingManipulatorSiteDeviceDriver lnshPalletizingManipulatorSiteDeviceDriver; + LnshPalletizingManipulatorDeviceDriver lnshPalletizingManipulatorDeviceDriver; + int type = Integer.parseInt(acsConfigService.findConfigFromCache().get(AcsConfig.BUSINESSTYPE)); + + try { + switch (type) { + case 0: + if (phase == 0x01) { + data = AgvService.sendAgvOneModeInst(phase, index); + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("1"); + inst.setAgv_jobno(String.valueOf(index)); + inst.setSend_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + flag = true; + } + //分配 车id + else if (phase == 0x02) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setCarno(String.valueOf(carno)); + instructionService.update(inst); + } + } + // 到达取货点请求取货 + else if (phase == 0x03) { + if (ObjectUtil.isEmpty(inst)) { + logServer.deviceExecuteLog("未找到指令号对应的指令:", "","",String.valueOf(ikey)); + break; + } + //检测站点 + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","", "AGV请求取货设备{}无货,无法反馈"); + } + } + //嘉耐工位模板 + if (device.getDeviceDriver() instanceof LnshStationDeviceDriver) { + lnshStationDeviceDriver = (LnshStationDeviceDriver) device.getDeviceDriver(); + if (lnshStationDeviceDriver.getMode() != 0 && lnshStationDeviceDriver.getMove() > 0 + && (lnshStationDeviceDriver.getIo_action() == 3 || lnshStationDeviceDriver.getIo_action() == 1)) { + inst.setExecute_status("1"); + instructionService.update(inst); + lnshStationDeviceDriver.writing(5); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV请求取货设备{}无货,无法反馈"); + } + } + //嘉耐码垛机械手工位 + if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorSiteDeviceDriver) { + lnshPalletizingManipulatorSiteDeviceDriver = (LnshPalletizingManipulatorSiteDeviceDriver) device.getDeviceDriver(); + if (lnshPalletizingManipulatorSiteDeviceDriver.getMode() != 0 && lnshPalletizingManipulatorSiteDeviceDriver.getMove() > 0 + && (lnshPalletizingManipulatorSiteDeviceDriver.getIo_action() == 3 || lnshPalletizingManipulatorSiteDeviceDriver.getIo_action() == 1)) { + inst.setExecute_status("1"); + instructionService.update(inst); + lnshPalletizingManipulatorSiteDeviceDriver.writing(12); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV请求取货设备{}无货,无法反馈"); + } + } + //嘉耐音来码垛机械手工位 + if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { + lnshPalletizingManipulatorDeviceDriver = (LnshPalletizingManipulatorDeviceDriver) device.getDeviceDriver(); + if (lnshPalletizingManipulatorDeviceDriver.getMode() != 0 && lnshPalletizingManipulatorDeviceDriver.getMove() > 0 + && (lnshPalletizingManipulatorDeviceDriver.getIo_action() == 3 || lnshPalletizingManipulatorDeviceDriver.getIo_action() == 1)) { + inst.setExecute_status("1"); + instructionService.update(inst); + lnshPalletizingManipulatorDeviceDriver.writing(12); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV请求取货设备{}无货,无法反馈"); + } + } + //普通站点 + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV请求取货设备{}无货,无法反馈"); + } + } + } + } + // 取货完成请求离开 + else if (phase == 0x05) { + if (ObjectUtil.isEmpty(inst)) { + logServer.deviceExecuteLog("未找到指令号对应的指令:", "","",String.valueOf(ikey)); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV取货完成请求离开设备{}有货,无法反馈"); + } + } + //嘉耐工位模板 + if (device.getDeviceDriver() instanceof LnshStationDeviceDriver) { + lnshStationDeviceDriver = (LnshStationDeviceDriver) device.getDeviceDriver(); + if (lnshStationDeviceDriver.getMove() == 0 && (lnshStationDeviceDriver.getIo_action() == 3 || lnshStationDeviceDriver.getIo_action() == 2)) { + inst.setExecute_status("5"); + instructionService.update(inst); + lnshStationDeviceDriver.writing(2); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV取货完成请求离开设备{}有货,无法反馈"); + } + } + //嘉耐码垛机械手工位 + if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorSiteDeviceDriver) { + lnshPalletizingManipulatorSiteDeviceDriver = (LnshPalletizingManipulatorSiteDeviceDriver) device.getDeviceDriver(); + if (lnshPalletizingManipulatorSiteDeviceDriver.getMove() == 0 && (lnshPalletizingManipulatorSiteDeviceDriver.getIo_action() == 3 || lnshPalletizingManipulatorSiteDeviceDriver.getIo_action() == 2)) { + inst.setExecute_status("5"); + instructionService.update(inst); + lnshPalletizingManipulatorSiteDeviceDriver.writing(10); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV取货完成请求离开设备{}有货,无法反馈"); + } + } + + //嘉耐音来码垛机械手工位 + if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { + lnshPalletizingManipulatorDeviceDriver = (LnshPalletizingManipulatorDeviceDriver) device.getDeviceDriver(); + if (lnshPalletizingManipulatorDeviceDriver.getMove() == 0 && (lnshPalletizingManipulatorDeviceDriver.getIo_action() == 3 || lnshPalletizingManipulatorDeviceDriver.getIo_action() == 2)) { + inst.setExecute_status("5"); + instructionService.update(inst); + lnshPalletizingManipulatorDeviceDriver.writing(10); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV取货完成请求离开设备{}有货,无法反馈"); + } + } + +// if(!inst.getTask_code().startsWith("-")) { +// //反馈wms系统动作完成 +// inst.setFinish_type("1"); +// instructionService.update(inst); +// JSONObject feedjo = new JSONObject(); +// feedjo.put("status","1"); +// feedjo.put("device_code",device_code); +// feedjo.put("vehicle_code",inst.getVehicle_code()); +// feedjo.put("task_code",inst.getTask_code()); +// JSONArray feedja = JSONArray.parseArray(String.valueOf(feedjo)); +// acsToWmsService.feedbackActionStatusToWms(feedja); +// } + + + } + // 到达扫码点 + else if (phase == 0x06) { + if (ObjectUtil.isEmpty(inst)) { + logServer.deviceExecuteLog("未找到指令号对应的指令:", "","",String.valueOf(ikey)); + break; + } + //检测站点 + if (device.getDeviceDriver() instanceof LnshLaminatingMachineDeviceDriver) { + lnshLaminatingMachineDeviceDriver = (LnshLaminatingMachineDeviceDriver) device.getDeviceDriver(); + if (lnshLaminatingMachineDeviceDriver.getMode() != 0 && lnshLaminatingMachineDeviceDriver.getMode() != 6) { + inst.setExecute_status("9"); + instructionService.update(inst); + lnshLaminatingMachineDeviceDriver.writing(3,Integer.parseInt(inst.getInstruction_code())); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + lnshLaminatingMachineDeviceDriver.writing(1); + } + //如果组盘绑定条码成功,就允许agv离开 + if (lnshLaminatingMachineDeviceDriver.getMode() == 6 && lnshLaminatingMachineDeviceDriver.getResult()) { + lnshLaminatingMachineDeviceDriver.writing(6); + flag = true; + } + } + } + //请求放货 + else if (phase == 0x07) { + if (ObjectUtil.isEmpty(inst)) { + logServer.deviceExecuteLog("未找到指令号对应的指令:", "","",String.valueOf(ikey)); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV请求放货设备{}有货,无法反馈"); + } + } + //嘉耐工位模板 + if (device.getDeviceDriver() instanceof LnshStationDeviceDriver) { + lnshStationDeviceDriver = (LnshStationDeviceDriver) device.getDeviceDriver(); + if (lnshStationDeviceDriver.getMode() != 0 && lnshStationDeviceDriver.getMove() == 0 + && (lnshStationDeviceDriver.getIo_action() == 3 || lnshStationDeviceDriver.getIo_action() == 1)) { + inst.setExecute_status("3"); + instructionService.update(inst); + lnshStationDeviceDriver.writing(6); + lnshStationDeviceDriver.writing(3,Integer.parseInt(inst.getInstruction_code())); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV请求放货设备{}有货,无法反馈"); + } + } + //嘉耐码垛机械手工位 + if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorSiteDeviceDriver) { + lnshPalletizingManipulatorSiteDeviceDriver = (LnshPalletizingManipulatorSiteDeviceDriver) device.getDeviceDriver(); + if (lnshPalletizingManipulatorSiteDeviceDriver.getMode() != 0 && lnshPalletizingManipulatorSiteDeviceDriver.getMove() == 0 + && (lnshPalletizingManipulatorSiteDeviceDriver.getIo_action() == 3 || lnshPalletizingManipulatorSiteDeviceDriver.getIo_action() == 1)) { + inst.setExecute_status("3"); + instructionService.update(inst); + lnshPalletizingManipulatorSiteDeviceDriver.writing(13); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV请求放货设备{}有货,无法反馈"); + } + } + //嘉耐音来码垛机械手工位 + if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { + lnshPalletizingManipulatorDeviceDriver = (LnshPalletizingManipulatorDeviceDriver) device.getDeviceDriver(); + if (lnshPalletizingManipulatorDeviceDriver.getMode() != 0 && lnshPalletizingManipulatorDeviceDriver.getMove() == 0 + && (lnshPalletizingManipulatorDeviceDriver.getIo_action() == 3 || lnshPalletizingManipulatorDeviceDriver.getIo_action() == 1)) { + inst.setExecute_status("3"); + instructionService.update(inst); + lnshPalletizingManipulatorDeviceDriver.writing(13); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV请求放货设备{}有货,无法反馈"); + } + } + } + // 放货完成请求离开 + else if (phase == 0x09) { + if (ObjectUtil.isEmpty(inst)) { + logServer.deviceExecuteLog("未找到指令号对应的指令:", "","",String.valueOf(ikey)); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV放货完成请求离开设备{}无货,无法反馈"); + } + } + //嘉耐工位模板 + if (device.getDeviceDriver() instanceof LnshStationDeviceDriver) { + lnshStationDeviceDriver = (LnshStationDeviceDriver) device.getDeviceDriver(); + if (lnshStationDeviceDriver.getMove() == 1 + && (lnshStationDeviceDriver.getIo_action() == 3 || lnshStationDeviceDriver.getIo_action() == 2)) { + inst.setExecute_status("6"); + instructionService.update(inst); + lnshStationDeviceDriver.writing(3); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV放货完成请求离开设备{}无货,无法反馈"); + } + } + + //嘉耐码垛机械手工位 + if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorSiteDeviceDriver) { + lnshPalletizingManipulatorSiteDeviceDriver = (LnshPalletizingManipulatorSiteDeviceDriver) device.getDeviceDriver(); + if (lnshPalletizingManipulatorSiteDeviceDriver.getMove() == 1 + && (lnshPalletizingManipulatorSiteDeviceDriver.getIo_action() == 3 || lnshPalletizingManipulatorSiteDeviceDriver.getIo_action() == 2)) { + inst.setExecute_status("6"); + instructionService.update(inst); + lnshPalletizingManipulatorSiteDeviceDriver.writing(11); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV放货完成请求离开设备{}无货,无法反馈"); + } + } + + //嘉耐音来码垛机械手工位 + if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { + lnshPalletizingManipulatorDeviceDriver = (LnshPalletizingManipulatorDeviceDriver) device.getDeviceDriver(); + if (lnshPalletizingManipulatorDeviceDriver.getMove() == 1 + && (lnshPalletizingManipulatorDeviceDriver.getIo_action() == 3 || lnshPalletizingManipulatorDeviceDriver.getIo_action() == 2)) { + inst.setExecute_status("6"); + instructionService.update(inst); + lnshPalletizingManipulatorDeviceDriver.writing(11); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + logServer.deviceExecuteLog(device_code,"","","AGV放货完成请求离开设备{}无货,无法反馈"); + } + } + +// if(!inst.getTask_code().startsWith("-")){ +// //反馈wms系统动作完成 +// inst.setFinish_type("1"); +// instructionService.update(inst); +// JSONObject feedjo = new JSONObject(); +// feedjo.put("status","2"); +// feedjo.put("device_code",device_code); +// feedjo.put("vehicle_code",inst.getVehicle_code()); +// feedjo.put("task_code",inst.getTask_code()); +// JSONArray feedja = new JSONArray(); +// feedja.add(feedjo); +// acsToWmsService.feedbackActionStatusToWms(feedja); +// } + + } + //任务完毕 + //(无车id及状态) + else if (phase == 0x0A) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("2"); + instructionService.finish(inst); + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //请求删除任务 + else if (phase == 0x30) { + flag = true; + if (!ObjectUtil.isEmpty(inst)) { + data = AgvService.sendAgvOneModeInst(0x8F, index, 0); + } else { + log.info("未找到对应的指令无法删除"); + break; + } + } + //任务删除确认 + //(需要WCS反馈) + else if (phase == 0xFF) { + flag = true; + if (!ObjectUtil.isEmpty(inst)) { + instructionService.cancel(inst.getInstruction_id()); + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //进入区域 + else if (phase == 0x50) { + //开门 + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("1"); + if (standardAutodoorDeviceDriver.getAction() == 1) { + standardAutodoorDeviceDriver.OpenOrClose("1"); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + } + } + //离开区域 + else if (phase == 0x51) { + //关门 + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("2"); + if (standardAutodoorDeviceDriver.getAction() == 2) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + } + } else if (phase == 0x64) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //上报异常 + else if (phase == 0x67) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + if (arr[18] * 256 + arr[19] == 0) { + dto.setState("IDLE"); + acsToWmsService.feedbackAgvStatus(String.valueOf(carno), "0", ""); + } else { + StringBuffer errbs = new StringBuffer(); + for (int i = 0; i < ERROR.length; i++) { + if (((arr[18] * 256 + arr[19]) & (1 << i)) > 0) + errbs.append("," + ERROR[i]); + //反馈故障 + } + dto.setState("ERROR"); + acsToWmsService.feedbackAgvStatus(String.valueOf(carno), "1", "error"); + } + } + //X坐标 + else if (phase == 0x70) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionX(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //Y坐标 + else if (phase == 0x71) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionY(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //角度 + else if (phase == 0x72) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionAngle(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //电量 + else if (phase == 0x73) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setEnergyLevel(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + break; + case 1: + //开始任务/上报订单号(无车id及状态) + if (phase == 0x01) { + data = AgvService.sendAgvOneModeInst(phase, index); + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("1"); + inst.setAgv_jobno(String.valueOf(index)); + inst.setSend_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + flag = true; + } + //分配 车id + else if (phase == 0x02) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setCarno(String.valueOf(carno)); + instructionService.update(inst); + } + } + // 到达取货点请求取货 + else if (phase == 0x03) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) device.getDeviceDriver(); + if (standardEmptyPalletSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + // 取货完成请求离开 + else if (phase == 0x05) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV取货完成请求离开设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + standardCoveyorControlDeviceDriver.writing(1, 2); + flag = true; + } else { + log.info("AGV取货完成请求离开设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) device.getDeviceDriver(); + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 0); + deviceService.changeDeviceStatus(jo); + } else { + if (device.getHas_goods() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 1); + deviceService.changeDeviceStatus(jo); + } else { + log.info("AGV取货完成请求离开设备{}有货,无法反馈", device_code); + } + } + + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + standardStorageDeviceDriver = (StandardStorageDeviceDriver) device.getDeviceDriver(); + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + // 球磨车间请求上料 + //( Itype=2,需要WCS反馈Phase) + else if (phase == 0x07) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + // 球磨车间上料完成请求离开 + else if (phase == 0x09) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + //请求放货库位 + else if (phase == 0x0A) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + //调用接口 + String result = acsToWmsService.requestTaskAgain(String.valueOf(agvaddr), inst.getTask_id(), inst.getVehicle_code()); + JSONObject jo = JSON.parseObject(result); + String next_device = jo.getString("data"); + + String next_point = ""; + Device next_point_device = deviceAppService.findDeviceByCode(next_device); + if (next_point_device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) next_point_device.getDeviceDriver(); + + int number = standardEmptyPalletSiteDeviceDriver.getNumber(); + int nowinstNum = instructionService.querySameDestinationInst(next_point); + if (number + nowinstNum >= Integer.parseInt(next_point_device.getExtraValue().get("max_emptypalletnum").toString())) { + log.info("当前叠盘位{},光电数量{},存在此设备指令数{},超过最大堆叠数量:{}无法反馈", next_point, number, nowinstNum, Integer.parseInt(device.getExtraValue().get("max_emptypalletnum").toString())); + break; + } + next_point = next_device + "." + (number + nowinstNum + 1); + } else { + next_point = next_device; + } + + int next_point_address = deviceService.queryAddressBydeviceCode(next_point); + data = AgvService.sendAgvOneModeInst(phase, index, next_point_address); + + TaskService taskService = SpringContextHolder.getBean(TaskServiceImpl.class); + TaskDto task = taskService.findByCodeFromCache(inst.getTask_code()); + task.setNext_device_code(next_device); + task.setNext_point_code(next_device); + taskService.update(task); + + inst.setNext_device_code(next_device); + inst.setNext_point_code(next_point); + instructionService.update(inst); + flag = true; + } + //到达放货点 + else if (phase == 0x0B) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求放货设备{}有货,无法反馈", device_code); + } + } + //空盘堆叠站点 + if (device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) device.getDeviceDriver(); + if (standardEmptyPalletSiteDeviceDriver.getNumber() < Integer.parseInt(emptyNum)) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求放货设备{}数量异常,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求放货设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 1); + deviceService.changeDeviceStatus(jo); + + } else { + if (device.getHas_goods() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 1); + deviceService.changeDeviceStatus(jo); + } else { + log.info("AGV请求放货设备{}有货,无法反馈", device_code); + } + + } + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + //放货完成请求离开 + else if (phase == 0x0D) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + //空盘堆叠站点 + if (device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) device.getDeviceDriver(); + if (standardEmptyPalletSiteDeviceDriver.getNumber() == Integer.parseInt(emptyNum)) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成设备{}数量异常,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + standardCoveyorControlDeviceDriver.writing(1, 3); + log.info("AGV放货完成请求离开设备{}下发输送to_commad{}", device_code, 3); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + //任务完毕 + //(无车id及状态) + else if (phase == 0x0F) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("2"); + instructionService.finish(inst); + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //请求删除任务 + else if (phase == 0x30) { + flag = true; +// if (!ObjectUtil.isEmpty(inst)) { +// data = AgvService.sendAgvOneModeInst(0x8F, index, 0); +// } + data = AgvService.sendAgvOneModeInst(0x8F, index, 0); + + } + //任务删除确认 + //(需要WCS反馈) + else if (phase == 0xFF) { + flag = true; + if (!ObjectUtil.isEmpty(inst)) { + instructionService.cancelNOSendAgv(inst.getInstruction_id()); + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } else if (phase == 0x50)//进入区域 + { + //开门 + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("1"); + if (standardAutodoorDeviceDriver.getAction() == 1) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + } + + } else if (phase == 0x51)//离开区域 + { + //关门 + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("2"); + if (standardAutodoorDeviceDriver.getAction() == 2) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + } + + } else if (phase == 0x64) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //上报异常 + else if (phase == 0x67) { + int errCar = arr[26] * 256 + arr[27]; + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(errCar)); + if (arr[18] * 256 + arr[19] == 0) { + dto.setState("IDLE"); + } else { + StringBuffer errbs = new StringBuffer(); + for (int i = 0; i < ERROR.length; i++) { + if (((arr[18] * 256 + arr[19]) & (1 << i)) > 0) + errbs.append("," + ERROR[i]); + //反馈故障 + } + dto.setState("ERROR"); + } + } + //X坐标 + else if (phase == 0x70) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionX(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //Y坐标 + else if (phase == 0x71) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionY(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //角度 + else if (phase == 0x72) { + int errCar = arr[26] * 256 + arr[27]; + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionAngle(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + + } + //电量 + else if (phase == 0x73) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setEnergyLevel(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + + break; + case 2: + //开始任务/上报订单号(无车id及状态) + if (phase == 0x01) { + data = AgvService.sendAgvOneModeInst(phase, index); + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("1"); + inst.setAgv_jobno(String.valueOf(index)); + inst.setSend_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + flag = true; + } + //分配 车id + else if (phase == 0x02) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setCarno(String.valueOf(carno)); + instructionService.update(inst); + } + } + // 到达取货点请求取货 + else if (phase == 0x03) { + //普通站点 + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + + } + //货架 + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + // 取货完成请求离开 + else if (phase == 0x05) { + //普通站点 + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + } + //标准版-货架 + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + standardStorageDeviceDriver = (StandardStorageDeviceDriver) device.getDeviceDriver(); + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + + } + } + // 到达放货点 + else if (phase == 0x07) { + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + standardStorageDeviceDriver = (StandardStorageDeviceDriver) device.getDeviceDriver(); + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + + } + //普通站点 + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + } + } + // 放货完成离开 + else if (phase == 0x09) { + //普通站点 + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + standardStorageDeviceDriver = (StandardStorageDeviceDriver) device.getDeviceDriver(); + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + //任务完毕 + //(无车id及状态) + else if (phase == 0x0A) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("2"); + instructionService.finish(inst); + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //任务完毕 + //(无车id及状态) + else if (phase == 0x1A) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //请求删除任务 + else if (phase == 0x30) { + flag = true; + data = AgvService.sendAgvOneModeInst(0x8F, index, 0); + } + //任务删除确认 + //(需要WCS反馈) + else if (phase == 0xFF) { + flag = true; + if (!ObjectUtil.isEmpty(inst)) { + instructionService.cancelNOSendAgv(inst.getInstruction_id()); + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } else if (phase == 0x50)//进入区域 + { + //开门 + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("1"); + if (standardAutodoorDeviceDriver.getAction() == 1) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + } + + } else if (phase == 0x51)//离开区域 + { + //关门 + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("2"); + if (standardAutodoorDeviceDriver.getAction() == 2) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + } + + } else if (phase == 0x64) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //上报异常 + else if (phase == 0x67) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(carno)) { + dto = map.get(carno); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + if (arr[18] * 256 + arr[19] == 0) { + dto.setState("IDLE"); + acsToWmsService.feedbackAgvStatus(String.valueOf(ikey), String.valueOf(arr[18] * 256 + arr[19]), ""); + } else { + StringBuffer errbs = new StringBuffer(); + for (int i = 0; i < ERROR.length; i++) { + if (((arr[18] * 256 + arr[19]) & (1 << i)) > 0) + errbs.append("," + ERROR[i]); + //反馈故障 + } + dto.setState("ERROR"); + acsToWmsService.feedbackAgvStatus(String.valueOf(ikey), String.valueOf(arr[18] * 256 + arr[19]), "error"); + } + } + //X坐标 + else if (phase == 0x70) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(carno)) { + dto = map.get(carno); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionX(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //Y坐标 + else if (phase == 0x71) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(carno)) { + dto = map.get(carno); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionY(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //角度 + else if (phase == 0x72) { + int errCar = arr[26] * 256 + arr[27]; + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(carno)) { + dto = map.get(carno); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionAngle(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + + } + //电量 + else if (phase == 0x73) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(carno)) { + dto = map.get(carno); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setEnergyLevel(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } else { + + + } + break; + case 3: + + break; + case 5: + if (phase == 0x01) { + data = AgvService.sendAgvOneModeInst(phase, index); + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("1"); + inst.setAgv_jobno(String.valueOf(index)); + inst.setSend_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + flag = true; + } + //分配 车id + else if (phase == 0x02) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setCarno(String.valueOf(carno)); + instructionService.update(inst); + } + } + // 到达取货点请求取货 + else if (phase == 0x03) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + //检测站点 + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + //空盘堆叠站点 + if (device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) device.getDeviceDriver(); + if (standardEmptyPalletSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + //输送机-控制点驱动 + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + //普通站点 + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + + } + //标准版-货架 + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + // 取货完成请求离开 + else if (phase == 0x05) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + //检测站点 + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV取货完成请求离开设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + standardCoveyorControlDeviceDriver.writing(1, 2); + flag = true; + } else { + log.info("AGV取货完成请求离开设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) device.getDeviceDriver(); + if (standardEmptyPalletSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 0); + deviceService.changeDeviceStatus(jo); + } else { + if (device.getHas_goods() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 1); + deviceService.changeDeviceStatus(jo); + } else { + log.info("AGV取货完成请求离开设备{}有货,无法反馈", device_code); + } + } + + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + standardStorageDeviceDriver = (StandardStorageDeviceDriver) device.getDeviceDriver(); + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + //请求放货 + else if (phase == 0x07) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求放货设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求放货设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 1); + deviceService.changeDeviceStatus(jo); + + } else { + if (device.getHas_goods() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 1); + deviceService.changeDeviceStatus(jo); + } else { + log.info("AGV请求放货设备{}有货,无法反馈", device_code); + } + + } + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + // 放货完成请求离开 + else if (phase == 0x09) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + standardCoveyorControlDeviceDriver.writing(1, 3); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + //任务完毕 + //(无车id及状态) + else if (phase == 0x0A) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("2"); + instructionService.finish(inst); + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //请求删除任务 + else if (phase == 0x30) { + flag = true; + if (!ObjectUtil.isEmpty(inst)) { + data = AgvService.sendAgvOneModeInst(0x8F, index, 0); + } else { + log.info("未找到对应的指令无法删除"); + break; + } + } + //任务删除确认 + //(需要WCS反馈) + else if (phase == 0xFF) { + flag = true; + if (!ObjectUtil.isEmpty(inst)) { + instructionService.cancel(inst.getInstruction_id()); + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //进入区域 + else if (phase == 0x50) { + //开门 + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("1"); + if (standardAutodoorDeviceDriver.getAction() == 1) { + standardAutodoorDeviceDriver.OpenOrClose("1"); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + } + } + //离开区域 + else if (phase == 0x51) { + //关门 + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("2"); + if (standardAutodoorDeviceDriver.getAction() == 2) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + } + } else if (phase == 0x64) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } else if (phase == 0x65) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } else if (phase == 0x66) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } else if (phase == 0x67) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //上报异常 + else if (phase == 0x67) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + if (ikey == 0) { + dto.setState("IDLE"); + acsToWmsService.feedbackAgvStatus(String.valueOf(carno), "0", ""); + } else { + StringBuffer errbs = new StringBuffer(); + for (int i = 0; i < ERROR.length; i++) { + if (((ikey) & (1 << i)) > 0) + errbs.append("," + ERROR[i]); + //反馈故障 + } + dto.setState("ERROR"); + AgvService.updateAgvFromCache(dto); + acsToWmsService.feedbackAgvStatus(String.valueOf(carno), String.valueOf(ikey), "error"); + } + } + //X坐标 + else if (phase == 0x70) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionX(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //Y坐标 + else if (phase == 0x71) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionY(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //角度 + else if (phase == 0x72) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionAngle(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //电量 + else if (phase == 0x73) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setEnergyLevel(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + break; + case 7: + //开始任务/上报订单号(无车id及状态) + if (phase == 0x01) { + data = AgvService.sendAgvOneModeInst(phase, index); + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("1"); + inst.setAgv_jobno(String.valueOf(index)); + inst.setSend_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + flag = true; + } + //分配 车id + else if (phase == 0x02) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setCarno(String.valueOf(carno)); + instructionService.update(inst); + } + } + // 到达取货点请求取货 + else if (phase == 0x03) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) device.getDeviceDriver(); + if (standardEmptyPalletSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + standardCoveyorControlDeviceDriver.writing(1, 1); + if (standardCoveyorControlDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + // 取货完成请求离开 + else if (phase == 0x05) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV取货完成请求离开设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + standardCoveyorControlDeviceDriver.writing(1, 2); + flag = true; + } else { + log.info("AGV取货完成请求离开设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) device.getDeviceDriver(); + if (standardEmptyPalletSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 0); + deviceService.changeDeviceStatus(jo); + } else { + if (device.getHas_goods() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 1); + deviceService.changeDeviceStatus(jo); + } else { + log.info("AGV取货完成请求离开设备{}有货,无法反馈", device_code); + } + } + + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + standardStorageDeviceDriver = (StandardStorageDeviceDriver) device.getDeviceDriver(); + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + // 球磨车间请求上料 + //( Itype=2,需要WCS反馈Phase) + else if (phase == 0x07) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + // 球磨车间上料完成请求离开 + else if (phase == 0x09) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + //请求放货库位 + else if (phase == 0x0A) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + //调用接口 + String result = acsToWmsService.requestTaskAgain(String.valueOf(agvaddr), inst.getTask_id(), inst.getVehicle_code()); + JSONObject jo = JSON.parseObject(result); + String next_device = jo.getString("data"); + + String next_point = ""; + Device next_point_device = deviceAppService.findDeviceByCode(next_device); + if (next_point_device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) next_point_device.getDeviceDriver(); + + int number = standardEmptyPalletSiteDeviceDriver.getNumber(); + int nowinstNum = instructionService.querySameDestinationInst(next_point); + if (number + nowinstNum >= Integer.parseInt(next_point_device.getExtraValue().get("max_emptypalletnum").toString())) { + log.info("当前叠盘位{},光电数量{},存在此设备指令数{},超过最大堆叠数量:{}无法反馈", next_point, number, nowinstNum, Integer.parseInt(device.getExtraValue().get("max_emptypalletnum").toString())); + break; + } + next_point = next_device + "." + (number + nowinstNum + 1); + } else { + next_point = next_device; + } + + int next_point_address = deviceService.queryAddressBydeviceCode(next_point); + data = AgvService.sendAgvOneModeInst(phase, index, next_point_address); + + TaskService taskService = SpringContextHolder.getBean(TaskServiceImpl.class); + TaskDto task = taskService.findByCodeFromCache(inst.getTask_code()); + task.setNext_device_code(next_device); + task.setNext_point_code(next_device); + taskService.update(task); + + inst.setNext_device_code(next_device); + inst.setNext_point_code(next_point); + instructionService.update(inst); + flag = true; + } + //到达放货点 + else if (phase == 0x0B) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求放货设备{}有货,无法反馈", device_code); + } + } + //空盘堆叠站点 + if (device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) device.getDeviceDriver(); + if (standardEmptyPalletSiteDeviceDriver.getNumber() < Integer.parseInt(emptyNum)) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求放货设备{}数量异常,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求放货设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 1); + deviceService.changeDeviceStatus(jo); + + } else { + if (device.getHas_goods() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 1); + deviceService.changeDeviceStatus(jo); + } else { + log.info("AGV请求放货设备{}有货,无法反馈", device_code); + } + + } + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + //放货完成请求离开 + else if (phase == 0x0D) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + //空盘堆叠站点 + if (device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) device.getDeviceDriver(); + if (standardEmptyPalletSiteDeviceDriver.getNumber() == Integer.parseInt(emptyNum)) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成设备{}数量异常,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + standardCoveyorControlDeviceDriver.writing(1, 3); + log.info("AGV放货完成请求离开设备{}下发输送to_commad{}", device_code, 3); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + //任务完毕 + //(无车id及状态) + else if (phase == 0x0F) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("2"); + instructionService.finish(inst); + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //请求删除任务 + else if (phase == 0x30) { + flag = true; + if (!ObjectUtil.isEmpty(inst)) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } else { + log.info("未找到对应的指令无法删除"); + break; + } + } + //任务删除确认 + //(需要WCS反馈) + else if (phase == 0xFF) { + flag = true; + if (!ObjectUtil.isEmpty(inst)) { + instructionService.cancelNOSendAgv(inst.getInstruction_id()); + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } else if (phase == 0x50)//进入区域 + { + //开门 + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("1"); + if (standardAutodoorDeviceDriver.getAction() == 1) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + } + + } else if (phase == 0x51)//离开区域 + { + //关门 + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("2"); + if (standardAutodoorDeviceDriver.getAction() == 2) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + } + + } else if (phase == 0x64) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //上报异常 + else if (phase == 0x67) { + int errCar = arr[26] * 256 + arr[27]; + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(errCar)) { + dto = map.get(errCar); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(errCar)); + if (arr[18] * 256 + arr[19] == 0) { + dto.setState("IDLE"); + } else { + StringBuffer errbs = new StringBuffer(); + for (int i = 0; i < ERROR.length; i++) { + if (((arr[18] * 256 + arr[19]) & (1 << i)) > 0) + errbs.append("," + ERROR[i]); + //反馈故障 + } + dto.setState("ERROR"); + } + } + //X坐标 + else if (phase == 0x70) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(carno)) { + dto = map.get(carno); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionX(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //Y坐标 + else if (phase == 0x71) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(carno)) { + dto = map.get(carno); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionY(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //角度 + else if (phase == 0x72) { + int errCar = arr[26] * 256 + arr[27]; + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(carno)) { + dto = map.get(carno); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionAngle(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + + } + //电量 + else if (phase == 0x73) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + if (map.containsKey(carno)) { + dto = map.get(carno); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setEnergyLevel(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + break; + case 9: + if (phase == 0x01) { + data = AgvService.sendAgvOneModeInst(phase, index); + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("1"); + inst.setAgv_jobno(String.valueOf(index)); + inst.setSend_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + flag = true; + } + //分配 车id + else if (phase == 0x02) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setCarno(String.valueOf(carno)); + instructionService.update(inst); + } + } + // 到达取货点请求取货 + else if (phase == 0x03) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + //检测站点 + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + //空盘堆叠站点 + if (device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) device.getDeviceDriver(); + if (standardEmptyPalletSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + //输送机-控制点驱动 + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + //普通站点 + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + + } + //标准版-货架 + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("1"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + // 取货完成请求离开 + else if (phase == 0x05) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV取货完成请求离开设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + standardCoveyorControlDeviceDriver.writing(1, 2); + flag = true; + } else { + log.info("AGV取货完成请求离开设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) device.getDeviceDriver(); + if (standardEmptyPalletSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求取货设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 0); + deviceService.changeDeviceStatus(jo); + } else { + if (device.getHas_goods() == 0) { + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 1); + deviceService.changeDeviceStatus(jo); + } else { + log.info("AGV取货完成请求离开设备{}有货,无法反馈", device_code); + } + } + + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + standardStorageDeviceDriver = (StandardStorageDeviceDriver) device.getDeviceDriver(); + inst.setExecute_status("5"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + if(!inst.getTask_code().startsWith("-")) { + //反馈wms系统动作完成 + inst.setFinish_type("1"); + instructionService.update(inst); + JSONObject feedjo = new JSONObject(); + feedjo.put("status","1"); + feedjo.put("device_code",device_code); + feedjo.put("vehicle_code",inst.getVehicle_code()); + feedjo.put("task_code",inst.getTask_code()); + JSONArray feedja = JSONArray.parseArray(String.valueOf(feedjo)); + acsToWmsService.feedbackActionStatusToWms(feedja); + } + + + } + //请求放货 + else if (phase == 0x07) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求放货设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV请求放货设备{}有货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 1); + deviceService.changeDeviceStatus(jo); + + } else { + if (device.getHas_goods() == 0) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + JSONObject jo = new JSONObject(); + jo.put("device_code", device.getDevice_code()); + jo.put("hasGoodStatus", 1); + deviceService.changeDeviceStatus(jo); + } else { + log.info("AGV请求放货设备{}有货,无法反馈", device_code); + } + + } + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("3"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + } + // 放货完成请求离开 + else if (phase == 0x09) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + break; + } + if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + if (standardInspectSiteDeviceDriver.getMove() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + standardCoveyorControlDeviceDriver.writing(1, 3); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.IGNOREHASGOODS), "1")) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + if (device.getHas_goods() != 0) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } else { + log.info("AGV放货完成请求离开设备{}无货,无法反馈", device_code); + } + } + + } + if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { + inst.setExecute_status("6"); + instructionService.update(inst); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + flag = true; + } + + if(!inst.getTask_code().startsWith("-")){ + //反馈wms系统动作完成 + inst.setFinish_type("1"); + instructionService.update(inst); + JSONObject feedjo = new JSONObject(); + feedjo.put("status","2"); + feedjo.put("device_code",device_code); + feedjo.put("vehicle_code",inst.getVehicle_code()); + feedjo.put("task_code",inst.getTask_code()); + JSONArray feedja = JSONArray.parseArray(String.valueOf(feedjo)); + acsToWmsService.feedbackActionStatusToWms(feedja); + } + + } + //任务完毕 + //(无车id及状态) + else if (phase == 0x0A) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("2"); + instructionService.finish(inst); + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //请求删除任务 + else if (phase == 0x30) { + flag = true; + if (!ObjectUtil.isEmpty(inst)) { + data = AgvService.sendAgvOneModeInst(0x8F, index, 0); + } else { + log.info("未找到对应的指令无法删除"); + break; + } + } + //任务删除确认 + //(需要WCS反馈) + else if (phase == 0xFF) { + flag = true; + if (!ObjectUtil.isEmpty(inst)) { + instructionService.cancelNOSendAgv(inst.getInstruction_id()); + } + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //进入区域 + else if (phase == 0x50) { + //开门 + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("1"); + if (standardAutodoorDeviceDriver.getAction() == 1) { + standardAutodoorDeviceDriver.OpenOrClose("1"); + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + } + } + //离开区域 + else if (phase == 0x51) { + //关门 + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("2"); + if (standardAutodoorDeviceDriver.getAction() == 2) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + } + } else if (phase == 0x64) { + data = AgvService.sendAgvOneModeInst(phase, index, 0); + } + //上报异常 + else if (phase == 0x67) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + if (ikey == 0) { + dto.setState("IDLE"); + acsToWmsService.feedbackAgvStatus(String.valueOf(carno), "0", ""); + } else { + StringBuffer errbs = new StringBuffer(); + for (int i = 0; i < ERROR.length; i++) { + if (((ikey) & (1 << i)) > 0) + errbs.append("," + ERROR[i]); + //反馈故障 + } + dto.setState("ERROR"); + AgvService.updateAgvFromCache(dto); + acsToWmsService.feedbackAgvStatus(String.valueOf(carno), String.valueOf(ikey), "error"); + } + } + //X坐标 + else if (phase == 0x70) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionX(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //Y坐标 + else if (phase == 0x71) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionY(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //角度 + else if (phase == 0x72) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setPositionAngle(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + //电量 + else if (phase == 0x73) { + AgvDto dto = null; + Map map = AgvService.findAllAgvFromCache(); + carno = arr[18] * 256 + arr[19]; + if (map.containsKey(String.valueOf(carno))) { + dto = map.get(String.valueOf(carno)); + } else { + dto = new AgvDto(); + } + dto.setName(String.valueOf(carno)); + dto.setEnergyLevel(String.valueOf(ikey)); + AgvService.updateAgvFromCache(dto); + } + break; + default: + log.info("字典表未找到满足条件的项目类型"); + break; + } + if (!ObjectUtil.isEmpty(data)) { + write(data); + } + } catch (Exception e) { + System.out.println(e); + log.info(e.toString()); + log.info(e.getMessage()); + e.printStackTrace(); + } + } else { + System.out.println("agv上报不是0073类型动作,不处理"); + } + } + + } catch (Exception e) { + + + } finally { + + + } + + } + + + @Override + public void stop() { + super.after(); + try { + s.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + public static void write(byte[] b) { + try { + log.info("下发agv数据:" + Bytes2HexString(b)); + System.out.println("下发agv数据:" + Bytes2HexString(b)); + dos.write(b); + dos.flush(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + public static String Bytes2HexString(byte[] b) { + String ret = ""; + for (int i = 0; i < b.length; i++) { + String hex = Integer.toHexString(b[i] & 0xFF); + if (hex.length() == 1) { + hex = '0' + hex; + } + ret += hex.toUpperCase(); + } + return ret; + } +} diff --git a/acs/qd/src/views/acs/device/driver/lnsh/lnsh_palletizing_manipulator.vue b/acs/qd/src/views/acs/device/driver/lnsh/lnsh_palletizing_manipulator.vue index 2c59f65..44ae02d 100644 --- a/acs/qd/src/views/acs/device/driver/lnsh/lnsh_palletizing_manipulator.vue +++ b/acs/qd/src/views/acs/device/driver/lnsh/lnsh_palletizing_manipulator.vue @@ -360,15 +360,63 @@ export default { return } for (const val in this.data1) { - // if (this.data1[val].code.indexOf('move') !== -1) { - // this.data1[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 1) - // } - // if (this.data1[val].code.indexOf('error') !== -1) { - // this.data1[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 5) - // } - // if (this.data1[val].code.indexOf('task') !== -1) { - // this.data1[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 7) - // } + if (this.data1[val].code.indexOf('move') !== -1) { + this.data1[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 1) + } + if (this.data1[val].code.indexOf('action') !== -1) { + this.data1[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 2) + } + if (this.data1[val].code.indexOf('ioaction') !== -1) { + this.data1[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 3) + } + if (this.data1[val].code.indexOf('error') !== -1) { + this.data1[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 4) + } + if (this.data1[val].code.indexOf('task') !== -1) { + this.data1[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 5) + } + if (this.data1[val].code.indexOf('weight') !== -1) { + this.data1[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 9) + } + if (this.data1[val].code.indexOf('batch') !== -1) { + this.data1[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 13) + } + if (this.data1[val].code.indexOf('specifications') !== -1) { + this.data1[val].db = beforeStr + '.' + 'STRING' + (parseInt(endNumber) + 17) + '.50' + } + if (this.data1[val].code.indexOf('material') !== -1) { + this.data1[val].db = beforeStr + '.' + 'STRING' + (parseInt(endNumber) + 273) + '.50' + } + if (this.data1[val].code.indexOf('barcode') !== -1) { + this.data1[val].db = beforeStr + '.' + 'STRING' + (parseInt(endNumber) + 529) + '.50' + } + if (this.data1[val].code.indexOf('AlongSide') !== -1) { + this.data1[val].db = beforeStr + '.' + 'W' + (parseInt(endNumber) + 785) + } + if (this.data1[val].code.indexOf('BshortSide') !== -1) { + this.data1[val].db = beforeStr + '.' + 'W' + (parseInt(endNumber) + 787) + } + if (this.data1[val].code.indexOf('Htrapezoidal') !== -1) { + this.data1[val].db = beforeStr + '.' + 'W' + (parseInt(endNumber) + 789) + } + if (this.data1[val].code.indexOf('Wthickness') !== -1) { + this.data1[val].db = beforeStr + '.' + 'W' + (parseInt(endNumber) + 791) + } + if (this.data1[val].code.indexOf('status') !== -1) { + this.data1[val].db = beforeStr + '.' + 'B' + (parseInt(endNumber) + 795) + } + if (this.data1[val].code.indexOf('unqualified_qty') !== -1) { + this.data1[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 795) + } + if (this.data1[val].code.indexOf('encoder_qty') !== -1) { + this.data1[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 799) + } + if (this.data1[val].code.indexOf('order_qty') !== -1) { + this.data1[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 803) + } + if (this.data1[val].code.indexOf('order_No') !== -1) { + this.data1[val].db = beforeStr + '.' + 'STRING' + (parseInt(endNumber) + 807) + '.50' + } } } }, @@ -386,14 +434,41 @@ export default { if (isNaN(parseInt(endNumber))) { return } - // for (const val in this.data2) { - // if (this.data2[val].code.indexOf('to_target') !== -1) { - // this.data2[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 2) - // } - // if (this.data2[val].code.indexOf('to_task') !== -1) { - // this.data2[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 6) - // } - // } + for (const val in this.data2) { + if (this.data2[val].code.indexOf('to_target') !== -1) { + this.data2[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 2) + } + if (this.data2[val].code.indexOf('to_task') !== -1) { + this.data2[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 4) + } + if (this.data2[val].code.indexOf('to_barcode') !== -1) { + this.data2[val].db = beforeStr + '.' + 'STRING' + (parseInt(endNumber) + 8) + '.50' + } + if (this.data2[val].code.indexOf('to_error') !== -1) { + this.data2[val].db = beforeStr + '.' + 'B' + (parseInt(endNumber) + 264) + } + if (this.data2[val].code.indexOf('to_allow_pallet_qty') !== -1) { + this.data2[val].db = beforeStr + '.' + 'W' + (parseInt(endNumber) + 266) + } + if (this.data2[val].code.indexOf('to_material_type') !== -1) { + this.data2[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 268) + } + // if (this.data2[val].code.indexOf('to_material_code') !== -1) { + // this.data2[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 272) + // } + if (this.data2[val].code.indexOf('to_order_qty') !== -1) { + this.data2[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 276) + } + if (this.data2[val].code.indexOf('to_product_code') !== -1) { + this.data2[val].db = beforeStr + '.' + 'D' + (parseInt(endNumber) + 280) + } + if (this.data2[val].code.indexOf('to_order_No') !== -1) { + this.data2[val].db = beforeStr + '.' + 'STRING' + (parseInt(endNumber) + 284) + '.50' + } + if (this.data2[val].code.indexOf('to_material_code') !== -1) { + this.data2[val].db = beforeStr + '.' + 'STRING' + (parseInt(endNumber) + 540) + '.50' + } + } } }, changeOpc(val) {