add AGV设备监控

This commit is contained in:
张江玮
2023-09-26 17:46:31 +08:00
parent 5de2fde1fc
commit 68c075a4ce
6 changed files with 242 additions and 150 deletions

View File

@@ -74,4 +74,6 @@ public interface NDCAgvService {
* @return * @return
*/ */
public boolean createChargingTaskToNDC(String carno); public boolean createChargingTaskToNDC(String carno);
AgvDto findByCarNumber(String carNumber);
} }

View File

@@ -3,6 +3,8 @@ package org.nl.acs.agv.server.dto;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Data @Data
public class AgvDto implements Serializable { public class AgvDto implements Serializable {
@@ -10,7 +12,7 @@ public class AgvDto implements Serializable {
/** /**
* 名称 * 名称
*/ */
private String name; private String name = "";
/** /**
* 机器人当前的自身状态 * 机器人当前的自身状态
@@ -22,17 +24,17 @@ public class AgvDto implements Serializable {
* EXECUTING正在执行运单 * EXECUTING正在执行运单
* CHARGING正在充电 * CHARGING正在充电
*/ */
private String state; private String state = "";
/** /**
* 机器人的剩余电量值(单位:整数百分比) * 机器人的剩余电量值(单位:整数百分比)
*/ */
private String energyLevel; private String energyLevel = "";
/** /**
* *
*/ */
private String energyLevelGood; private String energyLevelGood = "";
/** /**
* 机器人在 SRD 系统中的在线状态 * 机器人在 SRD 系统中的在线状态
@@ -42,7 +44,7 @@ public class AgvDto implements Serializable {
* TO_BE_RESPECTED机器人处于在线状态但不能接受新的运单。 * TO_BE_RESPECTED机器人处于在线状态但不能接受新的运单。
* TO_BE_UTILIZED机器人处于在线状态可以接受并执行新的运单。 * TO_BE_UTILIZED机器人处于在线状态可以接受并执行新的运单。
*/ */
private String integrationLevel; private String integrationLevel = "";
/** /**
* 机器人当前的运单执行状态 * 机器人当前的运单执行状态
@@ -52,26 +54,36 @@ public class AgvDto implements Serializable {
* AWAITING_ORDER机器人在等待运单中新的子任务 * AWAITING_ORDER机器人在等待运单中新的子任务
* PROCESSING_ORDER机器人正在执行运单 * PROCESSING_ORDER机器人正在执行运单
*/ */
private String procState; private String procState = "";
/** /**
* 角度 * 角度
*/ */
private String positionAngle; private String positionAngle = "";
/** /**
* X坐标 * X坐标
*/ */
private String positionX; private String positionX = "";
/** /**
* Y坐标 * Y坐标
*/ */
private String positionY; private String positionY = "";
/** /**
* 当前任务号 * 当前任务号
*/ */
private String transportOrder; private String transportOrder = "";
/**
* 故障信息
*/
private List<String> faultInfo = new ArrayList<>();
/**
* 类型
*/
private String type = "AGV";
} }

View File

@@ -18,7 +18,6 @@ import org.nl.acs.instruction.service.dto.Instruction;
import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.log.service.DeviceExecuteLogService;
import org.nl.acs.opc.Device; import org.nl.acs.opc.Device;
import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppService;
import org.nl.acs.opc.DeviceAppServiceImpl;
import org.nl.acs.opc.DeviceType; import org.nl.acs.opc.DeviceType;
import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.service.ParamService; import org.nl.modules.system.service.ParamService;
@@ -28,9 +27,9 @@ import org.nl.start.auto.run.NDCSocketConnectionAutoRun;
import org.slf4j.MDC; import org.slf4j.MDC;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j @Slf4j
@Service @Service
@@ -43,13 +42,13 @@ public class NDCAgvServiceImpl implements NDCAgvService {
private final DeviceExecuteLogService logServer; private final DeviceExecuteLogService logServer;
Map<String, AgvDto> AGVDeviceStatus = new HashMap(); Map<String, AgvDto> agv = new ConcurrentHashMap<>();
private String log_file_type = "log_file_type"; private String log_file_type = "log_file_type";
private String log_type = "agv接口日志"; private String log_type = "agv接口日志";
@Override @Override
public void deleteAgvInstToNDC(Instruction inst) throws Exception { public void deleteAgvInstToNDC(Instruction inst) {
try { try {
MDC.put(log_file_type, log_type); MDC.put(log_file_type, log_type);
if (StrUtil.equals(acsConfigService.findByCode(AcsConfig.FORKAGV).getValue(), "1")) { if (StrUtil.equals(acsConfigService.findByCode(AcsConfig.FORKAGV).getValue(), "1")) {
@@ -131,7 +130,6 @@ public class NDCAgvServiceImpl implements NDCAgvService {
String instcode = inst.getInstruction_code(); String instcode = inst.getInstruction_code();
int type = Integer.parseInt(inst.getInstruction_type()); int type = Integer.parseInt(inst.getInstruction_type());
int priority = Integer.parseInt(inst.getPriority()) + 128; int priority = Integer.parseInt(inst.getPriority()) + 128;
DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class);
DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class); DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class);
int startAddress = deviceService.queryAddressBydeviceCode(inst.getStart_point_code()); int startAddress = deviceService.queryAddressBydeviceCode(inst.getStart_point_code());
int nextAddress = deviceService.queryAddressBydeviceCode(inst.getNext_point_code()); int nextAddress = deviceService.queryAddressBydeviceCode(inst.getNext_point_code());
@@ -188,7 +186,7 @@ public class NDCAgvServiceImpl implements NDCAgvService {
} }
@Override @Override
public void sendAgvInstToNDC(String instcode) throws Exception { public void sendAgvInstToNDC(String instcode) {
InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class);
Instruction inst = instructionService.findByCodeFromCache(instcode); Instruction inst = instructionService.findByCodeFromCache(instcode);
sendAgvInstToNDC(inst); sendAgvInstToNDC(inst);
@@ -201,26 +199,24 @@ public class NDCAgvServiceImpl implements NDCAgvService {
public static int IntToHexHigh(int b) { public static int IntToHexHigh(int b) {
int big = (b & 0xFF00) >> 8; return (b & 0xFF00) >> 8;
return big;
} }
public static int IntToHexLow(int b) { public static int IntToHexLow(int b) {
int little = b & 0xFF; return b & 0xFF;
return little;
} }
public static String Bytes2HexString(byte[] b) { public static String Bytes2HexString(byte[] b) {
String ret = ""; StringBuilder ret = new StringBuilder();
for (int i = 0; i < b.length; i++) { for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF); String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) { if (hex.length() == 1) {
hex = '0' + hex; hex = '0' + hex;
} }
ret += hex.toUpperCase(); ret.append(hex.toUpperCase());
} }
return ret; return ret.toString();
} }
@Override @Override
@@ -306,7 +302,7 @@ public class NDCAgvServiceImpl implements NDCAgvService {
}; };
break; break;
} }
log.info("反馈agv动作数据--index:" + hexToString(indexhigh & 0xFF) + hexToString(indexlow & 0xFF) + ",phase:" + hexToString(phasehigh & 0xFF) + hexToString(phaselow & 0xFF)); log.info("反馈agv动作数据index--" + hexToString(indexhigh & 0xFF) + hexToString(indexlow & 0xFF) + " phase--" + hexToString(phasehigh & 0xFF) + hexToString(phaselow & 0xFF));
return b; return b;
} finally { } finally {
@@ -349,7 +345,7 @@ public class NDCAgvServiceImpl implements NDCAgvService {
JSONObject jo = JSONObject.parseObject(mes); JSONObject jo = JSONObject.parseObject(mes);
ja.add(jo); ja.add(jo);
} }
log.info("AGV查询自动门状态,反馈:{}", ja.toString()); log.info("AGV查询自动门状态,反馈:{}", ja);
return ja.toString(); return ja.toString();
} else { } else {
@@ -376,15 +372,13 @@ public class NDCAgvServiceImpl implements NDCAgvService {
@Override @Override
public Map<String, AgvDto> findAllAgvFromCache() { public Map<String, AgvDto> findAllAgvFromCache() {
return AGVDeviceStatus; return agv;
} }
@Override @Override
public void updateAgvFromCache(AgvDto dto) { public void updateAgvFromCache(AgvDto dto) {
if (AGVDeviceStatus.containsKey(dto.getName())) { agv.remove(dto.getName());
AGVDeviceStatus.remove(dto.getName()); agv.put(dto.getName(), dto);
}
AGVDeviceStatus.put(dto.getName(), dto);
} }
@Override @Override
@@ -428,7 +422,7 @@ public class NDCAgvServiceImpl implements NDCAgvService {
NDCSocketConnectionAutoRun.write(b); NDCSocketConnectionAutoRun.write(b);
log.info("下发agv指令数据:" + Bytes2HexString(b)); log.info("下发agv指令数据:" + Bytes2HexString(b));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error("error !", e);
return false; return false;
} }
return true; return true;
@@ -436,4 +430,16 @@ public class NDCAgvServiceImpl implements NDCAgvService {
MDC.remove(log_file_type); MDC.remove(log_file_type);
} }
} }
@Override
public AgvDto findByCarNumber(String carNumber) {
if (agv.containsKey(String.valueOf(carNumber)) && agv.get(carNumber) != null) {
return agv.get(String.valueOf(carNumber));
} else {
AgvDto dto = new AgvDto();
dto.setName(carNumber);
agv.put(carNumber, dto);
return dto;
}
}
} }

