海亮海柔接口

This commit is contained in:
周俊杰
2023-07-06 14:36:03 +08:00
parent 4dbb96f852
commit 39e9afae00
134 changed files with 5993 additions and 29 deletions

View File

@@ -61,6 +61,10 @@ public enum DriverTypeEnum {
HAILIANG_PACKER_STATION(26, "hailiang_packer_station", "海亮-包装机工位", "conveyor"),
LIKU_AGV(27, "liku_agv", "LIKUAGV机器人查询", "agv"),
HAILIANG_HR_SSX(28, "hailiang_hr_ssx_station", "海亮-海柔-输送线", "conveyor"),
//HAILIANG_XJ_PLC_TEST(27, "hailiang_xj_plc_test", "海亮-信捷PLC", "conveyor"),
//HAILIANG_SMART_PLC_TEST(28, "hailiang_smart_plc_test", "海亮-西门子SMART200PLC", "conveyor"),

View File

@@ -0,0 +1,11 @@
package org.nl.acs.device_driver;
import com.alibaba.fastjson.JSONObject;
/**
* @author: geng by
* @createDate: 2023/4/21
*/
public interface FeedLmsRealFailed {
public JSONObject feedLmsRealFailedInfo();
}

View File

@@ -0,0 +1,46 @@
package org.nl.acs.device_driver.basedriver.agv.liku_agv;
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 LiKuDefination implements DeviceDriverDefination {
@Override
public String getDriverCode() {
return "liku_agv";
}
@Override
public String getDriverName() {
return "LK机器人查询";
}
@Override
public String getDriverDescription() {
return "LK机器人查询";
}
@Override
public DeviceDriver getDriverInstance(Device device) {
return (new LiKuDeviceDriver()).setDevice(device).setDriverDefination(this);
}
@Override
public Class<? extends DeviceDriver> getDeviceDriverType() {
return LiKuDeviceDriver.class;
}
@Override
public List<DeviceType> getFitDeviceTypes() {
List<DeviceType> types = new LinkedList();
types.add(DeviceType.agv);
return types;
}
}

View File

@@ -0,0 +1,113 @@
package org.nl.acs.device_driver.basedriver.agv.liku_agv;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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.device.service.DeviceService;
import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.RouteableDeviceDriver;
import org.nl.acs.device_driver.driver.AbstractDeviceDriver;
import org.nl.acs.device_driver.driver.ExecutableDeviceDriver;
import org.nl.acs.ext.wms.liKuData.a.Tray;
import org.nl.acs.instruction.service.InstructionService;
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.monitor.DeviceStageMonitor;
import org.nl.acs.opc.DeviceAppService;
import org.nl.acs.task.service.TaskService;
import org.nl.acs.task.service.impl.TaskServiceImpl;
import org.nl.modules.wql.util.SpringContextHolder;
import java.util.ArrayList;
import java.util.List;
/**
*立库驱动
*/
@Slf4j
@Data
@RequiredArgsConstructor
public class LiKuDeviceDriver extends AbstractDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor {
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);
String robotCode = "";
String robotTypeCode = "";
String pointCode = "";
Long positionX = 0l;
Long positionY = 0l;
Integer theta = 0;
Long forkHeight = 0l;
Long forkLength = 0l;
Integer forkTheta = 0;
String stationCode = "";
String locationCode = "";
String state = "";
String hardwareState = "";
List<Tray> trays=new ArrayList<>();
String locationTypeCode = "";
String stationModelCode = "";
Long positionZ = 0l;
String loadContainerCode = "";
Long updateTime = 0l;
Integer trayLevel = 0;
String containerCode = "";
List<String> taskCodes=null;
String positionCode = "";
public JSONObject getDeviceStatusName() {
JSONObject jo = new JSONObject();
jo.put("robotCode",robotCode);
jo.put("robotTypeCode", robotTypeCode);
jo.put("pointCode", pointCode);
jo.put("positionX",this.getPositionX());
jo.put("positionY",this. getPositionY());
jo.put("theta", this.getTheta());
jo.put("forkHeight", this.getForkHeight());
jo.put("forkLength", this.getForkLength());
jo.put("forkTheta", this.getForkTheta());
jo.put("stationCode", stationCode);
jo.put("locationCode", locationCode);
jo.put("state", state);
jo.put("hardwareState",hardwareState);
jo.put("trays", this.getTrayList());
return jo;
}
@Override
public void setDeviceStatus(JSONObject data) {
}
private JSONArray getTrayList(){
JSONArray ja=new JSONArray();
for (Tray tray : trays) {
JSONObject jo = new JSONObject();
jo.put("trayLevel", tray.getTrayLevel());
jo.put("containerCode", tray.containerCode);
jo.put("taskCodes", tray.getTaskCodes());
jo.put("positionCode", tray.positionCode);
ja.add(jo);
}
return ja;
}
@Override
public void execute() {
}
}

View File

@@ -0,0 +1,54 @@
package org.nl.acs.device_driver.basedriver.hailiang_hr_ssx;
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;
@Service
public class HailiangHrSsxDefination implements OpcDeviceDriverDefination {
@Override
public String getDriverCode() { return "hailiang_hr_ssx_station"; }
@Override
public String getDriverName() {
return "海亮-海柔-输送线";
}
@Override
public String getDriverDescription() {
return "海亮-海柔-输送线";
}
@Override
public DeviceDriver getDriverInstance(Device device) {
return (new HailiangHrSsxDeviceDriver()).setDevice(device).setDriverDefination(this);
}
@Override
public Class<? extends DeviceDriver> getDeviceDriverType() {
return HailiangHrSsxDeviceDriver.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();}
}

View File

