更新
This commit is contained in:
@@ -81,4 +81,6 @@ public interface XianGongAgvService {
|
||||
|
||||
public JSONObject createOrederData(Instruction inst, String type);
|
||||
|
||||
public JSONArray blockGroupStatus(JSONObject param);
|
||||
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
agvurl = agvurl + ":" + agvport + "/robotsStatus";
|
||||
|
||||
HttpResponse result = HttpRequest.get(agvurl1)
|
||||
HttpResponse result = HttpRequest.get(agvurl)
|
||||
.timeout(20000)//超时,毫秒
|
||||
.execute();
|
||||
|
||||
|
||||
HttpResponse result2 = HttpRequest.get(agvurl2)
|
||||
.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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 返回一个点位操作子任务 先知使用
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<ItemDto> 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<ItemDto> 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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<? extends DeviceDriver> getDeviceDriverType() {
|
||||
return MaGangAgvDeviceDriver.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DeviceType> getFitDeviceTypes() {
|
||||
List<DeviceType> types = new LinkedList();
|
||||
types.add(DeviceType.conveyor);
|
||||
return types;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ItemDto> getReadableItemDtos() {
|
||||
return ItemProtocol.getReadableItemDtos();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ItemDto> getWriteableItemDtos() {
|
||||
return ItemProtocol.getWriteableItemDtos();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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<String, Object> itemMap = new HashMap<String, Object>();
|
||||
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) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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<ItemDto> getReadableItemDtos() {
|
||||
ArrayList list = new ArrayList();
|
||||
list.add(new ItemDto(item_D01, "LED", "00017", Boolean.valueOf(true)));
|
||||
return list;
|
||||
}
|
||||
|
||||
public static List<ItemDto> getWriteableItemDtos() {
|
||||
ArrayList list = new ArrayList();
|
||||
list.add(new ItemDto(item_D01, "LED", "00017", Boolean.valueOf(true)));
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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<? extends DeviceDriver> getDeviceDriverType() {
|
||||
return MaGangLedDeviceDriver.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DeviceType> getFitDeviceTypes() {
|
||||
List<DeviceType> types = new LinkedList();
|
||||
types.add(DeviceType.conveyor);
|
||||
return types;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ItemDto> getReadableItemDtos() {
|
||||
return ItemProtocol.getReadableItemDtos();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ItemDto> getWriteableItemDtos() {
|
||||
return ItemProtocol.getWriteableItemDtos();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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<String, Object> itemMap = new HashMap<String, Object>();
|
||||
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<String, Object> itemMap = new HashMap<String, Object>();
|
||||
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) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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<ItemDto> 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;
|
||||
}
|
||||
|
||||
@@ -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<String, Object> itemMap = new HashMap<String, Object>();
|
||||
itemMap.put(param, value);
|
||||
ReadUtil.write(itemMap, server);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getDeviceStatusName() {
|
||||
JSONObject jo = new JSONObject();
|
||||
|
||||
@@ -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<Object> 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<Object> queryDevice() {
|
||||
return new ResponseEntity<>(HandService.queryDevice(), HttpStatus.OK);
|
||||
}
|
||||
// @PostMapping("/queryDevice")
|
||||
// @Log("查询设备起点和终点")
|
||||
// @ApiOperation("查询设备起点和终点")
|
||||
// @SaIgnore
|
||||
// //@PreAuthorize("@el.check('sect:list')")
|
||||
// //@RequestBody JSONObject json
|
||||
// public ResponseEntity<Object> queryDevice() {
|
||||
// return new ResponseEntity<>(HandService.queryDevice(), HttpStatus.OK);
|
||||
// }
|
||||
|
||||
@PostMapping("/point/storage")
|
||||
@Log("查询设备扩展属性")
|
||||
|
||||
@@ -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<String, Object>
|
||||
*/
|
||||
Map<String, Object> queryDevice();
|
||||
|
||||
/**
|
||||
* 查询区域点位
|
||||
* @return json
|
||||
*/
|
||||
JSONObject queryPoint();
|
||||
}
|
||||
|
||||
@@ -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<String, Object> queryPointByArea(String dict_id) {
|
||||
JSONArray resultArr = new JSONArray();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user