View File

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.acs.agv.server.NDCAgvService;
import org.nl.acs.config.AcsConfig; import org.nl.acs.config.AcsConfig;
import org.nl.acs.device.service.DeviceService; import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.DeviceDriver;
@@ -55,6 +56,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
private final DeviceService DeviceService; private final DeviceService DeviceService;
private final DeviceAppService DeviceAppService; private final DeviceAppService DeviceAppService;
private final RouteLineService RouteLineService; private final RouteLineService RouteLineService;
private final NDCAgvService ndcAgvService;
private final String log_file_type = "log_file_type"; private final String log_file_type = "log_file_type";
private final String log_type = "WMS下发ACS"; private final String log_type = "WMS下发ACS";
@@ -569,6 +571,8 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
status.put("container_qty", driver.getContainer_qty()); status.put("container_qty", driver.getContainer_qty());
} }
} }
param.addAll(ndcAgvService.findAllAgvFromCache().values());
} }
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();

View File

@@ -3,6 +3,7 @@ package org.nl.start.auto.run;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -38,8 +39,8 @@ import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.Socket; import java.net.Socket;
import java.util.Date; import java.util.*;
import java.util.Map; import java.util.stream.Collectors;
@Slf4j @Slf4j
@Component @Component
@@ -52,10 +53,23 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
static DataInputStream dis; static DataInputStream dis;
private int recordTimeOut = 10000; private int recordTimeOut = 10000;
private Date recordTime; private Date recordTime;
String[] ERROR = new String[]{
"货叉尖部传感器触发", "S300传感器触发", "载货状态改变", "急停按钮触发", "触边开关出发", "需要复位", public static final String[] ERROR = new String[]{
"停在充电位", "取货失败", "放货失败", "轮子打滑", "没有动作码不能进入站点", "取货时有货", "丢失定位", "货叉尖部传感器触发",
"抬叉停止"}; "S300传感器触发",
"载货状态改变",
"急停按钮触发",
"触边开关触发",
"需要复位",
"停在充电位",
"取货失败",
"放货失败",
"轮子打滑",
"没有动作码不能进入站点",
"取货时有货",
"丢失定位",
"抬叉停止"
};
boolean bConnected = true; boolean bConnected = true;
boolean isReConnect = false; boolean isReConnect = false;
@@ -84,7 +98,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
ParamService acsConfigService = SpringContextHolder.getBean(ParamServiceImpl.class); ParamService acsConfigService = SpringContextHolder.getBean(ParamServiceImpl.class);
InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class); InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class);
AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class);
NDCAgvService AgvService = SpringContextHolder.getBean(NDCAgvService.class); NDCAgvService ndcAGVService = SpringContextHolder.getBean(NDCAgvService.class);
DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class);
DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class); DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class);
DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogServiceImpl.class); DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogServiceImpl.class);
@@ -159,13 +173,13 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
LnshPalletizingManipulatorSiteDeviceDriver lnshPalletizingManipulatorSiteDeviceDriver; LnshPalletizingManipulatorSiteDeviceDriver lnshPalletizingManipulatorSiteDeviceDriver;
try { try {
if (phase == 0x01) { if (phase == 0x01) {
data = AgvService.sendAgvOneModeInst(phase, index); data = ndcAGVService.sendAgvOneModeInst(phase, index);
if (!ObjectUtil.isEmpty(inst)) { if (!ObjectUtil.isEmpty(inst)) {
inst.setInstruction_status("1"); inst.setInstruction_status("1");
inst.setAgv_jobno(String.valueOf(index)); inst.setAgv_jobno(String.valueOf(index));
inst.setSend_status("1"); inst.setSend_status("1");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
} }
flag = true; flag = true;
} }
@@ -196,7 +210,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
&& standardInspectSiteDeviceDriver.getMove() != 0) { && standardInspectSiteDeviceDriver.getMove() != 0) {
inst.setExecute_status("1"); inst.setExecute_status("1");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
standardInspectSiteDeviceDriver.setMessage(""); standardInspectSiteDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -224,7 +238,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
&& (lnshStationDeviceDriver.getAction() == 3 || lnshStationDeviceDriver.getAction() == 1)) { && (lnshStationDeviceDriver.getAction() == 3 || lnshStationDeviceDriver.getAction() == 1)) {
inst.setExecute_status("1"); inst.setExecute_status("1");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
lnshStationDeviceDriver.setMessage(""); lnshStationDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -250,7 +264,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
&& (lnshStationDeviceDriver.getAction() == 3 || lnshStationDeviceDriver.getAction() == 1)) { && (lnshStationDeviceDriver.getAction() == 3 || lnshStationDeviceDriver.getAction() == 1)) {
inst.setExecute_status("1"); inst.setExecute_status("1");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
lnshStationDeviceDriver.setMessage(""); lnshStationDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -284,7 +298,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
&& (lnshPalletizingManipulatorSiteDeviceDriver.getAction() == 3 || lnshPalletizingManipulatorSiteDeviceDriver.getAction() == 1)) { && (lnshPalletizingManipulatorSiteDeviceDriver.getAction() == 3 || lnshPalletizingManipulatorSiteDeviceDriver.getAction() == 1)) {
inst.setExecute_status("1"); inst.setExecute_status("1");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
lnshPalletizingManipulatorSiteDeviceDriver.setMessage(""); lnshPalletizingManipulatorSiteDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -312,13 +326,13 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
if (StrUtil.equals(acsConfigService.findByCode(AcsConfig.IGNOREHASGOODS).getValue(), "1")) { if (StrUtil.equals(acsConfigService.findByCode(AcsConfig.IGNOREHASGOODS).getValue(), "1")) {
inst.setExecute_status("1"); inst.setExecute_status("1");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
flag = true; flag = true;
} else { } else {
if (device.getHas_goods() != 0) { if (device.getHas_goods() != 0) {
inst.setExecute_status("1"); inst.setExecute_status("1");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
flag = true; flag = true;
} else { } else {
logServer.deviceExecuteLog(device_code, "", "", "AGV请求取货设备{}无货,无法反馈"); logServer.deviceExecuteLog(device_code, "", "", "AGV请求取货设备{}无货,无法反馈");
@@ -334,7 +348,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
&& deviceDriver.getContainer_qty() > 0) { && deviceDriver.getContainer_qty() > 0) {
inst.setExecute_status("1"); inst.setExecute_status("1");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
deviceDriver.setMessage(""); deviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -375,7 +389,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
inst.setExecute_status("5"); inst.setExecute_status("5");
instructionService.update(inst); instructionService.update(inst);
standardInspectSiteDeviceDriver.writing(2); standardInspectSiteDeviceDriver.writing(2);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
standardInspectSiteDeviceDriver.setMessage(""); standardInspectSiteDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -402,7 +416,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
inst.setExecute_status("5"); inst.setExecute_status("5");
instructionService.update(inst); instructionService.update(inst);
lnshStationDeviceDriver.writing(2); lnshStationDeviceDriver.writing(2);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
lnshStationDeviceDriver.setMessage(""); lnshStationDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -425,7 +439,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
inst.setExecute_status("5"); inst.setExecute_status("5");
instructionService.update(inst); instructionService.update(inst);
lnshStationDeviceDriver.writing(2); lnshStationDeviceDriver.writing(2);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
lnshStationDeviceDriver.setMessage(""); lnshStationDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -455,7 +469,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
inst.setExecute_status("5"); inst.setExecute_status("5");
instructionService.update(inst); instructionService.update(inst);
lnshPalletizingManipulatorSiteDeviceDriver.writing(2); lnshPalletizingManipulatorSiteDeviceDriver.writing(2);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
lnshPalletizingManipulatorSiteDeviceDriver.setMessage(""); lnshPalletizingManipulatorSiteDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -483,7 +497,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
inst.setExecute_status("5"); inst.setExecute_status("5");
instructionService.update(inst); instructionService.update(inst);
deviceDriver.writing(2); deviceDriver.writing(2);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
deviceDriver.setMessage(""); deviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -500,13 +514,13 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
if (StrUtil.equals(acsConfigService.findByCode(AcsConfig.IGNOREHASGOODS).getValue(), "1")) { if (StrUtil.equals(acsConfigService.findByCode(AcsConfig.IGNOREHASGOODS).getValue(), "1")) {
inst.setExecute_status("5"); inst.setExecute_status("5");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
flag = true; flag = true;
} else { } else {
if (device.getHas_goods() != 0) { if (device.getHas_goods() != 0) {
inst.setExecute_status("5"); inst.setExecute_status("5");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
flag = true; flag = true;
} }
} }
@@ -553,7 +567,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
&& standardInspectSiteDeviceDriver.getMove() == 0) { && standardInspectSiteDeviceDriver.getMove() == 0) {
inst.setExecute_status("3"); inst.setExecute_status("3");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
standardInspectSiteDeviceDriver.setMessage(""); standardInspectSiteDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -582,7 +596,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
inst.setExecute_status("3"); inst.setExecute_status("3");
instructionService.update(inst); instructionService.update(inst);
lnshStationDeviceDriver.writing(3, Integer.parseInt(inst.getInstruction_code())); lnshStationDeviceDriver.writing(3, Integer.parseInt(inst.getInstruction_code()));
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
lnshStationDeviceDriver.setMessage(""); lnshStationDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -609,7 +623,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
inst.setExecute_status("3"); inst.setExecute_status("3");
instructionService.update(inst); instructionService.update(inst);
lnshStationDeviceDriver.writing(3, Integer.parseInt(inst.getInstruction_code())); lnshStationDeviceDriver.writing(3, Integer.parseInt(inst.getInstruction_code()));
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
lnshStationDeviceDriver.setMessage(""); lnshStationDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -643,7 +657,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
&& (lnshPalletizingManipulatorSiteDeviceDriver.getAction() == 2 || lnshPalletizingManipulatorSiteDeviceDriver.getAction() == 3)) { && (lnshPalletizingManipulatorSiteDeviceDriver.getAction() == 2 || lnshPalletizingManipulatorSiteDeviceDriver.getAction() == 3)) {
inst.setExecute_status("3"); inst.setExecute_status("3");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
lnshPalletizingManipulatorSiteDeviceDriver.setMessage(""); lnshPalletizingManipulatorSiteDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -673,7 +687,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
&& deviceDriver.getContainer_qty() < Integer.parseInt(deviceDriver.getExtraValue().get("max_emptypalletnum").toString())) { && deviceDriver.getContainer_qty() < Integer.parseInt(deviceDriver.getExtraValue().get("max_emptypalletnum").toString())) {
inst.setExecute_status("3"); inst.setExecute_status("3");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
deviceDriver.setMessage(""); deviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -695,13 +709,13 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
if (StrUtil.equals(acsConfigService.findByCode(AcsConfig.IGNOREHASGOODS).getValue(), "1")) { if (StrUtil.equals(acsConfigService.findByCode(AcsConfig.IGNOREHASGOODS).getValue(), "1")) {
inst.setExecute_status("3"); inst.setExecute_status("3");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
flag = true; flag = true;
} else { } else {
if (device.getHas_goods() != 0) { if (device.getHas_goods() != 0) {
inst.setExecute_status("3"); inst.setExecute_status("3");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
flag = true; flag = true;
} }
} }
@@ -727,11 +741,11 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) {
standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver();
if (standardInspectSiteDeviceDriver.getMode() != 0 if (standardInspectSiteDeviceDriver.getMode() != 0
&& standardInspectSiteDeviceDriver.getMove() != 0) { && standardInspectSiteDeviceDriver.getMove() != 0) {
inst.setExecute_status("6"); inst.setExecute_status("6");
instructionService.update(inst); instructionService.update(inst);
standardInspectSiteDeviceDriver.writing(3); standardInspectSiteDeviceDriver.writing(3);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
flag = true; flag = true;
} else { } else {
String message = ""; String message = "";
@@ -762,7 +776,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
while (lnshStationDeviceDriver.getTo_command() != 3) { while (lnshStationDeviceDriver.getTo_command() != 3) {
lnshStationDeviceDriver.writing(3); lnshStationDeviceDriver.writing(3);
} }
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
lnshStationDeviceDriver.setMessage(""); lnshStationDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -785,7 +799,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
inst.setExecute_status("6"); inst.setExecute_status("6");
instructionService.update(inst); instructionService.update(inst);
lnshStationDeviceDriver.writing(3); lnshStationDeviceDriver.writing(3);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
lnshStationDeviceDriver.setMessage(""); lnshStationDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -816,7 +830,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
inst.setExecute_status("6"); inst.setExecute_status("6");
instructionService.update(inst); instructionService.update(inst);
lnshPalletizingManipulatorSiteDeviceDriver.writing(3); lnshPalletizingManipulatorSiteDeviceDriver.writing(3);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
lnshPalletizingManipulatorSiteDeviceDriver.setMessage(""); lnshPalletizingManipulatorSiteDeviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -842,7 +856,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
inst.setExecute_status("6"); inst.setExecute_status("6");
instructionService.update(inst); instructionService.update(inst);
deviceDriver.writing(3); deviceDriver.writing(3);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
deviceDriver.setMessage(""); deviceDriver.setMessage("");
flag = true; flag = true;
} else { } else {
@@ -860,13 +874,13 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
if (StrUtil.equals(acsConfigService.findByCode(AcsConfig.IGNOREHASGOODS).getValue(), "1")) { if (StrUtil.equals(acsConfigService.findByCode(AcsConfig.IGNOREHASGOODS).getValue(), "1")) {
inst.setExecute_status("6"); inst.setExecute_status("6");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
flag = true; flag = true;
} else { } else {
if (device.getHas_goods() != 0) { if (device.getHas_goods() != 0) {
inst.setExecute_status("6"); inst.setExecute_status("6");
instructionService.update(inst); instructionService.update(inst);
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
flag = true; flag = true;
} }
} }
@@ -884,12 +898,12 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
inst.setInstruction_status("2"); inst.setInstruction_status("2");
instructionService.finish(inst); instructionService.finish(inst);
} }
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
} }
//请求删除任务 //请求删除任务
else if (phase == 0x30) { else if (phase == 0x30) {
flag = true; flag = true;
data = AgvService.sendAgvOneModeInst(0x8F, index, 0); data = ndcAGVService.sendAgvOneModeInst(0x8F, index, 0);
} }
//任务删除确认 //任务删除确认
//(需要WCS反馈) //(需要WCS反馈)
@@ -898,7 +912,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
if (!ObjectUtil.isEmpty(inst)) { if (!ObjectUtil.isEmpty(inst)) {
instructionService.cancelNOSendAgv(inst.getInstruction_id()); instructionService.cancelNOSendAgv(inst.getInstruction_id());
} }
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
} }
//进入区域 //进入区域
else if (phase == 0x50) { else if (phase == 0x50) {
@@ -908,7 +922,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
standardAutodoorDeviceDriver.OpenOrClose("1"); standardAutodoorDeviceDriver.OpenOrClose("1");
if (standardAutodoorDeviceDriver.getAction() == 1) { if (standardAutodoorDeviceDriver.getAction() == 1) {
standardAutodoorDeviceDriver.OpenOrClose("1"); standardAutodoorDeviceDriver.OpenOrClose("1");
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
} }
} }
} }
@@ -919,99 +933,49 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver();
standardAutodoorDeviceDriver.OpenOrClose("2"); standardAutodoorDeviceDriver.OpenOrClose("2");
if (standardAutodoorDeviceDriver.getAction() == 2) { if (standardAutodoorDeviceDriver.getAction() == 2) {
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
} }
} else { } else {
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
} }
} else if (phase == 0x64) { } else if (phase == 0x64) {
data = AgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAGVService.sendAgvOneModeInst(phase, index, 0);
} }
//上报异常 //上报异常
else if (phase == 0x67) { else if (phase == 0x67) {
AgvDto dto = null; AgvDto agv = ndcAGVService.findByCarNumber(String.valueOf(arr[18] * 256 + arr[19]));
Map<String, AgvDto> map = AgvService.findAllAgvFromCache(); agv.setFaultInfo(getNDCFaultInfo(ikey));
if (map.containsKey(String.valueOf(carno))) {
dto = map.get(String.valueOf(carno));
} else {
dto = new AgvDto();
}
dto.setName(String.valueOf(carno));
// if (arr[18] * 256 + arr[19] == 0) {
// dto.setState("IDLE");
// acsToWmsService.feedbackAgvStatus(String.valueOf(carno), "0", "");
// } else {
// StringBuffer errbs = new StringBuffer();
// for (int i = 0; i < ERROR.length; i++) {
// if (((arr[18] * 256 + arr[19]) & (1 << i)) > 0)
// errbs.append("," + ERROR[i]);
// //反馈故障
// }
// dto.setState("ERROR");
// acsToWmsService.feedbackAgvStatus(String.valueOf(carno), "1", "error");
// }
} }
//X坐标 //X坐标
else if (phase == 0x70) { else if (phase == 0x70) {
AgvDto dto = null; AgvDto agv = ndcAGVService.findByCarNumber(String.valueOf(arr[18] * 256 + arr[19]));
Map<String, AgvDto> map = AgvService.findAllAgvFromCache(); agv.setPositionX(String.valueOf(ikey));
carno = arr[18] * 256 + arr[19];
if (map.containsKey(String.valueOf(carno))) {
dto = map.get(String.valueOf(carno));
} else {
dto = new AgvDto();
}
dto.setName(String.valueOf(carno));
dto.setPositionX(String.valueOf(ikey));
AgvService.updateAgvFromCache(dto);
} }
//Y坐标 //Y坐标
else if (phase == 0x71) { else if (phase == 0x71) {
AgvDto dto = null; AgvDto agv = ndcAGVService.findByCarNumber(String.valueOf(arr[18] * 256 + arr[19]));
Map<String, AgvDto> map = AgvService.findAllAgvFromCache(); agv.setPositionY(String.valueOf(ikey));
carno = arr[18] * 256 + arr[19];
if (map.containsKey(String.valueOf(carno))) {
dto = map.get(String.valueOf(carno));
} else {
dto = new AgvDto();
}
dto.setName(String.valueOf(carno));
dto.setPositionY(String.valueOf(ikey));
AgvService.updateAgvFromCache(dto);
} }
//角度 //角度
else if (phase == 0x72) { else if (phase == 0x72) {
AgvDto dto = null; AgvDto agv = ndcAGVService.findByCarNumber(String.valueOf(arr[18] * 256 + arr[19]));
Map<String, AgvDto> map = AgvService.findAllAgvFromCache(); agv.setPositionAngle(String.valueOf(ikey));
carno = arr[18] * 256 + arr[19];
if (map.containsKey(String.valueOf(carno))) {
dto = map.get(String.valueOf(carno));
} else {
dto = new AgvDto();
}
dto.setName(String.valueOf(carno));
dto.setPositionAngle(String.valueOf(ikey));
AgvService.updateAgvFromCache(dto);
} }
//电量 //电量
else if (phase == 0x73) { else if (phase == 0x73) {
AgvDto dto = null; AgvDto agv = ndcAGVService.findByCarNumber(String.valueOf(arr[18] * 256 + arr[19]));
Map<String, AgvDto> map = AgvService.findAllAgvFromCache(); agv.setEnergyLevel(String.valueOf(ikey));
carno = arr[18] * 256 + arr[19]; } else if (phase == 0x74) {
if (map.containsKey(String.valueOf(carno))) { // 状态
dto = map.get(String.valueOf(carno)); AgvDto agv = ndcAGVService.findByCarNumber(String.valueOf(arr[18] * 256 + arr[19]));
} else { agv.setState(String.valueOf(ikey));
dto = new AgvDto();
}
dto.setName(String.valueOf(carno));
dto.setEnergyLevel(String.valueOf(ikey));
AgvService.updateAgvFromCache(dto);
} }
if (!ObjectUtil.isEmpty(data)) { if (!ObjectUtil.isEmpty(data)) {
write(data); write(data);
} }
} catch (Exception e) { } catch (Exception e) {
log.error("AGV交互出错", e); log.error("AGV交互出错", e);
} }
} else { } else {
log.info("AGV上报不是 [0073] 类型动作,不处理。"); log.info("AGV上报不是 [0073] 类型动作,不处理。");
@@ -1031,33 +995,56 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
try { try {
s.close(); s.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error("close NDC socket error !", e);
} }
} }
public static void write(byte[] b) { public static void write(byte[] b) {
try { try {
log.info("下发AGV数据:" + Bytes2HexString(b)); log.info("下发AGV数据" + Bytes2HexString(b));
dos.write(b); dos.write(b);
dos.flush(); dos.flush();
} catch (IOException e) { } catch (IOException e) {
// TODO Auto-generated catch block log.error("下发AGV数据失败", e);
e.printStackTrace();
log.error("下发AGV数据失败", e);
} }
} }
public static String Bytes2HexString(byte[] b) { public static String Bytes2HexString(byte[] b) {
String ret = ""; StringBuilder ret = new StringBuilder();
for (int i = 0; i < b.length; i++) { for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF); String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) { if (hex.length() == 1) {
hex = '0' + hex; hex = '0' + hex;
} }
ret += hex.toUpperCase(); ret.append(hex.toUpperCase());
}
return ret.toString();
}
public static List<String> getNDCFaultInfo(int errorCode) {
if (errorCode == 0) {
return Arrays.asList("正常");
} else {
if (errorCode > Math.pow(2, ERROR.length - 1)) {
return Arrays.asList("NDC上报故障代码有误");
} else {
int index = 0;
ArrayList<String> faultInfo = new ArrayList<>();
for (int i = errorCode; i != 0; i = i >> 1) {
if (index == ERROR.length) {
faultInfo.clear();
faultInfo.add("NDC上报故障代码有误");
break;
}
if (i % 2 == 1) {
faultInfo.add(ERROR[index]);
}
index++;
}
return faultInfo;
}
} }
return ret;
} }
} }

