opt: 1.修改过滤重复ndc指令
This commit is contained in:
@@ -28,9 +28,7 @@ import java.io.DataInputStream;
|
|||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import static org.nl.acs.agv.server.impl.NDCAgvServiceImpl.Bytes2HexString;
|
import static org.nl.acs.agv.server.impl.NDCAgvServiceImpl.Bytes2HexString;
|
||||||
@@ -120,6 +118,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
|||||||
log.info("接收agv上报任务信息:" + bs);
|
log.info("接收agv上报任务信息:" + bs);
|
||||||
// 从字节流的开头开始读取
|
// 从字节流的开头开始读取
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
Map<Integer,Integer> map = new HashMap<>();
|
||||||
// 循环处理字节流,逐个拆包 按照S消息解析
|
// 循环处理字节流,逐个拆包 按照S消息解析
|
||||||
while (offset < packetData.length) {
|
while (offset < packetData.length) {
|
||||||
if (offset + 6 > packetData.length) {
|
if (offset + 6 > packetData.length) {
|
||||||
@@ -159,6 +158,27 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
|||||||
int carno = arr[20];
|
int carno = arr[20];
|
||||||
//充电桩站点号
|
//充电桩站点号
|
||||||
int station = arr[25];
|
int station = arr[25];
|
||||||
|
// 处理重复phase
|
||||||
|
if (map.containsKey(index)){
|
||||||
|
if (map.get(index).equals(phase)){
|
||||||
|
log.info("agv上报phase已处理,不重复处理");
|
||||||
|
// 更新偏移量,继续处理下一个数据包
|
||||||
|
offset+=messageHeaderLength;
|
||||||
|
int indexNum = IntStream.range(offset, packetData.length - 1)
|
||||||
|
.filter(i -> packetData[i] == 135 && packetData[i + 1] == 205)
|
||||||
|
.findFirst()
|
||||||
|
.orElse(-1);
|
||||||
|
// 如果未找到,返回 -1
|
||||||
|
if (indexNum == -1) {
|
||||||
|
break;
|
||||||
|
}else {
|
||||||
|
offset = indexNum;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
map.put(index,phase);
|
||||||
Instruction link_inst = null;
|
Instruction link_inst = null;
|
||||||
Instruction inst = null;
|
Instruction inst = null;
|
||||||
List<Instruction> insts = null;
|
List<Instruction> insts = null;
|
||||||
|
|||||||
@@ -403,13 +403,18 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
|
|||||||
//到达输送线取货完成
|
//到达输送线取货完成
|
||||||
if (device.getDeviceDriver() instanceof SsxDeviceDriver) {
|
if (device.getDeviceDriver() instanceof SsxDeviceDriver) {
|
||||||
ssxDeviceDriver = (SsxDeviceDriver) device.getDeviceDriver();
|
ssxDeviceDriver = (SsxDeviceDriver) device.getDeviceDriver();
|
||||||
if (ssxDeviceDriver.getMode() != 0) {
|
//获取最新数据
|
||||||
|
inst = instructionService.findByCode(String.valueOf(ikey));
|
||||||
|
if (ssxDeviceDriver.getMode() != 0 && inst != null && !"2".equals(inst.getExecute_status())) {
|
||||||
log.info("agv进入" + device_code + ",取货完成,开始写入信号3进行安全交互,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
|
log.info("agv进入" + device_code + ",取货完成,开始写入信号3进行安全交互,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
|
||||||
ssxDeviceDriver.writing(3);
|
ssxDeviceDriver.writing(3);
|
||||||
if (ssxDeviceDriver.getMode() == 3) {
|
if (ssxDeviceDriver.getMode() == 3) {
|
||||||
flag = true;
|
flag = true;
|
||||||
log.info("设备" + device_code + "的Mode信号已变更为3,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",开始写入0清除mode信号。");
|
log.info("设备" + device_code + "的Mode信号已变更为3,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",开始写入0清除mode信号。");
|
||||||
ssxDeviceDriver.writing(0);
|
ssxDeviceDriver.writing(0);
|
||||||
|
//提前更新 解决ndc上报指令残留问题
|
||||||
|
inst.setExecute_status(AgvActionEnum.ACTION_STATUS.code("取货完成"));
|
||||||
|
instructionService.update(inst);
|
||||||
data = actionComplete(index, inst, device_code, ssxDeviceDriver.getTo_command(), Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("取货完成")), "取货完成");
|
data = actionComplete(index, inst, device_code, ssxDeviceDriver.getTo_command(), Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("取货完成")), "取货完成");
|
||||||
log.info("设备" + device_code + "已完成信号0写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",agv开始离开。");
|
log.info("设备" + device_code + "已完成信号0写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",agv开始离开。");
|
||||||
} else {
|
} else {
|
||||||
@@ -418,12 +423,6 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
|
|||||||
log.info("设备" + device_code + "已完成信号3写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
|
log.info("设备" + device_code + "已完成信号3写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
|
||||||
}
|
}
|
||||||
ssxDeviceDriver.setMessage("");
|
ssxDeviceDriver.setMessage("");
|
||||||
} else {
|
|
||||||
String message = "agv取货完成写入信号3安全交互失败,设备允许模式mode值为0,设备异常,请检查!";
|
|
||||||
agv_message = ssxDeviceDriver.getDevice_code() + message;
|
|
||||||
ssxDeviceDriver.setMessage(message);
|
|
||||||
log.info(message);
|
|
||||||
lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//到达普通站点取货完成
|
//到达普通站点取货完成
|
||||||
@@ -655,43 +654,50 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
|
|||||||
//到达输送线放货完成
|
//到达输送线放货完成
|
||||||
if (device.getDeviceDriver() instanceof SsxDeviceDriver) {
|
if (device.getDeviceDriver() instanceof SsxDeviceDriver) {
|
||||||
ssxDeviceDriver = (SsxDeviceDriver) device.getDeviceDriver();
|
ssxDeviceDriver = (SsxDeviceDriver) device.getDeviceDriver();
|
||||||
log.info("agv进入" + device_code + ",放货完成,开始写入信号5进行安全交互,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
|
//获取最新数据
|
||||||
ssxDeviceDriver.writing(5);
|
inst = instructionService.findByCode(String.valueOf(ikey));
|
||||||
if (ssxDeviceDriver.getMode() == 4) {
|
if (ssxDeviceDriver.getMode() != 0 && inst != null && !"4".equals(inst.getExecute_status())) {
|
||||||
log.info("设备" + device_code + "的Mode信号已变更为4,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",开始写入0清除mode信号。");
|
log.info("agv进入" + device_code + ",放货完成,开始写入信号5进行安全交互,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
|
||||||
if (ObjectUtil.isNotEmpty(task)){
|
ssxDeviceDriver.writing(5);
|
||||||
String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue();
|
if (ssxDeviceDriver.getMode() == 4) {
|
||||||
if (!StrUtil.startWith(task.getTask_code(), "-") && StrUtil.equals(hasWms, "1")) {
|
log.info("设备" + device_code + "的Mode信号已变更为4,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",开始写入0清除mode信号。");
|
||||||
FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest();
|
if (ObjectUtil.isNotEmpty(task)){
|
||||||
request.setTask_id(task.getExt_task_id());
|
String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue();
|
||||||
request.setTask_code(task.getTask_code());
|
if (!StrUtil.startWith(task.getTask_code(), "-") && StrUtil.equals(hasWms, "1")) {
|
||||||
request.setTask_status("2");
|
FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest();
|
||||||
request.setRequest_medthod_code(RequestMethodEnum.feedback_task_status.getCode());
|
request.setTask_id(task.getExt_task_id());
|
||||||
request.setRequest_medthod_name(RequestMethodEnum.feedback_task_status.getName());
|
request.setTask_code(task.getTask_code());
|
||||||
request.setStartLocation(task.getStart_point_code());
|
request.setTask_status("2");
|
||||||
request.setEndLocation(task.getNext_point_code());
|
request.setRequest_medthod_code(RequestMethodEnum.feedback_task_status.getCode());
|
||||||
String res = acsToWmsService.feedTaskStatus(request);
|
request.setRequest_medthod_name(RequestMethodEnum.feedback_task_status.getName());
|
||||||
JSONObject result = JSONObject.parseObject(res);
|
request.setStartLocation(task.getStart_point_code());
|
||||||
if (StringUtil.isNotBlank(result.getString("status")) && "200".equals(result.getString("status"))) {
|
request.setEndLocation(task.getNext_point_code());
|
||||||
log.info("任务号" + request.getTask_code() + "放货完成---反馈wcs任务完成状态" + "成功。");
|
String res = acsToWmsService.feedTaskStatus(request);
|
||||||
} else if (StringUtil.isNotBlank(result.getString("status")) && !"200".equals(result.getString("status"))){
|
JSONObject result = JSONObject.parseObject(res);
|
||||||
log.info("任务号" + request.getTask_code() + "放货完成---反馈wcs任务完成状态" + "失败,服务器响应的失败原因为:" + result.getString("message"));
|
if (StringUtil.isNotBlank(result.getString("status")) && "200".equals(result.getString("status"))) {
|
||||||
}else if (StringUtil.isNotBlank(result.getString("code")) && "500".equals(result.getString("code"))){
|
log.info("任务号" + request.getTask_code() + "放货完成---反馈wcs任务完成状态" + "成功。");
|
||||||
log.info("任务号" + request.getTask_code() + "放货完成---请求不通" + "失败,服务器响应的失败原因为:" + result.getString("message"));
|
} else if (StringUtil.isNotBlank(result.getString("status")) && !"200".equals(result.getString("status"))){
|
||||||
return;
|
log.info("任务号" + request.getTask_code() + "放货完成---反馈wcs任务完成状态" + "失败,服务器响应的失败原因为:" + result.getString("message"));
|
||||||
|
}else if (StringUtil.isNotBlank(result.getString("code")) && "500".equals(result.getString("code"))){
|
||||||
|
log.info("任务号" + request.getTask_code() + "放货完成---请求不通" + "失败,服务器响应的失败原因为:" + result.getString("message"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ssxDeviceDriver.writing(0);
|
||||||
|
//提前更新 解决ndc上报指令残留问题
|
||||||
|
inst.setExecute_status(AgvActionEnum.ACTION_STATUS.code("放货完成"));
|
||||||
|
instructionService.update(inst);
|
||||||
|
flag = true;
|
||||||
|
data = actionComplete(index, inst, device_code, ssxDeviceDriver.getTo_command(), Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("放货完成")), "放货完成");
|
||||||
|
log.info("设备" + device_code + "已完成信号0写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",agv开始离开。");
|
||||||
|
} else {
|
||||||
|
log.info("设备" + device_code + "的Mode信号未变更为4,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",尝试重新写入信号5进行安全交互");
|
||||||
|
ssxDeviceDriver.writing(5);
|
||||||
|
log.info("设备" + device_code + "已完成信号5写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
|
||||||
}
|
}
|
||||||
ssxDeviceDriver.writing(0);
|
ssxDeviceDriver.setMessage("");
|
||||||
flag = true;
|
}
|
||||||
data = actionComplete(index, inst, device_code, ssxDeviceDriver.getTo_command(), Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("放货完成")), "放货完成");
|
|
||||||
log.info("设备" + device_code + "已完成信号0写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",agv开始离开。");
|
|
||||||
} else {
|
|
||||||
log.info("设备" + device_code + "的Mode信号未变更为4,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",尝试重新写入信号5进行安全交互");
|
|
||||||
ssxDeviceDriver.writing(5);
|
|
||||||
log.info("设备" + device_code + "已完成信号5写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
|
|
||||||
}
|
|
||||||
ssxDeviceDriver.setMessage("");
|
|
||||||
}
|
}
|
||||||
//agv普通站点放货完成
|
//agv普通站点放货完成
|
||||||
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
|
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
|
||||||
|
|||||||
Reference in New Issue
Block a user