diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java b/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java index 2ec4619..fa38115 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java @@ -81,4 +81,6 @@ public interface XianGongAgvService { public JSONObject createOrederData(Instruction inst, String type); + public JSONArray blockGroupStatus(JSONObject param); + } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java index cba57e9..0b1e4e2 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java @@ -114,59 +114,20 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { @Override public HttpResponse queryXZAgvDeviceStatus() { - if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), "1")) { + if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue().toString(), "1")) { String agvurl = paramService.findByCode(AcsConfig.AGVURL).getValue(); String agvport = paramService.findByCode(AcsConfig.AGVPORT).getValue(); - String agvurl1 = agvurl + ":" + agvport + "/api/route/vehicles"; - String agvurl2 = agvurl + ":" + agvport + "/api/route/vehicleDetails"; - - HttpResponse result = HttpRequest.get(agvurl1) - .timeout(20000)//超时,毫秒 - .execute(); + agvurl = agvurl + ":" + agvport + "/robotsStatus"; - - HttpResponse result2 = HttpRequest.get(agvurl2) + HttpResponse result = HttpRequest.get(agvurl) .timeout(20000)//超时,毫秒 .execute(); - System.out.println("查询agv状态数据:" + result.body()); - if (result.getStatus() == 200) { - JSONArray ja = (JSONArray) JSONArray.parse(result.body()); - - for (int i = 0; i < ja.size(); i++) { - JSONObject jo = (JSONObject) ja.get(i); - String name = jo.getString("name"); - String state = jo.getString("state"); - String energyLevel = jo.getString("energyLevel"); - String transportOrder = jo.getString("transportOrder"); - JSONObject detailjo = (JSONObject) JSONObject.parse(result2.body()); - JSONObject item = (JSONObject) detailjo.get(name); - String x = item.getString("x"); - String y = item.getString("y"); - String angle = item.getString("angle"); - AgvDto dto = new AgvDto(); - dto.setName(name); - dto.setEnergyLevel(energyLevel); - dto.setState(state); - dto.setTransportOrder(transportOrder); - dto.setPositionAngle(angle); - dto.setPositionX(x); - dto.setPositionY(y); - if (AGVDeviceStatus.containsKey(name)) { - AGVDeviceStatus.remove(name); - AGVDeviceStatus.put(name, dto); - } else { - AGVDeviceStatus.put(name, dto); - } - } - } return result; } else { return null; } - - } @LokiLog(type = LokiLogType.AGV) @@ -488,6 +449,25 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { return orderjo; } + @Override + @LokiLog(type = LokiLogType.AGV) + public JSONArray blockGroupStatus(JSONObject param) { + if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), "1")) { + String agvurl = paramService.findByCode(AcsConfig.AGVURL).getValue(); + String agvport = paramService.findByCode(AcsConfig.AGVPORT).getValue(); + + agvurl = agvurl + ":" + agvport + "/transportOrders"; + + HttpResponse result = HttpRequest.get(agvurl) + .body(String.valueOf(param))//表单内容 + .timeout(20000)//超时,毫秒 + .execute(); + return JSONArray.parseArray(result.body()); + } else { + return null; + } + } + /** * 返回一个点位操作子任务 先知使用 diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java b/acs/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java index 770f157..1cdf4f4 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java @@ -21,7 +21,11 @@ public enum DriverTypeEnum { INSPECT_CONVEYOR_MONITOR(6, "standard_conveyor_monitor", "标准版-输送机-监控点", "conveyor"), - MAGANG_CONVEYOR_CONTROL(7, "magang_conveyor_control", "马钢-输送机", "conveyor"); + MAGANG_CONVEYOR_CONTROL(7, "magang_conveyor_control", "马钢-输送机", "conveyor"), + + MAGANG_AGV(8, "magang_agv", "马钢-agv", "agv"), + + MAGANG_LED(9, "magang_led", "马钢-led", "三色灯"); //驱动索引 private int index; diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/agv/ItemProtocol.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/agv/ItemProtocol.java new file mode 100644 index 0000000..ba00d70 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/agv/ItemProtocol.java @@ -0,0 +1,73 @@ +package org.nl.acs.device_driver.agv; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Data +public class ItemProtocol { + + + public static String item_status = "status"; + public static String item_type = "type"; + public static String item_x_coordinate = "x_coordinate"; + public static String item_y_coordinate = "y_coordinate"; + + + private MaGangAgvDeviceDriver driver; + + public ItemProtocol(MaGangAgvDeviceDriver driver) { + this.driver = driver; + } + public int getStatus() { + return this.getOpcIntegerValue(item_status); + } + public int getType() { + return this.getOpcIntegerValue(item_type); + } + public int getX_coordinate() { + return this.getOpcIntegerValue(item_x_coordinate); + } + public int getY_coordinate() { + return this.getOpcIntegerValue(item_y_coordinate); + } + + Boolean isonline; + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegeregerValue(protocol); + if (value == null) { + setIsonline(false); + } else { + setIsonline(true); + return value; + } + return 0; + + } + + public static List getReadableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_status, "AGV状态", "DB620.W0")); + list.add(new ItemDto(item_type, "AGV任务类型", "DB620.W2")); + list.add(new ItemDto(item_x_coordinate, "AGVx坐标", "DB620.W4")); + list.add(new ItemDto(item_y_coordinate, "AGVy坐标", "DB620.W6")); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_status, "AGV状态", "DB620.W0")); + list.add(new ItemDto(item_type, "AGV任务类型", "DB620.W2")); + list.add(new ItemDto(item_x_coordinate, "AGVx坐标", "DB620.W4")); + list.add(new ItemDto(item_y_coordinate, "AGVy坐标", "DB620.W6")); + return list; + } + + +} + diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/agv/MaGangAgvDefination.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/agv/MaGangAgvDefination.java new file mode 100644 index 0000000..c331f1e --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/agv/MaGangAgvDefination.java @@ -0,0 +1,60 @@ +package org.nl.acs.device_driver.agv; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceType; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * 马钢agv + */ +@Service +public class MaGangAgvDefination implements OpcDeviceDriverDefination { + @Override + public String getDriverCode() { + return "magang_agv"; + } + + @Override + public String getDriverName() { + return "马钢AGV"; + } + + @Override + public String getDriverDescription() { + return "马钢AGV"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new MaGangAgvDeviceDriver()).setDevice(device).setDriverDefination(this); + } + + @Override + public Class getDeviceDriverType() { + return MaGangAgvDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.conveyor); + return types; + } + + @Override + public List getReadableItemDtos() { + return ItemProtocol.getReadableItemDtos(); + } + + @Override + public List getWriteableItemDtos() { + return ItemProtocol.getWriteableItemDtos(); + } + +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/agv/MaGangAgvDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/agv/MaGangAgvDeviceDriver.java new file mode 100644 index 0000000..879679c --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/agv/MaGangAgvDeviceDriver.java @@ -0,0 +1,158 @@ +package org.nl.acs.device_driver.agv; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.agv.server.AgvService; +import org.nl.acs.device.device_driver.standard_inspect.ReadUtil; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; +import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.ext.wms.service.AcsToWmsService; +import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; +import org.nl.acs.instruction.service.InstructionService; +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.modules.system.service.ParamService; +import org.nl.modules.wql.util.SpringContextHolder; +import org.openscada.opc.lib.da.Server; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.*; + +/** + * 马钢agv + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class MaGangAgvDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor { + + protected ItemProtocol itemProtocol = new ItemProtocol(this); + @Autowired + DeviceAppService deviceAppservice = SpringContextHolder.getBean(DeviceAppService.class); + @Autowired + InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); + @Autowired + DeviceService deviceservice = SpringContextHolder.getBean(DeviceService.class); + @Autowired + TaskService taskserver = SpringContextHolder.getBean(TaskService.class); + @Autowired + RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class); + @Autowired + AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); + @Autowired + ParamService paramService = SpringContextHolder.getBean(ParamService.class); + @Autowired + DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class); + @Autowired + AgvService agvService = SpringContextHolder.getBean(AgvService.class); + + private Date instruction_require_time = new Date(); + private Date instruction_finished_time = new Date(); + private Date instruction_apply_time = new Date(); + private int instruction_require_time_out = 3000; + + //agv工作状态 + int status = 0; + int last_status = 0; + + //AGV任务类型 + int type = 0; + int last_type = 0; + + //x坐标 + int x_coordinate = 0; + int last_x_coordinate = 0; + + //y坐标 + int y_coordinate = 0; + int last_y_coordinate = 0; + + Boolean isonline = true; + Boolean iserror = false; + + //1-执行任务;2-取货完成;3-放货完成; + int flag; + + + String device_code; + + @Override + public Device getDevice() { + return this.device; + } + + //请求成功标记 + Boolean requireSucess = false; + + @Override + public void execute() throws Exception { + String message = null; + device_code = this.getDeviceCode(); + status = this.itemProtocol.getStatus(); + type = this.itemProtocol.getType(); + x_coordinate = this.itemProtocol.getX_coordinate(); + y_coordinate = this.itemProtocol.getY_coordinate(); + } + + + protected void thingToNothing() { + + } + + + public void writing(String param, String value) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + param; + String opcservcerid = this.getDevice().getOpc_server_id(); + Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, value); + ReadUtil.write(itemMap, server); + } + + + @Override + public JSONObject getDeviceStatusName() { + JSONObject jo = new JSONObject(); + String status = ""; + String type = ""; + if (this.getStatus() == 1) { + status = "工作中"; + } else if (this.getStatus() == 2) { + status = "充电中"; + } else if (this.getStatus() == 3) { + status = "故障"; + } else if (this.getStatus() == 4) { + status = "休息中"; + } + + if (this.getType() == 1) { + type = "5#镀锌送样"; + } else if (this.getType() == 2) { + type = "1#连退送样"; + } else if (this.getType() == 3) { + type = "2#连退送样"; + } else if (this.getType() == 4) { + type = "重卷送样"; + } + + jo.put("device_name", this.getDevice().getDevice_name()); + jo.put("type", type); + jo.put("status", status); + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { + + } +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/led/ItemProtocol.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/led/ItemProtocol.java new file mode 100644 index 0000000..6a37192 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/led/ItemProtocol.java @@ -0,0 +1,56 @@ +package org.nl.acs.device_driver.led; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Data +public class ItemProtocol { + + + public static String item_D01 = "D01"; + + + private MaGangLedDeviceDriver driver; + + public ItemProtocol(MaGangLedDeviceDriver driver) { + this.driver = driver; + } + + public int getD01() { + return this.getOpcIntegerValue(item_D01); + } + + Boolean isonline; + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegeregerValue(protocol); + if (value == null) { + setIsonline(false); + } else { + setIsonline(true); + return value; + } + return 0; + + } + + public static List getReadableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_D01, "LED", "00017", Boolean.valueOf(true))); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_D01, "LED", "00017", Boolean.valueOf(true))); + return list; + } + + +} + diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/led/MaGangLedDefination.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/led/MaGangLedDefination.java new file mode 100644 index 0000000..370e945 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/led/MaGangLedDefination.java @@ -0,0 +1,60 @@ +package org.nl.acs.device_driver.led; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceType; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * 马钢led + */ +@Service +public class MaGangLedDefination implements OpcDeviceDriverDefination { + @Override + public String getDriverCode() { + return "magang_led"; + } + + @Override + public String getDriverName() { + return "马钢led"; + } + + @Override + public String getDriverDescription() { + return "马钢led"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new MaGangLedDeviceDriver()).setDevice(device).setDriverDefination(this); + } + + @Override + public Class getDeviceDriverType() { + return MaGangLedDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.conveyor); + return types; + } + + @Override + public List getReadableItemDtos() { + return ItemProtocol.getReadableItemDtos(); + } + + @Override + public List getWriteableItemDtos() { + return ItemProtocol.getWriteableItemDtos(); + } + +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/led/MaGangLedDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/led/MaGangLedDeviceDriver.java new file mode 100644 index 0000000..5d56fac --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/led/MaGangLedDeviceDriver.java @@ -0,0 +1,135 @@ +package org.nl.acs.device_driver.led; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.agv.server.AgvService; +import org.nl.acs.device.device_driver.standard_inspect.ReadUtil; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; +import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.ext.wms.service.AcsToWmsService; +import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; +import org.nl.acs.instruction.service.InstructionService; +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.modules.system.service.ParamService; +import org.nl.modules.wql.util.SpringContextHolder; +import org.openscada.opc.lib.da.Server; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * 马钢led + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class MaGangLedDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor { + + protected ItemProtocol itemProtocol = new ItemProtocol(this); + @Autowired + DeviceAppService deviceAppservice = SpringContextHolder.getBean(DeviceAppService.class); + @Autowired + InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); + @Autowired + DeviceService deviceservice = SpringContextHolder.getBean(DeviceService.class); + @Autowired + TaskService taskserver = SpringContextHolder.getBean(TaskService.class); + @Autowired + RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class); + @Autowired + AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); + @Autowired + ParamService paramService = SpringContextHolder.getBean(ParamService.class); + @Autowired + DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class); + @Autowired + AgvService agvService = SpringContextHolder.getBean(AgvService.class); + + private Date instruction_require_time = new Date(); + private Date instruction_finished_time = new Date(); + private Date instruction_apply_time = new Date(); + private int instruction_require_time_out = 3000; + + //agv工作状态 + int D01 = 0; + int last_D01 = 0; + + Boolean isonline = true; + Boolean iserror = false; + + //1-执行任务;2-取货完成;3-放货完成; + int flag; + + + String device_code; + + @Override + public Device getDevice() { + return this.device; + } + + //请求成功标记 + Boolean requireSucess = false; + + @Override + public void execute() throws Exception { + String message = null; + device_code = this.getDeviceCode(); + D01 = this.itemProtocol.getD01(); + } + + + protected void thingToNothing() { + + } + + + public void writing(String param, int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + param; + String opcservcerid = this.getDevice().getOpc_server_id(); + Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, command); + ReadUtil.write(itemMap, server); + } + + public void writing(String param, String value) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + param; + String opcservcerid = this.getDevice().getOpc_server_id(); + Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, value); + ReadUtil.write(itemMap, server); + } + + + @Override + public JSONObject getDeviceStatusName() { + JSONObject jo = new JSONObject(); + String status = ""; + String type = ""; + jo.put("device_name", this.getDevice().getDevice_name()); + jo.put("type", type); + jo.put("status", status); + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { + + } +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/maGang/ItemProtocol.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/maGang/ItemProtocol.java index 5864b42..8fbb5c1 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/maGang/ItemProtocol.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/maGang/ItemProtocol.java @@ -18,6 +18,7 @@ public class ItemProtocol { public static String item_error = "error"; + public static String item_to_heartbeat = "to_heartbeat"; public static String item_to_command = "to_command"; @@ -73,6 +74,7 @@ public class ItemProtocol { public static List getWriteableItemDtos() { ArrayList list = new ArrayList(); + list.add(new ItemDto(item_to_heartbeat, "反馈心跳", "DB601.B0")); list.add(new ItemDto(item_to_command, "下发命令", "DB601.W2")); return list; } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/maGang/MaGangConveyorDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/maGang/MaGangConveyorDeviceDriver.java index cc50f44..349bae6 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/maGang/MaGangConveyorDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/maGang/MaGangConveyorDeviceDriver.java @@ -64,8 +64,12 @@ public class MaGangConveyorDeviceDriver extends AbstractOpcDeviceDriver implemen private Date instruction_require_time = new Date(); private Date instruction_finished_time = new Date(); private Date instruction_apply_time = new Date(); + private Date feedHeartBeatTime = new Date(); + private int feedHeartBeatTimeOut = 30000; private int instruction_require_time_out = 3000; + int feedHeartbeat = 0; + int last_feedHeartbeat = 0; int heartbeat = 0; //工作模式 int mode = 0; @@ -109,6 +113,20 @@ public class MaGangConveyorDeviceDriver extends AbstractOpcDeviceDriver implemen move = this.itemProtocol.getItem_move(); action = this.itemProtocol.getItem_action(); error = this.itemProtocol.getItem_error(); + + String inspect_in_stocck = String.valueOf(this.getDevice().getExtraValue().get("inspect_in_stocck")); + if (StrUtil.isNotEmpty(inspect_in_stocck) && !StrUtil.equals(inspect_in_stocck, "null")) { + Date date = new Date(); + if (date.getTime() - this.feedHeartBeatTime.getTime() >= (long) this.feedHeartBeatTimeOut) { + String feedHeart = "0"; + if (last_feedHeartbeat == 0) { + feedHeart = "1"; + } + this.feedHeartBeatTime = date; + this.writing("to_heartbeat", feedHeart); + last_feedHeartbeat = Integer.parseInt(feedHeart); + } + } if (mode != last_mode) { if (mode == 3) { this.setRequireSucess(false); @@ -261,6 +279,16 @@ public class MaGangConveyorDeviceDriver extends AbstractOpcDeviceDriver implemen ReadUtil.write(itemMap, server); } + public void writing(String type, String value) { + String param = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + type; + String opcservcerid = this.getDevice().getOpc_server_id(); + Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(param, value); + ReadUtil.write(itemMap, server); + } + @Override public JSONObject getDeviceStatusName() { JSONObject jo = new JSONObject(); diff --git a/acs/nladmin-system/src/main/java/org/nl/hand/amb/rest/HFHandController.java b/acs/nladmin-system/src/main/java/org/nl/hand/amb/rest/HFHandController.java index a199274..eb493d7 100644 --- a/acs/nladmin-system/src/main/java/org/nl/hand/amb/rest/HFHandController.java +++ b/acs/nladmin-system/src/main/java/org/nl/hand/amb/rest/HFHandController.java @@ -39,6 +39,15 @@ public class HFHandController { return new ResponseEntity<>(HandService.queryArea(null), HttpStatus.OK); } + @PostMapping("/queryDevice") + @Log("查询区域点位") + @ApiOperation("查询区域点位") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity queryDevice() { + return new ResponseEntity<>(HandService.queryPoint(), HttpStatus.OK); + } + @PostMapping("/point") @Log("查询设备编号及状态") @ApiOperation("查询设备编号及状态") @@ -50,15 +59,15 @@ public class HFHandController { return new ResponseEntity<>(HandService.queryPointByArea(region), HttpStatus.OK); } - @PostMapping("/queryDevice") - @Log("查询设备起点和终点") - @ApiOperation("查询设备起点和终点") - @SaIgnore - //@PreAuthorize("@el.check('sect:list')") - //@RequestBody JSONObject json - public ResponseEntity queryDevice() { - return new ResponseEntity<>(HandService.queryDevice(), HttpStatus.OK); - } +// @PostMapping("/queryDevice") +// @Log("查询设备起点和终点") +// @ApiOperation("查询设备起点和终点") +// @SaIgnore +// //@PreAuthorize("@el.check('sect:list')") +// //@RequestBody JSONObject json +// public ResponseEntity queryDevice() { +// return new ResponseEntity<>(HandService.queryDevice(), HttpStatus.OK); +// } @PostMapping("/point/storage") @Log("查询设备扩展属性") diff --git a/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/HFHandService.java b/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/HFHandService.java index 9fb9388..ebbe5a0 100644 --- a/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/HFHandService.java +++ b/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/HFHandService.java @@ -2,6 +2,8 @@ package org.nl.hand.amb.service; +import com.alibaba.fastjson.JSONObject; + import java.util.Map; /** @@ -119,4 +121,10 @@ public interface HFHandService { * @return Map */ Map queryDevice(); + + /** + * 查询区域点位 + * @return json + */ + JSONObject queryPoint(); } diff --git a/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/impl/HFHandServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/impl/HFHandServiceImpl.java index f90fa6a..502f0b6 100644 --- a/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/impl/HFHandServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/impl/HFHandServiceImpl.java @@ -70,6 +70,25 @@ public class HFHandServiceImpl implements HFHandService { return jo; } + @Override + public JSONObject queryPoint() { + JSONObject result = new JSONObject(); + // 1.查询区域 + JSONArray regionArr = WQL.getWO("QJN_QUERY001").addParam("flag", "1").process().getResultJSONArray(0); + // 2.根据区域查询对应点位 + JSONObject resultJson = new JSONObject(); + for (int i = 0; i < regionArr.size(); i++) { + JSONObject jsonRegion = regionArr.getJSONObject(i); + JSONArray pointArr = WQL.getWO("QJN_QUERY001").addParam("flag", "6").addParam("region_id", jsonRegion.getString("region_code")).process().getResultJSONArray(0); + jsonRegion.put("deviceArr", pointArr); + } + resultJson.put("regionja", regionArr); + result.put("result", resultJson); + result.put("code", "1"); + result.put("desc", "查询成功"); + return result; + } + @Override public Map queryPointByArea(String dict_id) { JSONArray resultArr = new JSONArray(); diff --git a/acs/nladmin-system/src/main/java/org/nl/hand/amb/wql/QJN_QUERY001.wql b/acs/nladmin-system/src/main/java/org/nl/hand/amb/wql/QJN_QUERY001.wql index 2f2e235..469da09 100644 --- a/acs/nladmin-system/src/main/java/org/nl/hand/amb/wql/QJN_QUERY001.wql +++ b/acs/nladmin-system/src/main/java/org/nl/hand/amb/wql/QJN_QUERY001.wql @@ -19,6 +19,7 @@ 输入.start_point TYPEAS s_string 输入.next_point TYPEAS s_string 输入.detail_id TYPEAS s_string + 输入.region_id TYPEAS s_string @@ -203,3 +204,22 @@ ENDSELECT ENDQUERY ENDIF + + IF 输入.flag = "6" + QUERY + SELECT + device_id, + device_code, + device_name, + seq_num + FROM + acs_device + WHERE + is_config = 'true' + AND is_delete = '0' + OPTION 输入.region_id <> "" + region = 输入.region_id + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/QueryXZAgvDeviceStatus.java b/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/QueryXZAgvDeviceStatus.java new file mode 100644 index 0000000..361fcfa --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/QueryXZAgvDeviceStatus.java @@ -0,0 +1,134 @@ +package org.nl.modules.quartz.task; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.agv.server.XianGongAgvService; +import org.nl.acs.device_driver.agv.MaGangAgvDeviceDriver; +import org.nl.acs.device_driver.led.MaGangLedDeviceDriver; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.instruction.service.dto.Instruction; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceAppService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 查询先工AGV设备状态 + */ +@Slf4j +@Component +public class QueryXZAgvDeviceStatus { + + @Autowired + InstructionService instructionService; + + @Autowired + XianGongAgvService agvService; + + @Autowired + DeviceAppService deviceAppService; + + + public void run() { + try { + HttpResponse response = agvService.queryXZAgvDeviceStatus(); + if (ObjectUtil.isNotEmpty(response)) { + if (response.getStatus() == 200) { + JSONObject body = JSONObject.parseObject(response.body()); + JSONArray ja = body.getJSONArray("report"); + for (int i = 0; i < ja.size(); i++) { + JSONObject jo = ja.getJSONObject(i); + //机器人编码 + String agv_code = jo.getString("uuid"); + //机器人详细状态信息 + JSONObject rbk_report = jo.getJSONObject("rbk_report"); + //是否正在充电 + Boolean charging = rbk_report.getBoolean("charging"); + //是否正在执行任务 + Boolean procBusiness = jo.getBoolean("procBusiness"); + //agv是否故障 + Boolean is_error = jo.getBoolean("is_error"); + //执行运单信息 + JSONObject current_order = jo.getJSONObject("current_order"); + String inst_code = current_order.getString("id"); + String task_type = "0"; + if (StrUtil.isNotEmpty(inst_code)) { + Instruction inst = instructionService.findByCodeFromCache(inst_code); + //任务类型 + task_type = inst.getInstruction_type(); + } + //x坐标 + int x = Double.valueOf(rbk_report.getString("x")).intValue(); + //y坐标 + int y = Double.valueOf(rbk_report.getString("y")).intValue(); + String status = "0"; + if (procBusiness) { + //工作中 + status = "1"; + } else { + if (charging) { + //充电中 + status = "2"; + } else { + if (is_error) { + //故障 + status = "3"; + } else { + //休息中 + status = "4"; + } + } + } + Device device = deviceAppService.findDeviceByCode(agv_code); + MaGangAgvDeviceDriver maGangAgvDeviceDriver; + if (device.getDeviceDriver() instanceof MaGangAgvDeviceDriver) { + maGangAgvDeviceDriver = (MaGangAgvDeviceDriver) device.getDeviceDriver(); + maGangAgvDeviceDriver.writing("status", status); + maGangAgvDeviceDriver.writing("type", task_type); + maGangAgvDeviceDriver.writing("x_coordinate", String.valueOf(x)); + maGangAgvDeviceDriver.writing("y_coordinate", String.valueOf(y)); + } + } + } + } + } catch (Exception e) { + + } + + try { + JSONObject map = new JSONObject(); + JSONArray blocks = new JSONArray(); + map.put("blockGroup",blocks); + JSONArray jsonArray = agvService.blockGroupStatus(map); + if (ObjectUtil.isNotEmpty(jsonArray)){ + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + Boolean status = jsonObject.getBoolean("status"); + if (status){ + String name = jsonObject.getString("name"); + Device device = deviceAppService.findDeviceByCode(name); + MaGangLedDeviceDriver maGangLedDeviceDriver; + if (device.getDeviceDriver() instanceof MaGangLedDeviceDriver){ + maGangLedDeviceDriver = (MaGangLedDeviceDriver) device.getDeviceDriver(); + maGangLedDeviceDriver.writing("D01","1"); + } + }else { + String name = jsonObject.getString("name"); + Device device = deviceAppService.findDeviceByCode(name); + MaGangLedDeviceDriver maGangLedDeviceDriver; + if (device.getDeviceDriver() instanceof MaGangLedDeviceDriver){ + maGangLedDeviceDriver = (MaGangLedDeviceDriver) device.getDeviceDriver(); + maGangLedDeviceDriver.writing("D01","0"); + } + } + } + } + }catch (Exception e){ + + } + } +} diff --git a/acs/nladmin-ui/src/views/acs/device/config.vue b/acs/nladmin-ui/src/views/acs/device/config.vue index c9cf348..a4f1807 100644 --- a/acs/nladmin-ui/src/views/acs/device/config.vue +++ b/acs/nladmin-ui/src/views/acs/device/config.vue @@ -86,6 +86,8 @@ import haokai_auto_conveyor from '@/views/acs/device/driver/haokai_auto_conveyor import cargo_lift_conveyor from '@/views/acs/device/driver/cargo_lift_conveyor' import empty_vehicle_stacking_position from '@/views/acs/device/driver/empty_vehicle_stacking_position' import magang_conveyor_control from '@/views/acs/device/driver/magang_conveyor_control' +import magang_agv from '@/views/acs/device/driver/magang_agv' +import magang_led from '@/views/acs/device/driver/magang_led' export default { name: 'DeviceConfig', @@ -102,7 +104,9 @@ export default { haokai_auto_conveyor, cargo_lift_conveyor, empty_vehicle_stacking_position, - magang_conveyor_control + magang_conveyor_control, + magang_agv, + magang_led }, dicts: ['device_type'], mixins: [crud], diff --git a/acs/nladmin-ui/src/views/acs/device/driver/magang_agv.vue b/acs/nladmin-ui/src/views/acs/device/driver/magang_agv.vue new file mode 100644 index 0000000..8b04f82 --- /dev/null +++ b/acs/nladmin-ui/src/views/acs/device/driver/magang_agv.vue @@ -0,0 +1,455 @@ + + + + + diff --git a/acs/nladmin-ui/src/views/acs/device/driver/magang_led.vue b/acs/nladmin-ui/src/views/acs/device/driver/magang_led.vue new file mode 100644 index 0000000..b32cd7c --- /dev/null +++ b/acs/nladmin-ui/src/views/acs/device/driver/magang_led.vue @@ -0,0 +1,497 @@ + + + + +