Browse Source

opt:agv驱动代码优化

master
涂强 1 year ago
parent
commit
a1e373c3d7
  1. 90
      acs/nladmin-system/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java
  2. 81
      acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java

90
acs/nladmin-system/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java

@ -1,11 +1,13 @@
package org.nl.acs.auto.run; package org.nl.acs.auto.run;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.acs.AcsConfig; import org.nl.acs.AcsConfig;
import org.nl.acs.agv.server.NDCAgvService; import org.nl.acs.agv.server.NDCAgvService;
import org.nl.acs.device.service.DeviceService; import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device_driver.basedriver.agv.ndcone.AgvNdcOneDeviceDriver; import org.nl.acs.device_driver.basedriver.agv.ndcone.AgvNdcOneDeviceDriver;
import org.nl.acs.device_driver.basedriver.standard_autodoor.StandardAutoDoorDeviceDriver;
import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.AcsToWmsService;
import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl;
import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.InstructionService;
@ -23,6 +25,7 @@ import org.springframework.stereotype.Component;
import java.io.DataInputStream; import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket; import java.net.Socket;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -78,11 +81,14 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class); DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class);
ip = paramService.findByCode(AcsConfig.AGVURL).getValue(); ip = paramService.findByCode(AcsConfig.AGVURL).getValue();
port = Integer.parseInt(paramService.findByCode(AcsConfig.AGVPORT).getValue()); port = Integer.parseInt(paramService.findByCode(AcsConfig.AGVPORT).getValue());
byte[] data = null;
try { try {
InetSocketAddress socketAddress = new InetSocketAddress(ip, port);
byte[] b = new byte[1024]; byte[] b = new byte[1024];
s = new Socket(ip, port); s = new Socket();
s.connect(socketAddress, 2 * 1000);
s.setKeepAlive(true);//长链接
dos = new DataOutputStream(s.getOutputStream()); dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream()); dis = new DataInputStream(s.getInputStream());
System.out.println("NDCAgv链接成功"); System.out.println("NDCAgv链接成功");
@ -91,6 +97,10 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
int count = dis.read(b); int count = dis.read(b);
if (count == -1) { if (count == -1) {
log.error("agv连接出现异常:服务端被关闭");
if (ObjectUtil.isNotEmpty(s)) {
s.close();
}
break; break;
} }
@ -109,7 +119,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
//System.out.println("收到请求参数:" + bs); //System.out.println("收到请求参数:" + bs);
boolean flag = false; boolean flag = false;
if (arr[8] * 256 + arr[9] == 0x73) { if (arr[8] * 256 + arr[9] == 0x73) {
byte[] data = null;
System.out.println("接收agv上报信息:" + bs); System.out.println("接收agv上报信息:" + bs);
//执行阶段 //执行阶段
int phase = arr[16] * 256 + arr[17]; int phase = arr[16] * 256 + arr[17];
@ -123,6 +133,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
int carno = arr[20]; int carno = arr[20];
Instruction link_inst = null; Instruction link_inst = null;
Instruction inst = null; Instruction inst = null;
Instruction instruction_status = null;
List<Instruction> insts = null; List<Instruction> insts = null;
boolean link_flag = false; boolean link_flag = false;
Device agv_device = null; Device agv_device = null;
@ -146,6 +157,8 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
// //
AgvNdcOneDeviceDriver agvNdcOneDeviceDriver; AgvNdcOneDeviceDriver agvNdcOneDeviceDriver;
//自动门
StandardAutoDoorDeviceDriver standardAutoDoorDeviceDriver;
//开始任务/上报订单号 //开始任务/上报订单号
if (phase == 0x01) { if (phase == 0x01) {
@ -154,8 +167,10 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
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 = NDCAgvService.sendAgvOneModeInst(phase, index, 0); } else {
log.info("agv的指令号{} agv指令状态为{} 未找到对应指令", inst, instruction_status);
} }
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
} }
//任务完毕 //任务完毕
//(无车id及状态) //(无车id及状态)
@ -163,11 +178,58 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
if (!ObjectUtil.isEmpty(inst)) { if (!ObjectUtil.isEmpty(inst)) {
instructionService.finish(inst.getInstruction_id()); instructionService.finish(inst.getInstruction_id());
} else { } else {
log.warn("指令号:{},未反馈wms任务完成,因为agv上报指令号查询指令为空!",inst.getInstruction_code()); log.warn("指令号:{},未反馈wms任务完成,因为agv上报指令号查询指令为空!", inst.getInstruction_code());
} }
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
log.info("指令号:{},已反馈agv任务完成!",inst.getInstruction_code()); log.info("指令号:{},已反馈agv任务完成!", inst.getInstruction_code());
}
//进入交通灯区域
else if (phase == 0x50) {
//开门
if (agvaddr < 1) {
logServer.deviceExecuteLog(device_code, "", "", "agv地址参数有误,phase:" + phase);
return;
}
if (agvaddr != 0) {
device_code = deviceService.queryDeviceCodeByAddress(agvaddr);
device = deviceAppService.findDeviceByCode(device_code);
}
if (device.getDeviceDriver() instanceof StandardAutoDoorDeviceDriver) {
standardAutoDoorDeviceDriver = (StandardAutoDoorDeviceDriver) device.getDeviceDriver();
standardAutoDoorDeviceDriver.writing(1);
if (standardAutoDoorDeviceDriver.getAction() == 1) {
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
}
}
if (!ObjectUtil.isEmpty(data)) {
logServer.deviceExecuteLog(device_code, "", "", "agvphase:" + phase + "反馈:" + data);
OneNDCSocketConnectionAutoRun.write(data);
}
} }
//离开交通灯区域
else if (phase == 0x51) {
//关门
if (agvaddr < 1) {
logServer.deviceExecuteLog(device_code, "", "", "agv地址参数有误,phase:" + phase);
return;
}
if (agvaddr != 0) {
device_code = deviceService.queryDeviceCodeByAddress(agvaddr);
device = deviceAppService.findDeviceByCode(device_code);
}
if (device.getDeviceDriver() instanceof StandardAutoDoorDeviceDriver) {
standardAutoDoorDeviceDriver = (StandardAutoDoorDeviceDriver) device.getDeviceDriver();
standardAutoDoorDeviceDriver.writing(2);
if (standardAutoDoorDeviceDriver.getAction() == 2) {
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
}
}
if (!ObjectUtil.isEmpty(data)) {
logServer.deviceExecuteLog(device_code, "", "", "agvphase:" + phase + "反馈:" + data);
OneNDCSocketConnectionAutoRun.write(data);
}
}
//请求删除任务 //请求删除任务
//(需要WCS反馈) //(需要WCS反馈)
else if (phase == 0x30) { else if (phase == 0x30) {
@ -192,16 +254,24 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
} else { } else {
device = deviceAppService.findDeviceByCode(Integer.toString(arr[20])); device = deviceAppService.findDeviceByCode(Integer.toString(arr[20]));
} }
if (ObjectUtil.isNotEmpty(device)) { try {
if (device.getDeviceDriver() instanceof AgvNdcOneDeviceDriver) { if (ObjectUtil.isNotEmpty(device)) {
agvNdcOneDeviceDriver = (AgvNdcOneDeviceDriver) device.getDeviceDriver(); if (device.getDeviceDriver() instanceof AgvNdcOneDeviceDriver) {
agvNdcOneDeviceDriver.processSocket(arr); agvNdcOneDeviceDriver = (AgvNdcOneDeviceDriver) device.getDeviceDriver();
agvNdcOneDeviceDriver.processSocket(arr);
}
} else {
log.info("当前phase:" + phase + "未找到对应设备");
} }
} catch (Exception e) {
log.info("processSocket出错:" + e.getMessage());
e.printStackTrace();
} }
} }
if (!ObjectUtil.isEmpty(data)) { if (!ObjectUtil.isEmpty(data)) {
write(data); write(data);
data = null;
} }
} else { } else {

81
acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java

@ -39,6 +39,8 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static org.nl.acs.agv.server.impl.NDCAgvServiceImpl.Bytes2HexString;
/** /**
* NDC单工位AGV * NDC单工位AGV
*/ */
@ -400,81 +402,14 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
agvaddr_copy = agvaddr; agvaddr_copy = agvaddr;
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data);
} else if (phase == 0x50) {//进入交通灯区域
//开门
if (agvaddr == 0) {
agvaddr = agvaddr_copy;
}
if (agvaddr < 1) {
logServer.deviceExecuteLog(this.device_code, "", "", "agv地址参数有误,phase:" + phase);
return;
}
if (agvaddr != 0) {
old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr);
if (StrUtil.contains(old_device_code, "-")) {
String[] point = old_device_code.split("-");
device_code = point[0];
} else if (StrUtil.contains(old_device_code, ".")) {
String[] point = old_device_code.split("\\.");
device_code = point[0];
emptyNum = point[1];
} else {
device_code = old_device_code;
}
}
device = deviceAppService.findDeviceByCode(device_code);
if (device.getDeviceDriver() instanceof StandardAutoDoorDeviceDriver) {
standardAutoDoorDeviceDriver = (StandardAutoDoorDeviceDriver) device.getDeviceDriver();
standardAutoDoorDeviceDriver.OpenOrClose("1");
standardAutoDoorDeviceDriver.writing(1);
if (standardAutoDoorDeviceDriver.getAction() == 1) {
standardAutoDoorDeviceDriver.OpenOrClose("1");
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
}
}
if (!ObjectUtil.isEmpty(data)) {
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data);
OneNDCSocketConnectionAutoRun.write(data);
}
} else if (phase == 0x51) {//离开交通灯区域
//关门
if (agvaddr == 0) {
agvaddr = agvaddr_copy;
}
if (agvaddr < 1) {
logServer.deviceExecuteLog(this.device_code, "", "", "agv地址参数有误,phase:" + phase);
return;
}
if (agvaddr != 0) {
old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr);
if (StrUtil.contains(old_device_code, "-")) {
String[] point = old_device_code.split("-");
device_code = point[0];
} else if (StrUtil.contains(old_device_code, ".")) {
String[] point = old_device_code.split("\\.");
device_code = point[0];
emptyNum = point[1];
} else {
device_code = old_device_code;
}
}
device = deviceAppService.findDeviceByCode(device_code);
if (device.getDeviceDriver() instanceof StandardAutoDoorDeviceDriver) {
standardAutoDoorDeviceDriver = (StandardAutoDoorDeviceDriver) device.getDeviceDriver();
standardAutoDoorDeviceDriver.OpenOrClose("2");
standardAutoDoorDeviceDriver.writing(2);
if (standardAutoDoorDeviceDriver.getAction() == 2) {
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
}
}
if (!ObjectUtil.isEmpty(data)) {
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data);
OneNDCSocketConnectionAutoRun.write(data);
}
} }
if (!ObjectUtil.isEmpty(data)) {
phase = 0;
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + Bytes2HexString(data));
log.info("{},{}", device_code,"agvphase:" + phase + "反馈:" + Bytes2HexString(data));
OneNDCSocketConnectionAutoRun.write(data);
}
} }

Loading…
Cancel
Save