@@ -0,0 +1,239 @@
package org.nl.acs.device_driver.basedriver.hailiang_hr_ssx;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.acs.acsEnum.WorkerOrderEnum;
import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.RouteableDeviceDriver;
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.liKuData.Resp;
import org.nl.acs.ext.wms.liKuData.a.ContainerArrivedRequest;
import org.nl.acs.ext.wms.liKuData.a.NodeStates;
import org.nl.acs.ext.wms.service.AcsToLiKuService;
import org.nl.acs.ext.wms.service.LiKuToAcsService;
import org.nl.acs.ext.wms.service.impl.AcsToLiKuServiceImpl;
import org.nl.acs.ext.wms.service.impl.LiKuToAcsServiceImpl;
import org.nl.acs.history.ErrorUtil;
import org.nl.acs.history.service.DeviceErrorLogService;
import org.nl.acs.history.service.dto.DeviceErrorLogDto;
import org.nl.acs.history.service.impl.DeviceErrorLogServiceImpl;
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.order.service.dto.EalingOrderDto;
import org.nl.acs.order.service.dto.ProduceshiftorderDto;
import org.nl.modules.wql.util.SpringContextHolder;
import org.springframework.beans.factory.annotation.Autowired;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
@Slf4j
@Data
@RequiredArgsConstructor
public class HailiangHrSsxDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor, IssuedDeviceOrderInfo {
protected ItemProtocol itemProtocol=new ItemProtocol(this);
DeviceExecuteLogService logServer = SpringContextHolder.getBean("deviceExecuteLogServiceImpl");
@Autowired
DeviceErrorLogService deviceErrorLogService = SpringContextHolder.getBean(DeviceErrorLogServiceImpl.class);
@Autowired
LiKuToAcsService liKuToAcsService = SpringContextHolder.getBean(LiKuToAcsServiceImpl.class);
@Autowired
AcsToLiKuService acsToLiKuService = SpringContextHolder.getBean(AcsToLiKuServiceImpl.class);
int heartbeat = 0;
int mode = 0;
int action = 0;
int error = 0;
int task = 0;
int move = 0;
int to_command = 0;
String barcode,last_barcode;
int last_heartbeat = 0;
int last_mode = 0;
int last_error = 0;
int last_task = 0;
int last_move = 0;
Boolean isonline = true;
String message = null;
Boolean iserror = false;
private Date instruction_require_time = new Date();
private int instruction_require_time_out = 3000;
boolean requireSucess = false;
private int instruction_finished_time_out;
String device_code = null;
@Override
public Device getDevice() {
return this.device;
}
@Override
public void execute() throws Exception {
try {
device_code = this.getDeviceCode();
mode = this.itemProtocol.getMode();
move = this.itemProtocol.getMove();
action = this.itemProtocol.getAction();
error = this.itemProtocol.getError();
task = this.itemProtocol.getTask();
barcode = this.itemProtocol.getBarcode();
to_command = this.itemProtocol.getToCommand();
if (mode != last_mode) {
logServer.deviceExecuteLog(this.device_code, "", "", "信号mode" + last_mode + "->" + mode + "复位请求标记");
}
if (move != last_move){
message = null;
requireSucess =false;
}
if (error != last_error) {
if (error != 0) {
DeviceErrorLogDto dto = new DeviceErrorLogDto();
dto.setDevice_code(device_code);
dto.setError_code(String.valueOf(error));
dto.setError_info(ErrorUtil.getDictDetail("unbox_error_type", String.valueOf(error)));
deviceErrorLogService.create(dto);
}
logServer.deviceExecuteLog(this.device_code, "", "", "信号error" + last_error + "->" + error + "复位请求标记");
}
if (task != last_task) {
logServer.deviceExecuteLog(this.device_code, "", "", "信号task" + last_task + "->" + task + "复位请求标记");
}
} catch (Exception var17) {
var17.printStackTrace();
logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17);
}
if (mode == 0) {
message = "未联机";
} else {
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<JSONObject> 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;
last_move = move;
last_error = error;
last_task = task;
last_barcode = barcode;
}
@Override
public JSONObject getDeviceStatusName() {
JSONObject jo = new JSONObject();
jo.put("device_name", this.getDevice().getDevice_name());
String mode = "";
String action = "";
String move = "";
if (this.getMode() == 0) {
mode = "未联机";
jo.put("isOnline", false);
} else if (this.getMode() == 1) {
mode = "单机";
jo.put("isOnline", false);
} else if (this.getMode() == 2) {
mode = "联机";
jo.put("isOnline", true);
} else if (this.getMode() == 3) {
mode = "运行中";
jo.put("isOnline", true);
}
if (this.getMove() == 0) {
move = "无货";
jo.put("hasGoods", false);
} else if (this.getMove() > 0) {
move = "有货";
jo.put("hasGoods", true);
}
jo.put("move", move);
jo.put("mode", mode);
jo.put("isOnline", this.getIsonline());
jo.put("isError", this.getIserror());
jo.put("error", ErrorUtil.getDictDetail("ssx_error_type", String.valueOf(error)));
jo.put("task", task);
jo.put("barcode", barcode);
jo.put("isOnline", this.itemProtocol.getIsonline());
jo.put("message", message);
return jo;
}
@Override
public void setDeviceStatus(JSONObject data) {
}
@Override
public void issuedOrderInfo(ProduceshiftorderDto dto) {
EalingOrderDto ealingOrderDto = dto.getEalingOrderDto();
if (ealingOrderDto != null) {
String is_foreward = ealingOrderDto.getIs_foreward();
Map<String, Object> map = new HashMap<>();
map.put("to_clear", "1");
map.put("to_is_foreward", is_foreward);
map.put("to_order_box_num", ealingOrderDto.getOrder_box_num());
map.put("to_order", ealingOrderDto.getOrder_code());
this.writing(map);
}
}
@Override
public void issuedOrderFinish(String autoFinish) {
if (StrUtil.equals(autoFinish, WorkerOrderEnum.FORCEFINISH.getCode())) {
this.writing("to_order_compel_finished", "1");
} else {
this.writing("to_confirm_finished", "1");
}
}
@Override
public void toStop() {
}
@Override
public void toStart() {
}
}

View File

@@ -0,0 +1,143 @@
package org.nl.acs.device_driver.basedriver.hailiang_hr_ssx;
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_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_direction = "direction";
public static String item_is_flip = "is_flip";
public static String item_task = "task";
public static String item_barcode = "barcode";
public static String item_to_command = "to_command";
public static String item_to_target = "to_target";
public static String item_to_task = "to_task";
public static String item_to_is_flip = "to_is_flip";
public static String item_to_barcode = "to_barcode";
private HailiangHrSsxDeviceDriver driver;
public ItemProtocol(HailiangHrSsxDeviceDriver driver) {
this.driver = driver;
}
public int getHeartbeat() {
return this.getOpcIntegerValue(item_heartbeat);
}
public int getMode() {
return this.getOpcIntegerValue(item_mode);
}
public int getMove() {
return this.getOpcIntegerValue(item_move);
}
public int getAction() {
return this.getOpcIntegerValue(item_action);
}
public String getBarcode() {
return this.getOpcStringValue(item_barcode);
}
public int getError() {
return this.getOpcIntegerValue(item_error);
}
public int getIsflip() {
return this.getOpcIntegerValue(item_is_flip);
}
public int getTask() {
return this.getOpcIntegerValue(item_task);
}
public int getToCommand() {
return this.getOpcIntegerValue(item_to_command);
}
public int getToTarget() {
return this.getOpcIntegerValue(item_to_target);
}
public int getToTask() {
return this.getOpcIntegerValue(item_to_task);
}
//是否有货
public int hasGoods(int move) {
return move;
}
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 String getOpcStringValue(String protocol) {
String value = this.driver.getStringValue(protocol);
if (value == null) {
setIsonline(false);
} else {
setIsonline(true);
return value;
}
return "";
}
public static List<ItemDto> 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_barcode, "条码", "DB600.STRING18.20"));
return list;
}
public static List<ItemDto> 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_barcode, "下发条码", "DB610.STRING12.20"));
return list;
}
@Override
public String toString() {
return "";
}
}