View File

@@ -1231,6 +1231,51 @@ public class DashboardService {
JSONArray trayDestacker = new JSONArray(); JSONArray trayDestacker = new JSONArray();
vehicleConveyorLine.put("trayDestacker", trayDestacker); vehicleConveyorLine.put("trayDestacker", trayDestacker);
// AGV----------------------------------------------------------------------------------------------------------
JSONObject agv = new JSONObject();
result.put("agv", agv);
JSONArray agvArr = new JSONArray();
agv.put("agv", agvArr);
List<JSONObject> agvData = deviceData.stream().map(o -> (JSONObject) o).filter(o -> "AGV".equals(o.getString("type"))).sorted(Comparator.comparingInt(o -> o.getIntValue("name"))).collect(Collectors.toList());
for (JSONObject datum : agvData) {
JSONObject row = new JSONObject();
row.put("equipment", datum.getString("name"));
row.put("status", this.agvStatusToDictStatus(datum.getIntValue("state")));
row.put("equipmentName", datum.getString("device_name"));
row.put("statusChinese", this.agvStatusToChinese(datum.getIntValue("state")));
JSONArray rowData = new JSONArray();
row.put("data", rowData);
JSONObject rowDatum = new JSONObject();
rowDatum.put("key", "电量");
rowDatum.put("value", datum.getIntValue("energyLevel"));
rowData.add(rowDatum);
rowDatum = new JSONObject();
rowDatum.put("key", "角度");
rowDatum.put("value", datum.getIntValue("positionAngle"));
rowData.add(rowDatum);
rowDatum = new JSONObject();
rowDatum.put("key", "X坐标");
rowDatum.put("value", datum.getIntValue("positionX"));
rowData.add(rowDatum);
rowDatum = new JSONObject();
rowDatum.put("key", "Y坐标");
rowDatum.put("value", datum.getIntValue("positionY"));
rowData.add(rowDatum);
rowDatum = new JSONObject();
rowDatum.put("key", "故障信息");
rowDatum.put("value", datum.getJSONArray("faultInfo"));
rowData.add(rowDatum);
agvArr.add(row);
}
return result; return result;
} }
@@ -1743,4 +1788,40 @@ public class DashboardService {
return "运行"; return "运行";
} }
} }
private int agvStatusToDictStatus(int status) {
switch (status) {
case 2:
case 3:
return 1;
case 4:
case 5:
case 7:
return 2;
case 1:
return 3;
case 6:
return 4;
default:
return status;
}
}
private String agvStatusToChinese(int status) {
switch (status) {
case 2:
case 3:
return "运行";
case 4:
case 5:
case 7:
return "暂停";
case 1:
return "停机";
case 6:
return "故障";
default:
return "未知";
}
}
} }