diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcfour/AgvNdcFourDefination.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcfour/AgvNdcFourDefination.java new file mode 100644 index 00000000..ada4bdf3 --- /dev/null +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcfour/AgvNdcFourDefination.java @@ -0,0 +1,49 @@ +package org.nl.acs.device_driver.basedriver.agv.ndcfour; + +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.DeviceDriverDefination; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceType; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * NDC双工位AGV + */ +@Service +public class AgvNdcFourDefination implements DeviceDriverDefination { + @Override + public String getDriverCode() { + return "agv_ndc_four"; + } + + @Override + public String getDriverName() { + return "NDC海柔AGV"; + } + + @Override + public String getDriverDescription() { + return "NDC海柔AGV"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new AgvNdcFourDeviceDriver()).setDevice(device).setDriverDefination(this); + + } + + @Override + public Class getDeviceDriverType() { + return AgvNdcFourDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.agv); + return types; + } +} diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcfour/AgvNdcFourDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcfour/AgvNdcFourDeviceDriver.java new file mode 100644 index 00000000..52fef618 --- /dev/null +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcfour/AgvNdcFourDeviceDriver.java @@ -0,0 +1,992 @@ +package org.nl.acs.device_driver.basedriver.agv.ndcfour; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.agv.server.NDCAgvService; +import org.nl.acs.agv.server.impl.NDCAgvServiceImpl; +import org.nl.acs.auto.run.NDCSocketConnectionAutoRun; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_auto_cache_line.HailiangAutoCacheLineDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_cleaning_machine_storage_station.HailiangCleaningMachineStorageStationDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_old_special_empty_station.HailiangOldSpecialEmptyStationDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_old_special_full_station.HailiangOldSpecialFullStationDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_old_special_pour_station.HailiangOldSpecialPourStationDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_special_empty_station.HailiangSpecialEmptyStationDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_special_full_station.HailiangSpecialFullStationDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_special_pour_station.HailiangSpecialPourStationDeviceDriver; +import org.nl.acs.device_driver.driver.AbstractDeviceDriver; +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.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.task.service.impl.TaskServiceImpl; +import org.nl.modules.wql.util.SpringContextHolder; + +import java.util.Collections; +import java.util.List; + +/** + * 双工位诺宝AGV + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class AgvNdcFourDeviceDriver extends AbstractDeviceDriver implements DeviceDriver { + + private InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class); + private NDCAgvService ndcAgvService = SpringContextHolder.getBean(NDCAgvServiceImpl.class); + private DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); + private DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class); + private DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogServiceImpl.class); + private TaskService taskService = SpringContextHolder.getBean(TaskServiceImpl.class); + private int agvaddr = 0; + private int agvaddr_copy = 0; + private int weight = 0; + private String device_code = ""; + private int phase = 0; + + //x坐标 + private int x = 0; + //y坐标 + private int y = 0; + //角度 + private int angle = 0; + //电量 + private int electric_qty = 0; + //三色灯状态 + private int status = 0; + //车辆故障 + private int error = 0; + + private int last_x = 0; + private int last_y = 0; + private int last_angle = 0; + private int last_electric_qty = 0; + private int last_status = 0; + private int last_error = 0; + + public synchronized void processSocket(int[] arr) throws Exception { + device_code = this.getDeviceCode(); + log.info("AGV驱动接收AGV上报信息,设备号:{},上报信息:{}", device_code, arr); + + byte[] data = null; + phase = arr[16] * 256 + arr[17]; + // agv任务号 + int index = arr[12] * 256 + arr[13]; + //任务号 + int ikey = arr[26] * 256 + arr[27]; + //站点号 + agvaddr = arr[18] * 256 + arr[19]; + //车号 + int carno = arr[20]; + List insts = null; + if (ikey != 0) { + insts = instructionService.findByLinkNum(String.valueOf(ikey)); + } + log.info("AGV驱动,设备号:{},接收agv上报信息:" + "phase--" + phase + " index--" + index + " ikey--" + ikey + " agvaddr--" + agvaddr + " Car--" + carno, device_code); + + Device device = null; + String device_code = null; + + //海亮专机设备空框位 + HailiangSpecialEmptyStationDeviceDriver hailiangSpecialEmptyStationDeviceDriver; + //海亮专机设备满框位 + HailiangSpecialFullStationDeviceDriver hailiangSpecialFullStationDeviceDriver; + //海亮smart200专机满料位 + HailiangOldSpecialFullStationDeviceDriver hailiangOldSpecialFullStationDeviceDriver; + //海亮smarrt200专机空料位 + HailiangOldSpecialEmptyStationDeviceDriver hailiangOldSpecialEmptyStationDeviceDriver; + //海亮smart200专机倒料位 + HailiangOldSpecialPourStationDeviceDriver hailiangOldSpecialPourStationDeviceDriver; + //海亮专机设备倒料位 + HailiangSpecialPourStationDeviceDriver hailiangSpecialPourStationDeviceDriver; + //自动缓存线 + HailiangAutoCacheLineDeviceDriver hailiangAutoCacheLineDeviceDriver; + //清洗倒料 + HailiangCleaningMachineStorageStationDeviceDriver hailiangCleaningMachineStorageStationDeviceDriver; + + if (phase == 0x02) { + //分配 车id + //(不需要wms反馈) + for (Instruction inst : insts) { + inst.setCarno(String.valueOf(carno)); + instructionService.update(inst); + log.info("AGV上报小车id,修改指令中车号为:{},指令号:{}", String.valueOf(carno), inst.getInstruction_code()); + } + } else if (phase == 0x03) { + //到达取货点1 || 自动缓存线入库---到达取满框1/点对点任务取货就绪 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //取满箱任务起点 一般是专机满料点和缓存线 + if (StrUtil.equals(inst.getStart_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) { + log.info("开始设置phase值,到达取货点1,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver(); + hailiangSpecialFullStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangOldSpecialFullStationDeviceDriver) { + log.info("开始设置phase值,到达取货点1,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangOldSpecialFullStationDeviceDriver = (HailiangOldSpecialFullStationDeviceDriver) device.getDeviceDriver(); + hailiangOldSpecialFullStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,到达出缓存线取满框点1,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + } + } + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x05) { + //取货完毕 || 自动缓存线入库---取满框完毕1/点对点取货完毕 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //取满箱任务起点 一般是专机满料点和缓存线 + if (StrUtil.equals(inst.getStart_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) { + log.info("开始设置phase值,取货点1取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver(); + hailiangSpecialFullStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangOldSpecialFullStationDeviceDriver) { + log.info("开始设置phase值,取货点1取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangOldSpecialFullStationDeviceDriver = (HailiangOldSpecialFullStationDeviceDriver) device.getDeviceDriver(); + hailiangOldSpecialFullStationDeviceDriver.set(phase, index, inst); + } + //入缓存线任务的起点有专机满料位 出缓存的起点是缓存线 + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线取满框点1取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + } + } + + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x07) { + //到达取货点2 || 自动缓存线入库---到达取满框2 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //双任务-取满箱任务起点2 一般是专机满料点和缓存线 + if (StrUtil.equals(inst.getStart_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) { + log.info("开始设置phase值,到达取货点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver(); + hailiangSpecialFullStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangOldSpecialFullStationDeviceDriver) { + log.info("开始设置phase值,到达取货点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangOldSpecialFullStationDeviceDriver = (HailiangOldSpecialFullStationDeviceDriver) device.getDeviceDriver(); + hailiangOldSpecialFullStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,到达出缓存线取满框点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + } + } + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x09) { + //取货完毕2 || 自动缓存线入库---取满框完毕2 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //双任务-取满箱任务起点2 一般是专机满料点和缓存线 + if (StrUtil.equals(inst.getStart_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) { + log.info("开始设置phase值,取货点2取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver(); + hailiangSpecialFullStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangOldSpecialFullStationDeviceDriver) { + log.info("开始设置phase值,取货点2取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangOldSpecialFullStationDeviceDriver = (HailiangOldSpecialFullStationDeviceDriver) device.getDeviceDriver(); + hailiangOldSpecialFullStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,出缓存线取满框点2取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + } + } + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x0A) { + //自动缓存线入库--到达送满框1 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //只有满料位入到缓存线有到达送满框 + if (StrUtil.equals(inst.getPut_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线入库到达送满框点1,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + break; + } + } + } + + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x0B) { + //到达倒料点1 || 自动缓存线出库 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + + + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //只有满料位到倒料位、清洗储料仓,及缓存线到倒料位、清洗储料仓有倒料点 倒料点都是倒料位、清洗储料仓 + if (StrUtil.equals(inst.getPut_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { + log.info("开始设置phase值,到达倒料点1,设备号:{}", device_code); + hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); + hailiangSpecialPourStationDeviceDriver.set(phase, index, inst); + break; + } + if (device.getDeviceDriver() instanceof HailiangOldSpecialPourStationDeviceDriver) { + log.info("开始设置phase值,到达倒料点1,设备号:{}", device_code); + hailiangOldSpecialPourStationDeviceDriver = (HailiangOldSpecialPourStationDeviceDriver) device.getDeviceDriver(); + hailiangOldSpecialPourStationDeviceDriver.set(phase, index, inst); + break; + } + if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + log.info("开始设置phase值,到达倒料点1,设备号:{}", device_code); + hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); + hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst); + break; + } + } + + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x0C) { + //自动缓存线入库---送满框完毕1 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //送满框1 只有满料位到缓存线才有送满框1 + if (StrUtil.equals(inst.getPut_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线入库送满框点1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + break; + } + } + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x0D) { + //倒料点1倒料完毕 || 自动缓存线出库 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //只有满料位、缓存线到倒料位、清洗储料仓才有倒料完毕1 + if (StrUtil.equals(inst.getPut_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { + log.info("开始设置phase值,倒料点1倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); + hailiangSpecialPourStationDeviceDriver.set(phase, index, inst); + break; + } + if (device.getDeviceDriver() instanceof HailiangOldSpecialPourStationDeviceDriver) { + log.info("开始设置phase值,倒料点1倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangOldSpecialPourStationDeviceDriver = (HailiangOldSpecialPourStationDeviceDriver) device.getDeviceDriver(); + hailiangOldSpecialPourStationDeviceDriver.set(phase, index, inst); + break; + } + if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + log.info("开始设置phase值,倒料点1倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); + hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst); + break; + } + } + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x0E) { + //自动缓存线入库---到达取空框1 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //只有满料位到缓存线放满完成后才有到达取空框1 取空框是缓存线才有 + if (StrUtil.equals(inst.getPut_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线入库,到达取空框1,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + break; + } + } + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x0F) { + //到达倒料点2 || 自动缓存线出库 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + Collections.reverse(insts); + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //只有满料位到倒料位、清洗储料仓,及缓存线到倒料位、清洗储料仓有倒料点 倒料点都是倒料位、清洗储料仓 + if (StrUtil.equals(inst.getPut_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { + log.info("开始设置phase值,到达倒料点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); + hailiangSpecialPourStationDeviceDriver.set(phase, index, inst); + break; + } + if (device.getDeviceDriver() instanceof HailiangOldSpecialPourStationDeviceDriver) { + log.info("开始设置phase值,到达倒料点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangOldSpecialPourStationDeviceDriver = (HailiangOldSpecialPourStationDeviceDriver) device.getDeviceDriver(); + hailiangOldSpecialPourStationDeviceDriver.set(phase, index, inst); + break; + } + if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + log.info("开始设置phase值,到达倒料点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); + hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst); + break; + } + } + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x10) { + //自动缓存线入库---取空框完毕1 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //只有满料位到缓存线入库才有取空框1完毕 + if (StrUtil.equals(inst.getPut_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线入库,取空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + break; + } + } + } + } else if (phase == 0x21) { + //自动缓存线入库--到达送满框2 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + Collections.reverse(insts); + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //只有满料位到缓存线才有到达送满框2 + if (StrUtil.equals(inst.getPut_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线入库,到达送满框点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + break; + } + } + } + } else if (phase == 0x23) { + //自动缓存线入库--送满框完毕2 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + Collections.reverse(insts); + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //只有满料位到缓存线才有到送满框完毕 + if (StrUtil.equals(inst.getPut_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线入库,送满框点2完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + break; + } + } + } + } else if (phase == 0x25) { + //自动缓存线入库--到达取空框2 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + Collections.reverse(insts); + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + Collections.reverse(insts); + //只有满料位到缓存线才有到达取空框2 + if (StrUtil.equals(inst.getPut_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线入库,到达取空框点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + break; + } + } + } + } else if (phase == 0x27) { + //自动缓存线入库--取空框完毕2 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + Collections.reverse(insts); + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //只有满料位到缓存线才有到达取空框完毕2 + if (StrUtil.equals(inst.getPut_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线入库,取空框点2取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + break; + } + } + } + } else if (phase == 0x11) { + //到料完毕2 || 自动缓存线出库 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + Collections.reverse(insts); + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //只有满料位到倒料位、清洗储料仓,及缓存线到倒料位、清洗储料仓有倒料点 倒料点都是倒料位、清洗储料仓 + if (StrUtil.equals(inst.getPut_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { + log.info("开始设置phase值,倒料点2倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); + hailiangSpecialPourStationDeviceDriver.set(phase, index, inst); + break; + } + if (device.getDeviceDriver() instanceof HailiangOldSpecialPourStationDeviceDriver) { + log.info("开始设置phase值,倒料点2倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangOldSpecialPourStationDeviceDriver = (HailiangOldSpecialPourStationDeviceDriver) device.getDeviceDriver(); + hailiangOldSpecialPourStationDeviceDriver.set(phase, index, inst); + break; + } + if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + log.info("开始设置phase值,倒料点2倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); + hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst); + break; + } + } + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + + } else if (phase == 0x13) { + //到达送箱点1/自动缓存线入库--到达送空框1/点对点送框就绪 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //所有任务都有到达送空框1 + if (StrUtil.equals(inst.getNext_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) { + log.info("开始设置phase值,到达还空框1,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); + hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangOldSpecialEmptyStationDeviceDriver) { + log.info("开始设置phase值,到达还空框1,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangOldSpecialEmptyStationDeviceDriver = (HailiangOldSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); + hailiangOldSpecialEmptyStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线出库,还空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + } + } + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + + } else if (phase == 0x15) { + //送箱完毕/自动缓存线入库--送空框完毕1/点对点送框完毕 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //所有任务都有到送空框1完毕 + if (StrUtil.equals(inst.getNext_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) { + log.info("开始设置phase值,还空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); + hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangOldSpecialEmptyStationDeviceDriver) { + log.info("开始设置phase值,还空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangOldSpecialEmptyStationDeviceDriver = (HailiangOldSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); + hailiangOldSpecialEmptyStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线出库还空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + } + } + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x17) { + //到达送箱点2/自动缓存线入库 --到达送空框2 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + Collections.reverse(insts); + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //所有双任务都有到达送空框2 + if (StrUtil.equals(inst.getNext_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) { + log.info("开始设置phase值,到达还空框2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); + hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangOldSpecialEmptyStationDeviceDriver) { + log.info("开始设置phase值,到达还空框2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangOldSpecialEmptyStationDeviceDriver = (HailiangOldSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); + hailiangOldSpecialEmptyStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线出库到达还空框2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + } + } + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x19) { + //送箱完毕/自动缓存线入库--送空框完毕2 + if (agvaddr == 0) { + agvaddr = agvaddr_copy; + } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + device = deviceAppService.findDeviceByCode(device_code); + + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + Collections.reverse(insts); + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + //所有双任务都有送空框完毕2 + if (StrUtil.equals(inst.getNext_device_code(), device_code)) { + if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) { + log.info("开始设置phase值,还空框2完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); + hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangOldSpecialEmptyStationDeviceDriver) { + log.info("开始设置phase值,还空框2完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangOldSpecialEmptyStationDeviceDriver = (HailiangOldSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); + hailiangOldSpecialEmptyStationDeviceDriver.set(phase, index, inst); + } + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,缓存线出库还空框2完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); + } + } + } + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x64) {//param,agv货位id待定 + //1、根据货位id找到对应三工位设备,赋给agv属性地址对应的满料位设备 + //到达位置点 + agvaddr = arr[18] * 256 + arr[19]; + agvaddr_copy = agvaddr; + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + + } else if (phase == 0x65) {//param,重量待定 +// if (agvaddr == 0) { +// agvaddr = agvaddr_copy; +// } + if (agvaddr < 1) { + log.info("phase:" + phase + "--agv地址参数有误agvaddr=" + agvaddr); + return; + } + agvaddr = agvaddr_copy; + device_code = deviceService.queryDeviceCodeByAddress(agvaddr); + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + //1、得到重量信息 + int weight = (arr[18] * 256 + arr[19]) * 10; + if (weight < 0) { + log.info("AGV上报重量小于0不反馈AGV信息,指令号:{}", ikey); + return; + } + for (Instruction inst : insts) { + //校验agv上报站点编号与指令起始点相同 + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到关联编号{}对应的指令", ikey); + break; + } + // 4010 待处理 + if (StrUtil.equals(inst.getStart_device_code(), device_code)) { + String now = DateUtil.now(); + inst.setWeight(String.valueOf(weight)); + inst.setUpdate_time(now); + instructionService.update(inst); + TaskDto taskDto = taskService.findByCodeFromCache(inst.getTask_code()); + if (taskDto != null) { + taskDto.setWeight(String.valueOf(weight)); + taskDto.setUpdate_time(now); + taskService.update(taskDto); + } + } + } + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + } else if (phase == 0x71) { + x = ikey; + if (x != last_x) { + logServer.deviceItemValue(this.device_code, "x", String.valueOf(x)); + } + } else if (phase == 0x72) { + y = ikey; + if (y != last_y) { + logServer.deviceItemValue(this.device_code, "y", String.valueOf(y)); + } + } else if (phase == 0x73) { + angle = last_angle; + if (angle != last_angle) { + logServer.deviceItemValue(this.device_code, "angle", String.valueOf(angle)); + } + } else if (phase == 0x74) { + electric_qty = ikey; + if (electric_qty != last_electric_qty) { + logServer.deviceItemValue(this.device_code, "electric_qty", String.valueOf(electric_qty)); + } + } else if (phase == 0x75) { + status = ikey; + if (status != last_status) { + logServer.deviceItemValue(this.device_code, "status", String.valueOf(status)); + } + } else if (phase == 0x76) { + error = ikey; + if (error != last_error) { + logServer.deviceItemValue(this.device_code, "error", String.valueOf(error)); + } + } + + if (!ObjectUtil.isEmpty(data)) { + NDCSocketConnectionAutoRun.write(data); + } + } + +} diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/utils/FourAgvPhase.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/utils/FourAgvPhase.java new file mode 100644 index 00000000..3ba6714f --- /dev/null +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/utils/FourAgvPhase.java @@ -0,0 +1,66 @@ +package org.nl.acs.device_driver.basedriver.agv.utils; + +import org.springframework.stereotype.Service; + +@Service +public class FourAgvPhase implements IAgv { + @Override + public String getPhaseName(Integer phase) { + if (phase == 0x01) { + return "开始任务/上报订单号"; + } else if (phase == 0x02){ + return "分配车id"; + } else if (phase == 0x03){ + return "到达取货点1"; + } else if (phase == 0x05){ + return "取货点1取货完毕"; + } else if (phase == 0x07){ + return "到达取货点2"; + } else if (phase == 0x09){ + return "取货点2取货完毕"; + } else if (phase == 0x0B){ + return "到达倒料点1"; + } else if (phase == 0x0D){ + return "倒料点1倒料完毕"; + } else if (phase == 0x0F){ + return "到达倒料点2"; + } else if (phase == 0x11){ + return "倒料点2倒料完毕"; + } else if (phase == 0x13){ + return "到达放货点1"; + } else if (phase == 0x15){ + return "放货点1放货完毕"; + } else if (phase == 0x17){ + return "到达放货点2"; + } else if (phase == 0x19){ + return "放货点2放货完毕"; + } else if (phase == 0x1B){ + return "到达取货点3"; + } else if (phase == 0x1D){ + return "取货点3取货完毕"; + } else if (phase == 0x1F){ + return "到达取货点4"; + } else if (phase == 0x21){ + return "取货点4取货完毕"; + } else if (phase == 0x23){ + return "到达放货点3"; + } else if (phase == 0x25){ + return "放货点3放货完毕"; + }else if (phase == 0x27){ + return "到达放货点4"; + } else if (phase == 0x29){ + return "放货点4放货完毕"; + } else if (phase == 0x30){ + return "请求删除任务"; + } else if (phase == 0xFF){ + return "任务删除确认"; + } else if (phase == 0x64){ + return "到达位置点"; + } else if (phase == 0x65){ + return "称重就绪"; + } else if (phase == 0x2A){ + return "任务完毕"; + } + return null; + } +} diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_hr_ssx/HailiangHrSsxDefination.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_hr_ssx/HailiangHrSsxDefination.java similarity index 95% rename from wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_hr_ssx/HailiangHrSsxDefination.java rename to wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_hr_ssx/HailiangHrSsxDefination.java index 04474f63..da439352 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_hr_ssx/HailiangHrSsxDefination.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_hr_ssx/HailiangHrSsxDefination.java @@ -1,4 +1,4 @@ -package org.nl.acs.device_driver.basedriver.hailiang_hr_ssx; +package org.nl.acs.device_driver.basedriver.hailiang_old.hailiang_hr_ssx; import org.nl.acs.device.device_driver.standard_inspect.ItemDto; import org.nl.acs.device_driver.DeviceDriver; diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_hr_ssx/HailiangHrSsxDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_hr_ssx/HailiangHrSsxDeviceDriver.java similarity index 78% rename from wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_hr_ssx/HailiangHrSsxDeviceDriver.java rename to wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_hr_ssx/HailiangHrSsxDeviceDriver.java index 5d84ddce..7bec69bb 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_hr_ssx/HailiangHrSsxDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_hr_ssx/HailiangHrSsxDeviceDriver.java @@ -1,4 +1,4 @@ -package org.nl.acs.device_driver.basedriver.hailiang_hr_ssx; +package org.nl.acs.device_driver.basedriver.hailiang_old.hailiang_hr_ssx; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; @@ -28,6 +28,8 @@ import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.Device; import org.nl.acs.order.service.dto.EalingOrderDto; import org.nl.acs.order.service.dto.ProduceshiftorderDto; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; import org.nl.modules.wql.util.SpringContextHolder; import org.springframework.beans.factory.annotation.Autowired; @@ -36,7 +38,6 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.regex.Pattern; @Slf4j @Data @@ -50,6 +51,8 @@ public class HailiangHrSsxDeviceDriver extends AbstractOpcDeviceDriver implement LiKuToAcsService liKuToAcsService = SpringContextHolder.getBean(LiKuToAcsServiceImpl.class); @Autowired AcsToLiKuService acsToLiKuService = SpringContextHolder.getBean(AcsToLiKuServiceImpl.class); + @Autowired + TaskService taskServer = SpringContextHolder.getBean("taskServiceImpl"); int heartbeat = 0; int mode = 0; @@ -70,8 +73,8 @@ public class HailiangHrSsxDeviceDriver extends AbstractOpcDeviceDriver implement Boolean isonline = true; String message = null; Boolean iserror = false; - private Date instruction_require_time = new Date(); - private int instruction_require_time_out = 3000; + private Date instruction_require_time; + private int instruction_require_time_out = 30000; boolean requireSucess = false; private int instruction_finished_time_out; @@ -97,10 +100,35 @@ public class HailiangHrSsxDeviceDriver extends AbstractOpcDeviceDriver implement if (mode != last_mode) { logServer.deviceExecuteLog(this.device_code, "", "", "信号mode:" + last_mode + "->" + mode + "复位请求标记"); } - if (move != last_move){ + if (move != last_move && barcode != last_barcode){ message = null; requireSucess =false; + if (move == 1 && barcode.length() > 0){ + TaskDto vehicle_dto = taskServer.findByContainer(barcode); + if (vehicle_dto == null) { + instruction_require_time = new Date(); + } + } +// if(move ==0 && barcode.length()>0 && !requireSucess ){ +// ContainerArrivedRequest containerArrivedRequest = new ContainerArrivedRequest(); +// NodeStates nodeStates = new NodeStates(); +// containerArrivedRequest.setSlotCode(device_code); +// containerArrivedRequest.setContainerCode(barcode); +// Date date = new Date(); +// SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss"); +// nodeStates.setLastHasContainerTime(Long.parseLong(dateFormat.format(date))); +// nodeStates.setLastReadTime(Long.parseLong(dateFormat.format(date))); +// nodeStates.setLastReportTime(Long.parseLong(dateFormat.format(date))); +// Resp containerArrivedResp=acsToLiKuService.containerArrived(containerArrivedRequest); +// JSONObject response1=JSONObject.parseObject(String.valueOf(containerArrivedResp)); +// int code=response1.getInteger("code"); +// String msg=response1.getString("msg"); +// if(code == 0) { +// log.info("请求成功 请求结果{}", code,msg); +// requireSucess = true; +// } +// } } if (error != last_error) { if (error != 0) { @@ -127,25 +155,7 @@ public class HailiangHrSsxDeviceDriver extends AbstractOpcDeviceDriver implement Instruction instruction = null; List toInstructions; - if(move ==1 && barcode.length()>0 && !requireSucess ){ - ContainerArrivedRequest containerArrivedRequest=new ContainerArrivedRequest(); - NodeStates nodeStates=new NodeStates(); - containerArrivedRequest.setSlotCode(device_code); - containerArrivedRequest.setContainerCode(barcode); - Date date = new Date(); - SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss"); - nodeStates.setLastHasContainerTime(Long.parseLong(dateFormat.format(date))); - nodeStates.setLastReadTime(Long.parseLong(dateFormat.format(date))); - nodeStates.setLastReportTime(Long.parseLong(dateFormat.format(date))); - Resp containerArrivedResp=acsToLiKuService.containerArrived(containerArrivedRequest); - JSONObject response1=JSONObject.parseObject(String.valueOf(containerArrivedResp)); - int code=response1.getInteger("code"); - String msg=response1.getString("msg"); - if(code == 0) { - log.info("请求成功 请求结果{}", code,msg); - requireSucess = true; - } - } + } last_mode = mode; diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_hr_ssx/ItemProtocol.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_hr_ssx/ItemProtocol.java similarity index 72% rename from wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_hr_ssx/ItemProtocol.java rename to wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_hr_ssx/ItemProtocol.java index 54307590..93c1ea6b 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_hr_ssx/ItemProtocol.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_hr_ssx/ItemProtocol.java @@ -1,4 +1,4 @@ -package org.nl.acs.device_driver.basedriver.hailiang_hr_ssx; +package org.nl.acs.device_driver.basedriver.hailiang_old.hailiang_hr_ssx; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -11,16 +11,19 @@ import java.util.List; @Data public class ItemProtocol { public static String item_heartbeat = "heartbeat"; - public static String item_mode = "mode"; - public static String item_move = "move"; - public static String item_action = "action"; - public static String item_error = "error"; + public static String item_mode = "mode";//0-脱机、2-待机、3-电机运行 + public static String item_move = "move";//0无货 1有货 + public static String item_action = "action";//1-允许取货、2-允许放货、3-收箱完成 + public static String item_error = "error";//故障 public static String item_direction = "direction"; public static String item_is_flip = "is_flip"; public static String item_task = "task"; public static String item_barcode = "barcode"; - +// 1-请求取货(与诺宝对接输送滚筒运行) +// 2-取货完成 +// 3-请求放货 (与诺宝对接输送滚筒运行) +// 4-放货完成 public static String item_to_command = "to_command"; public static String item_to_target = "to_target"; public static String item_to_task = "to_task"; @@ -113,24 +116,22 @@ public class ItemProtocol { public static List getReadableItemDtos() { ArrayList list = new ArrayList(); - list.add(new ItemDto(item_heartbeat, "心跳", "DB600.W0")); - list.add(new ItemDto(item_mode, "工作状态", "DB600.W2", Boolean.valueOf(true))); - list.add(new ItemDto(item_move, "光电开关信号", "DB600.W4")); - list.add(new ItemDto(item_action, "取放信号", "DB600.W6")); - list.add(new ItemDto(item_direction, "电机方向", "DB600.W8")); - list.add(new ItemDto(item_is_flip, "是否翻转", "DB600.W10")); - list.add(new ItemDto(item_error, "报警信号", "DB600.W12")); - list.add(new ItemDto(item_task, "任务号", "DB600.D14")); + list.add(new ItemDto(item_heartbeat, "心跳", "DB0.W0")); + list.add(new ItemDto(item_mode, "工作模式", "DB0.W2", Boolean.valueOf(true))); + list.add(new ItemDto(item_move, "光电信号", "DB0.W4")); + list.add(new ItemDto(item_action, "动作信号", "DB600.W6")); + list.add(new ItemDto(item_direction, "是否满料", "DB0.W8")); + list.add(new ItemDto(item_is_flip, "故障", "DB0.W10")); + list.add(new ItemDto(item_task, "任务号", "DB0.D12")); list.add(new ItemDto(item_barcode, "条码", "DB600.STRING18.20")); return list; } public static List getWriteableItemDtos() { ArrayList list = new ArrayList(); - list.add(new ItemDto(item_to_command, "下发作业命令", "DB610.W2", Boolean.valueOf(true))); - list.add(new ItemDto(item_to_target, "下发目标站", "DB610.W4")); - list.add(new ItemDto(item_to_is_flip, "下发是否翻转", "DB610.W6")); - list.add(new ItemDto(item_to_task, "下发任务号", "DB610.D8")); + list.add(new ItemDto(item_to_command, "下发命令", "DB1000.W1000", Boolean.valueOf(true))); + list.add(new ItemDto(item_to_target, "下发目标站", "DB1000.W1002")); + list.add(new ItemDto(item_to_task, "下发任务号", "DB1000.D1004")); list.add(new ItemDto(item_to_barcode, "下发条码", "DB610.STRING12.20")); return list; } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_with_station/WithStationDefination.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_with_station/WithStationDefination.java new file mode 100644 index 00000000..b364ca8e --- /dev/null +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_with_station/WithStationDefination.java @@ -0,0 +1,51 @@ +package org.nl.acs.device_driver.basedriver.hailiang_old.hailiang_with_station; + +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.DeviceDriverDefination; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceType; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * 说明:关联站点驱动 + */ +@Service +public class WithStationDefination implements DeviceDriverDefination { + @Override + public String getDriverCode() { + return "hailiang_with_station"; + } + + @Override + public String getDriverName() { + return "关联驱动"; + } + + @Override + public String getDriverDescription() { + return "关联驱动"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new WithStationDeviceDriver()).setDevice(device).setDriverDefination(this); + + } + + @Override + public Class getDeviceDriverType() { + return WithStationDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.conveyor); + return types; + } + + +} diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_with_station/WithStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_with_station/WithStationDeviceDriver.java new file mode 100644 index 00000000..b0f93e3d --- /dev/null +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_old/hailiang_with_station/WithStationDeviceDriver.java @@ -0,0 +1,307 @@ +package org.nl.acs.device_driver.basedriver.hailiang_old.hailiang_with_station; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.acsEnum.InstActionEnum; +import org.nl.acs.acsEnum.StatusEnum; +import org.nl.acs.agv.server.NDCAgvService; +import org.nl.acs.auto.run.OneNDCSocketConnectionAutoRun; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.ScannerDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_old.hailiang_hr_ssx.HailiangHrSsxDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_old.hailiang_old_package_ssx.HailiangLetteringPackageSsxDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.IssuedDeviceOrderInfo; +import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; +import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.ext.wms.service.AcsToWmsService; +import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; +import org.nl.acs.history.service.DeviceErrorLogService; +import org.nl.acs.history.service.impl.DeviceErrorLogServiceImpl; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.instruction.service.dto.Instruction; +import org.nl.acs.log.service.DeviceExecuteLogService; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.route.service.RouteLineService; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.modules.wql.util.SpringContextHolder; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.*; + +/** + * 关联驱动 + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class WithStationDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor { + @Autowired + DeviceAppService deviceAppservice = SpringContextHolder.getBean(DeviceAppService.class); + @Autowired + InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); + @Autowired + DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); + @Autowired + RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); + @Autowired + TaskService taskServer = SpringContextHolder.getBean("taskServiceImpl"); + @Autowired + RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class); + @Autowired + AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); + @Autowired + DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class); + @Autowired + NDCAgvService agvService = SpringContextHolder.getBean(NDCAgvService.class); + @Autowired + DeviceErrorLogService deviceErrorLogService = SpringContextHolder.getBean(DeviceErrorLogServiceImpl.class); + + + Integer hasGoods = 0; + int error = 0; + Boolean iserror = false; + Boolean islock = false; + + int branchProtocol = 0; + int last_branchProtocol = 0; + //是否需要输入物料 + String input_material = "0"; + //备注 + String remark = ""; + //数量 + String qty = ""; + //批次 + String batch = ""; + //物料 + String material = ""; + //目标点位 + String purpose = ""; + + //上次指令 + Instruction last_inst = null; + + boolean requireSucess = false; + + //触摸屏手动触发任务 + private Boolean is_has_task = false; + + //申请搬运任务 + private Boolean apply_handling = false; + //申请物料 + private Boolean apply_material = false; + + // 1取货完成 2放货完成 3进入区域 4离开区域 + private int flag; + + //人工确认信号 默认0 agv到达后请求置1 等人工确认后变为2 反馈agv后继续为0 + private int manua_confirm = 0; + + String device_code = null; + String container; + String container_type_desc; + String last_container_type_desc; + String last_container; + private Date instruction_require_time = new Date(); + private Date instruction_finished_time = new Date(); + + private int instruction_require_time_out = 30000; + + String message; + + // 1 上位系统允许进入 2 上位系统允许离开 + int option = 0; + + //agv请求当前信息 + private int agvphase = 0; + private int index = 0; + private Instruction inst = null; + + public synchronized void set(int agvphase, int index, Instruction inst) { + this.agvphase = agvphase; + this.index = index; + this.inst = inst; + logServer.deviceExecuteLog(device_code, "", "", "设置phase值--->" + agvphase + ",index值--->" + index + ",指令信息关联编号--->" + (inst == null ? "" : inst.getLink_num())); + } + + int mode = 2; + + int move; + + @Override + public void execute() { + hasGoods = this.getDevice().getHas_goods(); + batch = this.getDevice().getBatch(); + device_code = this.getDeviceCode(); + + if (agvphase == 0x03) { + if (ObjectUtil.isNotEmpty(inst)) { + inst.setExecute_status(InstActionEnum.EXECUTE_TO_GET.getCode()); + instructionService.update(inst); + byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); + OneNDCSocketConnectionAutoRun.write(data); + this.set(0, 0, null); + } + } + + if (agvphase == 0x05) { + if (ObjectUtil.isNotEmpty(inst)) { + inst.setExecute_status(InstActionEnum.EXECUTE_GET_FINISH.getCode()); + instructionService.update(inst); + byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); + OneNDCSocketConnectionAutoRun.write(data); + this.set(0, 0, null); + } + } + + if (agvphase == 0x07) { + if (ObjectUtil.isNotEmpty(inst)) { + inst.setExecute_status(InstActionEnum.EXECUTE_TO_PUT_FALL_SEND_FULL.getCode()); + instructionService.update(inst); + byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); + OneNDCSocketConnectionAutoRun.write(data); + this.set(0, 0, null); + } + } + + if (agvphase == 0x09) { + if (ObjectUtil.isNotEmpty(inst)) { + inst.setExecute_status(InstActionEnum.EXECUTE_PUT_FALL_SEND_FULL_FINISH.getCode()); + instructionService.update(inst); + byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); + OneNDCSocketConnectionAutoRun.write(data); + this.set(0, 0, null); + } + } + + //取关联设备 list + //遍历 + List hiaRouDeviceCodeList = this.getExtraDeviceCodes("link_device_code"); + for(int i=0;i getExtraDeviceCodes(String extraName) { + String extraValue = (String) this.getDevice().getExtraValue().get(extraName); + String devices1 = extraValue.substring(1, extraValue.length() - 1); + List devicesList = new ArrayList<>(); + String[] devices = devices1.split(","); + for (int i = 0; i < devices.length; i++) { + String s = devices[i].replace("\"", "").replace("\"", ""); + devicesList.add(s); + } + return devicesList; + } + + @Override + public JSONObject getDeviceStatusName() { + JSONObject jo = new JSONObject(); + String mode = ""; + String action = ""; + String move = ""; + String option = ""; + if (this.getOption() == 0) { + option = "禁止进出"; + } else if (this.getOption() == 1) { + option = "允许进入"; + } else if (this.getOption() == 2) { + option = "允许离开"; + } + + if (this.getMode() == 0) { + mode = "未联机"; + } else if (this.getMode() == 1) { + mode = "单机"; + } else if (this.getMode() == 2) { + mode = "联机"; + } else if (this.getMode() == 3) { + mode = "运行中"; + } + + if (this.getMove() == 0) { + move = "无货"; + jo.put("hasGoods", false); + } else if (this.getMove() == 1) { + move = "有货"; + jo.put("hasGoods", true); + } else if (this.getMove() == 2) { + move = "有托盘有货"; + jo.put("hasGoods", true); + } + jo.put("device_name", this.getDevice().getDevice_name()); + jo.put("mode", mode); + jo.put("move", move); + jo.put("action", action); + jo.put("isOnline", true); + jo.put("error", this.getError()); + jo.put("isError", this.getIserror()); + jo.put("option", option); + jo.put("is_click", true); + return jo; + } + + + @Override + public void setDeviceStatus(JSONObject data) { + String flag = data.getString("option"); + if (StrUtil.isNotEmpty(flag)) { + option = Integer.parseInt(flag); + } + } +}