View File

@@ -0,0 +1,160 @@
package org.nl.acs.device_driver.basedriver.siemens_conveyor;
import cn.hutool.core.util.StrUtil;
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_heartbeat = "heartbeat";
//工作模式
public static String item_mode = "mode";
//光电信号
public static String item_move = "move";
//托盘方向
public static String item_carrier_direction = "carrier_direction";
//报警
public static String item_error = "error";
//任务号
public static String item_task = "task";
//下发命令
public static String item_to_command = "to_command";
//下发目标站
public static String item_to_target = "to_target";
//下发托盘类型
public static String item_to_container_type = "to_container_type";
//下发任务号
public static String item_to_task = "to_task";
//困扎次数
public static String item_to_strap_times = "to_strap_times";
//木箱长度
public static String item_to_length = "to_length";
//木箱宽度
public static String item_to_weight = "to_weight";
//木箱高度
public static String item_to_height = "to_height";
private SiemensConveyorDeviceDriver driver;
public ItemProtocol(SiemensConveyorDeviceDriver driver) {
this.driver = driver;
}
public int getHeartbeat() {
return this.getOpcIntegerValue(item_heartbeat);
}
public int getMode() {
return this.getOpcIntegerValue(item_mode);
}
public int getMove() {
return this.getOpcIntegerValue(item_move);
}
public int getCarrier_direction() {
return this.getOpcIntegerValue(item_carrier_direction);
}
public int getError() {
return this.getOpcIntegerValue(item_error);
}
public int getTask() {
return this.getOpcIntegerValue(item_task);
}
public int getTo_command() {
return this.getOpcIntegerValue(item_to_command);
}
public int getTo_target() {
return this.getOpcIntegerValue(item_to_target);
}
public int getTo_task() {
return this.getOpcIntegerValue(item_to_task);
}
public int getTo_strap_times() {
return this.getOpcIntegerValue(item_to_strap_times);
}
public int getTo_length() {
return this.getOpcIntegerValue(item_to_length);
}
public int getTo_weight() {
return this.getOpcIntegerValue(item_to_weight);
}
public int getTo_height() {
return this.getOpcIntegerValue(item_to_height);
}
Boolean isonline;
public int getOpcIntegerValue(String protocol) {
Integer value = this.driver.getIntegeregerValue(protocol);
if (value == null) {
// log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!");
setIsonline(false);
} else {
setIsonline(true);
return value;
}
return 0;
}
public String getOpcStringValue(String protocol) {
String value = this.driver.getStringValue(protocol);
if (StrUtil.isEmpty(value)) {
} else {
return value;
}
return "0";
}
public static List<ItemDto> getReadableItemDtos() {
ArrayList list = new ArrayList();
list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0"));
list.add(new ItemDto(item_mode, "工作模式", "DB600.B2"));
list.add(new ItemDto(item_move, "光电信号", "DB600.B3"));
list.add(new ItemDto(item_carrier_direction, "托盘方向", "DB600.B4"));
list.add(new ItemDto(item_error, "报警信号", "DB600.B6"));
list.add(new ItemDto(item_task, "任务号", "DB600.D10"));
return list;
}
public static List<ItemDto> getWriteableItemDtos() {
ArrayList list = new ArrayList();
list.add(new ItemDto(item_to_command, "下发命令", "DB601.W2"));
list.add(new ItemDto(item_to_target, "下发目标站", "DB601.W4"));
list.add(new ItemDto(item_to_container_type, "下发托盘类型", "DB601.W6"));
list.add(new ItemDto(item_to_task, "下发任务号", "DB601.D8"));
list.add(new ItemDto(item_to_strap_times, "困扎次数", "DB601.W12"));
list.add(new ItemDto(item_to_length, "木箱长度", "DB601.W14"));
list.add(new ItemDto(item_to_weight, "木箱宽度", "DB601.W16"));
list.add(new ItemDto(item_to_height, "木箱高度", "DB601.W18"));
return list;
}
@Override
public String toString() {
return "";
}
}

View File

@@ -0,0 +1,64 @@
package org.nl.acs.device_driver.basedriver.siemens_conveyor;
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;
/**
* 西门子-输送机驱动
*
*/
@Service
public class SiemensConveyorDefination implements OpcDeviceDriverDefination {
@Override
public String getDriverCode() {
return "siemens_conveyor";
}
@Override
public String getDriverName() {
return "西门子-输送机驱动";
}
@Override
public String getDriverDescription() {
return "西门子-输送机驱动";
}
@Override
public DeviceDriver getDriverInstance(Device device) {
return (new SiemensConveyorDeviceDriver()).setDevice(device).setDriverDefination(this);
}
@Override
public Class<? extends DeviceDriver> getDeviceDriverType() {
return SiemensConveyorDeviceDriver.class;
}
@Override
public List<DeviceType> getFitDeviceTypes() {
List<DeviceType> types = new LinkedList();
types.add(DeviceType.station);
return types;
}
@Override
public List<ItemDto> getReadableItemDtos() {
return ItemProtocol.getReadableItemDtos();
}
@Override
public List<ItemDto> getWriteableItemDtos() {
return ItemProtocol.getWriteableItemDtos();
}
}

View File

@@ -3,13 +3,11 @@ package org.nl.acs.device_driver.driver;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import org.jinterop.dcom.common.JIException;
import org.nl.acs.device.device_driver.standard_inspect.ReadUtil;
import org.nl.acs.ext.wms.data.JsonUtl;
import org.nl.acs.log.service.DeviceExecuteLogService;
import org.nl.acs.opc.OpcConfig;
import org.nl.acs.opc.OpcServerService;
import org.nl.acs.opc.OpcServerServiceImpl;
import org.nl.acs.opc.WcsConfig;
import org.nl.acs.opc.*;
import org.nl.acs.udw.UnifiedDataAccessor;
import org.nl.acs.udw.UnifiedDataAccessorFactory;
import org.nl.acs.udw.UnifiedDataAppService;
@@ -17,11 +15,14 @@ import org.nl.modules.lucene.service.LuceneExecuteLogService;
import org.nl.modules.lucene.service.dto.LuceneLogDto;
import org.nl.modules.wql.exception.WDKException;
import org.nl.modules.wql.util.SpringContextHolder;
import org.openscada.opc.lib.da.Server;
import org.openscada.opc.lib.da.*;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.*;
public class AbstractOpcDeviceDriver extends AbstractDeviceDriver implements OpcDeviceDriver {
@Autowired
private OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerService .class);
UnifiedDataAccessor opcUdw;
private Date sendTime;
@@ -38,6 +39,61 @@ public class AbstractOpcDeviceDriver extends AbstractDeviceDriver implements Opc
public UnifiedDataAccessor getOpcValueAccessor() {
return this.opcUdw;
}
public void checkcontrol(Map<String, Object> itemValues) throws JIException, AddFailedException {
Group group = opcServerService.getServer(this.getOpcServer());
Map<String, Object> write = new HashMap();
Map<String, Item> readitems = new LinkedHashMap();
List<String> itemsString = new ArrayList();
itemsString = new ArrayList<> (itemValues.keySet());
Iterator is = itemsString.iterator();
while (is.hasNext()) {
String string = (String) is.next();
try {
readitems.put(string, group.addItem(string));
} catch (Exception e) {
e.printStackTrace();
}
}
int i = 0;
while(true) {
//下发信号
control( itemValues);
Map<String, Object> read = new HashMap();
Map<Item, ItemState> itemStatus = group.read(true, (Item[])readitems.values().toArray(new Item[0]));
Set<Item> items = itemStatus.keySet();
Iterator var15 = items.iterator();
while(var15.hasNext()) {
Item item = (Item)var15.next();
ItemState itemState = (ItemState)itemStatus.get(item);
Object value = OpcUtl.getValue(item, itemState);
read.put(item.getId(), value);
}
boolean check = true;
Iterator var24 = itemsString.iterator();
while(var24.hasNext()) {
String itemString = (String)var24.next();
if (!ObjectUtl.isEquals(itemValues.get(itemString), JsonUtl.parse(read.get(itemString)))) {
check = false;
}
}
if (check) {
return;
}
if (i > 0) {
ThreadUtl.sleep(300L);
}
if (i > 3) {
throw new WDKException("写入次数超过3次而失败");
}
++i;
}
}
public boolean control(Map<String, Object> itemValues) {

View File

@@ -4,7 +4,7 @@ import com.esotericsoftware.minlog.Log;
import org.nl.acs.device_driver.DeviceDriver;
public interface ExecutableDeviceDriver extends DeviceDriver {
default void executeAuto() {
default void executeAuto() throws Exception {
// try {
// this.execute();
// } catch (Throwable var6) {
@@ -16,5 +16,5 @@ public interface ExecutableDeviceDriver extends DeviceDriver {
}
void execute();
void execute() throws Exception;
}

View File

@@ -0,0 +1,53 @@
package org.nl.acs.ext.wms;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.acs.log.LokiLog;
import org.nl.acs.log.LokiLogType;
import org.nl.acs.log.service.DeviceExecuteLogService;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.service.ParamService;
import org.nl.modules.system.service.impl.ParamServiceImpl;
import org.nl.modules.wql.util.SpringContextHolder;
/**
* ACS连接外部系统工具类:
*/
@Slf4j
public class AcsUtil {
@LokiLog(type = LokiLogType.ACS_TO_LK)
public static <W> String notifyAcs(String api, W requestParam) {
DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class);;
ParamService paramService = SpringContextHolder.getBean(ParamServiceImpl.class);
//判断是否连接立库WCS系统
String isConnect = paramService.findByCode("is_connect_liKu_Wcs").getValue();
if (StrUtil.equals("0", isConnect)) {
throw new BadRequestException("参数配置表中-is_connect_liKu_Wcs为:0");
}
String liKu_wcs_url = paramService.findByCode("liKu_wcs_url").getValue();
try {
logServer.extLog(LokiLogType.ACS_TO_LK.name(),"下发立库任务请求参数:{}"+JSON.toJSONString(requestParam) );
log.info("下发立库任务请求参数:{}", JSON.toJSONString(requestParam));
String body = HttpRequest
.post(liKu_wcs_url + api).setConnectionTimeout(3000)
.body(JSON.toJSONString(requestParam))
.execute()
.body();
log.info("下发立库任务返回参数:{}", body);
return body;
} catch (Exception e) {
JSONObject result = new JSONObject();
result.put("result", "false");
result.put("code", "1");
result.put("comment", e.getMessage());
log.info("下发立库任务异常返回参数:{}", String.valueOf(result));
return String.valueOf(result);
}
}
}

View File

@@ -0,0 +1,18 @@
package org.nl.acs.ext.wms;
import com.alibaba.fastjson.JSONObject;
import org.nl.acs.ext.wms.liKuData.Resp;
/**
* @author: geng by
* @createDate: 2022/11/24
*/
public class RespUtil {
public static <T> Resp getResp(String result, T t) {
JSONObject jsonObject = JSONObject.parseObject(result);
Resp<T> resp = new Resp<>();
resp.setData(t);
resp = JSONObject.toJavaObject(jsonObject, Resp.class);
return resp;
}
}

View File

@@ -0,0 +1,20 @@
package org.nl.acs.ext.wms.data;
import lombok.Data;
@Data
public class ApplyLabelingAndBindingRequest extends BaseRequest {
private String vehicle_code;
private String device_code;
/**
* 1:贴标申请
* 2:捆扎申请
* 3:烘箱
*/
private String type;
private String weight;
private String is_bind;
}

View File

@@ -0,0 +1,13 @@
package org.nl.acs.ext.wms.data;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class ApplyLabelingAndBindingResponse extends BaseResponse {
private Map<String, String> data = new HashMap();
}

View File

@@ -0,0 +1,49 @@
package org.nl.acs.ext.wms.data;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class BaseRequest {
private Map<String, String> parameters = new HashMap();
private String systemCode;
private String houseCode;
public String getSystemCode() {
return this.systemCode;
}
public void setSystemCode(String systemCode) {
this.systemCode = systemCode;
}
public String getHouseCode() {
return this.houseCode;
}
public void setHouseCode(String houseCode) {
this.houseCode = houseCode;
}
public BaseRequest() {
}
public Map<String, String> getParameters() {
return this.parameters;
}
public void setParameters(Map<String, String> parameters) {
this.parameters = parameters;
}
public Object getParameter(String key) {
return this.parameters.get(key);
}
public void putParameter(String key, String object) {
this.parameters.put(key, object);
}
}

View File

@@ -0,0 +1,52 @@
package org.nl.acs.ext.wms.data;
import com.alibaba.fastjson.JSONArray;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class BaseResponse {
private Integer status = 0;
private String message;
private JSONArray errArr = new JSONArray();
private Map<String, String> parameters = new HashMap();
public BaseResponse() {
}
public Integer getstatus() {
return this.status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getMessage() {
return this.message;
}
public void setMessage(String message) {
this.message = message;
}
public Map<String, String> getParameters() {
return this.parameters;
}
public void setParameters(Map<String, String> parameters) {
this.parameters = parameters;
}
public Object getParameter(String key) {
return this.parameters.get(key);
}
public void putParameter(String key, String object) {
this.parameters.put(key, object);
}
}

View File

@@ -0,0 +1,30 @@
package org.nl.acs.ext.wms.data;
import lombok.Data;
import java.util.Map;
@Data
public class CancelTaskRequest extends BaseRequest {
/**
* 任务标识
*/
private String ext_task_id;
/**
* 任务编号
*/
private String task_code;
/**
* 载具号
*/
String vehicle_code;
/**
* 扩展属性
*/
Map<String,String> params;
}

View File

@@ -0,0 +1,7 @@
package org.nl.acs.ext.wms.data;
public class CancelTaskResponse extends BaseResponse {
}

View File

@@ -0,0 +1,123 @@
package org.nl.acs.ext.wms.data;
import lombok.Data;
import java.util.Map;
@Data
public class CreateTaskRequest extends BaseRequest {
/**
* 任务标识
*/
private String ext_task_id;
/**
* 任务编号
*/
private String task_code;
/**
* 取货点1
*/
String start_device_code;
/**
* 放货点1
*/
String next_device_code;
/**
* 取货点2
*/
String start_device_code2;
/**
* 放货点2
*/
String next_device_code2;
/**
* 烘箱对接位
*/
String put_device_code;
/**
* 优先级
*/
String priority;
/**
* 载具号
*/
String vehicle_code;
/**
* 载具类型
*/
String vehicle_type;
/**
* 路由方案
*/
String route_plan_code;
/**
* 1、生箔
* 2、分切
* 3、普通任务
* 4、叉车任务
* 5、输送任务
* 6、行架
* 7、立库
* 任务类型
*/
String task_type;
/**
* 立库任务类型
*
*/
String dtl_type;
/**
* Agv系统类型
* 1:1楼叉车系统
* 2:2楼1区域AGV系统
* 3:2楼2区域AGV系统
*/
String agv_system_type;
/**
* 备注
*/
String remark;
/**
* 烘箱时间
*/
String oven_time;
/**
* 烘箱温度
*/
String temperature;
/**
* agv取货高度
*/
private String start_height;
/**
* agv放货高度
*/
private String next_height;
/**
* 扩展属性
*/
Map<String,String> params;
}

View File

@@ -0,0 +1,6 @@
package org.nl.acs.ext.wms.data;
public class CreateTaskResponse extends BaseResponse {
}

View File

@@ -1,6 +1,5 @@
package org.nl.acs.ext.wms.data;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -10,7 +9,6 @@ import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.type.TypeFactory;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -52,7 +50,7 @@ public class JsonUtl {
synchronized(JsonUtl.class) {
if (objectMapperLog == null) {
objectMapperLog = init();
objectMapperLog.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapperLog.setSerializationInclusion(Include.NON_NULL);
}
}
}

View File

@@ -0,0 +1,9 @@
package org.nl.acs.ext.wms.data;
import lombok.Data;
@Data
public class LiKuApplyTakResponse extends BaseResponse {
}

View File

@@ -0,0 +1,9 @@
package org.nl.acs.ext.wms.data;
import lombok.Data;
@Data
public class LiKuApplyTaskRequest extends BaseRequest {
private String vehicle_code;
private String device_code;
}

View File

@@ -0,0 +1,30 @@
package org.nl.acs.ext.wms.data;
import lombok.Data;
import java.util.Map;
@Data
public class PutActionRequest extends BaseRequest {
/**
* 设备号
*/
String device_code;
/**
*
*/
String code;
/**
*
*/
String value;
/**
* 扩展属性
*/
Map<String,String> params;
}

View File

@@ -0,0 +1,7 @@
package org.nl.acs.ext.wms.data;
public class PutActionResponse extends BaseResponse {
}

View File

@@ -0,0 +1,42 @@
package org.nl.acs.ext.wms.data;
import lombok.Data;
@Data
public class UpdateLKTaskRequest extends BaseRequest {
/**
* 任务标识
*/
private String ext_task_id;
/**
* 任务编号
*/
private String task_code;
/**
* 载具号
*/
String vehicle_code;
/**
* 立库任务类型
*/
String dtl_type;
/**
* 类型
*/
String type;
/**
* 原库位
*/
String srcLocation;
/**
* 新库位
*/
String destLocation;
}

View File

@@ -0,0 +1,6 @@
package org.nl.acs.ext.wms.data;
public class UpdateLKTaskResponse extends BaseResponse {
}

View File

@@ -0,0 +1,24 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 响应 data 公共基础类
* 1、入库任务下发
* 2、出库任务下发
* 3、空托盘出库任务下发
* 4、移库任务下发
* 5、入库任务调整
* 6、移库任务调整
* 7、入库任务上报
* 8、出库任务上报
* 9、移库任务上报
* 10、任务取消
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class BaseResponseData {
public String orderId;
}

View File

@@ -0,0 +1,44 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 任务上报请求参数基础类
* 1、入库上报
* 2、出库上报
* 3、移库上报
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class BaseStoreReportRequest {
/**
* 任务编号
* WCS内部任务编号本次任务的唯一标识
*/
public String orderId;
/**
* 托盘条码信息
*/
public String palletCode;
/**
* 原库位号
* 托盘的存储库位编号。具体库位编号需要双方商定
*/
public String srcLocation;
/**
* 目的库位号
* 托盘的目的存储库位编号。具体库位编号需要双方商定
*/
public String destLocation;
/**
* 入库任务上报 1 已接收 2 开始执行 3执行完成 4 阻挡 5 空洞
* 出库任务上报 1已接收任务2开始执行3执行完成
* 移库任务上报 1 已接收 2开始执行3 执行完成 4 起点库位有货被阻挡 5目的点库位无货被阻挡
*/
public String state;
public String robotId;
}

View File

@@ -0,0 +1,42 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 任务下发请求参数基础类
* 1、入库任务下发
* 2、出库任务-批量下发
* 3、空托盘出库任务下发
* 4、移库任务-批量下发
* 5、入库任务调整
* 6、移库任务调整
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class BaseStoreRequest {
/**
* 任务编号
* WCS内部任务编号本次任务的唯一标识
*/
public String orderId;
/**
* 楼层编号
*/
public int floorNo;
/**
* 托盘条码信息
*/
public String palletCode;
/**
* 原库位号
* 托盘的存储库位编号。具体库位编号需要双方商定
*/
public String srcLocation;
/**
* 目的库位号
* 托盘的目的存储库位编号。具体库位编号需要双方商定
*/
public String destLocation;
}

View File

@@ -0,0 +1,37 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 取消任务请求参数类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class CancelTaskRequest {
/**
* 任务编号
* WCS内部任务编号本次任务的唯一标识
*/
public String orderId;
/**
* 托盘条码信息
*/
public String palletCode;
/**
* 原库位号
* 托盘的存储库位编号。具体库位编号需要双方商定
*/
public String srcLocation;
/**
* 目的库位号
* 托盘的目的存储库位编号。具体库位编号需要双方商定
*/
public String destLocation;
/**
* 任务类型
* 1 入库2 出库3 移库4 空托盘入库5 空托盘出库
*/
public int taskType;
}

View File

@@ -0,0 +1,13 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 取消任务响应参数 Data类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class CancelTaskResponse extends BaseResponseData {
}

View File

@@ -0,0 +1,35 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
@Data
public class DeviceStatusData {
String deviceId;
String x;
String y;
//楼层
String mapId;
//电量
String power;
//托盘
String pallet;
//有无货
String load;
//报警
String alarm;
//任务号
String taskId;
//楼层
String floor;
}

View File

@@ -0,0 +1,11 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
@Data
public class DeviceStatusRequest {
String deviceId;
}

View File

@@ -0,0 +1,14 @@
package org.nl.acs.ext.wms.liKuData;
public class DeviceStatusResponse {
String result;
String code;
String comment;
DeviceStatusData data;
}

View File

@@ -0,0 +1,13 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 空托盘出库任务下发 请求参数类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class EmptyVehicleOutStoreRequest extends BaseStoreRequest {
}

View File

@@ -0,0 +1,13 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 空托盘任务下发响应参数Data类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class EmptyVehicleOutStoreResponse extends BaseResponseData {
}

View File

@@ -0,0 +1,13 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 入库任务上报请求参数类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class InStoreReportRequest extends BaseStoreReportRequest {
}

View File

@@ -0,0 +1,14 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 入库任务上报 响应参数Data类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class InStoreReportResponse extends BaseResponseData {
}

View File

@@ -0,0 +1,18 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 入库任务下发请求参数类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class InStoreRequest extends BaseStoreRequest {
/**
* 任务类型
* 1代表正常载货托盘入库2代表空托盘入库
*/
public int type;
}

View File

@@ -0,0 +1,12 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 入库任务调整请求参数类
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class InStoreResetRequest extends BaseStoreRequest {
}

View File

@@ -0,0 +1,12 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 入库任务调整 响应参数Data类
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class InStoreResetResponse extends BaseResponseData {
}

View File

@@ -0,0 +1,12 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 入库任务下发响应参数 Data类
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class InStoreResponse extends BaseResponseData {
}

View File

@@ -0,0 +1,33 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
@Data
public class InStoreTaskUpdateRequest extends BaseResponseData {
/**
* 任务编号
* WCS内部任务编号本次任务的唯一标识
*/
public String orderId;
/**
* 托盘条码信息
*/
public String palletCode;
/**
* 原库位号
* 托盘的存储库位编号。具体库位编号需要双方商定
*/
public String srcLocation;
/**
* 目的库位号
* 托盘的目的存储库位编号。具体库位编号需要双方商定
*/
public String destLocation;
/**
* 楼层
*/
public int floorNo;
}

View File

@@ -0,0 +1,7 @@
package org.nl.acs.ext.wms.liKuData;
public class InStoreTaskUpdateResponse extends BaseStoreRequest {
}

View File

@@ -0,0 +1,10 @@
package org.nl.acs.ext.wms.liKuData;
/**
* 移库上报请求参数类
*
* @author: geng by
* @createDate: 2022/11/24
*/
public class MoveStoreReportRequest extends BaseStoreReportRequest {
}

View File

@@ -0,0 +1,12 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 移库上报响应参数 Data类
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class MoveStoreReportResponse extends BaseResponseData {
}

View File

@@ -0,0 +1,25 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
import java.util.List;
/**
* 移库任务下发请求参数类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class MoveStoreRequest {
/**
* 任务组编号
* WCS内部任务组编号本组任务的唯一标识
*/
public String groupId;
/**
* 任务信息,可批量下发
*/
public List<BaseStoreRequest> orderInfos;
}

View File

@@ -0,0 +1,13 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 移库任务调整请求参数类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class MoveStoreResetRequest extends BaseStoreRequest {
}

View File

@@ -0,0 +1,13 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 移库任务调整响应参数Data类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class MoveStoreResetResponse extends BaseResponseData {
}

View File

@@ -0,0 +1,13 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 移库任务下发响应参数Data类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class MoveStoreResponse extends BaseResponseData {
}

View File

@@ -0,0 +1,32 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
@Data
public class MoveStoreTaskUpdateRequest {
/**
* 任务编号
* WCS内部任务编号本次任务的唯一标识
*/
public String orderId;
/**
* 托盘条码信息
*/
public String palletCode;
/**
* 原库位号
* 托盘的存储库位编号。具体库位编号需要双方商定
*/
public String srcLocation;
/**
* 目的库位号
* 托盘的目的存储库位编号。具体库位编号需要双方商定
*/
public String destLocation;
/**
* 楼层
*/
public int floorNo;
}

View File

@@ -0,0 +1,7 @@
package org.nl.acs.ext.wms.liKuData;
public class MoveStoreTaskUpdateResponse extends BaseStoreRequest {
}

View File

@@ -0,0 +1,12 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 出库任务库位解锁Data类
* @author: wangs
* @createDate: 2022/11/24
*/
@Data
public class OutConfirmReportResponse extends BaseResponseData {
}

View File

@@ -0,0 +1,14 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 出库库位解锁 请求参数类
*
* @author: wangs by
* @createDate: 2022/11/24
*/
@Data
public class OutConfirmRequest extends BaseStoreRequest {
String outPortNo;
}

View File

@@ -0,0 +1,13 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 出库任务上报请求参数类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class OutStoreReportRequest extends BaseStoreReportRequest {
}

View File

@@ -0,0 +1,12 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 出库任务上报响应参数Data类
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class OutStoreReportResponse extends BaseResponseData {
}

View File

@@ -0,0 +1,27 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
import java.util.List;
/**
* 出库任务下发请求参数类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class OutStoreRequest {
/**
* 任务组编号
* WCS内部任务组编号本组任务的唯一标识
*/
public String groupId;
/**
* 任务信息,可批量下发
*/
public List<BaseStoreRequest> orderInfos;
}

View File

@@ -0,0 +1,13 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 出库任务下发响应参数Data类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class OutStoreResponse extends BaseResponseData {
}

View File

@@ -0,0 +1,37 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 调用立库接口统一返回参数类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class Resp<T> {
/**
* 成功返回true失败返回false
*/
public String result;
/**
* 错误码0表示成功1代表入库目的位置有货其他更多情况待定
*/
public String code;
/**
* 错误信息如果成功则为null
*/
public String comment;
/**
* 报文携带的数据
*/
public T data;
/**
* 成功返回true失败返回false
*/
public String msg;
}

View File

@@ -0,0 +1,28 @@
package org.nl.acs.ext.wms.liKuData;
import lombok.Data;
/**
* 巷道锁定解锁请求参数类
*
* @author: geng by
* @createDate: 2022/11/24
*/
@Data
public class RoadWayIsLockRequest {
/**
* 楼层编号
*/
public int floorNo;
/**
* 是否锁定
* true代表锁定false代表解锁
*/
public String isLock;
/**
* 巷道编号
* 需要解锁或锁定的巷道编号。具体巷道编号需要双方商定
*/
public String roadwayNo;
}

View File

@@ -0,0 +1,44 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class AbnormarReportingRequest {
/**
* 事件类型
* location_abnormal⼯作位异常
* robot_abnormal机器⼈异常
*/
public String eventType;
/**
* 机器⼈编码
*
*/
public String robotCode;
/**
* 容器编码
*/
public String containerCode;
/**
* ⼯作位编码
*/
public String locationCode;
/**
* ⼯作站编码
*/
public String stationCode;
/**
* 描述信息
* 异常原因/挂起原因等
*/
public String message;
/**
* 解决⽅案
*系统建议的解决⽅案
*/
public String solution;
/**
* 更新时间
*/
public Long updateTime;
}

View File

@@ -0,0 +1,7 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class AbnormarReportingResponse{
}

View File

@@ -0,0 +1,16 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
/**
*
* @author: zjj by
* @createDate: 2023/6/26
*/
@Data
public class BaseResponseData {
public Integer code;
public String msg;
public String data;
}

View File

@@ -0,0 +1,13 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import java.util.List;
@Data
public class CancelRequest {
/**
* 任务编码
* 业务任务和系统任务都可取消
*/
public List<String> taskCodes;
}

View File

@@ -0,0 +1,7 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class CancelResponse extends BaseResponseData{
}

View File

@@ -0,0 +1,21 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class ContainerArrivedRequest {
/**
* 输送线节点编码
*
*/
public String slotCode;
/**
* 容器编码
* 输送线有读码器可以识别或已知料⾝份时,该字段传料箱编码;否则空
*/
public String containerCode;
/**
* 容器属性
*/
public Object containerAttribute;
}

View File

@@ -0,0 +1,14 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class ContainerArrivedResponse extends BaseResponseData{
/**
* 流动⽅向
* 回库⼝:
* 100流向上料⼝
* 200等待
*/
public String direction;
}

View File

@@ -0,0 +1,17 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import java.util.List;
@Data
public class Conveyors {
/**
* 输送线编码
*/
public String code;
/**
*
*/
public List<NodeStates> nodeStates;
}

View File

@@ -0,0 +1,11 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import java.util.List;
@Data
public class Datas {
List<Robots> robots;
List<Locations> locations;
}

View File

@@ -0,0 +1,13 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class InTaskDescribe extends TaskDescribe{
String containerCode;
}

View File

@@ -0,0 +1,15 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class LoadContainerFinishRequest {
/**
* 输送线节点编码
*/
public String slotCode;
/**
* 容器编码
*/
public String containerCode;
}

View File

@@ -0,0 +1,9 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import org.nl.acs.ext.wms.data.BaseResponse;
@Data
public class LoadContainerFinishResponse{
}

View File

@@ -0,0 +1,27 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class LocationQueryRequest {
/**
* ⼯作位编码
* 可传多个⼯作位,若不传则查全部
* 若多个字段均填写,则互为且关系
*/
public Map<String,List<String>> locationCodes ;
/**
* 容器编码
* 查看容器下的所有⼯作位
*/
public String containerCode;
/**
* ⼯作位类型编码
* 可传多个⼯作位,若不传则查全部
* 若多个字段均填写,则互为且关系
*/
public Map<String,List<String>> locationTypeCodes ;
}

View File

@@ -0,0 +1,12 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class LocationQueryResponse {
String msg;
String code;
Datas datas;
}

View File

@@ -0,0 +1,31 @@
package org.nl.acs.ext.wms.liKuData.a;
public class Locations {
/**
* ⼯作位编码
*/
public String locationCode;
/**
* ⼯作位类型
*/
public String locationTypeCode;
/**
* ⼯作站编码
* 若为⼯作位不会具有⼯作站编码
*/
public String pointCode;
/**
* 坐标x
* 机器⼈实际坐标xmm
*/
public Long positionX;
/**
* 坐标y
* 机器⼈实际坐标ymm
*/
public Long positionY;
/**
* 机器⼈⻆度
*/
public Integer theta;
}

View File

@@ -0,0 +1,23 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class MoveContainerRequest {
/**
* 输送线节点编码
*/
public String slotCode;
/**
* 容器编码
*/
public String containerCode;
/**
* 流动⽅向
* 拣选位
* 100向前流动离开拣选位只有
* ⼀个流向的话,可以不传,默认向流)
* 200空箱取出
*/
public String direction;
}

View File

@@ -0,0 +1,9 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class MoveContainerResponse{
}

View File

@@ -0,0 +1,31 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class NodeStates {
/**
* 输送线上的位置编码
*/
public String slotCode;
/**
* 是否有箱
* 有箱则为true否则为false
*/
public Boolean hasContainer;
/**
* 最近⼀次读取箱⼦状
* 态的时间
*/
public Long lastReadTime;
/**
* 最后⼀次上报料箱到
* 达的时间
*/
public Long lastReportTime;
/**
* 最后⼀次有箱⼦的时
* 间
*/
public Long lastHasContainerTime;
}

View File

@@ -0,0 +1,12 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class QueryConveyorRequest {
/**
* 输送线编码
* 根据输送线编码列表查询状态
*/
public String conveyorCodes;
}

View File

@@ -0,0 +1,14 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import org.nl.acs.ext.wms.liKuData.BaseStoreRequest;
import java.util.List;
@Data
public class QueryConveyorResponse {
/**
*
*/
public List<Conveyors> conveyors;
}

View File

@@ -0,0 +1,5 @@
package org.nl.acs.ext.wms.liKuData.a;
public class QueryNodeReaderRequest {
public String slotCode;
}

View File

@@ -0,0 +1,41 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class QueryNodeReaderResponse{
/**
* 容器编码
*/
public String barcode;
/**
* 容器⾼度
*/
public Long height;
/**
* 容器长度
*/
public Long length;
/**
* 容器宽度
*/
public Long width;
/**
* 容器重量
*/
public Long weight;
/**
* 容器材料
* 1.料箱2.纸箱
*/
public Long material;
/**
* 容器朝向
*/
public String orientation;
/**
* 容器材料
* 料箱上⼆维码信息
*/
public String qrCode;
}

View File

@@ -0,0 +1,19 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import java.util.List;
@Data
public class Rfid extends TaskstatusReportingRequest{
/**
* 背篓层号
* 从0层开始编号64表⽰放在了货叉上
*/
public Integer trayLevel;
/**
* rfid盘点信息
* 仅限于rfid盘点
*/
public List<String> rfidInfo;
}

View File

@@ -0,0 +1,17 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class RobotQueryRequest {
/**
* 机器⼈编码
* 可传多个,若不传则查全部
*/
public Map<String,List<String>> robotCodes ;
//public List<String> robotCodes;
}

View File

@@ -0,0 +1,22 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import org.nl.acs.ext.wms.liKuData.DeviceStatusData;
import org.nl.acs.ext.wms.liKuData.b.AGVTask;
import java.util.List;
@Data
public class RobotQueryResponse{
String msg;
String code;
Datas datas;
// /**
// * 任务
// *
// */
// public List<Robots> robots;
}

View File

@@ -0,0 +1,89 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import java.util.List;
@Data
public class Robots {
/**
* 编码
*/
public String robotCode;
/**
* 型号
*/
public String robotTypeCode;
/**
* 节点编码
* 机器⼈当前所处节点
*/
public String pointCode;
/**
* 坐标x
* 机器⼈实际坐标xmm
*/
public Long positionX;
/**
* 坐标y
* 机器⼈实际坐标ymm
*/
public Long positionY;
/**
* 机器⼈⻆度
*/
public Integer theta;
/**
* 货叉⾼度
*/
public Long forkHeight;
/**
* 货叉⻓度
*/
public Long forkLength;
/**
* 货叉相对机
* 器⼈⻆度
*/
public Integer forkTheta;
/**
* ⼯作站编码
* 当机器⼈在⼯作站⼯作时会具有
*/
public String stationCode;
/**
* ⼯作位编码
* 当机器⼈控制权在⼯作位上时会具有
*/
public String locationCode;
/**
* 机器⼈状态
* UNAVAILABLE =杀机器⼈后,在场外
* 的状态
* UNKNOWN =未知,待初始化
* ERROR =错误(机器⼈状态更新超时)
* IDLE =空闲
* EXECUTING =执⾏任务中
* AWAITING =原地等待
*/
public String state;
/**
* 机器⼈硬件状态
* ROBOT_READY_TO_INIT? =机器⼈启动
* 以后的初始状态,等待初始化指令
* ROBOT_IDLE? =空闲状态,等待任务指
* 令(MOVE、BIN_OP)
* ROBOT_RUNNING? =运⾏状态(正在执
* ⾏任务)
* ROBOT_ABNORMAL? =异常状态(内部
* 故障,或者执⾏任务过程中发⽣异常需
* 要处理)
* ROBOT_RECOVERY? =恢复状态
* ROBOT_PAUSED? =暂停状态
*/
public String hardwareState;
/**
* 背篓描述
*/
public List<Tray> trays;
}

View File

@@ -0,0 +1,8 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class TaskDescribe {
}

View File

@@ -0,0 +1,52 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class TaskstatusReportingRequest {
/**
* 任务号
*业务任务号
*/
public String taskCode;
/**
* 上报事件类型
* task上报任务状态
* tote_load上报取箱状态
* tote_unload上报放箱状态
* robot_reach机器⼈到达⼯作站
* weight称重事件回调
* rfidRFID识别事件回调
*/
public String eventType;
/**
* 状态
* success
* fail失败
* cancel取消
* suspend挂起
*/
public String status;
/**
* 机器⼈编码
*
*/
public String robotCode;
/**
* 容器编码
*/
public String containerCode;
/**
* ⼯作位编码
*/
public String locationCode;
/**
* ⼯作站编码
*/
public String stationCode;
/**
* 描述信息
* 异常原因/挂起原因等
*/
public String message;
}

View File

@@ -0,0 +1,8 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class TaskstatusReportingResponse{
}

View File

@@ -0,0 +1,54 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import org.nl.acs.ext.wms.liKuData.b.AGVTask;
@Data
public class ToteActionTask extends AGVTask {
/**
* 任务⾏为
* load取货箱⾃带移动
* unload放货箱⾃带移动
* nop纯移动
*/
public String taskAction;
/**
* ⾏为结束是否暂停
* 默认0。指任务结束后不暂停机器
* ⼈被释放。
* 1指任务结束后会暂停直⾄使⽤
* 暂停恢复接⼝继续执⾏后续任务。
* ⾏为取消不再⽣效,成功会⽣效。
* 暂停机器⼈后,可继续往机器⼈任
* 务列表追加任务,再恢复后机器⼈
* 会继续执⾏后续任务。
*/
public Boolean isFinallyPaused;
/**
* 容器编码
*LOAD时容器和⼯作位⼆选⼀
* UNLOAD时必填
*/
public String containerCode;
/**
* ⼯作位编码
*LOAD时容器和⼯作位⼆选⼀
* UNLOAD时必填
* NOP模式若填写则系统会寻找该
* ⼯作位对应的⼯作点进⾏停靠,若
* ⼯作位和节点都填写,则优先⼯作
* 位
*/
public String locationCode;
/**
* 节点编码
*仅NOP纯移动模式可⽤
*/
public String pointCode;
/**
* 机器⼈姿态⻆度
* 仅NOP纯移动模式可⽤
* 0,90,?180,270
*/
public Integer robotTheta;
}

View File

@@ -0,0 +1,42 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import org.nl.acs.ext.wms.liKuData.b.AGVTask;
@Data
public class ToteCarryTask extends AGVTask {
/**
* 容器编码
* 容器和⼯作位⼆选⼀优先取容器code容器
* 不存在则⾃动创建
*/
public String containerCode;
/**
* 容器型号
* 默认为“CT_KUBOT_STANDARD“
*/
public String containerType;
/**
* ⼯作位标签
*⽤于逻辑分区分配对应⼯作位
*/
public String storageTag;
/**
* 起始⼯作位
* containerCode、fromLocationCode⾄少⼀个
* 不为空
* 开启容器⾃动⼊场配置时,容器⼊场到
* fromLocationCode
*/
public String fromLocationCode;
/**
* ⽬标⼯作位
*toLocationCode、toStationCode⾄少⼀个不
* 为空
*/
public Integer toLocationCode;
/**
* ⽬标⼯作站
*/
public Integer toStationCode;
}

View File

@@ -0,0 +1,21 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import org.nl.acs.ext.wms.liKuData.b.AGVTask;
@Data
public class ToteCheckTask extends AGVTask {
/**
* 容器编码
*/
public String containerCode;
/**
* ⽬标⼯作位
* 即要进⾏盘库的⽬标库位
*/
public String locationCode;
/**
* 盘库类型
*/
public String checkType;
}

View File

@@ -0,0 +1,28 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
import java.util.List;
@Data
public class Tray {
/**
* 背篓序号
* 货叉标识64
*/
public Integer trayLevel;
/**
* 容器编码
* 若背篓为空则为空
*/
public String containerCode;
/**
* 业务任务
*/
public List<String> taskCodes;
/**
* 位置编码
* 格式为机器⼈id#背篓序号
*/
public String positionCode;
}

View File

@@ -0,0 +1,19 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class UnloadContainerFinishRequest {
/**
* 输送线节点编码
*/
public String slotCode;
/**
* 容器编码
*/
public String containerCode;
/**
* 容器属性
*/
public String containerAttribute;
}

View File

@@ -0,0 +1,7 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class UnloadContainerFinishResponse{
}

View File

@@ -0,0 +1,15 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class UnloadContainerReqRequest {
/**
* 输送线节点编码
*/
public String slotCode;
/**
* 容器编码
*/
public String containerCode;
}

View File

@@ -0,0 +1,11 @@
package org.nl.acs.ext.wms.liKuData.a;
import lombok.Data;
@Data
public class UnloadContainerReqResponse{
/**
* 允许放箱
*/
public Boolean allow;
}

Some files were not shown because too many files have changed in this diff Show More